1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2026-05-10 08:06:30 +02:00

Added 2 fieldtypes : leo and naturerelation + add a uidname method to _LeCrud

This commit is contained in:
Yann 2015-11-26 17:29:21 +01:00
commit 798ad5a68e
3 changed files with 61 additions and 1 deletions

View file

@ -0,0 +1,34 @@
#-*- coding: utf-8 -*-
from .generic import GenericFieldType
class EmFieldType(GenericFieldType):
help = 'Fieldtypes designed to handle pk of LeObject in LeRelations'
ftype = 'leobject'
def __init__(self, superior=True, **kwargs):
super(EmFieldType, self).__init__(ftype = 'leobject', **kwargs)
def _check_data_value(self, value):
import leapi.lecrud as lecrud
err = None
if not isinstance(value, int):
if not isinstance(value, lecrud._LeCrud.name2class('LeType')):
return (None, ValueError("An instance of a child class of LeType was expected"))
if not hasattr(value, 'lodel_id'):
return (None, ValueError("The LeType instance given has no lodel_id !"))
return (value, None)
def construct_data(self, lec, fname, datas):
if isinstance(datas[fname], int):
leobject = lecrud._LeCrud.name2class('LeObject')
qfilter = '{uid_name} = {uid}'.format(
uid_name = leobject.uidname(),
uid = datas[fname],
)
return leobject.get([qfilter])
else:
return datas[fname]

View file

@ -0,0 +1,16 @@
#-*- coding: utf-8 -*-
from .char import EmFieldType
import EditorialModel.classtypes as classtypes
class EmFieldType(EmFieldType):
help = 'Stores a relation\'s nature'
def __init__(self, **kwargs):
kwargs.update({'nullable': True, 'check_data_value': EmFieldType.check_data_value})
super(EmFieldType, self).__init__(**kwargs)
def check_data_value(self, value):
return value is None or ( value in classtypes.getall())

View file

@ -70,6 +70,7 @@ class _LeCrud(object):
raise NotImplementedError("Abstract method") #child classes should return their uid fieldtype
## @return A dict with fieldtypes marked as internal
# @todo check if this method is in use, else delete it
@classmethod
def fieldtypes_internal(self):
return { fname: ft for fname, ft in cls.fieldtypes().items() if hasattr(ft, 'internal') and ft.internal }
@ -79,6 +80,15 @@ class _LeCrud(object):
def fieldlist(cls):
return cls.fieldtypes().keys()
## @return The name of the uniq id field
# @todo test for abstract method !!!
@classmethod
def uidname(cls):
if len(cls._uid_fieldtype) == 0:
raise NotImplementedError("Abstract method uid_name for %s!"%cls.__name__)
return list(cls._uid_fieldtype.keys())[0]
## @brief Returns object datas
# @param
# @return a dict of fieldname : value
@ -222,7 +232,7 @@ class _LeCrud(object):
# @warning assert that the uid is not composed with multiple fieldtypes
# @return A filter of the form tuple(UID, '=', self.UID)
def _id_filter(self):
id_name = list(self._uid_fieldtype.keys())[0]
id_name = self.uidname()
return ( id_name, '=', getattr(self, id_name) )
## @brief Construct datas values