Beispiel #1
0
    def process(uri, model_id, barrier):
        sheraf.Database(uri)

        with sheraf.connection(commit=True):
            m = Model.read(model_id)
            barrier.wait()
            m.order = "YOLO"
Beispiel #2
0
def test_close_database():
    db = sheraf.Database()
    assert db == sheraf.Database.get()
    close_database(db)

    with pytest.raises(KeyError):
        assert sheraf.Database.get() is None
Beispiel #3
0
    def process(uri, model_id, barrier, addition):
        sheraf.Database(uri)

        with sheraf.connection(commit=True):
            m = FloatModel.read(model_id)
            barrier.wait()
            m.counter.increment(addition)
Beispiel #4
0
    def magic_connection(*args, **kwargs):
        try:
            sheraf.Database()
        except KeyError:
            pass

        with previous_connection(*args, **kwargs) as connection:
            yield connection
Beispiel #5
0
        def run(self):
            with pytest.raises(KeyError):
                sheraf.Database.get()

            db = sheraf.Database(self.uri)
            with sheraf.connection(commit=True) as conn:
                conn.root.list.append("process")
            db.close()
Beispiel #6
0
def other_database():
    database = None
    try:
        database = sheraf.Database("memory://?database_name=other_database")
        yield database
    finally:
        if database:
            database.close()
Beispiel #7
0
def profiled_filter_with_demostorage(numdata, clazz, filter_value):
    sheraf.Database(storage=DemoStorage(name="demo"))
    init_data(clazz, numdata)
    result = profiled_filter(clazz, filter_value)
    nzeros = str(numdata).count("0")
    print("10^{nzeros} objects : {result} secs".format(nzeros=nzeros,
                                                       result=result))
    return ("10^{nzeros}".format(nzeros=nzeros), result)
Beispiel #8
0
def test_nested_connections_on_two_databases_raise_exception(
    cacheMinimize, sheraf_database
):
    other = sheraf.Database("memory://?database_name=other_database")
    with sheraf.connection():
        with pytest.raises(sheraf.exceptions.ConnectionAlreadyOpened):
            with sheraf.connection(database_name="other_database"):
                pass  # pragma: no cover
    other.close()
def db2(request):
    database = None
    try:
        database = sheraf.Database("memory://?database_name=db2")
        yield database

    finally:
        if database:
            database.close()
Beispiel #10
0
def other_nested_database():
    database = None
    try:
        database = sheraf.Database(
            "memory://?database_name=other_nested_database", nestable=True
        )
        yield database
    finally:
        if database:
            database.close()
def test_storage():
    demo_storage = sheraf.databases.DemoStorage(name="demo")

    pool = sheraf.Database(storage=demo_storage)

    with sheraf.connection() as C:
        db = C.db()
        assert db.storage is demo_storage

    pool.close()
Beispiel #12
0
    def concurrent_creation(cls):
        class Model(sheraf.Model):
            table = "Model"
            status = sheraf.SimpleAttribute()

        first_id = None
        # Create the table if needed:
        database = sheraf.Database(cls.DATABASE_URI)

        try:
            with sheraf.connection(commit=True) as conn:
                if conn.root().get(Model.table) is None:
                    first_id = Model.create(status=1)

            def process(uri, barrier):
                sheraf.Database(uri)
                with sheraf.connection(commit=True):
                    Model.read(first_id.id)
                    barrier.wait()
                    Model.create(status=1)

            processes = []

            barrier = multiprocessing.Barrier(cls.NUM_PROCESS)

            for i in range(0, cls.NUM_PROCESS):
                processes.append(
                    multiprocessing.Process(
                        target=process, args=(cls.DATABASE_URI, barrier)
                    )
                )

            for i in range(0, cls.NUM_PROCESS):
                processes[i].start()

            for i in reversed(range(0, cls.NUM_PROCESS)):
                processes[i].join(timeout=10)

            for i in range(0, cls.NUM_PROCESS):
                assert 0 == processes[i].exitcode

        finally:
            if cls.PROVOKE_CONFLICTS:
                pass
            else:
                with sheraf.databases.connection(commit=True) as conn:
                    for key in list(conn.root().keys()):
                        del conn.root()[key]
                database.close()
Beispiel #13
0
    def process(uri, model_id, barrier, queue, lock):
        sheraf.Database(uri)

        with sheraf.connection(commit=True):
            m = Model.read(model_id)
            barrier.wait()

            with lock:
                order = queue.get()

                if order == "first":
                    m.something = "YEAH"

                elif order == "second":
                    m.something_else = "YOH"
Beispiel #14
0
    def process(uri, model_id, barrier, queue, lock, addition):
        sheraf.Database(uri)

        with sheraf.connection() as conn:
            m = Model.read(model_id)

            barrier.wait()
            m.counter += addition

            with lock:
                value = queue.get()
                if value == "first":
                    conn.transaction_manager.commit()

                if value == "second":
                    with pytest.raises(ZODB.POSException.ConflictError):
                        conn.transaction_manager.commit()
Beispiel #15
0
    def process(uri, model_id, barrier, queue, lock):
        sheraf.Database(uri)

        with sheraf.connection() as conn:
            m = Model.read(model_id)
            barrier.wait()

            with lock:
                order = queue.get()
                m.order = order

                if order == "first":
                    conn.transaction_manager.commit()

                elif order == "second":
                    with pytest.raises(ZODB.POSException.ConflictError):
                        conn.transaction_manager.commit()
Beispiel #16
0
    def test_disk_usage(self):
        max_size = 0
        for Model in (
                # sheraf.UUIDIndexedDatedNamedAttributesModel,
                sheraf.UUIDIndexedNamedAttributesModel,
                sheraf.IntIndexedNamedAttributesModel,
                sheraf.IntIndexedIntAttributesModel,
        ):
            Account = self.get_Account(Model)
            self.clean(Model)

            sheraf.Database(
                filename="tmp/{}.fs".format(Account.__class__.__name__))
            ids = self.build(Account)
            self.check(Account, ids)

            model_size = sum(
                os.stat(f).st_size for f in self.get_db_files(Model))
            max_size = max(max_size, model_size)
            print((Model.__name__, model_size,
                   "{:.2f}".format(model_size / max_size)))
Beispiel #17
0
def cli(uri):
    sys.path.append(".")
    db = sheraf.Database(uri)
Beispiel #18
0
 def process(uri, barrier):
     sheraf.Database(uri)
     with sheraf.connection(commit=True):
         Model.read(first_id.id)
         barrier.wait()
         Model.create(status=1)
def test_storage_argument(DemoStorage, DB):
    pool = sheraf.Database(storage=DemoStorage(name="demo"))
    pool.close()

    DemoStorage.assert_called_once_with(name="demo")
Beispiel #20
0
def test_database_context_manager(cacheMinimize):
    db = sheraf.Database()
    with db.connection() as connection:
        assert sheraf.Database.current_connection() is connection
    db.close()
Beispiel #21
0
def set_up_database(state):
    state._path = tempfile.mkdtemp()
    sheraf.Database()
    state._old_files_root_dir = sheraf.attributes.files.FILES_ROOT_DIR
    sheraf.attributes.files.FILES_ROOT_DIR = os.path.join(
        state._path, "files/")
Beispiel #22
0
"""charge la base de donnees locale

>>> import sheraf
>>> with sheraf.connection(): # doctest: +SKIP
...    pass
"""

import sheraf

if __name__ == "__main__":  # pragma: no cover
    sheraf.Database(zeo=("localhost", 9999))