__init__.py 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import transaction
  2. class Fixture(object):
  3. """ Fixture classes (list) required for this fixtures"""
  4. require = NotImplemented
  5. def __init__(self, session):
  6. self._session = session
  7. def insert(self):
  8. raise NotImplementedError()
  9. class FixturesLoader(object):
  10. """
  11. Fixtures loader. Load each fixture once.
  12. """
  13. def __init__(self, session, loaded=None):
  14. loaded = [] if loaded is None else loaded
  15. self._loaded = loaded
  16. self._session = session
  17. def loads(self, fixtures_classes):
  18. for fixture_class in fixtures_classes:
  19. for required_fixture_class in fixture_class.require:
  20. self._load(required_fixture_class)
  21. self._load(fixture_class)
  22. def _load(self, fixture_class: Fixture):
  23. if fixture_class not in self._loaded:
  24. fixture = fixture_class(self._session)
  25. fixture.insert()
  26. self._loaded.append(fixture_class)
  27. self._session.flush()
  28. transaction.commit()