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.

classes.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # -*- coding: utf-8 -*-
  2. """ Manipulate Classes of the Editorial Model
  3. Create classes of object
  4. @see EmClass, EmType, EmFieldGroup, EmField
  5. """
  6. import logging as logger
  7. from EditorialModel.components import EmComponent, EmComponentNotExistError
  8. from Database import sqlutils
  9. import sqlalchemy as sql
  10. import EditorialModel
  11. class EmClass(EmComponent):
  12. table = 'em_class'
  13. def __init__(self, id_or_name):
  14. self.table = EmClass.table
  15. super(EmClass, self).__init__(id_or_name)
  16. """ create a new class
  17. @param name str: name of the new class
  18. @param class_type EmClasstype: type of the class
  19. """
  20. @classmethod
  21. def create(c, name, class_type):
  22. try:
  23. res = EmClass(name)
  24. logger.info("Trying to create an EmClass that allready exists")
  25. except EmComponentNotExistError:
  26. res = c._createDb(name, class_type)
  27. logger.debug("EmClass successfully created")
  28. return res
  29. @classmethod
  30. def _createDb(c, name, class_type):
  31. """ Do the db querys for EmClass::create() """
  32. uid = c.newUid()
  33. dbe = c.getDbE()
  34. conn = dbe.connect()
  35. #Create a new entry in the em_class table
  36. dbclass = sql.Table(c.table, sqlutils.meta(dbe))
  37. req = dbclass.insert().values(uid = uid, name=name, classtype=class_type['name'])
  38. res = conn.execute(req)
  39. #Create a new table storing LodelObjects of this EmClass
  40. meta = sql.MetaData()
  41. emclasstable = sql.Table(name, meta,
  42. sql.Column('uid', sql.VARCHAR(50), primary_key = True))
  43. emclasstable.create(conn)
  44. conn.close()
  45. return EmClass(name)
  46. def populate(self):
  47. row = super(EmClass, self).populate()
  48. self.classtype = row.classtype
  49. self.icon = row.icon
  50. self.sortcolumn = row.sortcolumn
  51. def save(self):
  52. # should not be here, but cannot see how to do this
  53. if self.name is None:
  54. self.populate()
  55. values = {
  56. 'classtype' : self.classtype,
  57. 'icon' : self.icon,
  58. 'sortcolumn' : self.sortcolumn,
  59. }
  60. return super(EmClass, self).save(values)
  61. """ retrieve list of the field_groups of this class
  62. @return field_groups [EmFieldGroup]:
  63. """
  64. def fieldgroups(self):
  65. records = self._fieldgroupsDb()
  66. fieldgroups = [ EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records ]
  67. return fieldgroups
  68. def _fieldgroupsDb(self):
  69. dbe = self.__class__.getDbE()
  70. emfg = sql.Table(EditorialModel.fieldgroups.EmFieldGroup.table, sqlutils.meta(dbe))
  71. req = emfg.select().where(emfg.c.class_id == self.id)
  72. conn = dbe.connect()
  73. res = conn.execute(req)
  74. return res.fetchall()
  75. """ retrieve list of fields
  76. @return fields [EmField]:
  77. """
  78. def fields(self):
  79. pass
  80. """ retrieve list of type of this class
  81. @return types [EmType]:
  82. """
  83. def types(self):
  84. records = self._typesDb()
  85. types = [ EditorialModel.types.EmType(int(record.uid)) for record in records ]
  86. return types
  87. def _typesDb(self):
  88. dbe = self.__class__.getDbE()
  89. emtype = sql.Table(EditorialModel.types.EmType.table, sqlutils.meta(dbe))
  90. req = emtype.select().where(emtype.c.class_id == self.id)
  91. conn = dbe.connect()
  92. res = conn.execute(req)
  93. return res.fetchall()
  94. """ add a new EmType that can ben linked to this class
  95. @param t EmType: type to link
  96. @return success bool: done or not
  97. """
  98. def link_type(self, t):
  99. pass
  100. """ retrieve list of EmType that are linked to this class
  101. @return types [EmType]:
  102. """
  103. def linked_types(self):
  104. pass