Beispiel #1
0
    def __init__(self, model=None, path='../', engine=ENGINE.NATIVE):
        super(Fixture, self).__init__(creates=set(),
                                      drops=set(),
                                      deletes=set(),
                                      patch_package=None)

        self._path = path
        self._model = model
        self._original_databases = {}
        self.testable_database = TestableDatabase(engine)

        if self._model is not None:
            if type(self._model) in (tuple, list):
                [self._swap_database(model) for model in self._model]
            else:
                self._swap_database(self._model)
Beispiel #2
0
    def __init__(self, model=None, path='../', engine=ENGINE.NATIVE):
        super(Fixture, self).__init__(
            creates=set(), drops=set(), deletes=set(), patch_package=None)

        self._path = path
        self._model = model
        self._original_databases = {}
        self.testable_database = TestableDatabase(engine)

        if self._model is not None:
            if type(self._model) in (tuple, list):
                [self._swap_database(model) for model in self._model]
            else:
                self._swap_database(self._model)
Beispiel #3
0
class Fixture(schema.Schema):
    """Create, insert, drop and clean table schemas.
    """

    def __init__(self, model=None, path='../', engine=ENGINE.NATIVE):
        super(Fixture, self).__init__(
            creates=set(), drops=set(), deletes=set(), patch_package=None)

        self._path = path
        self._model = model
        self._original_databases = {}
        self.testable_database = TestableDatabase(engine)

        if self._model is not None:
            if type(self._model) in (tuple, list):
                [self._swap_database(model) for model in self._model]
            else:
                self._swap_database(self._model)

    def __enter__(self):
        """Enter the fixture context
        """

        self._currdir = os.getcwd()
        if '_trial_temp' not in self._currdir:
            raise FixtureError('Fixture context must be used in tests only')

        os.chdir(self._path)
        return self

    def __exit__(self, ext, exv, trb):
        """Leave the fixture context
        """

        os.chdir(self._currdir)
        if len(self._original_databases) > 0:
            if type(self._model) in (tuple, list):
                [self._swap_database(model, True) for model in self._model]
            else:
                self._swap_database(self._model, True)

    @property
    def store(self):
        """Always returns a ready to use valid store
        """

        return self.testable_database.store()

    def add_create(self, query):
        """Adds a new create query to the create queries set

        :param query: the query to be added
        :type query: str
        """

        if 'CREATE' not in query.upper():
            raise FixtureError(
                'Only CREATE queries are allowed on add_create method'
            )

        self._creates.add(query)

    def add_drop(self, query):
        """Adds a new drop query to the drop queries set

        :param query: the query to be added
        :type query: str
        """

        if 'DROP' not in query.upper():
            raise FixtureError(
                'Only DROP queries are allowed on add_drop method'
            )

        self._drops.add(query)

    def add_delete(self, query):
        """Adds a new delete query to the delete queries set

        :param query: the query to be added
        :type query: str
        """

        if 'DELETE' not in query.upper():
            raise FixtureError(
                'Only DELETE queries are allowed on add_delete method'
            )

        self._deletes.add(query)

    def create(self, store=None):
        """Run CREATE TABLE SQL statements using the given store (if any)

        :param store: the store to use
        :type store: :class:`storm.store.Store`
        """

        if store is None:
            store = self.database.store()

        super(Fixture, self).create(self._valid_store(store))

    def drop(self, store=None):
        """Run DROP TABLE SQL statements using the given store (if any)

        :param store: ths store to use
        :type store: :class:`storm.store.Store`
        """

        super(Fixture, self).drop(self._valid_store(store))

    def delete(self, store=None):
        """Run DELETE FROM SQL statements using the given store (if any)

        :param store: ths store to use
        :type store: :class:`storm.store.Store`
        """

        super(Fixture, self).delete(self._valid_store(store))

    def upgrade(self, store):
        """We don't upgrade fixtures
        """
        pass

    def _valid_store(self, store):
        """Return a valid store always
        """

        return self.testable_database.store() if store is None else store

    def _swap_database(self, model, restore=False):
        """Swap the database
        """

        if restore is False:
            self._original_databases[id(model)] = model.database
            model.database = self.testable_database
        else:
            model.database = self._original_databases[id(model)]
Beispiel #4
0
class Fixture(schema.Schema):
    """Create, insert, drop and clean table schemas.
    """
    def __init__(self, model=None, path='../', engine=ENGINE.NATIVE):
        super(Fixture, self).__init__(creates=set(),
                                      drops=set(),
                                      deletes=set(),
                                      patch_package=None)

        self._path = path
        self._model = model
        self._original_databases = {}
        self.testable_database = TestableDatabase(engine)

        if self._model is not None:
            if type(self._model) in (tuple, list):
                [self._swap_database(model) for model in self._model]
            else:
                self._swap_database(self._model)

    def __enter__(self):
        """Enter the fixture context
        """

        self._currdir = os.getcwd()
        if '_trial_temp' not in self._currdir:
            raise FixtureError('Fixture context must be used in tests only')

        os.chdir(self._path)
        return self

    def __exit__(self, ext, exv, trb):
        """Leave the fixture context
        """

        os.chdir(self._currdir)
        if len(self._original_databases) > 0:
            if type(self._model) in (tuple, list):
                [self._swap_database(model, True) for model in self._model]
            else:
                self._swap_database(self._model, True)

    @property
    def store(self):
        """Always returns a ready to use valid store
        """

        return self.testable_database.store()

    def add_create(self, query):
        """Adds a new create query to the create queries set

        :param query: the query to be added
        :type query: str
        """

        if 'CREATE' not in query.upper():
            raise FixtureError(
                'Only CREATE queries are allowed on add_create method')

        self._creates.add(query)

    def add_drop(self, query):
        """Adds a new drop query to the drop queries set

        :param query: the query to be added
        :type query: str
        """

        if 'DROP' not in query.upper():
            raise FixtureError(
                'Only DROP queries are allowed on add_drop method')

        self._drops.add(query)

    def add_delete(self, query):
        """Adds a new delete query to the delete queries set

        :param query: the query to be added
        :type query: str
        """

        if 'DELETE' not in query.upper():
            raise FixtureError(
                'Only DELETE queries are allowed on add_delete method')

        self._deletes.add(query)

    def create(self, store=None):
        """Run CREATE TABLE SQL statements using the given store (if any)

        :param store: the store to use
        :type store: :class:`storm.store.Store`
        """

        if store is None:
            store = self.database.store()

        super(Fixture, self).create(self._valid_store(store))

    def drop(self, store=None):
        """Run DROP TABLE SQL statements using the given store (if any)

        :param store: ths store to use
        :type store: :class:`storm.store.Store`
        """

        super(Fixture, self).drop(self._valid_store(store))

    def delete(self, store=None):
        """Run DELETE FROM SQL statements using the given store (if any)

        :param store: ths store to use
        :type store: :class:`storm.store.Store`
        """

        super(Fixture, self).delete(self._valid_store(store))

    def upgrade(self, store):
        """We don't upgrade fixtures
        """
        pass

    def _valid_store(self, store):
        """Return a valid store always
        """

        return self.testable_database.store() if store is None else store

    def _swap_database(self, model, restore=False):
        """Swap the database
        """

        if restore is False:
            self._original_databases[id(model)] = model.database
            model.database = self.testable_database
        else:
            model.database = self._original_databases[id(model)]