1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2026-06-14 06:20:48 +02:00
lodel2_mirror/EditorialModel/fieldgroups.py
2015-07-16 11:43:23 +02:00

54 lines
2 KiB
Python

#-*- coding: utf-8 -*-
from EditorialModel.components import EmComponent
from EditorialModel.classes import EmClass
import EditorialModel.fieldtypes as ftypes
from Database import sqlutils
import sqlalchemy as sql
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'
ranked_in = 'class_id'
## List of fields
_fields = [('class_id', ftypes.EmField_integer)]
@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 : An EditorialModel::classes::EmClass instance
# @param **em_component_args : @ref EditorialModel::components::create()
# @throw EmComponentExistError If an EmFieldGroup with this name allready exists
# @throw TypeError If an argument is of an unexepted type
def create(cls, name, em_class, **em_component_args):
if not isinstance(name, str):
raise TypeError("Excepting <class str> as name. But got " + str(type(name)))
if not isinstance(em_class, EmClass):
raise TypeError("Excepting <class EmClass> as em_class. But got "+str(type(name)))
return super(EmFieldGroup, cls).create(name=name, class_id=em_class.uid, **em_component_args)
## Get the list of associated fields
# @return A list of EmField instance
def fields(self):
pass
# meta = sqlutils.meta(self.db_engine)
# field_table = sql.Table(EditorialModel.fields.EmField.table, meta)
# req = field_table.select(field_table.c.uid).where(field_table.c.fieldgroup_id == self.uid)
# conn = self.db_engine.connect()
# res = conn.execute(req)
# rows = res.fetchall()
# conn.close()
# return [EditorialModel.fields.EmField(row['uid']) for row in rows]