Newer
Older
import logging, operator
from typing import Dict, List
from common.orm.fields.ForeignKeyField import ForeignKeyField
from common.orm.fields.IntegerField import IntegerField
from common.orm.fields.PrimaryKeyField import PrimaryKeyField
from common.orm.fields.StringField import StringField
from common.orm.model.Model import Model
from context.service.database.Tools import remove_dict_key
LOGGER = logging.getLogger(__name__)
class ConstraintsModel(Model): # pylint: disable=abstract-method
pk = PrimaryKeyField()
def dump(self) -> List[Dict]:
db_constraint_pks = self.references(ConstraintModel)
constraints = [ConstraintModel(self.database, pk).dump(include_position=True) for pk,_ in db_constraint_pks]
constraints = sorted(constraints, key=operator.itemgetter('position'))
return [remove_dict_key(constraint, 'position') for constraint in constraints]
class ConstraintModel(Model): # pylint: disable=abstract-method
pk = PrimaryKeyField()
constraints_fk = ForeignKeyField(ConstraintsModel)
position = IntegerField(min_value=0, required=True)
constraint_type = StringField(required=True, allow_empty=False)
constraint_value = StringField(required=True, allow_empty=False)
def dump(self, include_position=True) -> Dict: # pylint: disable=arguments-differ
result = {
'constraint_type': self.constraint_type,
'constraint_value': self.constraint_value,
}
if include_position: result['position'] = self.position
return result