Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

classes.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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.fieldtypes as ftypes
  11. class EmClass(EmComponent):
  12. table = 'em_class'
  13. def __init__(self, id_or_name):
  14. self.table = EmClass.table
  15. self._fields = [('classtype', ftypes.EmField_char()), ('icon', ftypes.EmField_integer()), ('sortcolumn', ftypes.EmField_char())]
  16. super(EmClass, self).__init__(id_or_name)
  17. """ create a new class
  18. @param name str: name of the new class
  19. @param class_type EmClasstype: type of the class
  20. """
  21. @classmethod
  22. def create(c, name, class_type):
  23. try:
  24. res = EmClass(name)
  25. logger.info("Trying to create an EmClass that allready exists")
  26. except EmComponentNotExistError:
  27. res = c._createDb(name, class_type)
  28. logger.debug("EmClass successfully created")
  29. return res
  30. @classmethod
  31. ## Isolate SQL for create
  32. # @todo Remove hardcoded default value for icon
  33. def _createDb(c, name, class_type):
  34. """ Do the db querys for EmClass::create() """
  35. #Create a new entry in the em_class table
  36. values = { 'name':name, 'classtype':class_type['name'], 'icon':0 }
  37. resclass = super(EmClass,c).create(**values)
  38. dbe = c.getDbE()
  39. conn = dbe.connect()
  40. #Create a new table storing LodelObjects of this EmClass
  41. meta = sql.MetaData()
  42. emclasstable = sql.Table(name, meta,
  43. sql.Column('uid', sql.VARCHAR(50), primary_key = True))
  44. emclasstable.create(conn)
  45. conn.close()
  46. return resclass
  47. """ retrieve list of the field_groups of this class
  48. @return field_groups [EmFieldGroup]:
  49. """
  50. def fieldgroups(self):
  51. records = self._fieldgroupsDb()
  52. fieldgroups = [ EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records ]
  53. return fieldgroups
  54. def _fieldgroupsDb(self):
  55. dbe = self.__class__.getDbE()
  56. emfg = sql.Table(EditorialModel.fieldgroups.EmFieldGroup.table, sqlutils.meta(dbe))
  57. req = emfg.select().where(emfg.c.class_id == self.id)
  58. conn = dbe.connect()
  59. res = conn.execute(req)
  60. return res.fetchall()
  61. """ retrieve list of fields
  62. @return fields [EmField]:
  63. """
  64. def fields(self):
  65. pass
  66. """ retrieve list of type of this class
  67. @return types [EmType]:
  68. """
  69. def types(self):
  70. records = self._typesDb()
  71. types = [ EditorialModel.types.EmType(int(record.uid)) for record in records ]
  72. return types
  73. def _typesDb(self):
  74. dbe = self.__class__.getDbE()
  75. emtype = sql.Table(EditorialModel.types.EmType.table, sqlutils.meta(dbe))
  76. req = emtype.select().where(emtype.c.class_id == self.id)
  77. conn = dbe.connect()
  78. res = conn.execute(req)
  79. return res.fetchall()
  80. """ add a new EmType that can ben linked to this class
  81. @param t EmType: type to link
  82. @return success bool: done or not
  83. """
  84. def link_type(self, t):
  85. pass
  86. """ retrieve list of EmType that are linked to this class
  87. @return types [EmType]:
  88. """
  89. def linked_types(self):
  90. pass