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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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.sqlwrapper import SqlWrapper
  9. from Database import sqlutils
  10. import sqlalchemy as sql
  11. import EditorialModel
  12. class EmClass(EmComponent):
  13. table = 'em_class'
  14. def __init__(self, id_or_name):
  15. self.table = EmClass.table
  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. exists = EmClass(name)
  25. logger.info("Trying to create an EmClass that allready exists")
  26. except EmComponentNotExistError:
  27. return c._createDb(name, class_type)
  28. return exists
  29. @classmethod
  30. def _createDb(c, name, class_type):
  31. """ Do the db querys for EmClass::create() """
  32. dbe = c.getDbE()
  33. #Create a new uid
  34. uids = sql.Table('uids', sqlutils.meta(dbe))
  35. conn = dbe.connect()
  36. req = uids.insert(values={'table':c.table})
  37. res = conn.execute(req)
  38. uid = res.inserted_primary_key
  39. #Create a new entry in the em_class table
  40. dbclass = sql.Table(c.table, sqlutils.meta(dbe))
  41. req = dbclass.insert().values(uid = uid, name=name, classtype=class_type['name'])
  42. res = conn.execute(req)
  43. #Create a new table storing LodelObjects of this EmClass
  44. meta = sql.MetaData()
  45. emclasstable = sql.Table(name, meta,
  46. sql.Column('uid', sql.VARCHAR(50), primary_key = True))
  47. emclasstable.create(conn)
  48. conn.close()
  49. return EmClass(res.inserted_primary_key)
  50. def populate(self):
  51. row = super(EmClass, self).populate()
  52. self.classtype = row.classtype
  53. self.icon = row.icon
  54. self.sortcolumn = row.sortcolumn
  55. def save(self):
  56. # should not be here, but cannot see how to do this
  57. if self.name is None:
  58. self.populate()
  59. values = {
  60. 'classtype' : self.classtype,
  61. 'icon' : self.icon,
  62. 'sortcolumn' : self.sortcolumn,
  63. }
  64. return super(EmClass, self).save(values)
  65. """ retrieve list of the field_groups of this class
  66. @return field_groups [EmFieldGroup]:
  67. """
  68. def fieldgroups(self):
  69. fieldgroups_req = SqlObject(EditorialModel.fieldgroups.EmFieldGroup.table)
  70. select = fieldgroups_req.sel
  71. select.where(fieldgroups_req.col.class_id == self.id)
  72. sqlresult = fieldgroups_req.rexec(select)
  73. records = sqlresult.fetchall()
  74. fieldgroups = [ EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records ]
  75. return fieldgroups
  76. """ retrieve list of fields
  77. @return fields [EmField]:
  78. """
  79. def fields(self):
  80. pass
  81. """ retrieve list of type of this class
  82. @return types [EmType]:
  83. """
  84. def types(self):
  85. emtype = SqlObject(EditorialModel.types.EmType.table)
  86. select = emtype.sel
  87. select.where(emtype.col.class_id == self.id)
  88. sqlresult = emtype.rexec(select)
  89. records = sqlresult.fetchall()
  90. types = [ EditorialModel.types.EmType(int(record.uid)) for record in records ]
  91. return types
  92. """ add a new EmType that can ben linked to this class
  93. @param t EmType: type to link
  94. @return success bool: done or not
  95. """
  96. def link_type(self, t):
  97. pass
  98. """ retrieve list of EmType that are linked to this class
  99. @return types [EmType]:
  100. """
  101. def linked_types(self):
  102. pass