diff --git a/.gitignore b/.gitignore index 42120ce..fe1e3ea 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ Enrichment/ __pycache__/ Logs/ [Dd]ata/ +*.egg-info/ diff --git a/minigrida/__init__.py b/minigrida/__init__.py new file mode 100644 index 0000000..04906e8 --- /dev/null +++ b/minigrida/__init__.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +# file __init__.py +# author Florent Guiotte +# version 0.0 +# date 22 mai 2020 +"""Abstract + +doc. +""" + diff --git a/cvgenerators/__init__.py b/minigrida/cvgenerators/__init__.py similarity index 100% rename from cvgenerators/__init__.py rename to minigrida/cvgenerators/__init__.py diff --git a/cvgenerators/jurse.py b/minigrida/cvgenerators/jurse.py similarity index 100% rename from cvgenerators/jurse.py rename to minigrida/cvgenerators/jurse.py diff --git a/minigrida/database/__init__.py b/minigrida/database/__init__.py new file mode 100644 index 0000000..6cba338 --- /dev/null +++ b/minigrida/database/__init__.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python +# file __init__.py +# author Florent Guiotte +# version 0.0 +# date 22 mai 2020 +"""Abstract + +doc. +""" + +from .design import * +from .helpers import * diff --git a/minigrida/database/design.py b/minigrida/database/design.py new file mode 100644 index 0000000..ad553e8 --- /dev/null +++ b/minigrida/database/design.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# file design.py +# author Florent Guiotte +# version 0.0 +# date 22 mai 2020 +"""Abstract + +doc. +""" + +from datetime import date +from pony import orm + +db = orm.Database() + +class Experiment(db.Entity): + sessions = orm.Set('Session') + urgency = orm.Required(int, default=1) + status = orm.Required(str, default='pending') + + protocol = orm.Required(str) + expe = orm.Required(orm.Json) + expe_hash = orm.Required(str, 32, unique=True) + + start_date = orm.Optional(date) + end_date = orm.Optional(date) + worker = orm.Optional(str) + ressources = orm.Optional(orm.Json) + + report = orm.Optional(orm.Json) + oa = orm.Optional(float) + aa = orm.Optional(float) + k = orm.Optional(float) + +class Session(db.Entity): + project = orm.Required('Project') + date = orm.Required(date) + name = orm.PrimaryKey(str) + desc = orm.Optional(str) + urgency = orm.Required(int, default=1) + experiments = orm.Set('Experiment') + +class Project(db.Entity): + name = orm.PrimaryKey(str) + sessions = orm.Set('Session') + diff --git a/minigrida/database/helpers.py b/minigrida/database/helpers.py new file mode 100644 index 0000000..6413c34 --- /dev/null +++ b/minigrida/database/helpers.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# file helpers.py +# author Florent Guiotte +# version 0.0 +# date 22 mai 2020 +"""Abstract + +doc. +""" + +from pony import orm +from datetime import datetime, date +import json +import hashlib + +from .design import * + +def compute_expe_hash(experiment): + return hashlib.md5(json.dumps(experiment, sort_keys=True).encode('utf-8')).hexdigest() + +@orm.db_session +def create_experiment(session_name, protocol, expe, urgency=1): + session = Session.select(lambda x: x.name == session_name) + if not session.exists(): + raise ValueError('Session "{}" does not exist'.format(session_name)) + + expe_hash = compute_expe_hash(expe) + q = Experiment.select(lambda x: x.expe_hash == expe_hash) + + if q.exists(): + e = q.first() + e.sessions.add(session) + else: + Experiment(sessions=session, protocol=protocol, expe=experiment, expe_hash=expe_hash) + +@orm.db_session +def create_project(name): + if not Project.select(lambda x: x.name == name).exists(): + Project(name=name) + else: + print('Project "{}" already exists.'.format(name)) + +@orm.db_session +def create_session(name, desc, project_name, urgency=1): + project = Project[project_name] + + if not Session.select(lambda x: x.name == name).exists(): + Session(project=project, date=datetime.now(), + name=name, desc=desc, urgency=1) + else: + print('Session "{}" already exists.'.format(name)) + +def bind_testing(): + db.bind('sqlite', ':memory:') + db.generate_mapping(create_tables=True) + +def bind(credentials_file): + with open(credentials_file) as f: + credentials = json.load(f) + db.bind(**credentials) + db.generate_mapping(create_tables=True) + diff --git a/descriptors/__init__.py b/minigrida/descriptors/__init__.py similarity index 100% rename from descriptors/__init__.py rename to minigrida/descriptors/__init__.py diff --git a/descriptors/dfc_aps.py b/minigrida/descriptors/dfc_aps.py similarity index 100% rename from descriptors/dfc_aps.py rename to minigrida/descriptors/dfc_aps.py diff --git a/descriptors/dfc_base.py b/minigrida/descriptors/dfc_base.py similarity index 100% rename from descriptors/dfc_base.py rename to minigrida/descriptors/dfc_base.py diff --git a/descriptors/dfc_daps.py b/minigrida/descriptors/dfc_daps.py similarity index 100% rename from descriptors/dfc_daps.py rename to minigrida/descriptors/dfc_daps.py diff --git a/descriptors/dfc_dsdaps.py b/minigrida/descriptors/dfc_dsdaps.py similarity index 100% rename from descriptors/dfc_dsdaps.py rename to minigrida/descriptors/dfc_dsdaps.py diff --git a/descriptors/dfc_lfaps.py b/minigrida/descriptors/dfc_lfaps.py similarity index 100% rename from descriptors/dfc_lfaps.py rename to minigrida/descriptors/dfc_lfaps.py diff --git a/descriptors/dfc_lfsdaps.py b/minigrida/descriptors/dfc_lfsdaps.py similarity index 100% rename from descriptors/dfc_lfsdaps.py rename to minigrida/descriptors/dfc_lfsdaps.py diff --git a/descriptors/dfc_sdaps.py b/minigrida/descriptors/dfc_sdaps.py similarity index 100% rename from descriptors/dfc_sdaps.py rename to minigrida/descriptors/dfc_sdaps.py diff --git a/protocols/__init__.py b/minigrida/protocols/__init__.py similarity index 100% rename from protocols/__init__.py rename to minigrida/protocols/__init__.py diff --git a/protocols/jurse.py b/minigrida/protocols/jurse.py similarity index 100% rename from protocols/jurse.py rename to minigrida/protocols/jurse.py diff --git a/protocols/protocol.py b/minigrida/protocols/protocol.py similarity index 100% rename from protocols/protocol.py rename to minigrida/protocols/protocol.py diff --git a/setup.py b/setup.py index 9dbb74b..08e970f 100644 --- a/setup.py +++ b/setup.py @@ -11,10 +11,10 @@ from distutils.core import setup setup(name='minigrida', - version='1.11', + version='2.0', description='Simple and decentralized computing grid', author='Florent Guiotte', author_email='florent.guiotte@uhb.fr', url='https://git.guiotte.fr/Florent/minigrida', - packages=['cvgenerators', 'descriptors', 'protocols'], + packages=['minigrida'],#'cvgenerators', 'descriptors', 'protocols', 'database'], )