pony.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """ Support for Pony ODM.
  2. ::
  3. from mixer.backend.pony import mixer
  4. """
  5. from __future__ import absolute_import
  6. from pony.orm import commit
  7. from .. import mix_types as t
  8. from ..main import TypeMixer as BaseTypeMixer, Mixer as BaseMixer, SKIP_VALUE
  9. class TypeMixer(BaseTypeMixer):
  10. """ TypeMixer for Pony ORM. """
  11. def __load_fields(self):
  12. for attr in self.__scheme._attrs_:
  13. yield attr.column, t.Field(attr, attr.column)
  14. def populate_target(self, values):
  15. """ Populate target. """
  16. return self.__scheme(**dict(values))
  17. def is_required(self, field):
  18. """ Return True is field's value should be defined.
  19. :return bool:
  20. """
  21. return field.scheme.is_required and not field.scheme.is_pk
  22. def is_unique(self, field):
  23. """ Return True is field's value should be a unique.
  24. :return bool:
  25. """
  26. return field.scheme.is_unique
  27. @staticmethod
  28. def get_default(field):
  29. """ Get default value from field.
  30. :return value:
  31. """
  32. return field.scheme.default is None and SKIP_VALUE or field.scheme.default # noqa
  33. def make_fabric(self, field, field_name=None, fake=False, kwargs=None): # noqa
  34. """ Make values fabric for column.
  35. :param column: SqlAlchemy column
  36. :param field_name: Field name
  37. :param fake: Force fake data
  38. :return function:
  39. """
  40. py_type = field.py_type
  41. return super(TypeMixer, self).make_fabric(
  42. py_type, field_name=field_name, fake=fake, kwargs=kwargs)
  43. class Mixer(BaseMixer):
  44. """ Integration with Pony ORM. """
  45. type_mixer_cls = TypeMixer
  46. def postprocess(self, target):
  47. """ Save objects in db.
  48. :return value: A generated value
  49. """
  50. if self.params.get('commit'):
  51. commit()
  52. return target
  53. # Default Pony mixer
  54. mixer = Mixer()
  55. # pylama:ignore=E1120