1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #-*- coding: utf-8 -*-
-
- from EditorialModel.components import EmComponent, EmComponentNotExistError
- from EditorialModel.classes import EmClass
- import EditorialModel.fieldtypes as ftypes
-
- from Database import sqlutils
-
- 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'
- ## List of fields
- # @todo Bad storage, here we want an ordereddict not a tuple list
- _fields = [('class_id', ftypes.EmField_integer)]
-
- ## Instanciate an EmFieldGroup with data fetched from db
- # @param id_or_name str|int: Identify the EmFieldGroup by name or by global_id
- # @throw TypeError
- # @see EditorialModel::components::EmComponent::__init__()
- # @throw EditorialModel::components::EmComponentNotExistError
-
- @classmethod
- ## Create a new EmFieldGroup
- #
- # Save it in database and return an instance*
- # @param name str: The name of the new EmFieldGroup
- # @param em_class EmClass|str|int : Can be an EditorialModel::classes::EmClass uid, name or instance
- # @throw ValueError If an EmFieldGroup with this name allready exists
- # @throw ValueError If the specified EmClass don't exists
- # @throw TypeError If an argument is of an unexepted type
- def create(cls, name, em_class):
- if not isinstance(em_class, EmClass):
- if isinstance(em_class, int) or isinstance(em_class, str):
- try:
- arg = em_class
- em_class = EmClass(arg)
- except EmComponentNotExistError:
- raise ValueError("No EmClass found with id or name '" + arg + "'")
- else:
- raise TypeError("Excepting an EmClass, an int or a str for 'em_class' argument. Not an " + str(type(em_class)) + ".")
-
- if not isinstance(name, str):
- raise TypeError("Excepting a string as first argument, not an " + str(type(name)))
-
- try:
- exists = EmFieldGroup(name)
- raise ValueError("An EmFieldgroup named " + name + " allready exist")
- except EmComponentNotExistError:
- return super(EmFieldGroup, cls).create(name=name, class_id=em_class.uid) # Check the return value ?
-
- return exists
-
- ## Get the list of associated fields
- # @return A list of EmField instance
- # @todo Implement this method
- def fields(self):
- field_table = sqlutils.getTable(EditorialModel.fields.EmField)
- req = field_table.select(field_table.c.uid).where(field_table.c.fieldgroup_id == self.uid)
- conn = self.__class__.db_engine().connect()
- res = conn.execute(req)
- rows = res.fetchall()
- conn.close()
- return [EditorialModel.fields.EmField(row['uid']) for row in rows]
|