No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

fieldgroups.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #-*- coding: utf-8 -*-
  2. from EditorialModel.components import EmComponent
  3. from EditorialModel.classes import EmClass
  4. import EditorialModel.fieldtypes as ftypes
  5. # from Database import sqlutils
  6. # import sqlalchemy as sql
  7. # import EditorialModel
  8. ## Represents groups of EmField associated with an EmClass
  9. #
  10. # EmClass fields representation is organised with EmFieldGroup
  11. # @see EditorialModel::fields::EmField EditorialModel::classes::EmClass
  12. class EmFieldGroup(EmComponent):
  13. ## The database table name
  14. table = 'em_fieldgroup'
  15. ranked_in = 'class_id'
  16. ## List of fields
  17. _fields = [('class_id', ftypes.EmField_integer)]
  18. def __init__(self, data, components):
  19. super(EmFieldGroup, self).__init__(data, components)
  20. @classmethod
  21. ## Create a new EmFieldGroup
  22. #
  23. # Save it in database and return an instance*
  24. # @param name str: The name of the new EmFieldGroup
  25. # @param em_class EmClass : An EditorialModel::classes::EmClass instance
  26. # @param **em_component_args : @ref EditorialModel::components::create()
  27. # @throw EmComponentExistError If an EmFieldGroup with this name allready exists
  28. # @throw TypeError If an argument is of an unexepted type
  29. def create(cls, **em_component_args):
  30. fieldgroup_name = em_component_args['name']
  31. fieldgroup_class = em_component_args['class']
  32. if not isinstance(name, str):
  33. raise TypeError("Excepting <class str> as name. But got %s" % str(type(fielgroup_name)))
  34. if not isinstance(em_class, EmClass):
  35. raise TypeError("Excepting <class EmClass> as em_class. But got %s" % str(type(fieldgroup_class)))
  36. return super(EmFieldGroup, cls).create(**em_component_args)
  37. ## Get the list of associated fields
  38. # @return A list of EmField instance
  39. def fields(self):
  40. result = []
  41. for _,field in self.components['field']:
  42. if field.fieldgroup_id==self.uid:
  43. result.append(field)
  44. return result
  45. # meta = sqlutils.meta(self.db_engine)
  46. # field_table = sql.Table(EditorialModel.fields.EmField.table, meta)
  47. # req = field_table.select(field_table.c.uid).where(field_table.c.fieldgroup_id == self.uid)
  48. # conn = self.db_engine.connect()
  49. # res = conn.execute(req)
  50. # rows = res.fetchall()
  51. # conn.close()
  52. # return [EditorialModel.fields.EmField(row['uid']) for row in rows]