#-*- coding: utf-8 -*- from EditorialModel.components import EmComponent from EditorialModel.classes import EmClass import EditorialModel.fieldtypes as ftypes # from Database import sqlutils # import sqlalchemy as sql # import EditorialModel ## Represents groups of EmField associated with an EmClass # # EmClass fields representation is organised with EmFieldGroup # @see EditorialModel::fields::EmField EditorialModel::classes::EmClass class EmFieldGroup(EmComponent): ## The database table name table = 'em_fieldgroup' ranked_in = 'class_id' ## List of fields _fields = [('class_id', ftypes.EmField_integer)] def __init__(self, data, components): super(EmFieldGroup, self).__init__(data, components) @classmethod ## Create a new EmFieldGroup # # Save it in database and return an instance* # @param **em_component_args : @ref EditorialModel::components::create(), must contain fields "name" (str) and "class" (EmClass) # @throw EmComponentExistError If an EmFieldGroup with this name allready exists # @throw TypeError If an argument is of an unexepted type def create(cls, **em_component_args): fieldgroup_name = em_component_args['name'] fieldgroup_class = em_component_args['class'] if not isinstance(name, str): raise TypeError("Excepting as name. But got %s" % str(type(fielgroup_name))) if not isinstance(em_class, EmClass): raise TypeError("Excepting as em_class. But got %s" % str(type(fieldgroup_class))) return super(EmFieldGroup, cls).create(**em_component_args) ## Get the list of associated fields # @return A list of EmField instance def fields(self): result = [] for _,field in self.components['field']: if field.fieldgroup_id==self.uid: result.append(field) return result # meta = sqlutils.meta(self.db_engine) # field_table = sql.Table(EditorialModel.fields.EmField.table, meta) # req = field_table.select(field_table.c.uid).where(field_table.c.fieldgroup_id == self.uid) # conn = self.db_engine.connect() # res = conn.execute(req) # rows = res.fetchall() # conn.close() # return [EditorialModel.fields.EmField(row['uid']) for row in rows]