123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- # -*- coding: utf-8 -*-
-
- from lodel.context import LodelContext
- LodelContext.expose_modules(globals(), {
- 'lodel.leapi.datahandlers.base_classes': ['Reference', 'MultipleRef',
- 'SingleRef'],
- 'lodel.logger': 'logger',
- 'lodel.exceptions': ['LodelException', 'LodelExceptions',
- 'LodelFatalError', 'DataNoneValid',
- 'FieldValidationError']})
-
-
- class Link(SingleRef):
- pass
-
-
- ## @brief Child class of MultipleRef where references are represented in the form of a python list
- class List(MultipleRef):
-
- ## @brief instanciates a list reference
- # @param max_length int
- # @param kwargs
- # - allowed_classes list | None : list of allowed em classes if None no restriction
- # - internal bool
-
- def __init__(self, max_length=None, **kwargs):
- super().__init__(**kwargs)
-
- @classmethod
- def empty(cls):
- return list()
-
- ## @brief Check and cast value in appropriate type
- # @param value *
- # @throw FieldValidationError if value is unappropriate or can not be cast
- # @return value
- def _check_data_value(self, value):
- value = super()._check_data_value(value)
- try:
- return list(value)
- except Exception as e:
- raise FieldValidationError("Given iterable is not castable in \
- a list : %s" % e)
-
-
- ## @brief Child class of MultipleRef where references are represented in the form of a python set
- class Set(MultipleRef):
-
- ## @brief instanciates a set reference
- # @param kwargs : named arguments
- # - allowed_classes list | None : list of allowed em classes if None no restriction
- # - internal bool : if False, the field is not internal
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- @classmethod
- def empty(cls):
- return set()
-
- ## @brief Check and cast value in appropriate type
- # @param value *
- # @throw FieldValidationError if value is unappropriate or can not be cast
- # @return value
- def _check_data_value(self, value):
- value = super()._check_data_value(value)
- try:
- return set(value)
- except Exception as e:
- raise FieldValidationError("Given iterable is not castable in \
- a set : %s" % e)
-
-
- ## @brief Child class of MultipleRef where references are represented in the form of a python dict
- class Map(MultipleRef):
-
- ## @brief instanciates a dict reference
- # @param kwargs : named arguments
- # - allowed_classes list | None : list of allowed em classes if None no restriction
- # - internal bool : if False, the field is not internal
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- @classmethod
- def empty(cls):
- return dict()
-
- ## @brief Check and cast value in appropriate type
- # @param value *
- # @throw FieldValidationError if value is unappropriate or can not be cast
- # @return value
- def _check_data_value(self, value):
- value = super()._check_data_value(value)
- if not isinstance(value, dict):
- raise FieldValidationError("Values for dict fields should be dict")
- return value
-
-
- ## @brief This Reference class is designed to handler hierarchy with some constraint
- class Hierarch(MultipleRef):
-
- directly_editable = False
-
- ## @brief Instanciate a data handler handling hierarchical relation with constraints
- # @param back_reference tuple : Here it is mandatory to have a back ref (like a parent field)
- # @param max_depth int | None : limit of depth
- # @param max_childs int | Nine : maximum number of childs by nodes
- def __init__(self, back_reference, max_depth=None, max_childs=None, **kwargs):
- super().__init__(back_reference=back_reference,
- max_depth=max_depth,
- max_childs=max_childs,
- **kwargs)
-
- @classmethod
- def empty(cls):
- return tuple()
-
- ## @brief Check and cast value in appropriate type
- # @param value *
- # @throw FieldValidationError if value is unappropriate or can not be cast
- # @return value
- def _check_data_value(self, value):
- value = super()._check_data_value(value)
- if not (isinstance(value, list) or isinstance(value, str)):
- raise FieldValidationError(
- "List or string expected for a set field")
- return value
|