From 69034024f9129c0f7b3bfd1e6784f4b8416374c4 Mon Sep 17 00:00:00 2001 From: Marc Chjakiachvili Date: Thu, 13 Jul 2017 15:58:55 +0200 Subject: [PATCH] Rename waves.core en waves.vcore (contentype less chance of crash) --- .gitignore | 2 +- docs/conf.py | 2 +- docs/installation.rst | 8 +- docs/modules/adaptors/adaptors.rst | 16 +- docs/modules/managers/managers.rst | 4 +- docs/modules/models/base.rst | 2 +- docs/modules/models/jobs.rst | 6 +- docs/modules/models/runners.rst | 2 +- docs/modules/models/services.rst | 14 +- docs/modules/settings.rst | 2 +- docs/user_doc/service/services.rst | 2 +- setup.py | 4 +- waves/core/admin/__init__.py | 8 - waves/core/forms/lib/__init__.py | 13 - waves/core/forms/lib/crispy.py | 111 ---- waves/core/migrations/0001_initial.py | 532 ------------------ waves/{core => wcore}/__init__.py | 2 +- waves/{core => wcore}/adaptors/__init__.py | 0 waves/{core => wcore}/adaptors/adaptor.py | 66 +-- waves/{core => wcore}/adaptors/api.py | 2 +- waves/{core => wcore}/adaptors/cluster.py | 2 +- waves/{core => wcore}/adaptors/const.py | 0 waves/{core => wcore}/adaptors/exceptions.py | 6 +- waves/{core => wcore}/adaptors/importer.py | 13 +- waves/{core => wcore}/adaptors/loader.py | 4 +- waves/{core => wcore}/adaptors/mocks.py | 28 +- waves/{core => wcore}/adaptors/shell.py | 28 +- waves/{core => wcore}/adaptors/utils.py | 2 +- waves/wcore/admin/__init__.py | 8 + waves/{core => wcore}/admin/adaptors.py | 6 +- waves/{core => wcore}/admin/base.py | 0 waves/{core => wcore}/admin/forms/__init__.py | 0 waves/{core => wcore}/admin/forms/adaptors.py | 8 +- waves/{core => wcore}/admin/forms/jobs.py | 2 +- waves/{core => wcore}/admin/forms/runners.py | 6 +- waves/{core => wcore}/admin/forms/services.py | 11 +- waves/{core => wcore}/admin/inputs.py | 6 +- waves/{core => wcore}/admin/jobs.py | 22 +- waves/{core => wcore}/admin/runners.py | 13 +- waves/{core => wcore}/admin/services.py | 11 +- waves/{core => wcore}/admin/submissions.py | 17 +- waves/{core => wcore}/admin/views/__init__.py | 0 waves/{core => wcore}/admin/views/export.py | 8 +- waves/{core => wcore}/admin/views/job_tool.py | 4 +- .../{core => wcore}/admin/views/json_view.py | 0 .../admin/views/runner_tool.py | 10 +- .../admin/views/service_tool.py | 6 +- waves/{core => wcore}/api/__init__.py | 2 +- waves/{core => wcore}/api/share.py | 0 waves/{core => wcore}/api/v1/__init__.py | 0 .../api/v1/serializers/__init__.py | 0 .../api/v1/serializers/fields.py | 0 .../api/v1/serializers/inputs.py | 4 +- .../api/v1/serializers/jobs.py | 4 +- .../api/v1/serializers/services.py | 8 +- waves/{core/api/v2 => wcore/api/v1}/urls.py | 2 +- .../{core => wcore}/api/v1/views/__init__.py | 0 waves/{core => wcore}/api/v1/views/jobs.py | 8 +- .../{core => wcore}/api/v1/views/services.py | 10 +- waves/{core => wcore}/api/v2/__init__.py | 0 .../api/v2/serializers/__init__.py | 0 .../api/v2/serializers/fields.py | 0 .../api/v2/serializers/inputs.py | 4 +- .../api/v2/serializers/jobs.py | 8 +- .../api/v2/serializers/services.py | 10 +- waves/{core/api/v1 => wcore/api/v2}/urls.py | 2 +- .../{core => wcore}/api/v2/views/__init__.py | 0 waves/{core => wcore}/api/v2/views/jobs.py | 8 +- .../{core => wcore}/api/v2/views/services.py | 14 +- waves/{core => wcore}/api/views/__init__.py | 0 waves/{core => wcore}/api/views/base.py | 0 waves/{core => wcore}/apps.py | 13 +- .../authentication/__init__.py | 0 waves/{core => wcore}/authentication/key.py | 0 waves/{core => wcore}/commands/__init__.py | 2 +- waves/{core => wcore}/commands/command.py | 0 waves/{core => wcore}/compat/__init__.py | 4 +- .../compat/compat_adminsortable.py | 0 .../compat/compat_bootstrap_themes.py | 0 .../{core => wcore}/compat/compat_ckeditor.py | 0 .../compat/compat_grappelli.py | 0 waves/{core => wcore}/compat/compat_jet.py | 0 .../{core => wcore}/compat/submissions_jet.py | 6 +- .../{core => wcore}/compat/submissions_std.py | 2 +- waves/{core => wcore}/exceptions/__init__.py | 0 waves/{core => wcore}/exceptions/jobs.py | 2 +- waves/{core => wcore}/exceptions/runners.py | 0 waves/{core => wcore}/forms/__init__.py | 0 waves/{core => wcore}/forms/services.py | 10 +- waves/{core => wcore}/mails.py | 2 +- waves/{core => wcore}/management/__init__.py | 0 waves/{core => wcore}/management/base.py | 0 waves/{core => wcore}/management/command.py | 24 +- .../management/commands/__init__.py | 0 .../management/commands/waves.py | 0 waves/{core => wcore}/management/runner.py | 0 .../{core => wcore}/management/subcommands.py | 12 +- waves/{core => wcore}/migrations/.gitkeep | 0 waves/{core => wcore}/migrations/__init__.py | 0 waves/{core => wcore}/models/__init__.py | 26 +- waves/{core => wcore}/models/adaptors.py | 18 +- waves/{core => wcore}/models/base.py | 6 +- waves/{core => wcore}/models/history.py | 10 +- waves/{core => wcore}/models/inputs.py | 6 +- waves/{core => wcore}/models/jobs.py | 110 ++-- waves/{core => wcore}/models/runners.py | 10 +- waves/{core => wcore}/models/samples.py | 4 +- .../models/serializers/__init__.py | 0 .../models/serializers/base.py | 0 .../models/serializers/runners.py | 10 +- .../models/serializers/services.py | 12 +- waves/{core => wcore}/models/services.py | 20 +- waves/{core => wcore}/models/submissions.py | 12 +- waves/{core => wcore}/settings.py | 16 +- waves/{core => wcore}/signals.py | 23 +- .../static/admin/waves/css/admin.css | 0 .../static/admin/waves/css/forms.css | 0 .../static/admin/waves/css/modal.css | 0 .../static/admin/waves/js/admin.js | 0 .../static/admin/waves/js/connect.js | 0 .../static/admin/waves/js/modal.js | 0 .../static/admin/waves/js/modal.min.js | 0 .../static/admin/waves/js/runner.js | 0 .../static/admin/waves/js/services.js | 0 .../static/waves/ico/favicon.ico | Bin .../static/waves/ico/favicon.png | Bin .../waves/images/ui-icons_444444_256x240.png | Bin .../waves/images/ui-icons_555555_256x240.png | Bin .../waves/images/ui-icons_777620_256x240.png | Bin .../waves/images/ui-icons_777777_256x240.png | Bin .../waves/images/ui-icons_cc0000_256x240.png | Bin .../waves/images/ui-icons_ffffff_256x240.png | Bin .../static/waves/img/ajax-loader.gif | Bin .../{core => wcore}/static/waves/img/logo.png | Bin .../static/waves/img/progress-bar.gif | Bin .../{core => wcore}/static/waves/img/ring.gif | Bin .../static/waves/js/services.js | 0 .../admin/polymorphic/add_type_form.html | 0 .../admin/waves/baseparam/popup_response.html | 0 .../templates/admin/waves/change_form.html | 0 .../waves/import/service_modal_form.html | 0 .../admin/waves/job/change_form.html | 0 .../admin/waves/runner/change_form.html | 0 .../admin/waves/service/change_form.html | 6 +- .../admin/waves/service/service_form.html | 0 .../admin/waves/submission/change_form.html | 5 +- .../templates/adminsortable2/tabular.html | 0 .../templates/waves/api/service_api_form.html | 0 .../templates/waves/emails/base.html | 0 .../waves/emails/job_admin_error.html | 0 .../templates/waves/emails/job_cancelled.html | 0 .../templates/waves/emails/job_completed.html | 0 .../templates/waves/emails/job_error.html | 0 .../templates/waves/emails/job_error.txt | 0 .../templates/waves/emails/job_prepared.html | 0 .../templates/waves/emails/job_prepared.txt | 0 .../templates/waves/emails/job_submitted.html | 0 .../templates/waves/emails/job_submitted.txt | 0 .../templates/waves/jobs/job_detail.html | 0 .../templates/waves/jobs/job_list.html | 0 .../templates/waves/parts/job_detail.html | 0 .../waves/parts/job_list_element.html | 0 .../waves/parts/submission_form.html | 0 .../waves/services/_online_execution.html | 0 .../waves/services/_service_head.html | 0 .../waves/services/_service_link_panel.html | 0 .../templates/waves/services/base.html | 0 .../templates/waves/services/file.html | 0 .../waves/services/service_details.html | 0 .../waves/services/service_form.html | 0 .../waves/services/services_list.html | 0 .../{core => wcore}/templatetags/__init__.py | 0 .../templatetags/waves_tags.py | 2 +- waves/{core => wcore}/tests/__init__.py | 0 waves/{core => wcore}/tests/base.py | 4 +- .../tests/data/sample/fast_me/fail_file.txt | 0 .../tests/data/sample/fast_me/fastme-dna.phy | 0 .../data/sample/fast_me/fastme_matrix.txt | 0 .../tests/data/sample/fast_me/nucleic.phy | 0 .../tests/data/sample/maf/in.maf | 0 .../tests/data/sample/maf/out.fasta | 0 .../tests/data/sample/maf/simple.maf | 0 .../tests/data/sample/mafft/aln.fasta | 0 .../data/sample/physic_ist/outgroup_ex.txt | 0 .../data/sample/physic_ist/physic_ist_ex.txt | 0 .../tests/data/sample/physic_ist/runs.json | 0 .../data/sample/physic_ist/sourcetrees.nwk | 0 .../tests/data/sample/sample_tree.nhx | 0 .../tests/data/sample/services/hello_world.sh | 0 .../tests/data/sample/test_copy.txt | 0 .../{core => wcore}/tests/fixtures/init.json | 0 .../{core => wcore}/tests/fixtures/jobs.json | 0 .../tests/fixtures/services.json | 0 .../{core => wcore}/tests/fixtures/users.json | 0 waves/{core => wcore}/tests/settings.ini | 0 .../{core => wcore}/tests/settings.ini.sample | 0 waves/{core => wcore}/tests/test_adaptors.py | 16 +- waves/{core => wcore}/tests/test_api.py | 18 +- waves/{core => wcore}/tests/test_mails.py | 16 +- waves/{core => wcore}/tests/test_models.py | 18 +- waves/{core => wcore}/tests/test_runner.py | 28 +- waves/{core => wcore}/tests/test_settings.py | 0 waves/{core => wcore}/tests/utils.py | 24 +- waves/{core => wcore}/urls.py | 10 +- waves/{core => wcore}/utils/__init__.py | 0 waves/{core => wcore}/utils/encrypt.py | 2 +- .../utils/exception_logging_decorator.py | 0 waves/{core => wcore}/utils/storage.py | 2 +- waves/{core => wcore}/utils/validators.py | 12 +- waves/{core => wcore}/views/__init__.py | 0 waves/{core => wcore}/views/files.py | 0 waves/{core => wcore}/views/jobs.py | 4 +- waves/{core => wcore}/views/services.py | 8 +- waves_core/settings.py | 5 +- waves_core/urls.py | 2 +- 215 files changed, 495 insertions(+), 1150 deletions(-) delete mode 100644 waves/core/admin/__init__.py delete mode 100644 waves/core/forms/lib/__init__.py delete mode 100644 waves/core/forms/lib/crispy.py delete mode 100644 waves/core/migrations/0001_initial.py rename waves/{core => wcore}/__init__.py (84%) rename waves/{core => wcore}/adaptors/__init__.py (100%) rename waves/{core => wcore}/adaptors/adaptor.py (72%) rename waves/{core => wcore}/adaptors/api.py (97%) rename waves/{core => wcore}/adaptors/cluster.py (94%) rename waves/{core => wcore}/adaptors/const.py (100%) rename waves/{core => wcore}/adaptors/exceptions.py (90%) rename waves/{core => wcore}/adaptors/importer.py (94%) rename waves/{core => wcore}/adaptors/loader.py (86%) rename waves/{core => wcore}/adaptors/mocks.py (55%) rename waves/{core => wcore}/adaptors/shell.py (93%) rename waves/{core => wcore}/adaptors/utils.py (97%) create mode 100644 waves/wcore/admin/__init__.py rename waves/{core => wcore}/admin/adaptors.py (91%) rename waves/{core => wcore}/admin/base.py (100%) rename waves/{core => wcore}/admin/forms/__init__.py (100%) rename waves/{core => wcore}/admin/forms/adaptors.py (90%) rename waves/{core => wcore}/admin/forms/jobs.py (96%) rename waves/{core => wcore}/admin/forms/runners.py (89%) rename waves/{core => wcore}/admin/forms/services.py (94%) rename waves/{core => wcore}/admin/inputs.py (98%) rename waves/{core => wcore}/admin/jobs.py (92%) rename waves/{core => wcore}/admin/runners.py (91%) rename waves/{core => wcore}/admin/services.py (93%) rename waves/{core => wcore}/admin/submissions.py (93%) rename waves/{core => wcore}/admin/views/__init__.py (100%) rename waves/{core => wcore}/admin/views/export.py (85%) rename waves/{core => wcore}/admin/views/job_tool.py (95%) rename waves/{core => wcore}/admin/views/json_view.py (100%) rename waves/{core => wcore}/admin/views/runner_tool.py (95%) rename waves/{core => wcore}/admin/views/service_tool.py (92%) rename waves/{core => wcore}/api/__init__.py (66%) rename waves/{core => wcore}/api/share.py (100%) rename waves/{core => wcore}/api/v1/__init__.py (100%) rename waves/{core => wcore}/api/v1/serializers/__init__.py (100%) rename waves/{core => wcore}/api/v1/serializers/fields.py (100%) rename waves/{core => wcore}/api/v1/serializers/inputs.py (97%) rename waves/{core => wcore}/api/v1/serializers/jobs.py (97%) rename waves/{core => wcore}/api/v1/serializers/services.py (96%) rename waves/{core/api/v2 => wcore/api/v1}/urls.py (94%) rename waves/{core => wcore}/api/v1/views/__init__.py (100%) rename waves/{core => wcore}/api/v1/views/jobs.py (92%) rename waves/{core => wcore}/api/v1/views/services.py (94%) rename waves/{core => wcore}/api/v2/__init__.py (100%) rename waves/{core => wcore}/api/v2/serializers/__init__.py (100%) rename waves/{core => wcore}/api/v2/serializers/fields.py (100%) rename waves/{core => wcore}/api/v2/serializers/inputs.py (97%) rename waves/{core => wcore}/api/v2/serializers/jobs.py (96%) rename waves/{core => wcore}/api/v2/serializers/services.py (95%) rename waves/{core/api/v1 => wcore/api/v2}/urls.py (94%) rename waves/{core => wcore}/api/v2/views/__init__.py (100%) rename waves/{core => wcore}/api/v2/views/jobs.py (92%) rename waves/{core => wcore}/api/v2/views/services.py (91%) rename waves/{core => wcore}/api/views/__init__.py (100%) rename waves/{core => wcore}/api/views/base.py (100%) rename waves/{core => wcore}/apps.py (85%) rename waves/{core => wcore}/authentication/__init__.py (100%) rename waves/{core => wcore}/authentication/key.py (100%) rename waves/{core => wcore}/commands/__init__.py (89%) rename waves/{core => wcore}/commands/command.py (100%) rename waves/{core => wcore}/compat/__init__.py (86%) rename waves/{core => wcore}/compat/compat_adminsortable.py (100%) rename waves/{core => wcore}/compat/compat_bootstrap_themes.py (100%) rename waves/{core => wcore}/compat/compat_ckeditor.py (100%) rename waves/{core => wcore}/compat/compat_grappelli.py (100%) rename waves/{core => wcore}/compat/compat_jet.py (100%) rename waves/{core => wcore}/compat/submissions_jet.py (87%) rename waves/{core => wcore}/compat/submissions_std.py (98%) rename waves/{core => wcore}/exceptions/__init__.py (100%) rename waves/{core => wcore}/exceptions/jobs.py (97%) rename waves/{core => wcore}/exceptions/runners.py (100%) rename waves/{core => wcore}/forms/__init__.py (100%) rename waves/{core => wcore}/forms/services.py (97%) rename waves/{core => wcore}/mails.py (98%) rename waves/{core => wcore}/management/__init__.py (100%) rename waves/{core => wcore}/management/base.py (100%) rename waves/{core => wcore}/management/command.py (91%) rename waves/{core => wcore}/management/commands/__init__.py (100%) rename waves/{core => wcore}/management/commands/waves.py (100%) rename waves/{core => wcore}/management/runner.py (100%) rename waves/{core => wcore}/management/subcommands.py (97%) rename waves/{core => wcore}/migrations/.gitkeep (100%) rename waves/{core => wcore}/migrations/__init__.py (100%) rename waves/{core => wcore}/models/__init__.py (57%) rename waves/{core => wcore}/models/adaptors.py (94%) rename waves/{core => wcore}/models/base.py (97%) rename waves/{core => wcore}/models/history.py (86%) rename waves/{core => wcore}/models/inputs.py (98%) rename waves/{core => wcore}/models/jobs.py (91%) rename waves/{core => wcore}/models/runners.py (85%) rename waves/{core => wcore}/models/samples.py (95%) rename waves/{core => wcore}/models/serializers/__init__.py (100%) rename waves/{core => wcore}/models/serializers/base.py (100%) rename waves/{core => wcore}/models/serializers/runners.py (74%) rename waves/{core => wcore}/models/serializers/services.py (94%) rename waves/{core => wcore}/models/services.py (94%) rename waves/{core => wcore}/models/submissions.py (95%) rename waves/{core => wcore}/settings.py (89%) rename waves/{core => wcore}/signals.py (88%) rename waves/{core => wcore}/static/admin/waves/css/admin.css (100%) rename waves/{core => wcore}/static/admin/waves/css/forms.css (100%) rename waves/{core => wcore}/static/admin/waves/css/modal.css (100%) rename waves/{core => wcore}/static/admin/waves/js/admin.js (100%) rename waves/{core => wcore}/static/admin/waves/js/connect.js (100%) rename waves/{core => wcore}/static/admin/waves/js/modal.js (100%) rename waves/{core => wcore}/static/admin/waves/js/modal.min.js (100%) rename waves/{core => wcore}/static/admin/waves/js/runner.js (100%) rename waves/{core => wcore}/static/admin/waves/js/services.js (100%) rename waves/{core => wcore}/static/waves/ico/favicon.ico (100%) rename waves/{core => wcore}/static/waves/ico/favicon.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_444444_256x240.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_555555_256x240.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_777620_256x240.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_777777_256x240.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_cc0000_256x240.png (100%) rename waves/{core => wcore}/static/waves/images/ui-icons_ffffff_256x240.png (100%) rename waves/{core => wcore}/static/waves/img/ajax-loader.gif (100%) rename waves/{core => wcore}/static/waves/img/logo.png (100%) rename waves/{core => wcore}/static/waves/img/progress-bar.gif (100%) rename waves/{core => wcore}/static/waves/img/ring.gif (100%) rename waves/{core => wcore}/static/waves/js/services.js (100%) rename waves/{core => wcore}/templates/admin/polymorphic/add_type_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/baseparam/popup_response.html (100%) rename waves/{core => wcore}/templates/admin/waves/change_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/import/service_modal_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/job/change_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/runner/change_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/service/change_form.html (95%) rename waves/{core => wcore}/templates/admin/waves/service/service_form.html (100%) rename waves/{core => wcore}/templates/admin/waves/submission/change_form.html (90%) rename waves/{core => wcore}/templates/adminsortable2/tabular.html (100%) rename waves/{core => wcore}/templates/waves/api/service_api_form.html (100%) rename waves/{core => wcore}/templates/waves/emails/base.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_admin_error.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_cancelled.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_completed.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_error.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_error.txt (100%) rename waves/{core => wcore}/templates/waves/emails/job_prepared.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_prepared.txt (100%) rename waves/{core => wcore}/templates/waves/emails/job_submitted.html (100%) rename waves/{core => wcore}/templates/waves/emails/job_submitted.txt (100%) rename waves/{core => wcore}/templates/waves/jobs/job_detail.html (100%) rename waves/{core => wcore}/templates/waves/jobs/job_list.html (100%) rename waves/{core => wcore}/templates/waves/parts/job_detail.html (100%) rename waves/{core => wcore}/templates/waves/parts/job_list_element.html (100%) rename waves/{core => wcore}/templates/waves/parts/submission_form.html (100%) rename waves/{core => wcore}/templates/waves/services/_online_execution.html (100%) rename waves/{core => wcore}/templates/waves/services/_service_head.html (100%) rename waves/{core => wcore}/templates/waves/services/_service_link_panel.html (100%) rename waves/{core => wcore}/templates/waves/services/base.html (100%) rename waves/{core => wcore}/templates/waves/services/file.html (100%) rename waves/{core => wcore}/templates/waves/services/service_details.html (100%) rename waves/{core => wcore}/templates/waves/services/service_form.html (100%) rename waves/{core => wcore}/templates/waves/services/services_list.html (100%) rename waves/{core => wcore}/templatetags/__init__.py (100%) rename waves/{core => wcore}/templatetags/waves_tags.py (92%) rename waves/{core => wcore}/tests/__init__.py (100%) rename waves/{core => wcore}/tests/base.py (96%) rename waves/{core => wcore}/tests/data/sample/fast_me/fail_file.txt (100%) rename waves/{core => wcore}/tests/data/sample/fast_me/fastme-dna.phy (100%) rename waves/{core => wcore}/tests/data/sample/fast_me/fastme_matrix.txt (100%) rename waves/{core => wcore}/tests/data/sample/fast_me/nucleic.phy (100%) rename waves/{core => wcore}/tests/data/sample/maf/in.maf (100%) rename waves/{core => wcore}/tests/data/sample/maf/out.fasta (100%) rename waves/{core => wcore}/tests/data/sample/maf/simple.maf (100%) rename waves/{core => wcore}/tests/data/sample/mafft/aln.fasta (100%) rename waves/{core => wcore}/tests/data/sample/physic_ist/outgroup_ex.txt (100%) rename waves/{core => wcore}/tests/data/sample/physic_ist/physic_ist_ex.txt (100%) rename waves/{core => wcore}/tests/data/sample/physic_ist/runs.json (100%) rename waves/{core => wcore}/tests/data/sample/physic_ist/sourcetrees.nwk (100%) rename waves/{core => wcore}/tests/data/sample/sample_tree.nhx (100%) rename waves/{core => wcore}/tests/data/sample/services/hello_world.sh (100%) rename waves/{core => wcore}/tests/data/sample/test_copy.txt (100%) rename waves/{core => wcore}/tests/fixtures/init.json (100%) rename waves/{core => wcore}/tests/fixtures/jobs.json (100%) rename waves/{core => wcore}/tests/fixtures/services.json (100%) rename waves/{core => wcore}/tests/fixtures/users.json (100%) rename waves/{core => wcore}/tests/settings.ini (100%) rename waves/{core => wcore}/tests/settings.ini.sample (100%) rename waves/{core => wcore}/tests/test_adaptors.py (92%) rename waves/{core => wcore}/tests/test_api.py (93%) rename waves/{core => wcore}/tests/test_mails.py (86%) rename waves/{core => wcore}/tests/test_models.py (86%) rename waves/{core => wcore}/tests/test_runner.py (76%) rename waves/{core => wcore}/tests/test_settings.py (100%) rename waves/{core => wcore}/tests/utils.py (89%) rename waves/{core => wcore}/urls.py (90%) rename waves/{core => wcore}/utils/__init__.py (100%) rename waves/{core => wcore}/utils/encrypt.py (96%) rename waves/{core => wcore}/utils/exception_logging_decorator.py (100%) rename waves/{core => wcore}/utils/storage.py (96%) rename waves/{core => wcore}/utils/validators.py (93%) rename waves/{core => wcore}/views/__init__.py (100%) rename waves/{core => wcore}/views/files.py (100%) rename waves/{core => wcore}/views/jobs.py (92%) rename waves/{core => wcore}/views/services.py (96%) diff --git a/.gitignore b/.gitignore index d3c9c17..999abbc 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,4 @@ ENV/ !/waves/forms/lib/ /waves/tests/settings.ini /staticfiles/ -!/waves/core/forms/lib/ +!/waves/wcore/forms/lib/ diff --git a/docs/conf.py b/docs/conf.py index e83907a..d4cd942 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,7 @@ import django # from mock import Mock as MagicMock -import waves.core as waves +import waves.wcore as waves """ class Mock(MagicMock): diff --git a/docs/installation.rst b/docs/installation.rst index 106f4ef..c27156c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -44,13 +44,13 @@ GET a WAVES web-app online following the next few steps, WAVES can run on Apache 1.3. Include the services urls in your project urls.py:: - url(r'^waves/', include('waves.core.urls', namespace='waves')), + url(r'^waves/', include('waves.wcore.urls', namespace='waves')), Alternativly you can use only parts waves urls configuration you need: - url(r'^admin/waves/', include('waves.core.urls.waves_admin_url', namespace='waves')), - url(r'^my-api/', include('waves.core.urls.waves_api_url', namespace='waves')), - url(r'^waves/', include('waves.core.urls.front_url', namespace='waves')) + url(r'^admin/waves/', include('waves.wcore.urls.waves_admin_url', namespace='waves')), + url(r'^my-api/', include('waves.wcore.urls.waves_api_url', namespace='waves')), + url(r'^waves/', include('waves.wcore.urls.front_url', namespace='waves')) 1.4. Run ``python manage.py makemigrations`` to update database models. diff --git a/docs/modules/adaptors/adaptors.rst b/docs/modules/adaptors/adaptors.rst index 49d0bf5..0125ffa 100644 --- a/docs/modules/adaptors/adaptors.rst +++ b/docs/modules/adaptors/adaptors.rst @@ -6,40 +6,40 @@ These modules execute job on dedicated platforms, remotely or locally, they are Constants --------- -.. automodule:: waves.core.adaptors.const +.. automodule:: waves.wcore.adaptors.const Exceptions ---------- -.. automodule:: waves.core.adaptors.exceptions +.. automodule:: waves.wcore.adaptors.exceptions Adaptor Loader -------------- -.. automodule:: waves.core.adaptors.loader +.. automodule:: waves.wcore.adaptors.loader Utilities classes ----------------- -.. automodule:: waves.core.adaptors.utils +.. automodule:: waves.wcore.adaptors.utils Adaptor base class ------------------ -.. automodule:: waves.core.adaptors.adaptor +.. automodule:: waves.wcore.adaptors.adaptor :members: :show-inheritance: Shell script related adaptors class ----------------------------------- -.. automodule:: waves.core.adaptors.shell +.. automodule:: waves.wcore.adaptors.shell :members: :show-inheritance: Api related adaptor base class ------------------------------ -.. automodule:: waves.core.adaptors.api +.. automodule:: waves.wcore.adaptors.api :members: :show-inheritance: Cluster related adaptors ------------------------ -.. automodule:: waves.core.adaptors.cluster +.. automodule:: waves.wcore.adaptors.cluster :members: :show-inheritance: diff --git a/docs/modules/managers/managers.rst b/docs/modules/managers/managers.rst index dc5c0f5..8c2f2bb 100644 --- a/docs/modules/managers/managers.rst +++ b/docs/modules/managers/managers.rst @@ -5,7 +5,7 @@ Managers Service Manager --------------- -.. autoclass:: waves.core.models.services.ServiceManager +.. autoclass:: waves.wcore.models.services.ServiceManager :members: :undoc-members: @@ -13,6 +13,6 @@ Service Manager Job Manager ----------- -.. autoclass:: waves.core.models.jobs.JobManager +.. autoclass:: waves.wcore.models.jobs.JobManager :members: :undoc-members: diff --git a/docs/modules/models/base.rst b/docs/modules/models/base.rst index 53b52ac..445f517 100644 --- a/docs/modules/models/base.rst +++ b/docs/modules/models/base.rst @@ -3,6 +3,6 @@ Base classes WAVEs defines few Bases classes shared among other models resources -.. automodule:: waves.core.models.base +.. automodule:: waves.wcore.models.base :members: :show-inheritance: \ No newline at end of file diff --git a/docs/modules/models/jobs.rst b/docs/modules/models/jobs.rst index a24d751..5facb1f 100644 --- a/docs/modules/models/jobs.rst +++ b/docs/modules/models/jobs.rst @@ -3,7 +3,7 @@ Jobs Jobs models documentation -.. autoclass:: waves.core.models.jobs.Job +.. autoclass:: waves.wcore.models.jobs.Job :members: :undoc-members: :show-inheritance: @@ -14,7 +14,7 @@ Job Inputs ---------- Job Inputs related to inputs defined in service configuration, see :ref:`service-inputs-label`. -.. autoclass:: waves.core.models.jobs.JobInput +.. autoclass:: waves.wcore.models.jobs.JobInput :members: :undoc-members: @@ -24,7 +24,7 @@ Job Outputs ----------- Job outputs related to outputs defined in service configuration -.. autoclass:: waves.core.models.jobs.JobOutput +.. autoclass:: waves.wcore.models.jobs.JobOutput :members: :undoc-members: diff --git a/docs/modules/models/runners.rst b/docs/modules/models/runners.rst index bb701b3..91e550e 100644 --- a/docs/modules/models/runners.rst +++ b/docs/modules/models/runners.rst @@ -4,7 +4,7 @@ Runners Runners are in charge of running job on a specific 'Adaptor' configuration -.. automodule:: waves.core.models.runners +.. automodule:: waves.wcore.models.runners :members: :undoc-members: :show-inheritance: \ No newline at end of file diff --git a/docs/modules/models/services.rst b/docs/modules/models/services.rst index 6b2a58c..ecb5765 100644 --- a/docs/modules/models/services.rst +++ b/docs/modules/models/services.rst @@ -5,13 +5,13 @@ Services Services are the main entry point for WAVEs application, managed by :ref:`service-manager-label`. - .. autoclass:: waves.core.models.services.Service + .. autoclass:: waves.wcore.models.services.Service :members: :show-inheritance: Services may be accessed from multiple 'submissions' - .. autoclass:: waves.core.models.submissions.Submission + .. autoclass:: waves.wcore.models.submissions.Submission :members: :show-inheritance: @@ -21,7 +21,7 @@ Submission Inputs ----------------- Base class for service inputs shared information - .. autoclass:: waves.core.models.inputs.AParam + .. autoclass:: waves.wcore.models.inputs.AParam :members: :show-inheritance: @@ -31,14 +31,14 @@ Submission Outputs: ------------------- Submission description defines expected outputs - .. autoclass:: waves.core.models.submissions.SubmissionOutput + .. autoclass:: waves.wcore.models.submissions.SubmissionOutput :members: Submission Outputs: ------------------- Submission description defines expected exitcode - .. autoclass:: waves.core.models.submissions.SubmissionOutput + .. autoclass:: waves.wcore.models.submissions.SubmissionOutput :members: @@ -51,12 +51,12 @@ Input Samples Services may provide sample data for their submissions - .. autoclass:: waves.core.models.samples.FileInputSample + .. autoclass:: waves.wcore.models.samples.FileInputSample :members: :undoc-members: :show-inheritance: - .. autoclass:: waves.core.models.samples.SampleDepParam + .. autoclass:: waves.wcore.models.samples.SampleDepParam :members: :undoc-members: :show-inheritance: \ No newline at end of file diff --git a/docs/modules/settings.rst b/docs/modules/settings.rst index 285cdd6..4d8ce6f 100644 --- a/docs/modules/settings.rst +++ b/docs/modules/settings.rst @@ -3,7 +3,7 @@ WAVES custom settings WAVES application defines a waves_settings attributes generated from WAVES_CORE Django settings dictionary, - .. automodule:: waves.core.settings + .. automodule:: waves.wcore.settings :members: waves_settings Here are the defaults values: diff --git a/docs/user_doc/service/services.rst b/docs/user_doc/service/services.rst index 965e634..ab37638 100644 --- a/docs/user_doc/service/services.rst +++ b/docs/user_doc/service/services.rst @@ -40,7 +40,7 @@ Service Creation - *Access restriction* : When service online status is 'restricted', along with all staff members, you can grant other 'web user' access to your service - *Mail Notification* : Check or uncheck mail notification for this Service (this is disabled if configuration disallow it globally) - *Api availability* : Set whether service is available on api as well as on the web - - *Command Class* : Parser Class : dedicated for specific and very complex command, set the :ref:`waves.core.commands` class implementation to create a job command line + - *Command Class* : Parser Class : dedicated for specific and very complex command, set the :ref:`waves.wcore.commands` class implementation to create a job command line - *TimeRecord* : Creation and last update date, you can't set these values, they are assigned automatically .. CAUTION:: diff --git a/setup.py b/setup.py index 2eaf393..5df2aea 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ def import_version(): - from waves.core import __version__ + from waves.wcore import __version__ return __version__ @@ -17,7 +17,7 @@ def import_version(): name='waves-core', version=import_version(), packages=find_packages(), - provides=['waves.core'], + provides=['waves.wcore'], include_package_data=True, license='GPLv3', description='WAVES - core ', diff --git a/waves/core/admin/__init__.py b/waves/core/admin/__init__.py deleted file mode 100644 index cb4a86d..0000000 --- a/waves/core/admin/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -""" Models admin packages """ -from __future__ import unicode_literals - - -from waves.core.admin.jobs import * -from waves.core.admin.runners import * -from waves.core.admin.services import * -from waves.core.admin.inputs import * diff --git a/waves/core/forms/lib/__init__.py b/waves/core/forms/lib/__init__.py deleted file mode 100644 index 30fb07b..0000000 --- a/waves/core/forms/lib/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from __future__ import unicode_literals - - -class BaseHelper(object): - - def set_layout(self, service_input): - raise NotImplementedError() - - def init_layout(self, fields): - pass - - def end_layout(self): - pass diff --git a/waves/core/forms/lib/crispy.py b/waves/core/forms/lib/crispy.py deleted file mode 100644 index 6640044..0000000 --- a/waves/core/forms/lib/crispy.py +++ /dev/null @@ -1,111 +0,0 @@ -from __future__ import unicode_literals - -from crispy_forms.bootstrap import * -from crispy_forms.helper import FormHelper as BaseFormHelper -from crispy_forms.layout import * - -from waves.core.models.inputs import * -from waves.core.models.samples import FileInputSample -from . import BaseHelper - -__all__ = ['FormHelper', 'FormLayout'] - - -class FormHelper(BaseFormHelper, BaseHelper): - """ - Extended FormHelper based on crispy FormHelper, - Dynamic form fields according to inputs types and parameters - """ - # TODO Created dedicated field for (copy_paste field) - - def __init__(self, form=None, **kwargs): - form_tag = kwargs.pop('form_tag', True) - form_class = kwargs.pop('form_class', 'form-horizontal') - label_class = kwargs.pop('label_class', 'col-lg-4') - field_class = kwargs.pop('field_class', 'col-lg-8 text-left') - super(FormHelper, self).__init__(form) - self.form_tag = form_tag - self.form_class = form_class - self.label_class = label_class - self.field_class = field_class - self.render_unmentioned_fields = False - self.layout = Layout() - - def set_layout(self, service_input, form): - """ - Setup layout for displaying a form for a Service, append extra fields for forms if needed - """ - css_class = "" - field_id = "id_" + service_input.name - dependent_on = "" - dependent_4_value = "" - if service_input.dependents_inputs.count() > 0: - css_class = "has_dependent" - field_dict = dict( - css_class=css_class, - id=field_id, - title=service_input.help_text, - ) - if service_input.parent is not None: - field_id += '_' + service_input.parent.name + '_' + service_input.when_value - dependent_on = service_input.parent.name - dependent_4_value = service_input.when_value - field_dict.update(dict(dependent_on=service_input.parent.name, - dependent_4_value=service_input.when_value)) - when_value = form.data.get(service_input.parent.name, service_input.parent.default) - if service_input.when_value != when_value: - field_dict.update(dict(wrapper_class="hid_dep_parameter", disabled="disabled")) - else: - field_dict.update(dict(wrapper_class="dis_dep_parameter")) - input_field = Field(service_input.name, **field_dict) - if isinstance(service_input, FileInput) and not service_input.multiple: - cp_input_field = Field('cp_' + service_input.name, css_id='id_' + 'cp_' + service_input.name) - tab_input = Tab( - "File Upload", - input_field, - css_id='tab_' + service_input.name - ) - if service_input.input_samples.count() > 0: - all_sample = [] - for sample in service_input.input_samples.all(): - all_sample.append(Field('sp_' + service_input.name + '_' + str(sample.pk))) - tab_input.extend(all_sample) - self.layout.append( - Div( - TabHolder( - tab_input, - Tab( - "Copy/paste content", - cp_input_field, - css_class='copypaste', - css_id='tab_cp_' + service_input.name, - ), - css_id='tab_holder_' + service_input.name, - ), - id='tab_pane_' + service_input.name, - css_class='copypaste', - dependent_on=dependent_on, - dependent_4_value=dependent_4_value - ) - ) - elif not isinstance(service_input, FileInputSample): - self.layout.append( - input_field - ) - - def init_layout(self, fields): - l_fields = [] - for field in fields: - l_fields.append(Field(field)) - self.layout = Layout() - self.layout.extend(l_fields) - return self.layout - - def end_layout(self): - self.layout.extend([ - HTML('
'), - FormActions( - Reset('reset', 'Reset form'), - Submit('save', 'Submit a job') - ) - ]) diff --git a/waves/core/migrations/0001_initial.py b/waves/core/migrations/0001_initial.py deleted file mode 100644 index 84339a4..0000000 --- a/waves/core/migrations/0001_initial.py +++ /dev/null @@ -1,532 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 12:39 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.manager -import uuid -import waves.core.compat -import waves.core.models.base -import waves.core.models.inputs -import waves.core.utils.storage -import waves.core.utils.validators - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='AdaptorInitParam', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(blank=True, help_text='Param name', max_length=100, null=True, verbose_name='Name')), - ('value', models.CharField(blank=True, help_text='Default value', max_length=500, null=True, verbose_name='Value')), - ('crypt', models.BooleanField(default=False, editable=False, verbose_name='Encrypted')), - ('prevent_override', models.BooleanField(default=False, help_text='Prevent override', verbose_name='Prevent override')), - ('object_id', models.PositiveIntegerField()), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - options={ - 'ordering': ['name'], - 'db_table': 'waves_adaptor_init_param', - 'verbose_name': 'Initial param', - 'verbose_name_plural': 'Init params', - }, - ), - migrations.CreateModel( - name='AParam', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('order', models.PositiveIntegerField(default=0, verbose_name='Ordering in forms')), - ('label', models.CharField(help_text='Input displayed label', max_length=100, verbose_name='Label')), - ('name', models.CharField(help_text="Input runner's job param command line name", max_length=50, verbose_name='Parameter name')), - ('multiple', models.BooleanField(default=False, help_text='Can hold multiple values', verbose_name='Multiple')), - ('help_text', models.TextField(blank=True, null=True, verbose_name='Help Text')), - ('required', models.NullBooleanField(choices=[(True, 'Required'), (None, 'Not submitted'), (False, 'Optional')], default=True, help_text='Submitted and/or Required', verbose_name='Required')), - ('default', models.CharField(blank=True, max_length=50, null=True, verbose_name='Default value')), - ('cmd_format', models.IntegerField(choices=[(0, 'Not used in command'), (2, '-[name] value'), (1, '--[name]=value'), (3, '-[name]'), (5, '--[name]'), (4, 'Posix')], default=2, help_text='Command line pattern', verbose_name='Command line format')), - ('edam_formats', models.CharField(blank=True, help_text='comma separated list of supported edam format', max_length=255, null=True, verbose_name='Edam format(s)')), - ('edam_datas', models.CharField(blank=True, help_text='comma separated list of supported edam data param_type', max_length=255, null=True, verbose_name='Edam data(s)')), - ('when_value', models.CharField(blank=True, help_text='Input is treated only for this parent value', max_length=255, null=True, verbose_name='When value')), - ('regexp', models.CharField(blank=True, max_length=255, null=True, verbose_name='Validation Regexp')), - ], - options={ - 'base_manager_name': 'base_objects', - 'ordering': ['order'], - 'verbose_name_plural': 'Service params', - 'db_table': 'waves_aparam', - 'verbose_name': 'Service param', - }, - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='FileInputSample', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('label', models.CharField(max_length=255, null=True, verbose_name='Input Label')), - ('help_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='Help text')), - ('file', models.FileField(storage=waves.core.utils.storage.WavesStorage(), upload_to=waves.core.utils.storage.file_sample_directory, verbose_name='Sample file')), - ], - options={ - 'db_table': 'waves_input_sample', - 'verbose_name': 'Input sample', - 'verbose_name_plural': 'Input samples', - }, - ), - migrations.CreateModel( - name='Job', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True, help_text='Creation timestamp', verbose_name='Created on')), - ('updated', models.DateTimeField(auto_now=True, help_text='Last update timestamp', verbose_name='Last Update')), - ('slug', models.UUIDField(blank=True, default=uuid.uuid4, editable=False, unique=True)), - ('title', models.CharField(blank=True, max_length=255, null=True, verbose_name='Job title')), - ('_status', models.IntegerField(choices=[(-1, 'Undefined'), (0, 'Created'), (1, 'Prepared'), (2, 'Queued'), (3, 'Running'), (4, 'Suspended'), (5, 'Run completed'), (6, 'Completed'), (7, 'Cancelled'), (9, 'Error')], default=0, verbose_name='Job status')), - ('status_mail', models.IntegerField(default=9999, editable=False)), - ('email_to', models.EmailField(blank=True, help_text='Notify results to this email', max_length=254, null=True, verbose_name='Email results')), - ('exit_code', models.IntegerField(default=0, help_text='Job exit code on relative adaptor', verbose_name='Job system exit code')), - ('results_available', models.BooleanField(default=False, editable=False, verbose_name='Results are available')), - ('nb_retry', models.IntegerField(default=0, editable=False, verbose_name='Nb Retry')), - ('remote_job_id', models.CharField(editable=False, max_length=255, null=True, verbose_name='Remote job ID')), - ('remote_history_id', models.CharField(editable=False, max_length=255, null=True, verbose_name='Remote history ID')), - ('_command_line', models.CharField(editable=False, max_length=255, null=True, verbose_name='Final generated command line')), - ('_adaptor', models.TextField(editable=False, null=True, verbose_name='Adaptor classed used for this Job')), - ('service', models.CharField(default='', editable=False, max_length=255, null=True, verbose_name='Issued from service')), - ('notify', models.BooleanField(default=False, editable=False, verbose_name='Notify this result')), - ('client', models.ForeignKey(blank=True, help_text='Associated registered user', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='clients_job', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['-updated', '-created'], - 'abstract': False, - 'db_table': 'waves_job', - 'verbose_name': 'Job', - }, - bases=(models.Model, waves.core.models.base.UrlMixin), - ), - migrations.CreateModel( - name='JobHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('timestamp', models.DateTimeField(auto_now_add=True, help_text='History timestamp', verbose_name='Date time')), - ('status', models.IntegerField(choices=[(-1, 'Undefined'), (0, 'Created'), (1, 'Prepared'), (2, 'Queued'), (3, 'Running'), (4, 'Suspended'), (5, 'Run completed'), (6, 'Completed'), (7, 'Cancelled'), (9, 'Error')], help_text='History job status', null=True, verbose_name='Job Status')), - ('message', models.TextField(blank=True, help_text='History log', null=True, verbose_name='History log')), - ('is_admin', models.BooleanField(default=False, verbose_name='Admin Message')), - ('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='job_history', to='core.Job')), - ], - options={ - 'ordering': ['-timestamp', '-status'], - 'db_table': 'waves_job_history', - }, - ), - migrations.CreateModel( - name='JobInput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(default=0)), - ('slug', models.UUIDField(blank=True, default=uuid.uuid4, editable=False, unique=True)), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('value', models.CharField(blank=True, help_text='Input value (filename, boolean value, int value etc.)', max_length=255, null=True, verbose_name='Input content')), - ('remote_input_id', models.CharField(editable=False, max_length=255, null=True, verbose_name='Remote input ID (on adaptor)')), - ('param_type', models.CharField(choices=[('file', 'Input file'), ('list', 'List of values'), ('boolean', 'Boolean'), ('decimal', 'Decimal'), ('int', 'Integer'), ('text', 'Text')], editable=False, max_length=50, null=True, verbose_name='Param param_type')), - ('name', models.CharField(editable=False, max_length=200, null=True, verbose_name='Param name')), - ('command_type', models.IntegerField(choices=[(0, 'Not used in command'), (2, '-[name] value'), (1, '--[name]=value'), (3, '-[name]'), (5, '--[name]'), (4, 'Posix')], default=4, editable=False, null=True, verbose_name='Parameter Type')), - ('label', models.CharField(editable=False, max_length=100, null=True, verbose_name='Label')), - ('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='job_inputs', to='core.Job')), - ], - options={ - 'db_table': 'waves_job_input', - }, - ), - migrations.CreateModel( - name='JobOutput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(default=0)), - ('slug', models.UUIDField(blank=True, default=uuid.uuid4, editable=False, unique=True)), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('value', models.CharField(blank=True, default='', max_length=200, null=True, verbose_name='Output value')), - ('remote_output_id', models.CharField(editable=False, max_length=255, null=True, verbose_name='Remote output ID (on adaptor)')), - ('_name', models.CharField(help_text='Output displayed name', max_length=200, verbose_name='Name')), - ('extension', models.CharField(default='', max_length=5, verbose_name='File extension')), - ('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outputs', to='core.Job')), - ], - options={ - 'db_table': 'waves_job_output', - }, - bases=(waves.core.models.base.UrlMixin, models.Model), - ), - migrations.CreateModel( - name='RepeatedGroup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.PositiveIntegerField(default=0)), - ('name', models.CharField(max_length=255, verbose_name='Group name')), - ('title', models.CharField(max_length=255, verbose_name='Group title')), - ('max_repeat', models.IntegerField(blank=True, null=True, verbose_name='Max repeat')), - ('min_repeat', models.IntegerField(default=0, verbose_name='Min repeat')), - ('default', models.IntegerField(default=0, verbose_name='Default repeat')), - ], - options={ - 'db_table': 'waves_repeat_group', - }, - ), - migrations.CreateModel( - name='Runner', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('description', waves.core.compat.RichTextField(blank=True, help_text='Description (HTML)', null=True, verbose_name='Description')), - ('short_description', models.TextField(blank=True, help_text='Short description (Text)', null=True, verbose_name='Short Description')), - ('clazz', models.CharField(help_text='This is the concrete class used to perform job execution', max_length=100, verbose_name='Adaptor object')), - ('name', models.CharField(help_text='Displayed name', max_length=50, verbose_name='Label')), - ('importer_clazz', models.CharField(blank=True, max_length=200, null=True, verbose_name='Importer')), - ], - options={ - 'ordering': ['name'], - 'db_table': 'waves_runner', - 'verbose_name': 'Execution', - 'verbose_name_plural': 'Execution', - }, - bases=(waves.core.models.base.ExportAbleMixin, models.Model), - ), - migrations.CreateModel( - name='SampleDepParam', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('set_default', models.CharField(max_length=200, verbose_name='Set value to ')), - ], - options={ - 'db_table': 'waves_sample_dependent_input', - 'verbose_name': 'Sample dependency', - 'verbose_name_plural': 'Sample dependencies', - }, - ), - migrations.CreateModel( - name='Service', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True, help_text='Creation timestamp', verbose_name='Created on')), - ('updated', models.DateTimeField(auto_now=True, help_text='Last update timestamp', verbose_name='Last Update')), - ('description', waves.core.compat.RichTextField(blank=True, help_text='Description (HTML)', null=True, verbose_name='Description')), - ('short_description', models.TextField(blank=True, help_text='Short description (Text)', null=True, verbose_name='Short Description')), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('name', models.CharField(help_text='Service displayed name', max_length=255, verbose_name='Service name')), - ('version', models.CharField(blank=True, default='1.0', help_text='Service displayed version', max_length=10, null=True, verbose_name='Current version')), - ('status', models.IntegerField(choices=[[0, 'Draft'], [1, 'Test'], [2, 'Restricted'], [3, 'Public']], default=0, help_text='Service online status')), - ('api_on', models.BooleanField(default=True, help_text='Service is available for waves:api_v2 calls', verbose_name='Available on API')), - ('web_on', models.BooleanField(default=True, help_text='Service is available for web front', verbose_name='Available on WEB')), - ('email_on', models.BooleanField(default=True, help_text='This service sends notification email', verbose_name='Notify results')), - ('partial', models.BooleanField(default=False, help_text='Set whether some service outputs are dynamic (not known in advance)', verbose_name='Dynamic outputs')), - ('remote_service_id', models.CharField(editable=False, max_length=255, null=True, verbose_name='Remote service tool ID')), - ('edam_topics', models.TextField(blank=True, help_text='Comma separated list of Edam ontology topics', null=True, verbose_name='Edam topics')), - ('edam_operations', models.TextField(blank=True, help_text='Comma separated list of Edam ontology operations', null=True, verbose_name='Edam operations')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ('restricted_client', models.ManyToManyField(blank=True, db_table='waves_service_client', help_text='By default access is granted to everyone, you may restrict access here.', related_name='restricted_services', to=settings.AUTH_USER_MODEL, verbose_name='Restricted clients')), - ('runner', models.ForeignKey(help_text='Service job runs adapter', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='core_service_runs', to='core.Runner')), - ], - options={ - 'ordering': ['name'], - 'db_table': 'waves_service', - 'verbose_name': 'Service', - }, - bases=(waves.core.models.base.ExportAbleMixin, models.Model), - ), - migrations.CreateModel( - name='Submission', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True, help_text='Creation timestamp', verbose_name='Created on')), - ('updated', models.DateTimeField(auto_now=True, help_text='Last update timestamp', verbose_name='Last Update')), - ('order', models.PositiveIntegerField(default=0)), - ('slug', models.UUIDField(blank=True, default=uuid.uuid4, editable=False, unique=True)), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('availability', models.IntegerField(choices=[(0, 'Not Available'), (1, 'Available on web only'), (2, 'Available on api only'), (3, 'Available on both')], default=3, verbose_name='Availability')), - ('name', models.CharField(max_length=255, verbose_name='Submission title')), - ('runner', models.ForeignKey(help_text='Service job runs adapter', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='core_submission_runs', to='core.Runner')), - ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.Service')), - ], - options={ - 'ordering': ('order',), - 'verbose_name_plural': 'Submissions', - 'db_table': 'waves_submission', - 'verbose_name': 'Submission', - }, - ), - migrations.CreateModel( - name='SubmissionExitCode', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('exit_code', models.IntegerField(verbose_name='Exit code value')), - ('message', models.CharField(max_length=255, verbose_name='Exit code message')), - ('is_error', models.BooleanField(default=False, verbose_name='Is an Error')), - ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exit_codes', to='core.Submission')), - ], - options={ - 'db_table': 'waves_service_exitcode', - 'verbose_name': 'Exit Code', - }, - ), - migrations.CreateModel( - name='SubmissionOutput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True, help_text='Creation timestamp', verbose_name='Created on')), - ('updated', models.DateTimeField(auto_now=True, help_text='Last update timestamp', verbose_name='Last Update')), - ('api_name', models.CharField(blank=True, help_text='Api short code, must be unique, leave blank for automatic setup', max_length=100, null=True)), - ('label', models.CharField(help_text='Label', max_length=255, null=True, verbose_name='Label')), - ('name', models.CharField(blank=True, help_text='Label', max_length=255, null=True, verbose_name='Name')), - ('file_pattern', models.CharField(help_text='Pattern is used to match input value (%s to retrieve value from input)', max_length=100, verbose_name='File name or name pattern')), - ('edam_format', models.CharField(blank=True, help_text='Edam ontology format', max_length=255, null=True, verbose_name='Edam format')), - ('edam_data', models.CharField(blank=True, help_text='Edam ontology data', max_length=255, null=True, verbose_name='Edam data')), - ('help_text', models.TextField(blank=True, null=True, verbose_name='Help Text')), - ('extension', models.CharField(blank=True, default='', help_text='Leave blank for *, or set in file pattern', max_length=5, verbose_name='Extension')), - ], - options={ - 'ordering': ['-created'], - 'db_table': 'waves_submission_output', - 'verbose_name': 'Output', - 'verbose_name_plural': 'Outputs', - }, - ), - migrations.CreateModel( - name='BooleanParam', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('true_value', models.CharField(default='True', max_length=50, verbose_name='True value')), - ('false_value', models.CharField(default='False', max_length=50, verbose_name='False value')), - ], - options={ - 'db_table': 'waves_booleanparam', - 'verbose_name': 'Boolean choice', - 'verbose_name_plural': 'Boolean choices', - }, - bases=('core.aparam',), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='DecimalParam', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('min_val', models.DecimalField(blank=True, decimal_places=3, default=None, help_text='Leave blank if no min', max_digits=50, null=True, verbose_name='Min value')), - ('max_val', models.DecimalField(blank=True, decimal_places=3, default=None, help_text='Leave blank if no max', max_digits=50, null=True, verbose_name='Max value')), - ('step', models.DecimalField(blank=True, decimal_places=3, default=0.5, max_digits=50, verbose_name='Step')), - ], - options={ - 'db_table': 'waves_decimalparam', - 'verbose_name': 'Decimal', - 'verbose_name_plural': 'Decimal', - }, - bases=(waves.core.models.inputs.NumberParam, 'core.aparam'), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='FileInput', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('max_size', models.BigIntegerField(default=20480, help_text='in Ko', verbose_name='Maximum allowed file size ')), - ('allowed_extensions', models.CharField(default='*', help_text='Comma separated list, * means no filter', max_length=255, validators=[waves.core.utils.validators.validate_list_comma], verbose_name='Filter by extensions')), - ], - options={ - 'ordering': ['order'], - 'db_table': 'waves_fileparam', - 'verbose_name': 'File', - 'verbose_name_plural': 'Files input', - }, - bases=('core.aparam',), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='IntegerParam', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('min_val', models.IntegerField(blank=True, default=0, help_text='Leave blank if no min', null=True, verbose_name='Min value')), - ('max_val', models.IntegerField(blank=True, default=None, help_text='Leave blank if no max', null=True, verbose_name='Max value')), - ('step', models.IntegerField(blank=True, default=1, verbose_name='Step')), - ], - options={ - 'db_table': 'waves_integerparam', - 'verbose_name': 'Integer', - 'verbose_name_plural': 'Integer', - }, - bases=(waves.core.models.inputs.NumberParam, 'core.aparam'), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='ListParam', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('list_mode', models.CharField(choices=[('select', 'Select List'), ('radio', 'Radio buttons'), ('checkbox', 'Check box')], default='select', max_length=100, verbose_name='List display mode')), - ('list_elements', models.TextField(help_text='One Element per line label|value', max_length=500, validators=[waves.core.utils.validators.validate_list_param], verbose_name='Elements')), - ], - options={ - 'db_table': 'waves_listparam', - 'verbose_name': 'List', - 'verbose_name_plural': 'Lists', - }, - bases=('core.aparam',), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.CreateModel( - name='TextParam', - fields=[ - ('aparam_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.AParam')), - ('max_length', models.CharField(default=255, max_length=255, verbose_name='Max length (<255)')), - ], - options={ - 'db_table': 'waves_textparam', - 'verbose_name': 'Text Input', - 'verbose_name_plural': 'Text Input', - }, - bases=('core.aparam',), - managers=[ - ('objects', django.db.models.manager.Manager()), - ('base_objects', django.db.models.manager.Manager()), - ], - ), - migrations.AddField( - model_name='submissionoutput', - name='from_input', - field=models.ForeignKey(blank=True, help_text='Is valuated from an input', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='to_outputs', to='core.AParam'), - ), - migrations.AddField( - model_name='submissionoutput', - name='submission', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outputs', to='core.Submission'), - ), - migrations.AddField( - model_name='sampledepparam', - name='related_to', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_samples', to='core.AParam'), - ), - migrations.AddField( - model_name='sampledepparam', - name='sample', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dependent_inputs', to='core.FileInputSample'), - ), - migrations.AddField( - model_name='repeatedgroup', - name='submission', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submission_groups', to='core.Submission'), - ), - migrations.AddField( - model_name='job', - name='submission', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_jobs', to='core.Submission'), - ), - migrations.AddField( - model_name='fileinputsample', - name='dependent_params', - field=models.ManyToManyField(blank=True, through='core.SampleDepParam', to='core.AParam'), - ), - migrations.AddField( - model_name='aparam', - name='parent', - field=models.ForeignKey(blank=True, help_text='Input is associated to', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dependents_inputs', to='core.AParam'), - ), - migrations.AddField( - model_name='aparam', - name='polymorphic_ctype', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_core.aparam_set+', to='contenttypes.ContentType'), - ), - migrations.AddField( - model_name='aparam', - name='repeat_group', - field=models.ForeignKey(blank=True, help_text='Group and repeat items', null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.RepeatedGroup'), - ), - migrations.AddField( - model_name='aparam', - name='submission', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inputs', to='core.Submission'), - ), - migrations.CreateModel( - name='JobAdminHistory', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('core.jobhistory',), - ), - migrations.CreateModel( - name='ServiceRunParam', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('core.adaptorinitparam',), - ), - migrations.CreateModel( - name='SubmissionRunParam', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - }, - bases=('core.adaptorinitparam',), - ), - migrations.AlterUniqueTogether( - name='submissionexitcode', - unique_together=set([('exit_code', 'submission')]), - ), - migrations.AlterUniqueTogether( - name='submission', - unique_together=set([('service', 'api_name')]), - ), - migrations.AlterUniqueTogether( - name='service', - unique_together=set([('api_name', 'version', 'status')]), - ), - migrations.AddField( - model_name='sampledepparam', - name='file_input', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sample_dependencies', to='core.FileInput'), - ), - migrations.AlterUniqueTogether( - name='joboutput', - unique_together=set([('_name', 'job')]), - ), - migrations.AlterUniqueTogether( - name='jobinput', - unique_together=set([('name', 'value', 'job')]), - ), - migrations.AlterUniqueTogether( - name='jobhistory', - unique_together=set([('job', 'timestamp', 'status', 'is_admin')]), - ), - migrations.AddField( - model_name='fileinputsample', - name='file_input', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='input_samples', to='core.FileInput'), - ), - ] diff --git a/waves/core/__init__.py b/waves/wcore/__init__.py similarity index 84% rename from waves/core/__init__.py rename to waves/wcore/__init__.py index 8d5b2af..9835060 100644 --- a/waves/core/__init__.py +++ b/waves/wcore/__init__.py @@ -9,6 +9,6 @@ __db_version__ = "1.1" __name__ = "Waves Core package" -default_app_config = 'waves.core.apps.WavesConfig' +default_app_config = 'waves.wcore.apps.WavesConfig' diff --git a/waves/core/adaptors/__init__.py b/waves/wcore/adaptors/__init__.py similarity index 100% rename from waves/core/adaptors/__init__.py rename to waves/wcore/adaptors/__init__.py diff --git a/waves/core/adaptors/adaptor.py b/waves/wcore/adaptors/adaptor.py similarity index 72% rename from waves/core/adaptors/adaptor.py rename to waves/wcore/adaptors/adaptor.py index 38eda62..6076cf3 100644 --- a/waves/core/adaptors/adaptor.py +++ b/waves/wcore/adaptors/adaptor.py @@ -4,10 +4,10 @@ import json import logging -import waves.core.adaptors.const -from waves.core.adaptors.exceptions import AdaptorJobStateException -from waves.core.adaptors.utils import check_ready -from waves.core.utils.exception_logging_decorator import exception +import waves.wcore.adaptors.const +from waves.wcore.adaptors.exceptions import AdaptorJobStateException +from waves.wcore.adaptors.utils import check_ready +from waves.wcore.utils.exception_logging_decorator import exception logger = logging.getLogger(__name__) @@ -62,7 +62,7 @@ def available(self): def connect(self): """ Connect to remote platform adaptor - :raise: :class:`waves.core.adaptors.exceptions.adaptors.AdaptorConnectException` + :raise: :class:`waves.wcore.adaptors.exceptions.adaptors.AdaptorConnectException` :return: connector reference or raise an """ if not self.connected: @@ -72,7 +72,7 @@ def connect(self): @exception(logger) def disconnect(self): """ Shut down connection to adaptor. Called after job adaptor execution to disconnect from remote - :raise: :class:`waves.core.adaptors.exceptions.adaptors.AdaptorConnectException` + :raise: :class:`waves.wcore.adaptors.exceptions.adaptors.AdaptorConnectException` :return: Nothing """ if self.connected: @@ -85,17 +85,17 @@ def disconnect(self): def prepare_job(self, job): """ Job execution preparation process, may store prepared data in a pickled object :param job: The job to prepare execution for - :raise: :class:`waves.core.adaptors.exceptions.RunnerNotReady` if adaptor is not initialized before call - :raise: :class:`waves.core.adaptors.exceptions.JobPrepareException` if error during preparation process - :raise: :class:`waves.core.adaptors.exceptions.JobInconsistentStateError` if job status is not 'created' + :raise: :class:`waves.wcore.adaptors.exceptions.RunnerNotReady` if adaptor is not initialized before call + :raise: :class:`waves.wcore.adaptors.exceptions.JobPrepareException` if error during preparation process + :raise: :class:`waves.wcore.adaptors.exceptions.JobInconsistentStateError` if job status is not 'created' """ try: - assert (job.status <= waves.core.adaptors.const.JOB_CREATED) + assert (job.status <= waves.wcore.adaptors.const.JOB_CREATED) except AssertionError: - raise AdaptorJobStateException(job.status, waves.core.adaptors.const.JOB_CREATED) + raise AdaptorJobStateException(job.status, waves.wcore.adaptors.const.JOB_CREATED) self.connect() self._prepare_job(job) - job.status = waves.core.adaptors.const.JOB_PREPARED + job.status = waves.wcore.adaptors.const.JOB_PREPARED return job @exception(logger) @@ -103,17 +103,17 @@ def prepare_job(self, job): def run_job(self, job): """ Launch a previously 'prepared' job on the remote adaptor class :param job: The job to launch execution - :raise: :class:`waves.core.adaptors.exceptions.RunnerNotReady` if adaptor is not initialized - :raise: :class:`waves.core.adaptors.exceptions.JobRunException` if error during launch - :raise: :class:`waves.core.adaptors.exceptions.JobInconsistentStateError` if job status is not 'prepared' + :raise: :class:`waves.wcore.adaptors.exceptions.RunnerNotReady` if adaptor is not initialized + :raise: :class:`waves.wcore.adaptors.exceptions.JobRunException` if error during launch + :raise: :class:`waves.wcore.adaptors.exceptions.JobInconsistentStateError` if job status is not 'prepared' """ try: - assert (job.status == waves.core.adaptors.const.JOB_PREPARED) + assert (job.status == waves.wcore.adaptors.const.JOB_PREPARED) except AssertionError: - raise AdaptorJobStateException(job.status, waves.core.adaptors.const.JOB_PREPARED) + raise AdaptorJobStateException(job.status, waves.wcore.adaptors.const.JOB_PREPARED) self.connect() self._run_job(job) - job.status = waves.core.adaptors.const.JOB_QUEUED + job.status = waves.wcore.adaptors.const.JOB_QUEUED return job @exception(logger) @@ -123,16 +123,16 @@ def cancel_job(self, job): :param job: The job to cancel :return: The new job status :rtype: int - :raise: :class:`waves.core.adaptors.exceptions.JobRunException` if error during launch - :raise: :class:`waves.core.adaptors.exceptions.JobInconsistentStateError` if job status is not 'prepared' + :raise: :class:`waves.wcore.adaptors.exceptions.JobRunException` if error during launch + :raise: :class:`waves.wcore.adaptors.exceptions.JobInconsistentStateError` if job status is not 'prepared' """ try: - assert (job.status <= waves.core.adaptors.const.JOB_SUSPENDED) + assert (job.status <= waves.wcore.adaptors.const.JOB_SUSPENDED) except AssertionError: - raise AdaptorJobStateException(job.status, waves.core.adaptors.const.STATUS_MAP[0:5]) + raise AdaptorJobStateException(job.status, waves.wcore.adaptors.const.STATUS_MAP[0:5]) self.connect() self._cancel_job(job) - job.status = waves.core.adaptors.const.JOB_CANCELLED + job.status = waves.wcore.adaptors.const.JOB_CANCELLED return job @exception(logger) @@ -140,12 +140,12 @@ def cancel_job(self, job): def job_status(self, job): """ Return current WAVES Job status :param job: current job - :return: one of `waves.core.adaptors.STATUS_MAP` + :return: one of `waves.wcore.adaptors.STATUS_MAP` """ self.connect() job.status = self._states_map[self._job_status(job)] logger.debug('Current remote state %s mapped to %s', self._job_status(job), - waves.core.adaptors.const.STATUS_MAP.get(job.status, 'Undefined')) + waves.wcore.adaptors.const.STATUS_MAP.get(job.status, 'Undefined')) return job @exception(logger) @@ -183,13 +183,13 @@ def dump_config(self): def _connect(self): """ Actually do connect to concrete remote job runner platform, - :raise: `waves.core.adaptors.exception.AdaptorConnectException` if error + :raise: `waves.wcore.adaptors.exception.AdaptorConnectException` if error :return: an instance of concrete connector implementation """ raise NotImplementedError() def _disconnect(self): """ Actually disconnect from remote job runner platform - :raise: `waves.core.adaptors.exception.AdaptorConnectException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorConnectException` if error """ raise NotImplementedError() def _prepare_job(self, job): @@ -197,35 +197,35 @@ def _prepare_job(self, job): For example: - prepare and upload input files to remote host - set up parameters according to concrete adaptor needs - :raise: `waves.core.adaptors.exception.AdaptorException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error """ raise NotImplementedError() def _run_job(self, job): """ Actually launch job on concrete adaptor - :raise: `waves.core.adaptors.exception.AdaptorException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error """ raise NotImplementedError() def _cancel_job(self, job): """ Try to cancel job on concrete adaptor - :raise: `waves.core.adaptors.exception.AdaptorException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error """ raise NotImplementedError() def _job_status(self, job): """ Actually retrieve job states on concrete adaptor, return raw value to be mapped with defined in _states_map - :raise: `waves.core.adaptors.exception.AdaptorException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error """ raise NotImplementedError() def _job_results(self, job): """ Retrieve job results from concrete adaptor, may include some file download from remote hosts Set attribute result_available for job if success - :raise: `waves.core.adaptors.exception.AdaptorException` if error + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error :return: Boolean True if results are retrieved from remote host, False either """ raise NotImplementedError() def _job_run_details(self, job): """ Retrieve job run details if possible from concrete adaptor - :raise: `waves.core.adaptors.exception.AdaptorException` if error """ + :raise: `waves.wcore.adaptors.exception.AdaptorException` if error """ return job.default_run_details() def _dump_config(self): diff --git a/waves/core/adaptors/api.py b/waves/wcore/adaptors/api.py similarity index 97% rename from waves/core/adaptors/api.py rename to waves/wcore/adaptors/api.py index 7416bac..3a87307 100644 --- a/waves/core/adaptors/api.py +++ b/waves/wcore/adaptors/api.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from waves.core.adaptors.adaptor import JobAdaptor +from waves.wcore.adaptors.adaptor import JobAdaptor class PublicApiAdaptor(JobAdaptor): diff --git a/waves/core/adaptors/cluster.py b/waves/wcore/adaptors/cluster.py similarity index 94% rename from waves/core/adaptors/cluster.py rename to waves/wcore/adaptors/cluster.py index fb3dfa7..a3e6899 100644 --- a/waves/core/adaptors/cluster.py +++ b/waves/wcore/adaptors/cluster.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from waves.core.adaptors.shell import LocalShellAdaptor, SshKeyShellAdaptor, SshShellAdaptor +from waves.wcore.adaptors.shell import LocalShellAdaptor, SshKeyShellAdaptor, SshShellAdaptor class LocalClusterAdaptor(LocalShellAdaptor): diff --git a/waves/core/adaptors/const.py b/waves/wcore/adaptors/const.py similarity index 100% rename from waves/core/adaptors/const.py rename to waves/wcore/adaptors/const.py diff --git a/waves/core/adaptors/exceptions.py b/waves/wcore/adaptors/exceptions.py similarity index 90% rename from waves/core/adaptors/exceptions.py rename to waves/wcore/adaptors/exceptions.py index 41736ee..7aaad2e 100644 --- a/waves/core/adaptors/exceptions.py +++ b/waves/wcore/adaptors/exceptions.py @@ -1,4 +1,4 @@ -import waves.core.adaptors +import waves.wcore.adaptors class AdaptorException(Exception): @@ -51,8 +51,8 @@ class AdaptorJobStateException(AdaptorJobException): def __init__(self, status, expected, parent=None): if expected is not list: expected = [expected] - msg = "Wrong job state, excepted %s, got %s" % ([waves.core.adaptors.const.STATUS_MAP[state] for state in expected], - waves.core.adaptors.const.STATUS_MAP[status]) + msg = "Wrong job state, excepted %s, got %s" % ([waves.wcore.adaptors.const.STATUS_MAP[state] for state in expected], + waves.wcore.adaptors.const.STATUS_MAP[status]) super(AdaptorJobStateException, self).__init__(msg, parent=parent) diff --git a/waves/core/adaptors/importer.py b/waves/wcore/adaptors/importer.py similarity index 94% rename from waves/core/adaptors/importer.py rename to waves/wcore/adaptors/importer.py index 9d9ff88..7c76c4a 100644 --- a/waves/core/adaptors/importer.py +++ b/waves/wcore/adaptors/importer.py @@ -2,10 +2,10 @@ import warnings from django.contrib.contenttypes.models import ContentType -from waves.core.adaptors.exceptions import * -from waves.core.models.runners import Runner -from waves.core.models.adaptors import AdaptorInitParam -from waves.core.utils.exception_logging_decorator import exception +from waves.wcore.adaptors.exceptions import * +from waves.wcore.models.runners import Runner +from waves.wcore.models.adaptors import AdaptorInitParam +from waves.wcore.utils.exception_logging_decorator import exception logger = logging.getLogger(__name__) @@ -49,7 +49,7 @@ def import_service(self, tool_id): For specified Adaptor remote tool identifier, try to import submission params :param tool_id: Adaptors provider remote tool identifier :return: Update service with new submission according to retrieved parameters - :rtype: :class:`waves.core.adaptors.models.services.Service` + :rtype: :class:`waves.wcore.adaptors.models.services.Service` """ try: self.connect() @@ -100,13 +100,11 @@ def import_service(self, tool_id): self._submission.runner = self._runner else: init_params = self._adaptor.init_params - print "init_params", init_params runner = Runner.objects.create(name=self._adaptor.__class__.__name__, clazz='.'.join( (self._adaptor.__module__, self._adaptor.__class__.__name__)), importer_clazz='.'.join((self.__module__, self.__class__.__name__))) for name, value in self._adaptor.init_params.iteritems(): - print "Name ", name, " Value ", value adaptor_param = AdaptorInitParam.objects.create(name=name, value=value, crypt=False, @@ -116,7 +114,6 @@ def import_service(self, tool_id): object_id=runner.pk) # runner.save() # runner.adaptor = self._adaptor - print "runner params", runner.run_params self._service.runner = runner self._service.save() self._submission.save() diff --git a/waves/core/adaptors/loader.py b/waves/wcore/adaptors/loader.py similarity index 86% rename from waves/core/adaptors/loader.py rename to waves/wcore/adaptors/loader.py index bc9a0be..32845dd 100644 --- a/waves/core/adaptors/loader.py +++ b/waves/wcore/adaptors/loader.py @@ -2,8 +2,8 @@ import json -from waves.core.settings import waves_settings, import_from_string -from waves.core.adaptors.exceptions import AdaptorNotAvailableException +from waves.wcore.settings import waves_settings, import_from_string +from waves.wcore.adaptors.exceptions import AdaptorNotAvailableException __all__ = ['AdaptorLoader'] diff --git a/waves/core/adaptors/mocks.py b/waves/wcore/adaptors/mocks.py similarity index 55% rename from waves/core/adaptors/mocks.py rename to waves/wcore/adaptors/mocks.py index 20e3b6f..2560ec8 100644 --- a/waves/core/adaptors/mocks.py +++ b/waves/wcore/adaptors/mocks.py @@ -7,9 +7,9 @@ import string import time -import waves.core.adaptors.const -import waves.core.adaptors.utils -from waves.core.adaptors.adaptor import JobAdaptor +import waves.wcore.adaptors.const +import waves.wcore.adaptors.utils +from waves.wcore.adaptors.adaptor import JobAdaptor class MockConnector(object): @@ -18,15 +18,15 @@ class MockConnector(object): class MockJobRunnerAdaptor(JobAdaptor): _states_map = { - waves.core.adaptors.const.JOB_UNDEFINED: waves.core.adaptors.const.JOB_UNDEFINED, - waves.core.adaptors.const.JOB_CREATED: waves.core.adaptors.const.JOB_CREATED, - waves.core.adaptors.const.JOB_QUEUED: waves.core.adaptors.const.JOB_QUEUED, - waves.core.adaptors.const.JOB_RUNNING: waves.core.adaptors.const.JOB_RUNNING, - waves.core.adaptors.const.JOB_SUSPENDED: waves.core.adaptors.const.JOB_SUSPENDED, - waves.core.adaptors.const.JOB_CANCELLED: waves.core.adaptors.const.JOB_CANCELLED, - waves.core.adaptors.const.JOB_COMPLETED: waves.core.adaptors.const.JOB_COMPLETED, - waves.core.adaptors.const.JOB_TERMINATED: waves.core.adaptors.const.JOB_TERMINATED, - waves.core.adaptors.const.JOB_ERROR: waves.core.adaptors.const.JOB_ERROR, + waves.wcore.adaptors.const.JOB_UNDEFINED: waves.wcore.adaptors.const.JOB_UNDEFINED, + waves.wcore.adaptors.const.JOB_CREATED: waves.wcore.adaptors.const.JOB_CREATED, + waves.wcore.adaptors.const.JOB_QUEUED: waves.wcore.adaptors.const.JOB_QUEUED, + waves.wcore.adaptors.const.JOB_RUNNING: waves.wcore.adaptors.const.JOB_RUNNING, + waves.wcore.adaptors.const.JOB_SUSPENDED: waves.wcore.adaptors.const.JOB_SUSPENDED, + waves.wcore.adaptors.const.JOB_CANCELLED: waves.wcore.adaptors.const.JOB_CANCELLED, + waves.wcore.adaptors.const.JOB_COMPLETED: waves.wcore.adaptors.const.JOB_COMPLETED, + waves.wcore.adaptors.const.JOB_TERMINATED: waves.wcore.adaptors.const.JOB_TERMINATED, + waves.wcore.adaptors.const.JOB_ERROR: waves.wcore.adaptors.const.JOB_ERROR, } def __init__(self, command=None, protocol='http', host="localhost", **kwargs): @@ -35,9 +35,9 @@ def __init__(self, command=None, protocol='http', host="localhost", **kwargs): def _job_status(self, job): time.sleep(2) - if job.status == waves.core.adaptors.const.JOB_RUNNING: + if job.status == waves.wcore.adaptors.const.JOB_RUNNING: # print "job is running, set it to completed!" - return waves.core.adaptors.const.JOB_COMPLETED + return waves.wcore.adaptors.const.JOB_COMPLETED job.updated = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%I') return job.next_status diff --git a/waves/core/adaptors/shell.py b/waves/wcore/adaptors/shell.py similarity index 93% rename from waves/core/adaptors/shell.py rename to waves/wcore/adaptors/shell.py index 07a6a80..7a550cc 100644 --- a/waves/core/adaptors/shell.py +++ b/waves/wcore/adaptors/shell.py @@ -5,11 +5,11 @@ import saga -import waves.core.adaptors.const -from waves.core.adaptors.adaptor import JobAdaptor -from waves.core.adaptors.const import JobRunDetails -from waves.core.adaptors.exceptions import * -from waves.core.utils.encrypt import Encrypt +import waves.wcore.adaptors.const +from waves.wcore.adaptors.adaptor import JobAdaptor +from waves.wcore.adaptors.const import JobRunDetails +from waves.wcore.adaptors.exceptions import * +from waves.wcore.utils.encrypt import Encrypt logger = logging.getLogger(__name__) @@ -24,14 +24,14 @@ class LocalShellAdaptor(JobAdaptor): protocol_default = 'fork' _states_map = { - saga.job.UNKNOWN: waves.core.adaptors.const.JOB_UNDEFINED, - saga.job.NEW: waves.core.adaptors.const.JOB_QUEUED, - saga.job.PENDING: waves.core.adaptors.const.JOB_QUEUED, - saga.job.RUNNING: waves.core.adaptors.const.JOB_RUNNING, - saga.job.SUSPENDED: waves.core.adaptors.const.JOB_SUSPENDED, - saga.job.CANCELED: waves.core.adaptors.const.JOB_CANCELLED, - saga.job.DONE: waves.core.adaptors.const.JOB_COMPLETED, - saga.job.FAILED: waves.core.adaptors.const.JOB_ERROR, + saga.job.UNKNOWN: waves.wcore.adaptors.const.JOB_UNDEFINED, + saga.job.NEW: waves.wcore.adaptors.const.JOB_QUEUED, + saga.job.PENDING: waves.wcore.adaptors.const.JOB_QUEUED, + saga.job.RUNNING: waves.wcore.adaptors.const.JOB_RUNNING, + saga.job.SUSPENDED: waves.wcore.adaptors.const.JOB_SUSPENDED, + saga.job.CANCELED: waves.wcore.adaptors.const.JOB_CANCELLED, + saga.job.DONE: waves.wcore.adaptors.const.JOB_COMPLETED, + saga.job.FAILED: waves.wcore.adaptors.const.JOB_ERROR, } def __init__(self, command=None, protocol='fork', host="localhost", **kwargs): @@ -237,7 +237,7 @@ def context(self): if self._context is None: self._context = saga.Context('UserPass') self._context.user_id = self.user_id - self._context.user_pass = Encrypt.decrypt(self.password) + self._context.user_pass = self.password self._context.remote_port = self.port self._context.life_time = 0 return self._context diff --git a/waves/core/adaptors/utils.py b/waves/wcore/adaptors/utils.py similarity index 97% rename from waves/core/adaptors/utils.py rename to waves/wcore/adaptors/utils.py index a934f36..c2c5248 100644 --- a/waves/core/adaptors/utils.py +++ b/waves/wcore/adaptors/utils.py @@ -2,7 +2,7 @@ import re import unicodedata -from waves.core.adaptors.exceptions import AdaptorNotReady +from waves.wcore.adaptors.exceptions import AdaptorNotReady def check_ready(func): diff --git a/waves/wcore/admin/__init__.py b/waves/wcore/admin/__init__.py new file mode 100644 index 0000000..7b3d03c --- /dev/null +++ b/waves/wcore/admin/__init__.py @@ -0,0 +1,8 @@ +""" Models admin packages """ +from __future__ import unicode_literals + + +from waves.wcore.admin.jobs import * +from waves.wcore.admin.runners import * +from waves.wcore.admin.services import * +from waves.wcore.admin.inputs import * diff --git a/waves/core/admin/adaptors.py b/waves/wcore/admin/adaptors.py similarity index 91% rename from waves/core/admin/adaptors.py rename to waves/wcore/admin/adaptors.py index 6d37393..555587a 100644 --- a/waves/core/admin/adaptors.py +++ b/waves/wcore/admin/adaptors.py @@ -2,8 +2,8 @@ from django.contrib.contenttypes.admin import GenericTabularInline -from waves.core.admin.forms.adaptors import AdaptorInitParamForm -from waves.core.models import AdaptorInitParam +from waves.wcore.admin.forms.adaptors import AdaptorInitParamForm +from waves.wcore.models import AdaptorInitParam class AdaptorInitParamInline(GenericTabularInline): @@ -32,7 +32,7 @@ def has_add_permission(self, request): def default_value(self, obj): """ Get default values from related adaptor concrete class instance """ - init_value = getattr(obj.content_object, 'crypt_%s' % obj.name) + init_value = getattr(obj.content_object, 'crypt') if init_value is not None: return "*" * len(init_value) if init_value is not None else '-' if hasattr(init_value, '__iter__'): diff --git a/waves/core/admin/base.py b/waves/wcore/admin/base.py similarity index 100% rename from waves/core/admin/base.py rename to waves/wcore/admin/base.py diff --git a/waves/core/admin/forms/__init__.py b/waves/wcore/admin/forms/__init__.py similarity index 100% rename from waves/core/admin/forms/__init__.py rename to waves/wcore/admin/forms/__init__.py diff --git a/waves/core/admin/forms/adaptors.py b/waves/wcore/admin/forms/adaptors.py similarity index 90% rename from waves/core/admin/forms/adaptors.py rename to waves/wcore/admin/forms/adaptors.py index 8067339..6ec1359 100644 --- a/waves/core/admin/forms/adaptors.py +++ b/waves/wcore/admin/forms/adaptors.py @@ -2,8 +2,8 @@ from django.forms import ModelForm, ChoiceField, PasswordInput -from waves.core.adaptors.adaptor import JobAdaptor -from waves.core.models.adaptors import AdaptorInitParam +from waves.wcore.adaptors.adaptor import JobAdaptor +from waves.wcore.models.adaptors import AdaptorInitParam class AdaptorInitParamForm(ModelForm): @@ -35,8 +35,8 @@ def __init__(self, **kwargs): self.fields['value'].widget.attrs['readonly'] = True self.fields['prevent_override'].widget.attrs['checked'] = True self.fields['prevent_override'].widget.attrs['readonly'] = True - if instance.crypt: - self.fields['value'].widget = PasswordInput(render_value=instance.value, + if instance.name == "password": + self.fields['value'].widget = PasswordInput(render_value="", attrs={'autocomplete': 'new-password'}) except ValueError: pass diff --git a/waves/core/admin/forms/jobs.py b/waves/wcore/admin/forms/jobs.py similarity index 96% rename from waves/core/admin/forms/jobs.py rename to waves/wcore/admin/forms/jobs.py index 883847c..ed8510c 100644 --- a/waves/core/admin/forms/jobs.py +++ b/waves/wcore/admin/forms/jobs.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django import forms from django.forms import widgets -from waves.core.models import JobInput, JobOutput, Job +from waves.wcore.models import JobInput, JobOutput, Job __all__ = ['JobInputForm', 'JobOutputForm', 'JobForm'] diff --git a/waves/core/admin/forms/runners.py b/waves/wcore/admin/forms/runners.py similarity index 89% rename from waves/core/admin/forms/runners.py rename to waves/wcore/admin/forms/runners.py index a2d5fde..f9c1d0e 100644 --- a/waves/core/admin/forms/runners.py +++ b/waves/wcore/admin/forms/runners.py @@ -4,17 +4,17 @@ from __future__ import unicode_literals from django.forms import ModelForm, CheckboxInput, BooleanField, ChoiceField, HiddenInput -from waves.core.models import Runner +from waves.wcore.models import Runner __all__ = ['RunnerForm'] def get_runners_list(): """ - Retrieve enabled waves.core.adaptors list from waves settings env file + Retrieve enabled waves.wcore.adaptors list from waves settings env file :return: a list of Tuple 'value'/'label' """ - from waves.core.adaptors.loader import AdaptorLoader + from waves.wcore.adaptors.loader import AdaptorLoader adaptors = AdaptorLoader.get_adaptors() grp_impls = {'': 'Select a environment...'} for adaptor in adaptors: diff --git a/waves/core/admin/forms/services.py b/waves/wcore/admin/forms/services.py similarity index 94% rename from waves/core/admin/forms/services.py rename to waves/wcore/admin/forms/services.py index a82f09f..7a53dbf 100644 --- a/waves/core/admin/forms/services.py +++ b/waves/wcore/admin/forms/services.py @@ -7,11 +7,11 @@ from crispy_forms.layout import Layout, Field from django import forms -from waves.core.models.inputs import * -from waves.core.models.runners import Runner -from waves.core.models import Service -from waves.core.models.submissions import Submission, SubmissionOutput, SubmissionExitCode -from waves.core.settings import waves_settings as config +from waves.wcore.models.inputs import * +from waves.wcore.models.runners import Runner +from waves.wcore.models import Service +from waves.wcore.models.submissions import Submission, SubmissionOutput, SubmissionExitCode +from waves.wcore.settings import waves_settings as config @@ -126,6 +126,7 @@ class Meta: model = Submission exclude = ['order'] + runner = forms.ModelChoiceField(queryset=Runner.objects.all(), empty_label="Use Service Config") diff --git a/waves/core/admin/inputs.py b/waves/wcore/admin/inputs.py similarity index 98% rename from waves/core/admin/inputs.py rename to waves/wcore/admin/inputs.py index e7dc11c..83979e7 100644 --- a/waves/core/admin/inputs.py +++ b/waves/wcore/admin/inputs.py @@ -11,9 +11,9 @@ from django.utils import six from polymorphic.admin import PolymorphicChildModelFilter, PolymorphicChildModelAdmin, PolymorphicParentModelAdmin -from waves.core.admin.submissions import FileInputSampleInline -from waves.core.models.inputs import * -from waves.core.models.submissions import Submission +from waves.wcore.admin.submissions import FileInputSampleInline +from waves.wcore.models.inputs import * +from waves.wcore.models.submissions import Submission __all__ = ['AllParamModelAdmin'] diff --git a/waves/core/admin/jobs.py b/waves/wcore/admin/jobs.py similarity index 92% rename from waves/core/admin/jobs.py rename to waves/wcore/admin/jobs.py index 06c20aa..403116f 100644 --- a/waves/core/admin/jobs.py +++ b/waves/wcore/admin/jobs.py @@ -1,13 +1,13 @@ from __future__ import unicode_literals -import waves.core.adaptors.const +import waves.wcore.adaptors.const from django.contrib import admin, messages from django.contrib.admin import TabularInline from django.db.models import Q -from waves.core.admin.base import WavesModelAdmin -from waves.core.admin.forms.jobs import JobInputForm, JobOutputForm, JobForm -from waves.core.models.history import JobHistory -from waves.core.models.jobs import * +from waves.wcore.admin.base import WavesModelAdmin +from waves.wcore.admin.forms.jobs import JobInputForm, JobOutputForm, JobForm +from waves.wcore.models.history import JobHistory +from waves.wcore.models.jobs import * __all__ = ['JobAdmin'] @@ -182,12 +182,12 @@ def __init__(self, model, admin_site): def suit_row_attributes(self, obj, request): css_class = { - waves.core.adaptors.const.JOB_COMPLETED: 'success', - waves.core.adaptors.const.JOB_RUNNING: 'warning', - waves.core.adaptors.const.JOB_ERROR: 'error', - waves.core.adaptors.const.JOB_CANCELLED: 'error', - waves.core.adaptors.const.JOB_PREPARED: 'info', - waves.core.adaptors.const.JOB_CREATED: 'info', + waves.wcore.adaptors.const.JOB_COMPLETED: 'success', + waves.wcore.adaptors.const.JOB_RUNNING: 'warning', + waves.wcore.adaptors.const.JOB_ERROR: 'error', + waves.wcore.adaptors.const.JOB_CANCELLED: 'error', + waves.wcore.adaptors.const.JOB_PREPARED: 'info', + waves.wcore.adaptors.const.JOB_CREATED: 'info', }.get(obj.status) if css_class: return {'class': css_class} diff --git a/waves/core/admin/runners.py b/waves/wcore/admin/runners.py similarity index 91% rename from waves/core/admin/runners.py rename to waves/wcore/admin/runners.py index 9927ab8..f1c6f1d 100644 --- a/waves/core/admin/runners.py +++ b/waves/wcore/admin/runners.py @@ -8,10 +8,10 @@ from django.contrib.admin.options import IS_POPUP_VAR from base import ExportInMassMixin -from waves.core.admin.adaptors import RunnerParamInline -from waves.core.admin.base import WavesModelAdmin, DynamicInlinesAdmin -from waves.core.admin.forms.runners import RunnerForm -from waves.core.models import Runner, Service, Submission +from waves.wcore.admin.adaptors import RunnerParamInline +from waves.wcore.admin.base import WavesModelAdmin, DynamicInlinesAdmin +from waves.wcore.admin.forms.runners import RunnerForm +from waves.wcore.models import Runner, Service, Submission __all__ = ['RunnerAdmin'] @@ -78,6 +78,7 @@ class RunnerAdmin(ExportInMassMixin, WavesModelAdmin, DynamicInlinesAdmin): 'classes': ('collapse grp-collapse grp-closed',), }), ] + change_form_template = "admin/waves/runner/change_form.html" def get_inlines(self, request, obj=None): _inlines = [ @@ -85,9 +86,9 @@ def get_inlines(self, request, obj=None): ] if obj and IS_POPUP_VAR not in request.GET: self.inlines = _inlines - if obj.core_submission_runs.count() > 0: + if obj.wcore_submission_runs.count() > 0: self.inlines.append(SubmissionRunInline) - if obj.core_service_runs.count() > 0: + if obj.wcore_service_runs.count() > 0: self.inlines.append(ServiceRunInline) elif IS_POPUP_VAR not in request.GET: self.inlines = [_inlines[0], ] diff --git a/waves/core/admin/services.py b/waves/wcore/admin/services.py similarity index 93% rename from waves/core/admin/services.py rename to waves/wcore/admin/services.py index 142598a..d33689c 100644 --- a/waves/core/admin/services.py +++ b/waves/wcore/admin/services.py @@ -3,11 +3,11 @@ from django.contrib.auth import get_user_model from base import ExportInMassMixin, DuplicateInMassMixin, MarkPublicInMassMixin -from waves.core.admin.adaptors import ServiceRunnerParamInLine -from waves.core.admin.submissions import * -from waves.core.models.services import * -from waves.core.models.submissions import * -from waves.core.utils import url_to_edit_object +from waves.wcore.admin.adaptors import ServiceRunnerParamInLine +from waves.wcore.admin.submissions import * +from waves.wcore.models.services import * +from waves.wcore.models.submissions import * +from waves.wcore.utils import url_to_edit_object User = get_user_model() @@ -47,6 +47,7 @@ class Media: list_display = ('name', 'api_name', 'runner', 'version', 'status', 'created_by', 'submission_link') list_filter = ('status', 'name', 'created_by') + change_form_template = "admin/waves/service/change_form.html" fieldsets = [ ('General', { diff --git a/waves/core/admin/submissions.py b/waves/wcore/admin/submissions.py similarity index 93% rename from waves/core/admin/submissions.py rename to waves/wcore/admin/submissions.py index 7b0a6be..cee1dab 100644 --- a/waves/core/admin/submissions.py +++ b/waves/wcore/admin/submissions.py @@ -5,14 +5,14 @@ from django.utils.safestring import mark_safe from polymorphic.admin import PolymorphicInlineSupportMixin -from waves.core.admin.adaptors import SubmissionRunnerParamInLine -from waves.core.admin.base import WavesModelAdmin, DynamicInlinesAdmin -from waves.core.admin.forms.services import * -from waves.core.compat import CompactInline, organize_input_class -from waves.core.models.inputs import * -from waves.core.models.samples import * -from waves.core.models.submissions import * -from waves.core.utils import url_to_edit_object +from waves.wcore.admin.adaptors import SubmissionRunnerParamInLine +from waves.wcore.admin.base import WavesModelAdmin, DynamicInlinesAdmin +from waves.wcore.admin.forms.services import * +from waves.wcore.compat import CompactInline, organize_input_class +from waves.wcore.models.inputs import * +from waves.wcore.models.samples import * +from waves.wcore.models.submissions import * +from waves.wcore.utils import url_to_edit_object from django.utils.module_loading import import_string @@ -112,6 +112,7 @@ class ServiceSubmissionAdmin(PolymorphicInlineSupportMixin, WavesModelAdmin, Dyn }), ] show_full_result_count = True + change_form_template = "admin/waves/submission/change_form.html" def get_inlines(self, request, obj=None): OrganizeInputInline = import_string(organize_input_class) diff --git a/waves/core/admin/views/__init__.py b/waves/wcore/admin/views/__init__.py similarity index 100% rename from waves/core/admin/views/__init__.py rename to waves/wcore/admin/views/__init__.py diff --git a/waves/core/admin/views/export.py b/waves/wcore/admin/views/export.py similarity index 85% rename from waves/core/admin/views/export.py rename to waves/wcore/admin/views/export.py index 135543f..cceb578 100644 --- a/waves/core/admin/views/export.py +++ b/waves/wcore/admin/views/export.py @@ -5,9 +5,9 @@ from django.contrib import messages from django.shortcuts import redirect -from waves.core.settings import waves_settings as config -from waves.core.models.base import ExportAbleMixin -from waves.core.views.files import DownloadFileView +from waves.wcore.settings import waves_settings as config +from waves.wcore.models.base import ExportAbleMixin +from waves.wcore.views.files import DownloadFileView class ModelExportView(DownloadFileView): @@ -26,7 +26,7 @@ def get_context_data(self, **kwargs): return context def get(self, request, *args, **kwargs): - from waves.core.models.base import ExportError + from waves.wcore.models.base import ExportError try: return super(ModelExportView, self).get(request, *args, **kwargs) except ExportError as e: diff --git a/waves/core/admin/views/job_tool.py b/waves/wcore/admin/views/job_tool.py similarity index 95% rename from waves/core/admin/views/job_tool.py rename to waves/wcore/admin/views/job_tool.py index 4447afa..548258c 100644 --- a/waves/core/admin/views/job_tool.py +++ b/waves/wcore/admin/views/job_tool.py @@ -6,8 +6,8 @@ from django.shortcuts import redirect from django.core.urlresolvers import reverse from django.contrib import messages -from waves.core.exceptions import * -from waves.core.models import Job +from waves.wcore.exceptions import * +from waves.wcore.models import Job class JobCancelView(View): diff --git a/waves/core/admin/views/json_view.py b/waves/wcore/admin/views/json_view.py similarity index 100% rename from waves/core/admin/views/json_view.py rename to waves/wcore/admin/views/json_view.py diff --git a/waves/core/admin/views/runner_tool.py b/waves/wcore/admin/views/runner_tool.py similarity index 95% rename from waves/core/admin/views/runner_tool.py rename to waves/wcore/admin/views/runner_tool.py index c457267..6c9879a 100644 --- a/waves/core/admin/views/runner_tool.py +++ b/waves/wcore/admin/views/runner_tool.py @@ -11,11 +11,11 @@ from django.http import JsonResponse from django.views.generic import FormView from json_view import JSONDetailView -from waves.core.adaptors.exceptions import AdaptorConnectException -from waves.core.exceptions import * -from waves.core.admin.forms.services import ImportForm -from waves.core.models import Runner, Submission, Service -from waves.core.admin.views.export import ModelExportView +from waves.wcore.adaptors.exceptions import AdaptorConnectException +from waves.wcore.exceptions import * +from waves.wcore.admin.forms.services import ImportForm +from waves.wcore.models import Runner, Submission, Service +from waves.wcore.admin.views.export import ModelExportView class RunnerImportToolView(FormView): diff --git a/waves/core/admin/views/service_tool.py b/waves/wcore/admin/views/service_tool.py similarity index 92% rename from waves/core/admin/views/service_tool.py rename to waves/wcore/admin/views/service_tool.py index a4c6c15..72da2ea 100644 --- a/waves/core/admin/views/service_tool.py +++ b/waves/wcore/admin/views/service_tool.py @@ -8,9 +8,9 @@ from django.contrib import messages from django.core.urlresolvers import reverse -from waves.core.admin.views.export import ModelExportView -from waves.core.models import Service -from waves.core.admin.views.runner_tool import RunnerImportToolView, ObjectDoesNotExist, RunnerTestConnectionView +from waves.wcore.admin.views.export import ModelExportView +from waves.wcore.models import Service +from waves.wcore.admin.views.runner_tool import RunnerImportToolView, ObjectDoesNotExist, RunnerTestConnectionView diff --git a/waves/core/api/__init__.py b/waves/wcore/api/__init__.py similarity index 66% rename from waves/core/api/__init__.py rename to waves/wcore/api/__init__.py index 7749c4b..c867c18 100644 --- a/waves/core/api/__init__.py +++ b/waves/wcore/api/__init__.py @@ -1,4 +1,4 @@ """ import current version for api -Allow users to only use from waves.core.api""" +Allow users to only use from waves.wcore.api""" import v2.serializers as serializers import v2.views as views diff --git a/waves/core/api/share.py b/waves/wcore/api/share.py similarity index 100% rename from waves/core/api/share.py rename to waves/wcore/api/share.py diff --git a/waves/core/api/v1/__init__.py b/waves/wcore/api/v1/__init__.py similarity index 100% rename from waves/core/api/v1/__init__.py rename to waves/wcore/api/v1/__init__.py diff --git a/waves/core/api/v1/serializers/__init__.py b/waves/wcore/api/v1/serializers/__init__.py similarity index 100% rename from waves/core/api/v1/serializers/__init__.py rename to waves/wcore/api/v1/serializers/__init__.py diff --git a/waves/core/api/v1/serializers/fields.py b/waves/wcore/api/v1/serializers/fields.py similarity index 100% rename from waves/core/api/v1/serializers/fields.py rename to waves/wcore/api/v1/serializers/fields.py diff --git a/waves/core/api/v1/serializers/inputs.py b/waves/wcore/api/v1/serializers/inputs.py similarity index 97% rename from waves/core/api/v1/serializers/inputs.py rename to waves/wcore/api/v1/serializers/inputs.py index dc5aee0..af4ab24 100644 --- a/waves/core/api/v1/serializers/inputs.py +++ b/waves/wcore/api/v1/serializers/inputs.py @@ -3,8 +3,8 @@ from rest_framework import serializers from rest_framework.fields import empty -from waves.core.models.inputs import * -from waves.core.api.share import DynamicFieldsModelSerializer, RecursiveField +from waves.wcore.models.inputs import * +from waves.wcore.api.share import DynamicFieldsModelSerializer, RecursiveField from .fields import ListElementField diff --git a/waves/core/api/v1/serializers/jobs.py b/waves/wcore/api/v1/serializers/jobs.py similarity index 97% rename from waves/core/api/v1/serializers/jobs.py rename to waves/wcore/api/v1/serializers/jobs.py index 82bd252..5538be9 100644 --- a/waves/core/api/v1/serializers/jobs.py +++ b/waves/wcore/api/v1/serializers/jobs.py @@ -10,8 +10,8 @@ from rest_framework import serializers from rest_framework.reverse import reverse -from waves.core.api.share import DynamicFieldsModelSerializer -from waves.core.models import JobHistory, JobInput, Job, JobOutput, Service +from waves.wcore.api.share import DynamicFieldsModelSerializer +from waves.wcore.models import JobHistory, JobInput, Job, JobOutput, Service diff --git a/waves/core/api/v1/serializers/services.py b/waves/wcore/api/v1/serializers/services.py similarity index 96% rename from waves/core/api/v1/serializers/services.py rename to waves/wcore/api/v1/serializers/services.py index a3542b1..09ecd01 100644 --- a/waves/core/api/v1/serializers/services.py +++ b/waves/wcore/api/v1/serializers/services.py @@ -6,10 +6,10 @@ from django.contrib.staticfiles.storage import staticfiles_storage from rest_framework.reverse import reverse as reverse -from waves.core.api.v1.serializers.inputs import * -from waves.core.models import SubmissionOutput as ServiceOutput, Service, \ +from waves.wcore.api.v1.serializers.inputs import * +from waves.wcore.models import SubmissionOutput as ServiceOutput, Service, \ Submission as ServiceSubmission -from waves.core.settings import waves_settings +from waves.wcore.settings import waves_settings __all__ = ['InputSerializer', 'InputSerializer', 'OutputSerializer', 'ServiceSerializer', 'ServiceFormSerializer', 'ServiceSubmissionSerializer'] @@ -135,7 +135,7 @@ def get_js(self, obj): def get_form(self, obj): """ Create the form and return its content""" - from waves.core.forms.services import ServiceSubmissionForm + from waves.wcore.forms.services import ServiceSubmissionForm from django.template import RequestContext import re form = ServiceSubmissionForm(instance=self.instance, parent=self.instance.service) diff --git a/waves/core/api/v2/urls.py b/waves/wcore/api/v1/urls.py similarity index 94% rename from waves/core/api/v2/urls.py rename to waves/wcore/api/v1/urls.py index f61555d..7f1258c 100644 --- a/waves/core/api/v2/urls.py +++ b/waves/wcore/api/v1/urls.py @@ -4,7 +4,7 @@ from rest_framework import routers from views import jobs, services -from waves.core.views.jobs import JobOutputView, JobInputView +from waves.wcore.views.jobs import JobOutputView, JobInputView # API router setup router = routers.DefaultRouter() diff --git a/waves/core/api/v1/views/__init__.py b/waves/wcore/api/v1/views/__init__.py similarity index 100% rename from waves/core/api/v1/views/__init__.py rename to waves/wcore/api/v1/views/__init__.py diff --git a/waves/core/api/v1/views/jobs.py b/waves/wcore/api/v1/views/jobs.py similarity index 92% rename from waves/core/api/v1/views/jobs.py rename to waves/wcore/api/v1/views/jobs.py index 7cbb3a4..64803e0 100644 --- a/waves/core/api/v1/views/jobs.py +++ b/waves/wcore/api/v1/views/jobs.py @@ -8,11 +8,11 @@ from rest_framework.decorators import detail_route from rest_framework.parsers import MultiPartParser, JSONParser from rest_framework.response import Response -from waves.core.api.v1.serializers.jobs import JobSerializer, JobHistoryDetailSerializer, JobInputDetailSerializer, \ +from waves.wcore.api.v1.serializers.jobs import JobSerializer, JobHistoryDetailSerializer, JobInputDetailSerializer, \ JobOutputDetailSerializer -from waves.core.exceptions import WavesException -from waves.core.models import Job -from waves.core.api.views.base import WavesAuthenticatedView +from waves.wcore.exceptions import WavesException +from waves.wcore.models import Job +from waves.wcore.api.views.base import WavesAuthenticatedView logger = logging.getLogger(__name__) diff --git a/waves/core/api/v1/views/services.py b/waves/wcore/api/v1/views/services.py similarity index 94% rename from waves/core/api/v1/views/services.py rename to waves/wcore/api/v1/views/services.py index 6c9ea92..2be397a 100644 --- a/waves/core/api/v1/views/services.py +++ b/waves/wcore/api/v1/views/services.py @@ -12,12 +12,12 @@ from rest_framework.permissions import AllowAny from rest_framework.response import Response -from waves.core.api.v1.serializers import ServiceSerializer, JobSerializer, ServiceFormSerializer, \ +from waves.wcore.api.v1.serializers import ServiceSerializer, JobSerializer, ServiceFormSerializer, \ ServiceSubmissionSerializer -from waves.core.api.views.base import WavesAuthenticatedView -from waves.core.exceptions.jobs import JobException -from waves.core.models import Job, Service -from waves.core.models.submissions import Submission as ServiceSubmission +from waves.wcore.api.views.base import WavesAuthenticatedView +from waves.wcore.exceptions.jobs import JobException +from waves.wcore.models import Job, Service +from waves.wcore.models.submissions import Submission as ServiceSubmission logger = logging.getLogger(__name__) diff --git a/waves/core/api/v2/__init__.py b/waves/wcore/api/v2/__init__.py similarity index 100% rename from waves/core/api/v2/__init__.py rename to waves/wcore/api/v2/__init__.py diff --git a/waves/core/api/v2/serializers/__init__.py b/waves/wcore/api/v2/serializers/__init__.py similarity index 100% rename from waves/core/api/v2/serializers/__init__.py rename to waves/wcore/api/v2/serializers/__init__.py diff --git a/waves/core/api/v2/serializers/fields.py b/waves/wcore/api/v2/serializers/fields.py similarity index 100% rename from waves/core/api/v2/serializers/fields.py rename to waves/wcore/api/v2/serializers/fields.py diff --git a/waves/core/api/v2/serializers/inputs.py b/waves/wcore/api/v2/serializers/inputs.py similarity index 97% rename from waves/core/api/v2/serializers/inputs.py rename to waves/wcore/api/v2/serializers/inputs.py index dc5f441..b563a3c 100644 --- a/waves/core/api/v2/serializers/inputs.py +++ b/waves/wcore/api/v2/serializers/inputs.py @@ -3,8 +3,8 @@ from rest_framework import serializers from rest_framework.fields import empty -from waves.core.api.share import DynamicFieldsModelSerializer, RecursiveField -from waves.core.models.inputs import * +from waves.wcore.api.share import DynamicFieldsModelSerializer, RecursiveField +from waves.wcore.models.inputs import * from .fields import CommaSeparatedListField, ListElementField diff --git a/waves/core/api/v2/serializers/jobs.py b/waves/wcore/api/v2/serializers/jobs.py similarity index 96% rename from waves/core/api/v2/serializers/jobs.py rename to waves/wcore/api/v2/serializers/jobs.py index 0d3e1a6..17c9b28 100644 --- a/waves/core/api/v2/serializers/jobs.py +++ b/waves/wcore/api/v2/serializers/jobs.py @@ -9,9 +9,9 @@ from rest_framework import serializers from rest_framework.reverse import reverse -from waves.core.api.share import DynamicFieldsModelSerializer -from waves.core.models import JobInput, Job, JobOutput, AParam, Service -from waves.core.models.history import JobHistory +from waves.wcore.api.share import DynamicFieldsModelSerializer +from waves.wcore.models import JobInput, Job, JobOutput, AParam, Service +from waves.wcore.models.history import JobHistory User = get_user_model() @@ -128,7 +128,7 @@ def file_get_content(self, file_path): def to_representation(self, instance): """ Representation for a output """ - from waves.core.utils import normalize_value + from waves.wcore.utils import normalize_value to_repr = {} for output in instance: to_repr[normalize_value(output.get_api_name())] = { diff --git a/waves/core/api/v2/serializers/services.py b/waves/wcore/api/v2/serializers/services.py similarity index 95% rename from waves/core/api/v2/serializers/services.py rename to waves/wcore/api/v2/serializers/services.py index 553f274..adb50e4 100644 --- a/waves/core/api/v2/serializers/services.py +++ b/waves/wcore/api/v2/serializers/services.py @@ -5,10 +5,10 @@ from rest_framework import serializers from rest_framework.reverse import reverse as reverse -from waves.core.api.share import DynamicFieldsModelSerializer -from waves.core.models.services import * -from waves.core.models.submissions import * -from waves.core.settings import waves_settings +from waves.wcore.api.share import DynamicFieldsModelSerializer +from waves.wcore.models.services import * +from waves.wcore.models.submissions import * +from waves.wcore.settings import waves_settings from .inputs import InputSerializer __all__ = ['OutputSerializer', 'ServiceSerializer', 'ServiceFormSerializer', 'ServiceSubmissionSerializer'] @@ -117,7 +117,7 @@ def get_js(self, obj): def get_form(self, obj): """ Create the form and return its content""" - from waves.core.forms.services import ServiceSubmissionForm + from waves.wcore.forms.services import ServiceSubmissionForm from django.template import RequestContext import re form = ServiceSubmissionForm(instance=self.instance, parent=self.instance.service) diff --git a/waves/core/api/v1/urls.py b/waves/wcore/api/v2/urls.py similarity index 94% rename from waves/core/api/v1/urls.py rename to waves/wcore/api/v2/urls.py index f61555d..7f1258c 100644 --- a/waves/core/api/v1/urls.py +++ b/waves/wcore/api/v2/urls.py @@ -4,7 +4,7 @@ from rest_framework import routers from views import jobs, services -from waves.core.views.jobs import JobOutputView, JobInputView +from waves.wcore.views.jobs import JobOutputView, JobInputView # API router setup router = routers.DefaultRouter() diff --git a/waves/core/api/v2/views/__init__.py b/waves/wcore/api/v2/views/__init__.py similarity index 100% rename from waves/core/api/v2/views/__init__.py rename to waves/wcore/api/v2/views/__init__.py diff --git a/waves/core/api/v2/views/jobs.py b/waves/wcore/api/v2/views/jobs.py similarity index 92% rename from waves/core/api/v2/views/jobs.py rename to waves/wcore/api/v2/views/jobs.py index 8f47569..bf14896 100644 --- a/waves/core/api/v2/views/jobs.py +++ b/waves/wcore/api/v2/views/jobs.py @@ -7,10 +7,10 @@ from rest_framework.parsers import MultiPartParser, JSONParser from rest_framework.response import Response -from waves.core.api.views.base import WavesAuthenticatedView -from waves.core.exceptions import WavesException -from waves.core.models import Job -from waves.core.api.v2.serializers.jobs import JobSerializer, JobHistoryDetailSerializer, JobInputDetailSerializer, \ +from waves.wcore.api.views.base import WavesAuthenticatedView +from waves.wcore.exceptions import WavesException +from waves.wcore.models import Job +from waves.wcore.api.v2.serializers.jobs import JobSerializer, JobHistoryDetailSerializer, JobInputDetailSerializer, \ JobOutputDetailSerializer diff --git a/waves/core/api/v2/views/services.py b/waves/wcore/api/v2/views/services.py similarity index 91% rename from waves/core/api/v2/views/services.py rename to waves/wcore/api/v2/views/services.py index 3d8be07..f03b640 100644 --- a/waves/core/api/v2/views/services.py +++ b/waves/wcore/api/v2/views/services.py @@ -11,12 +11,12 @@ from rest_framework.exceptions import ValidationError as DRFValidationError from rest_framework.response import Response -from waves.core.api.v2.serializers.jobs import JobSerializer -from waves.core.api.v2.serializers.services import ServiceSerializer, ServiceFormSerializer, ServiceSubmissionSerializer -from waves.core.api.views.base import WavesAuthenticatedView -from waves.core.exceptions.jobs import JobException -from waves.core.models import Job, Service -from waves.core.models.submissions import Submission +from waves.wcore.api.v2.serializers.jobs import JobSerializer +from waves.wcore.api.v2.serializers.services import ServiceSerializer, ServiceFormSerializer, ServiceSubmissionSerializer +from waves.wcore.api.views.base import WavesAuthenticatedView +from waves.wcore.exceptions.jobs import JobException +from waves.wcore.models import Job, Service +from waves.wcore.models.submissions import Submission logger = logging.getLogger(__name__) @@ -104,7 +104,7 @@ def post(self, request, *args, **kwargs): ass_email = request.data.pop('email', None) try: request.data.pop('api_key', None) - from waves.core.api.v2.serializers.jobs import JobCreateSerializer + from waves.wcore.api.v2.serializers.jobs import JobCreateSerializer from django.db.models import Q job = Job.objects.create_from_submission(submission=service_submission, email_to=ass_email, submitted_inputs=request.data, user=request.user) diff --git a/waves/core/api/views/__init__.py b/waves/wcore/api/views/__init__.py similarity index 100% rename from waves/core/api/views/__init__.py rename to waves/wcore/api/views/__init__.py diff --git a/waves/core/api/views/base.py b/waves/wcore/api/views/base.py similarity index 100% rename from waves/core/api/views/base.py rename to waves/wcore/api/views/base.py diff --git a/waves/core/apps.py b/waves/wcore/apps.py similarity index 85% rename from waves/core/apps.py rename to waves/wcore/apps.py index 9dbbd7e..89762f5 100644 --- a/waves/core/apps.py +++ b/waves/wcore/apps.py @@ -13,9 +13,8 @@ class WavesConfig(AppConfig): """ WAVES main application AppConfig, add signals for waves_webapp """ - name = "waves.core" + name = "waves.wcore" verbose_name = 'WAVES CORE ' - path = dirname(__file__) def ready(self): """ @@ -23,11 +22,11 @@ def ready(self): Just import waves signals :return: None """ - import waves.core.signals + import waves.wcore.signals @register() -def check_waves_config(app_configs=('waves'), **kwargs): +def check_waves_config(app_configs=('waves.wcore'), **kwargs): """ WAVES configuration check up, added to classic ``manage.py check`` Django command @@ -40,7 +39,7 @@ def check_waves_config(app_configs=('waves'), **kwargs): """ errors = [] # check values for SECRET_KEY - from waves.core.settings import waves_settings + from waves.wcore.settings import waves_settings if len(waves_settings.SECRET_KEY) != 32: errors.append( Error( @@ -51,7 +50,7 @@ def check_waves_config(app_configs=('waves'), **kwargs): '...' '}', obj=waves_settings, - id='waves.core.E002', + id='waves.wcore.E002', ) ) elif len(waves_settings.ADAPTORS_CLASSES) == 0: @@ -60,7 +59,7 @@ def check_waves_config(app_configs=('waves'), **kwargs): 'You set ADAPTORS_CLASSES but empty, WAVES needs ADAPTORS tu run JOB', hint='Either remove your empty entry or setup your classes', obj=waves_settings, - id='waves.core.E003', + id='waves.wcore.E003', ) ) return errors diff --git a/waves/core/authentication/__init__.py b/waves/wcore/authentication/__init__.py similarity index 100% rename from waves/core/authentication/__init__.py rename to waves/wcore/authentication/__init__.py diff --git a/waves/core/authentication/key.py b/waves/wcore/authentication/key.py similarity index 100% rename from waves/core/authentication/key.py rename to waves/wcore/authentication/key.py diff --git a/waves/core/commands/__init__.py b/waves/wcore/commands/__init__.py similarity index 89% rename from waves/core/commands/__init__.py rename to waves/wcore/commands/__init__.py index b9a9f4c..458dc11 100644 --- a/waves/core/commands/__init__.py +++ b/waves/wcore/commands/__init__.py @@ -7,7 +7,7 @@ def get_commands_impl_list(): classes_list = [('', 'Select a implementation class...')] - module = import_module('waves.core.commands') + module = import_module('waves.wcore.commands') for cls in sorted(module.__all__): clazz = import_string(module.__name__ + '.' + cls) classes_list.append((clazz.__module__ + '.' + clazz .__name__, clazz.__name__)) diff --git a/waves/core/commands/command.py b/waves/wcore/commands/command.py similarity index 100% rename from waves/core/commands/command.py rename to waves/wcore/commands/command.py diff --git a/waves/core/compat/__init__.py b/waves/wcore/compat/__init__.py similarity index 86% rename from waves/core/compat/__init__.py rename to waves/wcore/compat/__init__.py index c03e54d..8de9dc3 100644 --- a/waves/core/compat/__init__.py +++ b/waves/wcore/compat/__init__.py @@ -12,9 +12,9 @@ if 'jet' in settings.INSTALLED_APPS: from compat_jet import * - organize_input_class = 'waves.core.compat.submissions_jet.OrganizeInputInline' + organize_input_class = 'waves.wcore.compat.submissions_jet.OrganizeInputInline' else: - organize_input_class = 'waves.core.compat.submissions_std.OrganizeInputInline' + organize_input_class = 'waves.wcore.compat.submissions_std.OrganizeInputInline' class CompactInline(StackedInline): """ Inherit base class """ diff --git a/waves/core/compat/compat_adminsortable.py b/waves/wcore/compat/compat_adminsortable.py similarity index 100% rename from waves/core/compat/compat_adminsortable.py rename to waves/wcore/compat/compat_adminsortable.py diff --git a/waves/core/compat/compat_bootstrap_themes.py b/waves/wcore/compat/compat_bootstrap_themes.py similarity index 100% rename from waves/core/compat/compat_bootstrap_themes.py rename to waves/wcore/compat/compat_bootstrap_themes.py diff --git a/waves/core/compat/compat_ckeditor.py b/waves/wcore/compat/compat_ckeditor.py similarity index 100% rename from waves/core/compat/compat_ckeditor.py rename to waves/wcore/compat/compat_ckeditor.py diff --git a/waves/core/compat/compat_grappelli.py b/waves/wcore/compat/compat_grappelli.py similarity index 100% rename from waves/core/compat/compat_grappelli.py rename to waves/wcore/compat/compat_grappelli.py diff --git a/waves/core/compat/compat_jet.py b/waves/wcore/compat/compat_jet.py similarity index 100% rename from waves/core/compat/compat_jet.py rename to waves/wcore/compat/compat_jet.py diff --git a/waves/core/compat/submissions_jet.py b/waves/wcore/compat/submissions_jet.py similarity index 87% rename from waves/core/compat/submissions_jet.py rename to waves/wcore/compat/submissions_jet.py index 62d9104..d7a14b0 100644 --- a/waves/core/compat/submissions_jet.py +++ b/waves/wcore/compat/submissions_jet.py @@ -1,11 +1,11 @@ from __future__ import unicode_literals -from waves.core.compat import SortableInlineAdminMixin +from waves.wcore.compat import SortableInlineAdminMixin from django.contrib import admin from django.utils.safestring import mark_safe -from waves.core.admin.forms.services import InputInlineForm -from waves.core.models import AParam +from waves.wcore.admin.forms.services import InputInlineForm +from waves.wcore.models import AParam class OrganizeInputInline(SortableInlineAdminMixin, admin.TabularInline): diff --git a/waves/core/compat/submissions_std.py b/waves/wcore/compat/submissions_std.py similarity index 98% rename from waves/core/compat/submissions_std.py rename to waves/wcore/compat/submissions_std.py index 1e4968c..9e60791 100644 --- a/waves/core/compat/submissions_std.py +++ b/waves/wcore/compat/submissions_std.py @@ -3,7 +3,7 @@ from django import forms from polymorphic.admin import StackedPolymorphicInline -from waves.core.admin.submissions import * +from waves.wcore.admin.submissions import * class OrganizeInputForm(forms.ModelForm): diff --git a/waves/core/exceptions/__init__.py b/waves/wcore/exceptions/__init__.py similarity index 100% rename from waves/core/exceptions/__init__.py rename to waves/wcore/exceptions/__init__.py diff --git a/waves/core/exceptions/jobs.py b/waves/wcore/exceptions/jobs.py similarity index 97% rename from waves/core/exceptions/jobs.py rename to waves/wcore/exceptions/jobs.py index 7fa94cc..3063ffe 100644 --- a/waves/core/exceptions/jobs.py +++ b/waves/wcore/exceptions/jobs.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from waves.core.exceptions import WavesException +from waves.wcore.exceptions import WavesException __all__ = ['JobException', 'JobRunException', 'JobSubmissionException', 'JobCreateException', 'JobMissingMandatoryParam', 'JobInconsistentStateError', 'JobPrepareException'] diff --git a/waves/core/exceptions/runners.py b/waves/wcore/exceptions/runners.py similarity index 100% rename from waves/core/exceptions/runners.py rename to waves/wcore/exceptions/runners.py diff --git a/waves/core/forms/__init__.py b/waves/wcore/forms/__init__.py similarity index 100% rename from waves/core/forms/__init__.py rename to waves/wcore/forms/__init__.py diff --git a/waves/core/forms/services.py b/waves/wcore/forms/services.py similarity index 97% rename from waves/core/forms/services.py rename to waves/wcore/forms/services.py index cabaaf4..e244fb6 100644 --- a/waves/core/forms/services.py +++ b/waves/wcore/forms/services.py @@ -6,11 +6,11 @@ from django import forms from django.core.exceptions import ValidationError -from waves.core.forms.lib.crispy import FormHelper -from waves.core.models.inputs import * -from waves.core.models.samples import * -from waves.core.models.submissions import Submission -from waves.core.utils.validators import ServiceInputValidator +from waves.wcore.forms.lib.crispy import FormHelper +from waves.wcore.models.inputs import * +from waves.wcore.models.samples import * +from waves.wcore.models.submissions import Submission +from waves.wcore.utils.validators import ServiceInputValidator logger = logging.getLogger(__name__) diff --git a/waves/core/mails.py b/waves/wcore/mails.py similarity index 98% rename from waves/core/mails.py rename to waves/wcore/mails.py index dbf8c4a..fb3db5d 100644 --- a/waves/core/mails.py +++ b/waves/wcore/mails.py @@ -6,7 +6,7 @@ from django.core.mail import EmailMessage from django.template.loader import get_template -from waves.core.settings import waves_settings as config +from waves.wcore.settings import waves_settings as config logger = logging.getLogger(__name__) diff --git a/waves/core/management/__init__.py b/waves/wcore/management/__init__.py similarity index 100% rename from waves/core/management/__init__.py rename to waves/wcore/management/__init__.py diff --git a/waves/core/management/base.py b/waves/wcore/management/base.py similarity index 100% rename from waves/core/management/base.py rename to waves/wcore/management/base.py diff --git a/waves/core/management/command.py b/waves/wcore/management/command.py similarity index 91% rename from waves/core/management/command.py rename to waves/wcore/management/command.py index dc8d02f..658bc8c 100644 --- a/waves/core/management/command.py +++ b/waves/wcore/management/command.py @@ -8,14 +8,14 @@ import time from itertools import chain -import waves.core.adaptors.const -import waves.core.exceptions +import waves.wcore.adaptors.const +import waves.wcore.exceptions from django.core.management.base import BaseCommand, CommandError -from waves.core.adaptors.exceptions import AdaptorException -from waves.core.management.runner import DaemonRunner -from waves.core.models import Job -from waves.core.settings import waves_settings -from waves.core.settings import waves_settings as config +from waves.wcore.adaptors.exceptions import AdaptorException +from waves.wcore.management.runner import DaemonRunner +from waves.wcore.models import Job +from waves.wcore.settings import waves_settings +from waves.wcore.settings import waves_settings as config logger = logging.getLogger(__name__) @@ -147,7 +147,7 @@ def loop_callback(self): :return: Nothing """ jobs = Job.objects.prefetch_related('job_inputs'). \ - prefetch_related('outputs').filter(status__lt=waves.core.adaptors.const.JOB_TERMINATED) + prefetch_related('outputs').filter(_status__lt=waves.wcore.adaptors.const.JOB_TERMINATED) if jobs.count() > 0: logger.info("Starting queue process with %i(s) unfinished jobs", jobs.count()) for job in jobs: @@ -156,22 +156,22 @@ def loop_callback(self): try: job.check_send_mail() logger.debug("Launching Job %s (adaptor:%s)", job, job.adaptor) - if job.status == waves.core.adaptors.const.JOB_CREATED: + if job.status == waves.wcore.adaptors.const.JOB_CREATED: job.run_prepare() # runner.prepare_job(job=job) logger.debug("[PrepareJob] %s (adaptor:%s)", job, job.adaptor) - elif job.status == waves.core.adaptors.const.JOB_PREPARED: + elif job.status == waves.wcore.adaptors.const.JOB_PREPARED: logger.debug("[LaunchJob] %s (adaptor:%s)", job, job.adaptor) job.run_launch() # runner.run_job(job) - elif job.status == waves.core.adaptors.const.JOB_COMPLETED: + elif job.status == waves.wcore.adaptors.const.JOB_COMPLETED: # runner.job_run_details(job) job.run_results() logger.debug("[JobExecutionEnded] %s (adaptor:%s)", job.get_status_display(), job.adaptor) else: job.run_status() # runner.job_status(job) - except (waves.core.exceptions.WavesException, AdaptorException) as e: + except (waves.wcore.exceptions.WavesException, AdaptorException) as e: logger.error("Error Job %s (adaptor:%s-state:%s): %s", job, runner, job.get_status_display(), e.message) finally: diff --git a/waves/core/management/commands/__init__.py b/waves/wcore/management/commands/__init__.py similarity index 100% rename from waves/core/management/commands/__init__.py rename to waves/wcore/management/commands/__init__.py diff --git a/waves/core/management/commands/waves.py b/waves/wcore/management/commands/waves.py similarity index 100% rename from waves/core/management/commands/waves.py rename to waves/wcore/management/commands/waves.py diff --git a/waves/core/management/runner.py b/waves/wcore/management/runner.py similarity index 100% rename from waves/core/management/runner.py rename to waves/wcore/management/runner.py diff --git a/waves/core/management/subcommands.py b/waves/wcore/management/subcommands.py similarity index 97% rename from waves/core/management/subcommands.py rename to waves/wcore/management/subcommands.py index eea8064..f2cb990 100644 --- a/waves/core/management/subcommands.py +++ b/waves/wcore/management/subcommands.py @@ -20,10 +20,10 @@ ) from rest_framework.exceptions import ValidationError -from waves.core.settings import waves_settings as config -from waves.core.models import Job -from waves.core.models.serializers.services import ServiceSerializer -from waves.core.settings import waves_settings +from waves.wcore.settings import waves_settings as config +from waves.wcore.models import Job +from waves.wcore.models.serializers.services import ServiceSerializer +from waves.wcore.settings import waves_settings __all__ = ['CleanUpCommand', 'ImportCommand', 'DumpConfigCommand', 'ShowUrlsCommand'] @@ -206,7 +206,7 @@ def handle(self, *args, **options): :param options: Command options (expected none) """ from django.conf import settings - from waves.core.compat import config + from waves.wcore.compat import config var_dict = dir(config) self.stdout.write("************************************************") self.stdout.write('Current Django default database: %s' % settings.DATABASES['default']['ENGINE']) @@ -249,7 +249,7 @@ def show_urls(urls): print('-' * 100) for url in all_urls: - if 'waves.core.api' in url.lookup_str: + if 'waves.wcore.api' in url.lookup_str: # print('| {0.regex.pattern:20} | {0.name:20} | {0.lookup_str:20} | {0.default_args} |'.format(url)) print url print('-' * 100) diff --git a/waves/core/migrations/.gitkeep b/waves/wcore/migrations/.gitkeep similarity index 100% rename from waves/core/migrations/.gitkeep rename to waves/wcore/migrations/.gitkeep diff --git a/waves/core/migrations/__init__.py b/waves/wcore/migrations/__init__.py similarity index 100% rename from waves/core/migrations/__init__.py rename to waves/wcore/migrations/__init__.py diff --git a/waves/core/models/__init__.py b/waves/wcore/models/__init__.py similarity index 57% rename from waves/core/models/__init__.py rename to waves/wcore/models/__init__.py index 8c41790..ed9b2fb 100644 --- a/waves/core/models/__init__.py +++ b/waves/wcore/models/__init__.py @@ -4,17 +4,17 @@ from django.apps import apps as django_apps from django.core.exceptions import ImproperlyConfigured -from waves.core.settings import waves_settings -from waves.core.models.adaptors import * +from waves.wcore.settings import waves_settings +from waves.wcore.models.adaptors import * # Automate sub module import -from waves.core.models.base import * -from waves.core.models.history import JobHistory -from waves.core.models.inputs import * -from waves.core.models.jobs import * -from waves.core.models.runners import * -from waves.core.models.samples import * -from waves.core.models.services import * -from waves.core.models.submissions import * +from waves.wcore.models.base import * +from waves.wcore.models.history import JobHistory +from waves.wcore.models.inputs import * +from waves.wcore.models.jobs import * +from waves.wcore.models.runners import * +from waves.wcore.models.samples import * +from waves.wcore.models.services import * +from waves.wcore.models.submissions import * """ List of different constants used for models @@ -31,11 +31,7 @@ def get_service_model(): """ try: # (self, app_label, model_name=None, - model = django_apps.get_model(app_label='waves.core', - model_name='Service', require_ready=False) - print "model", model - - return django_apps.get_model(app_label='waves.core', + return django_apps.get_model(app_label='waves.wcore', model_name='Service', require_ready=False) except ValueError: raise ImproperlyConfigured("SERVICE_MODEL must be of the form 'app_label.model_name'") diff --git a/waves/core/models/adaptors.py b/waves/wcore/models/adaptors.py similarity index 94% rename from waves/core/models/adaptors.py rename to waves/wcore/models/adaptors.py index 2597865..b46e205 100644 --- a/waves/core/models/adaptors.py +++ b/waves/wcore/models/adaptors.py @@ -10,8 +10,8 @@ from django.db import models from django.utils.module_loading import import_string -from waves.core.models.base import WavesBaseModel -from waves.core.utils.encrypt import Encrypt +from waves.wcore.models.base import WavesBaseModel +from waves.wcore.utils.encrypt import Encrypt logger = logging.getLogger(__name__) __all__ = ['AdaptorInitParam', 'HasRunnerParamsMixin', 'HasAdaptorClazzMixin'] @@ -26,7 +26,6 @@ class Meta: verbose_name_plural = "Init params" db_table = "waves_adaptor_init_param" - _value = None _override = None name = models.CharField('Name', max_length=100, blank=True, null=True, help_text='Param name') @@ -52,15 +51,12 @@ def __init__(self, *args, **kwargs): def from_db(cls, db, field_names, values): """ Decrypt encoded value if needed for params """ instance = super(AdaptorInitParam, cls).from_db(db, field_names, values) - if instance.crypt and instance.value: + if instance.name == "password" and instance.value: instance.value = Encrypt.decrypt(instance.value) instance._value = instance.value instance._override = instance.prevent_override return instance - def save(self, *args, **kwargs): - super(AdaptorInitParam, self).save(*args, **kwargs) - @property def config_changed(self): return self._value != self.value or self._override != self.prevent_override @@ -71,6 +67,7 @@ class HasAdaptorClazzMixin(WavesBaseModel): AdaptorClazzMixin models class has a associated concrete adaptor class element, where setup params wan be set in AdaptorInitParams models instance. """ + class Meta: abstract = True @@ -90,7 +87,7 @@ def set_run_params_defaults(self): current_defaults = self.run_params [adaptors_defaults.pop(k, None) for k in current_defaults] for name, default in adaptors_defaults.items(): - if name.startswith('crypt_'): + if name == 'password': defaults = {'name': name[6:], 'crypt': True} else: defaults = {'name': name, 'crypt': False} @@ -104,8 +101,7 @@ def set_run_params_defaults(self): @property def run_params(self): """ Get defined params values from db """ - return {init.name if init.crypt is False else 'crypt_%s' % init.name: init.value for init in - self.adaptor_params.all()} + return {init.name: init.value for init in self.adaptor_params.all()} @property def adaptor_defaults(self): @@ -125,7 +121,7 @@ def from_db(cls, db, field_names, values): @property def config_changed(self): """ Set whether config has changed before saving """ - return self._clazz != self.clazz # or any([x.has_changed for x in self.adaptor_params.all()]) + return self._clazz != self.clazz # or any([x.has_changed for x in self.adaptor_params.all()]) @property def adaptor(self): diff --git a/waves/core/models/base.py b/waves/wcore/models/base.py similarity index 97% rename from waves/core/models/base.py rename to waves/wcore/models/base.py index 9753e4e..c78d255 100644 --- a/waves/core/models/base.py +++ b/waves/wcore/models/base.py @@ -7,8 +7,8 @@ import inflection from django.db import models -from waves.core.compat import RichTextField -from waves.core.settings import waves_settings as config +from waves.wcore.compat import RichTextField +from waves.wcore.settings import waves_settings as config __all__ = ['TimeStamped', 'Ordered', 'ExportAbleMixin', 'Described', 'Slugged', 'ApiModel', 'UrlMixin', 'WavesBaseModel'] @@ -17,7 +17,7 @@ class WavesBaseModel(models.Model): class Meta: abstract = True - app_label = "waves" + app_label = "waves.wcore" class TimeStamped(WavesBaseModel): diff --git a/waves/core/models/history.py b/waves/wcore/models/history.py similarity index 86% rename from waves/core/models/history.py rename to waves/wcore/models/history.py index 6bb0a14..70f6a47 100644 --- a/waves/core/models/history.py +++ b/waves/wcore/models/history.py @@ -2,8 +2,8 @@ from django.db import models -import waves.core.adaptors.const -from waves.core.models.base import WavesBaseModel +import waves.wcore.adaptors.const +from waves.wcore.models.base import WavesBaseModel class JobHistoryManager(models.Manager): @@ -19,7 +19,7 @@ def create(self, **kwargs): class JobAdminHistoryManager(JobHistoryManager): def get_queryset(self): """ - Specific query set to filter only :class:`waves.core.models.jobs.JobAdminHistory` objects + Specific query set to filter only :class:`waves.wcore.models.jobs.JobAdminHistory` objects :return: QuerySet """ return super(JobAdminHistoryManager, self).get_queryset().filter(is_admin=True) @@ -42,13 +42,13 @@ class Meta: unique_together = ('job', 'timestamp', 'status', 'is_admin') objects = JobHistoryManager() - #: Related :class:`waves.core.models.jobs.Job` + #: Related :class:`waves.wcore.models.jobs.Job` job = models.ForeignKey('Job', related_name='job_history', on_delete=models.CASCADE, null=False) #: Time when this event occurred timestamp = models.DateTimeField('Date time', auto_now_add=True, help_text='History timestamp') #: Job Status for this event status = models.IntegerField('Job Status', help_text='History job status', null=True, - choices=waves.core.adaptors.const.STATUS_LIST) + choices=waves.wcore.adaptors.const.STATUS_LIST) #: Job event message message = models.TextField('History log', blank=True, null=True, help_text='History log') #: Event is only intended for Admin diff --git a/waves/core/models/inputs.py b/waves/wcore/models/inputs.py similarity index 98% rename from waves/core/models/inputs.py rename to waves/wcore/models/inputs.py index 85be58d..edf5f52 100644 --- a/waves/core/models/inputs.py +++ b/waves/wcore/models/inputs.py @@ -8,9 +8,9 @@ from django.utils.safestring import mark_safe from polymorphic.models import PolymorphicModel -from waves.core.models.base import Ordered, ApiModel -from waves.core.settings import waves_settings -from waves.core.utils.validators import validate_list_comma, validate_list_param +from waves.wcore.models.base import Ordered, ApiModel +from waves.wcore.settings import waves_settings +from waves.wcore.utils.validators import validate_list_comma, validate_list_param __all__ = ['AParam', 'RepeatedGroup', 'FileInput', 'BooleanParam', 'DecimalParam', 'NumberParam', 'ListParam', 'IntegerParam', 'TextParam'] diff --git a/waves/core/models/jobs.py b/waves/wcore/models/jobs.py similarity index 91% rename from waves/core/models/jobs.py rename to waves/wcore/models/jobs.py index 79d7945..7da5184 100644 --- a/waves/core/models/jobs.py +++ b/waves/wcore/models/jobs.py @@ -16,18 +16,18 @@ from django.db.models import Q from django.utils.html import format_html -import waves.core.adaptors.const -import waves.core.adaptors.exceptions -from waves.core.adaptors.const import JobRunDetails -from waves.core.exceptions import WavesException -from waves.core.exceptions.jobs import * -from waves.core.mails import JobMailer -from waves.core.models.base import TimeStamped, Slugged, Ordered, UrlMixin, ApiModel -from waves.core.models.inputs import AParam -from waves.core.models.submissions import Submission, SubmissionOutput -from waves.core.settings import waves_settings -from waves.core.utils import normalize_value -from waves.core.utils.storage import allow_display_online +import waves.wcore.adaptors.const +import waves.wcore.adaptors.exceptions +from waves.wcore.adaptors.const import JobRunDetails +from waves.wcore.exceptions import WavesException +from waves.wcore.exceptions.jobs import * +from waves.wcore.mails import JobMailer +from waves.wcore.models.base import TimeStamped, Slugged, Ordered, UrlMixin, ApiModel +from waves.wcore.models.inputs import AParam +from waves.wcore.models.submissions import Submission, SubmissionOutput +from waves.wcore.settings import waves_settings +from waves.wcore.utils import normalize_value +from waves.wcore.utils.storage import allow_display_online logger = logging.getLogger(__name__) @@ -125,7 +125,7 @@ def create_from_submission(self, submission, submitted_inputs, email_to=None, us :param email_to: if given, email address to notify job process to :param user: associated user (may be anonymous) :return: a newly create Job instance - :rtype: :class:`waves.core.models.jobs.Job` + :rtype: :class:`waves.wcore.models.jobs.Job` """ try: job_title = submitted_inputs.pop('title') @@ -206,8 +206,8 @@ class Meta(TimeStamped.Meta): #: Job related Service submission = models.ForeignKey(Submission, related_name='service_jobs', null=True, on_delete=models.SET_NULL) #: Job status issued from last retrieve on DB - _status = models.IntegerField('Job status', choices=waves.core.adaptors.const.STATUS_LIST, - default=waves.core.adaptors.const.JOB_CREATED) + _status = models.IntegerField('Job status', choices=waves.wcore.adaptors.const.STATUS_LIST, + default=waves.wcore.adaptors.const.JOB_CREATED) #: Job last status for which we sent a notification email status_mail = models.IntegerField(editable=False, default=9999) #: Job associated client, may be null for anonymous submission @@ -359,10 +359,10 @@ def working_dir(self): def adaptor(self): """ Return current related service adaptor effective class :return: a child class of `JobRunnerAdaptor` - :rtype: `waves.core.adaptors.runner.JobRunnerAdaptor` + :rtype: `waves.wcore.adaptors.runner.JobRunnerAdaptor` """ if self._adaptor: - from waves.core.adaptors.loader import AdaptorLoader + from waves.wcore.adaptors.loader import AdaptorLoader try: adaptor = AdaptorLoader.unserialize(self._adaptor) except Exception as e: @@ -387,7 +387,7 @@ def command(self): :return: a BaseCommand object (or one of its child) :rtype: `BaseCommand` """ - from waves.core.commands.command import BaseCommand + from waves.wcore.commands.command import BaseCommand return BaseCommand() @property @@ -411,11 +411,11 @@ def label_class(self): :return: a css class (based on bootstrap) :rtype: unicode """ - if self.status in (waves.core.adaptors.const.JOB_UNDEFINED, waves.core.adaptors.const.JOB_SUSPENDED): + if self.status in (waves.wcore.adaptors.const.JOB_UNDEFINED, waves.wcore.adaptors.const.JOB_SUSPENDED): return 'warning' - elif self.status == waves.core.adaptors.const.JOB_ERROR: + elif self.status == waves.wcore.adaptors.const.JOB_ERROR: return 'danger' - elif self.status == waves.core.adaptors.const.JOB_CANCELLED: + elif self.status == waves.wcore.adaptors.const.JOB_CANCELLED: return 'info' else: return 'success' @@ -426,20 +426,20 @@ def check_send_mail(self): :rtype: int """ mailer = JobMailer() - if self.status != self.status_mail and self.status == waves.core.adaptors.const.JOB_ERROR: + if self.status != self.status_mail and self.status == waves.wcore.adaptors.const.JOB_ERROR: mailer.send_job_admin_error(self) if waves_settings.NOTIFY_RESULTS and self.notify: if self.email_to is not None and self.status != self.status_mail: # should send a email try: nb_sent = 0 - if self.status == waves.core.adaptors.const.JOB_CREATED: + if self.status == waves.wcore.adaptors.const.JOB_CREATED: nb_sent = mailer.send_job_submission_mail(self) - elif self.status == waves.core.adaptors.const.JOB_TERMINATED: + elif self.status == waves.wcore.adaptors.const.JOB_TERMINATED: nb_sent = mailer.send_job_completed_mail(self) - elif self.status == waves.core.adaptors.const.JOB_ERROR: + elif self.status == waves.wcore.adaptors.const.JOB_ERROR: nb_sent = mailer.send_job_error_email(self) - elif self.status == waves.core.adaptors.const.JOB_CANCELLED: + elif self.status == waves.wcore.adaptors.const.JOB_CANCELLED: nb_sent = mailer.send_job_cancel_email(self) # Avoid resending emails when last status mail already sent self.status_mail = self.status @@ -541,7 +541,7 @@ def error(self, message): """ Set job Status to ERROR, save error reason in JobAdminHistory, save job""" logger.error('Job error: %s', message) self.message = '[Error]%s' % message - self.status = waves.core.adaptors.const.JOB_ERROR + self.status = waves.wcore.adaptors.const.JOB_ERROR def fatal_error(self, exception): logger.exception('Job fatal error: %s', exception) @@ -553,28 +553,28 @@ def get_status_display(self): def _run_action(self, action): """ Check if current job status is coherent with requested action """ if action == 'prepare_job': - status_allowed = waves.core.adaptors.const.STATUS_LIST[1:2] + status_allowed = waves.wcore.adaptors.const.STATUS_LIST[1:2] elif action == 'run_job': - status_allowed = waves.core.adaptors.const.STATUS_LIST[2:3] + status_allowed = waves.wcore.adaptors.const.STATUS_LIST[2:3] elif action == 'cancel_job': # Report fails to a AdaptorException raise during cancel process - status_allowed = waves.core.adaptors.const.STATUS_LIST[1:6] + status_allowed = waves.wcore.adaptors.const.STATUS_LIST[1:6] if getattr(self.adaptor, 'state_allow_cancel', None): status_allowed = self.adaptor.state_allow_cancel elif action == 'job_results': - status_allowed = waves.core.adaptors.const.STATUS_LIST[6:7] + waves.core.adaptors.const.STATUS_LIST[9:] + status_allowed = waves.wcore.adaptors.const.STATUS_LIST[6:7] + waves.wcore.adaptors.const.STATUS_LIST[9:] elif action == 'job_run_details': - status_allowed = waves.core.adaptors.const.STATUS_LIST[6:10] + status_allowed = waves.wcore.adaptors.const.STATUS_LIST[6:10] else: # By default let all status allowed - status_allowed = waves.core.adaptors.const.STATUS_LIST + status_allowed = waves.wcore.adaptors.const.STATUS_LIST if self.status not in [int(i[0]) for i in status_allowed]: raise JobInconsistentStateError(self.get_status_display(), status_allowed) try: returned = getattr(self.adaptor, action)(self) self.nb_retry = 0 return returned - except waves.core.adaptors.exceptions.AdaptorException as exc: + except waves.wcore.adaptors.exceptions.AdaptorException as exc: logger.debug('Retry execution - non fatal error') self.retry(exc.message) except WavesException as exc: @@ -595,25 +595,25 @@ def next_status(self): if self.status in self.NEXT_STATUS: return self.NEXT_STATUS[self.status] else: - return waves.core.adaptors.const.JOB_UNDEFINED + return waves.wcore.adaptors.const.JOB_UNDEFINED def run_prepare(self): """ Ask job adaptor to prepare run (manage input files essentially) """ self._run_action('prepare_job') - self.status = waves.core.adaptors.const.JOB_PREPARED + self.status = waves.wcore.adaptors.const.JOB_PREPARED def run_launch(self): """ Ask job adaptor to actually launch job """ self._run_action('run_job') - self.status = waves.core.adaptors.const.JOB_QUEUED + self.status = waves.wcore.adaptors.const.JOB_QUEUED def run_status(self): """ Ask job adaptor current job status """ self._run_action('job_status') logger.debug('job current state :%s', self.status) - if self.status == waves.core.adaptors.const.JOB_COMPLETED: + if self.status == waves.wcore.adaptors.const.JOB_COMPLETED: self.run_results() - if self.status == waves.core.adaptors.const.JOB_UNDEFINED and self.nb_retry > waves_settings.JOBS_MAX_RETRY: + if self.status == waves.wcore.adaptors.const.JOB_UNDEFINED and self.nb_retry > waves_settings.JOBS_MAX_RETRY: self.run_cancel() self.save() return self.status @@ -622,7 +622,7 @@ def run_cancel(self): """ Ask job adaptor to cancel job if possible """ self._run_action('cancel_job') self.message = 'Job cancelled' - self.status = waves.core.adaptors.const.JOB_CANCELLED + self.status = waves.wcore.adaptors.const.JOB_CANCELLED def run_results(self): """ Ask job adaptor to get results files (dowload files if needed) """ @@ -634,10 +634,10 @@ def run_results(self): if os.stat(join(self.working_dir, self.stderr)).st_size > 0: logger.error('Error found %s %s ', self.exit_code, self.stderr_txt.decode('ascii', errors="replace")) self.message = "Error detected in job.stderr" - self.status = waves.core.adaptors.const.JOB_ERROR + self.status = waves.wcore.adaptors.const.JOB_ERROR else: self.message = "Data retrieved" - self.status = waves.core.adaptors.const.JOB_TERMINATED + self.status = waves.wcore.adaptors.const.JOB_TERMINATED def run_details(self): """ Ask job adaptor to get JobRunDetails information (started, finished, exit_code ...)""" @@ -655,7 +655,7 @@ def run_details(self): else: try: remote_details = self._run_action('job_run_details') - except waves.core.adaptors.exceptions.AdaptorException: + except waves.wcore.adaptors.exceptions.AdaptorException: remote_details = self.default_run_details() with open(file_run_details, 'w') as fp: json.dump(obj=remote_details, fp=fp, ensure_ascii=False) @@ -675,7 +675,7 @@ def stderr_txt(self): @property def allow_rerun(self): """ set whether current job state allow rerun """ - return self.status not in (waves.core.adaptors.const.JOB_CREATED, waves.core.adaptors.const.JOB_UNDEFINED) + return self.status not in (waves.wcore.adaptors.const.JOB_CREATED, waves.wcore.adaptors.const.JOB_UNDEFINED) def re_run(self): """ Reset attributes and mark job as CREATED to be re-run""" @@ -683,15 +683,15 @@ def re_run(self): self.nb_retry = 0 self.job_history.all().update(is_admin=True) self.job_history.create(message='Marked for re-run', status=self.status) - self.status = waves.core.adaptors.const.JOB_CREATED + self.status = waves.wcore.adaptors.const.JOB_CREATED for job_out in self.outputs.all(): open(job_out.file_path, 'w').close() self.save() def default_run_details(self): """ Get and retriver a JobRunDetails namedtuple with defaults values""" - prepared = self.job_history.filter(status=waves.core.adaptors.const.JOB_PREPARED).first() - finished = self.job_history.filter(status__gte=waves.core.adaptors.const.JOB_COMPLETED).first() + prepared = self.job_history.filter(status=waves.wcore.adaptors.const.JOB_PREPARED).first() + finished = self.job_history.filter(status__gte=waves.wcore.adaptors.const.JOB_COMPLETED).first() prepared_date = prepared.timestamp.isoformat() if prepared is not None else "" finished_date = finished.timestamp.isoformat() if finished is not None else "" return JobRunDetails(self.id, str(self.slug), self.remote_job_id, self.title, self.exit_code, @@ -719,10 +719,10 @@ def create_from_submission(self, job, service_input, order, submitted_input): :param order: given order in future command line creation (if needed) :param submitted_input: received value for this service submission input :return: return the newly created JobInput - :rtype: :class:`waves.core.models.jobs.JobInput` + :rtype: :class:`waves.wcore.models.jobs.JobInput` """ - from waves.core.models.inputs import AParam, FileInput - from waves.core.models.samples import FileInputSample + from waves.wcore.models.inputs import AParam, FileInput + from waves.wcore.models.samples import FileInputSample input_dict = dict(job=job, order=order, name=service_input.name, @@ -775,9 +775,9 @@ class Meta: unique_together = ('name', 'value', 'job') objects = JobInputManager() - #: Reference to related :class:`waves.core.models.jobs.Job` + #: Reference to related :class:`waves.wcore.models.jobs.Job` job = models.ForeignKey(Job, related_name='job_inputs', on_delete=models.CASCADE) - #: Reference to related :class:`waves.core.models.services.SubmissionParam` + #: Reference to related :class:`waves.wcore.models.services.SubmissionParam` # srv_input = models.ForeignKey('SubmissionParam', null=True, on_delete=models.CASCADE) #: Value set to this service input for this job value = models.CharField('Input content', max_length=255, null=True, blank=True, @@ -880,7 +880,7 @@ def command_line_element(self, forced_value=None): def get_label_for_choice(self): # TODO check if still used ! """ Try to get label for value issued from a service list input""" - from waves.core.models.inputs import AParam + from waves.wcore.models.inputs import AParam try: srv_input = AParam.objects.get(submission=self.job.submission, name=self.name) @@ -948,9 +948,9 @@ class Meta: objects = JobOutputManager() field_api_name = "value" - #: Related :class:`waves.core.models.jobs.Job` + #: Related :class:`waves.wcore.models.jobs.Job` job = models.ForeignKey(Job, related_name='outputs', on_delete=models.CASCADE) - #: Related :class:`waves.core.models.services.SubmissionOutput` + #: Related :class:`waves.wcore.models.services.SubmissionOutput` # srv_output = models.ForeignKey('SubmissionOutput', null=True, on_delete=models.CASCADE) #: Job Output value value = models.CharField('Output value', max_length=200, null=True, blank=True, default="") diff --git a/waves/core/models/runners.py b/waves/wcore/models/runners.py similarity index 85% rename from waves/core/models/runners.py rename to waves/wcore/models/runners.py index 6a4844e..b9cde85 100644 --- a/waves/core/models/runners.py +++ b/waves/wcore/models/runners.py @@ -6,8 +6,8 @@ from django.db import models from django.utils.module_loading import import_string -from waves.core.models.adaptors import HasAdaptorClazzMixin -from waves.core.models.base import Described, ExportAbleMixin +from waves.wcore.models.adaptors import HasAdaptorClazzMixin +from waves.wcore.models.base import Described, ExportAbleMixin __all__ = ['Runner'] @@ -54,12 +54,12 @@ def __str__(self): @property def serializer(self): """ Retrieve a serializer for json export """ - from waves.core.models.serializers.runners import RunnerSerializer + from waves.wcore.models.serializers.runners import RunnerSerializer return RunnerSerializer @property def runs(self): - services_list = self.core_service_runs.all() - submissions_list = self.core_submission_runs.all() + services_list = self.wcore_service_runs.all() + submissions_list = self.wcore_submission_runs.all() runs_list = list(chain(services_list, submissions_list)) return runs_list diff --git a/waves/core/models/samples.py b/waves/wcore/models/samples.py similarity index 95% rename from waves/core/models/samples.py rename to waves/wcore/models/samples.py index 712d2c8..36fd8e0 100644 --- a/waves/core/models/samples.py +++ b/waves/wcore/models/samples.py @@ -4,8 +4,8 @@ from django.db import models -from waves.core.models.base import WavesBaseModel -from waves.core.utils.storage import file_sample_directory, waves_storage +from waves.wcore.models.base import WavesBaseModel +from waves.wcore.utils.storage import file_sample_directory, waves_storage __all__ = ['FileInputSample', 'SampleDepParam'] diff --git a/waves/core/models/serializers/__init__.py b/waves/wcore/models/serializers/__init__.py similarity index 100% rename from waves/core/models/serializers/__init__.py rename to waves/wcore/models/serializers/__init__.py diff --git a/waves/core/models/serializers/base.py b/waves/wcore/models/serializers/base.py similarity index 100% rename from waves/core/models/serializers/base.py rename to waves/wcore/models/serializers/base.py diff --git a/waves/core/models/serializers/runners.py b/waves/wcore/models/serializers/runners.py similarity index 74% rename from waves/core/models/serializers/runners.py rename to waves/wcore/models/serializers/runners.py index a99dd66..9ef70d4 100644 --- a/waves/core/models/serializers/runners.py +++ b/waves/wcore/models/serializers/runners.py @@ -4,8 +4,8 @@ from django.db import transaction from rest_framework import serializers -from waves.core.models import Runner, AdaptorInitParam -from waves.core.models.serializers.base import RelatedSerializerMixin +from waves.wcore.models import Runner, AdaptorInitParam +from waves.wcore.models.serializers.base import RelatedSerializerMixin class RunnerParamSerializer(serializers.ModelSerializer): @@ -13,6 +13,12 @@ class Meta: model = AdaptorInitParam fields = ('name', 'value', 'prevent_override') + def to_representation(self, instance): + repre = super(RunnerParamSerializer, self).to_representation(instance) + if instance.name == 'password' or instance.crypt : + repre['value'] = "xxxxxx" + return repre + class RunnerSerializer(serializers.ModelSerializer, RelatedSerializerMixin): class Meta: diff --git a/waves/core/models/serializers/services.py b/waves/wcore/models/serializers/services.py similarity index 94% rename from waves/core/models/serializers/services.py rename to waves/wcore/models/serializers/services.py index f31a2df..56d5d28 100644 --- a/waves/core/models/serializers/services.py +++ b/waves/wcore/models/serializers/services.py @@ -5,13 +5,13 @@ from django.db import transaction from rest_framework import serializers as rest_serializer -from waves.core.settings import waves_settings -from waves.core.api.share import DynamicFieldsModelSerializer -from waves.core.api.v2.serializers import ServiceSerializer as BaseServiceSerializer, \ +from waves.wcore.settings import waves_settings +from waves.wcore.api.share import DynamicFieldsModelSerializer +from waves.wcore.api.v2.serializers import ServiceSerializer as BaseServiceSerializer, \ ServiceSubmissionSerializer as BaseServiceSubmissionSerializer -from waves.core.models import * -from waves.core.models.serializers.base import RelatedSerializerMixin -from waves.core.models.serializers.runners import RunnerSerializer, RunnerParamSerializer +from waves.wcore.models import * +from waves.wcore.models.serializers.base import RelatedSerializerMixin +from waves.wcore.models.serializers.runners import RunnerSerializer, RunnerParamSerializer __all__ = ['ServiceSubmissionSerializer', 'ExitCodeSerializer', 'ServiceSerializer'] diff --git a/waves/core/models/services.py b/waves/wcore/models/services.py similarity index 94% rename from waves/core/models/services.py rename to waves/wcore/models/services.py index c8df7b4..5bbca12 100644 --- a/waves/core/models/services.py +++ b/waves/wcore/models/services.py @@ -11,10 +11,10 @@ from django.db import transaction from django.db.models import Q -import waves.core.adaptors.const -from waves.core.models.adaptors import * -from waves.core.models.base import * -from waves.core.settings import waves_settings as config +import waves.wcore.adaptors.const +from waves.wcore.models.adaptors import * +from waves.wcore.models.base import * +from waves.wcore.settings import waves_settings as config __all__ = ['ServiceRunParam', 'ServiceManager', 'Service'] @@ -142,13 +142,13 @@ def set_run_params_defaults(self): @property def jobs(self): """ Get current Service Jobs """ - from waves.core.models import Job + from waves.wcore.models import Job return Job.objects.filter(submission__in=self.submissions.all()) @property def pending_jobs(self): """ Get current Service Jobs """ - from waves.core.models import Job + from waves.wcore.models import Job return Job.objects.filter(submission__in=self.submissions.all(), status__in=Job.PENDING_STATUS) def import_service_params(self): @@ -162,7 +162,7 @@ def import_service_params(self): @property def command(self): """ Return command parser for current Service """ - from waves.core.commands.command import BaseCommand + from waves.wcore.commands.command import BaseCommand return BaseCommand(service=self) def service_submission_inputs(self, submission=None): @@ -179,7 +179,7 @@ def service_submission_inputs(self, submission=None): @transaction.atomic def duplicate(self): """ Duplicate a Service / with inputs / outputs / exit_code / runner params """ - from waves.core.api.v2.serializers import ServiceSerializer + from waves.wcore.api.v2.serializers import ServiceSerializer from django.contrib import messages serializer = ServiceSerializer() data = serializer.to_representation(self) @@ -242,7 +242,7 @@ def available_for_user(self, user): @property def serializer(self): - from waves.core.models.serializers.services import ServiceSerializer + from waves.wcore.models.serializers.services import ServiceSerializer return ServiceSerializer @property @@ -257,4 +257,4 @@ def activate_deactivate(self): @property def running_jobs(self): - return self.jobs.filter(status__in=[waves.core.adaptors.const.JOB_CREATED, waves.core.adaptors.const.JOB_COMPLETED]) + return self.jobs.filter(status__in=[waves.wcore.adaptors.const.JOB_CREATED, waves.wcore.adaptors.const.JOB_COMPLETED]) diff --git a/waves/core/models/submissions.py b/waves/wcore/models/submissions.py similarity index 95% rename from waves/core/models/submissions.py rename to waves/wcore/models/submissions.py index 5fa1a56..4e2e5d1 100644 --- a/waves/core/models/submissions.py +++ b/waves/wcore/models/submissions.py @@ -4,8 +4,8 @@ from django.core.exceptions import ValidationError from django.db import models -from waves.core.models.base import TimeStamped, ApiModel, Ordered, Slugged, WavesBaseModel -from waves.core.models.adaptors import AdaptorInitParam, HasRunnerParamsMixin +from waves.wcore.models.base import TimeStamped, ApiModel, Ordered, Slugged, WavesBaseModel +from waves.wcore.models.adaptors import AdaptorInitParam, HasRunnerParamsMixin __all__ = ['Submission', 'SubmissionOutput', 'SubmissionExitCode', 'SubmissionRunParam'] @@ -97,13 +97,13 @@ def duplicate(self, service): @property def file_inputs(self): """ Only files inputs """ - from waves.core.models.inputs import FileInput + from waves.wcore.models.inputs import FileInput return self.inputs.instance_of(FileInput).all() @property def params(self): """ Exclude files inputs """ - from waves.core.models.inputs import FileInput + from waves.wcore.models.inputs import FileInput return self.inputs.not_instance_of(FileInput).all() @property @@ -113,13 +113,13 @@ def required_params(self): @property def submission_samples(self): - from waves.core.models.samples import FileInputSample + from waves.wcore.models.samples import FileInputSample return FileInputSample.objects.filter(file_input__submission=self) @property def pending_jobs(self): """ Get current Service Jobs """ - from waves.core.models import Job + from waves.wcore.models import Job return self.service_jobs.filter(status__in=Job.PENDING_STATUS) def duplicate_api_name(self): diff --git a/waves/core/settings.py b/waves/wcore/settings.py similarity index 89% rename from waves/core/settings.py rename to waves/wcore/settings.py index 79d5a27..23ed2b4 100644 --- a/waves/core/settings.py +++ b/waves/wcore/settings.py @@ -67,16 +67,16 @@ def import_from_string(val, setting_name): 'TEMPLATE_PACK': 'bootstrap3', 'SECRET_KEY': getattr(settings, 'SECRET_KEY', '')[0:32], 'ADAPTORS_CLASSES': ( - 'waves.core.adaptors.shell.SshShellAdaptor', - 'waves.core.adaptors.cluster.LocalClusterAdaptor', - 'waves.core.adaptors.shell.SshKeyShellAdaptor', - 'waves.core.adaptors.shell.LocalShellAdaptor', - 'waves.core.adaptors.cluster.SshClusterAdaptor', - 'waves.core.adaptors.cluster.SshKeyClusterAdaptor', + 'waves.wcore.adaptors.shell.SshShellAdaptor', + 'waves.wcore.adaptors.cluster.LocalClusterAdaptor', + 'waves.wcore.adaptors.shell.SshKeyShellAdaptor', + 'waves.wcore.adaptors.shell.LocalShellAdaptor', + 'waves.wcore.adaptors.cluster.SshClusterAdaptor', + 'waves.wcore.adaptors.cluster.SshKeyClusterAdaptor', ), 'PERMISSION_CLASSES': (), - 'MAILER_CLASS': 'waves.core.mails.JobMailer', - 'SERVICE_MODEL': ('waves.core', 'Service') + 'MAILER_CLASS': 'waves.wcore.mails.JobMailer', + 'SERVICE_MODEL': ('waves.wcore', 'Service') } IMPORT_STRINGS = [ diff --git a/waves/core/signals.py b/waves/wcore/signals.py similarity index 88% rename from waves/core/signals.py rename to waves/wcore/signals.py index e8f8c09..507c8b8 100644 --- a/waves/core/signals.py +++ b/waves/wcore/signals.py @@ -9,15 +9,15 @@ from django.db.models.signals import pre_save, post_save, post_delete from django.dispatch import receiver -from waves.core.models.adaptors import AdaptorInitParam, HasAdaptorClazzMixin -from waves.core.models.base import ApiModel -from waves.core.models.inputs import * -from waves.core.models.jobs import Job, JobOutput -from waves.core.models.runners import * -from waves.core.models.services import * -from waves.core.models.submissions import * -from waves.core.models.samples import * -from waves.core.utils import get_all_subclasses +from waves.wcore.models.adaptors import AdaptorInitParam, HasAdaptorClazzMixin +from waves.wcore.models.base import ApiModel +from waves.wcore.models.inputs import * +from waves.wcore.models.jobs import Job, JobOutput +from waves.wcore.models.runners import * +from waves.wcore.models.services import * +from waves.wcore.models.submissions import * +from waves.wcore.models.samples import * +from waves.wcore.utils import get_all_subclasses @receiver(pre_save, sender=Job) @@ -111,8 +111,9 @@ def adaptor_mixin_post_save_handler(sender, instance, created, **kwargs): @receiver(pre_save, sender=AdaptorInitParam) def adaptor_param_pre_save_handler(sender, instance, **kwargs): """ Runner param pre save handler """ - if instance.config_changed and instance.crypt and instance.value: - from waves.core.utils.encrypt import Encrypt + if instance.config_changed and instance.name == "password" and instance.value: + from waves.wcore.utils.encrypt import Encrypt + instance.crypt = True instance.value = Encrypt.encrypt(instance.value) for subclass in get_all_subclasses(AdaptorInitParam): diff --git a/waves/core/static/admin/waves/css/admin.css b/waves/wcore/static/admin/waves/css/admin.css similarity index 100% rename from waves/core/static/admin/waves/css/admin.css rename to waves/wcore/static/admin/waves/css/admin.css diff --git a/waves/core/static/admin/waves/css/forms.css b/waves/wcore/static/admin/waves/css/forms.css similarity index 100% rename from waves/core/static/admin/waves/css/forms.css rename to waves/wcore/static/admin/waves/css/forms.css diff --git a/waves/core/static/admin/waves/css/modal.css b/waves/wcore/static/admin/waves/css/modal.css similarity index 100% rename from waves/core/static/admin/waves/css/modal.css rename to waves/wcore/static/admin/waves/css/modal.css diff --git a/waves/core/static/admin/waves/js/admin.js b/waves/wcore/static/admin/waves/js/admin.js similarity index 100% rename from waves/core/static/admin/waves/js/admin.js rename to waves/wcore/static/admin/waves/js/admin.js diff --git a/waves/core/static/admin/waves/js/connect.js b/waves/wcore/static/admin/waves/js/connect.js similarity index 100% rename from waves/core/static/admin/waves/js/connect.js rename to waves/wcore/static/admin/waves/js/connect.js diff --git a/waves/core/static/admin/waves/js/modal.js b/waves/wcore/static/admin/waves/js/modal.js similarity index 100% rename from waves/core/static/admin/waves/js/modal.js rename to waves/wcore/static/admin/waves/js/modal.js diff --git a/waves/core/static/admin/waves/js/modal.min.js b/waves/wcore/static/admin/waves/js/modal.min.js similarity index 100% rename from waves/core/static/admin/waves/js/modal.min.js rename to waves/wcore/static/admin/waves/js/modal.min.js diff --git a/waves/core/static/admin/waves/js/runner.js b/waves/wcore/static/admin/waves/js/runner.js similarity index 100% rename from waves/core/static/admin/waves/js/runner.js rename to waves/wcore/static/admin/waves/js/runner.js diff --git a/waves/core/static/admin/waves/js/services.js b/waves/wcore/static/admin/waves/js/services.js similarity index 100% rename from waves/core/static/admin/waves/js/services.js rename to waves/wcore/static/admin/waves/js/services.js diff --git a/waves/core/static/waves/ico/favicon.ico b/waves/wcore/static/waves/ico/favicon.ico similarity index 100% rename from waves/core/static/waves/ico/favicon.ico rename to waves/wcore/static/waves/ico/favicon.ico diff --git a/waves/core/static/waves/ico/favicon.png b/waves/wcore/static/waves/ico/favicon.png similarity index 100% rename from waves/core/static/waves/ico/favicon.png rename to waves/wcore/static/waves/ico/favicon.png diff --git a/waves/core/static/waves/images/ui-icons_444444_256x240.png b/waves/wcore/static/waves/images/ui-icons_444444_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_444444_256x240.png rename to waves/wcore/static/waves/images/ui-icons_444444_256x240.png diff --git a/waves/core/static/waves/images/ui-icons_555555_256x240.png b/waves/wcore/static/waves/images/ui-icons_555555_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_555555_256x240.png rename to waves/wcore/static/waves/images/ui-icons_555555_256x240.png diff --git a/waves/core/static/waves/images/ui-icons_777620_256x240.png b/waves/wcore/static/waves/images/ui-icons_777620_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_777620_256x240.png rename to waves/wcore/static/waves/images/ui-icons_777620_256x240.png diff --git a/waves/core/static/waves/images/ui-icons_777777_256x240.png b/waves/wcore/static/waves/images/ui-icons_777777_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_777777_256x240.png rename to waves/wcore/static/waves/images/ui-icons_777777_256x240.png diff --git a/waves/core/static/waves/images/ui-icons_cc0000_256x240.png b/waves/wcore/static/waves/images/ui-icons_cc0000_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_cc0000_256x240.png rename to waves/wcore/static/waves/images/ui-icons_cc0000_256x240.png diff --git a/waves/core/static/waves/images/ui-icons_ffffff_256x240.png b/waves/wcore/static/waves/images/ui-icons_ffffff_256x240.png similarity index 100% rename from waves/core/static/waves/images/ui-icons_ffffff_256x240.png rename to waves/wcore/static/waves/images/ui-icons_ffffff_256x240.png diff --git a/waves/core/static/waves/img/ajax-loader.gif b/waves/wcore/static/waves/img/ajax-loader.gif similarity index 100% rename from waves/core/static/waves/img/ajax-loader.gif rename to waves/wcore/static/waves/img/ajax-loader.gif diff --git a/waves/core/static/waves/img/logo.png b/waves/wcore/static/waves/img/logo.png similarity index 100% rename from waves/core/static/waves/img/logo.png rename to waves/wcore/static/waves/img/logo.png diff --git a/waves/core/static/waves/img/progress-bar.gif b/waves/wcore/static/waves/img/progress-bar.gif similarity index 100% rename from waves/core/static/waves/img/progress-bar.gif rename to waves/wcore/static/waves/img/progress-bar.gif diff --git a/waves/core/static/waves/img/ring.gif b/waves/wcore/static/waves/img/ring.gif similarity index 100% rename from waves/core/static/waves/img/ring.gif rename to waves/wcore/static/waves/img/ring.gif diff --git a/waves/core/static/waves/js/services.js b/waves/wcore/static/waves/js/services.js similarity index 100% rename from waves/core/static/waves/js/services.js rename to waves/wcore/static/waves/js/services.js diff --git a/waves/core/templates/admin/polymorphic/add_type_form.html b/waves/wcore/templates/admin/polymorphic/add_type_form.html similarity index 100% rename from waves/core/templates/admin/polymorphic/add_type_form.html rename to waves/wcore/templates/admin/polymorphic/add_type_form.html diff --git a/waves/core/templates/admin/waves/baseparam/popup_response.html b/waves/wcore/templates/admin/waves/baseparam/popup_response.html similarity index 100% rename from waves/core/templates/admin/waves/baseparam/popup_response.html rename to waves/wcore/templates/admin/waves/baseparam/popup_response.html diff --git a/waves/core/templates/admin/waves/change_form.html b/waves/wcore/templates/admin/waves/change_form.html similarity index 100% rename from waves/core/templates/admin/waves/change_form.html rename to waves/wcore/templates/admin/waves/change_form.html diff --git a/waves/core/templates/admin/waves/import/service_modal_form.html b/waves/wcore/templates/admin/waves/import/service_modal_form.html similarity index 100% rename from waves/core/templates/admin/waves/import/service_modal_form.html rename to waves/wcore/templates/admin/waves/import/service_modal_form.html diff --git a/waves/core/templates/admin/waves/job/change_form.html b/waves/wcore/templates/admin/waves/job/change_form.html similarity index 100% rename from waves/core/templates/admin/waves/job/change_form.html rename to waves/wcore/templates/admin/waves/job/change_form.html diff --git a/waves/core/templates/admin/waves/runner/change_form.html b/waves/wcore/templates/admin/waves/runner/change_form.html similarity index 100% rename from waves/core/templates/admin/waves/runner/change_form.html rename to waves/wcore/templates/admin/waves/runner/change_form.html diff --git a/waves/core/templates/admin/waves/service/change_form.html b/waves/wcore/templates/admin/waves/service/change_form.html similarity index 95% rename from waves/core/templates/admin/waves/service/change_form.html rename to waves/wcore/templates/admin/waves/service/change_form.html index 95d7a26..34bf717 100644 --- a/waves/core/templates/admin/waves/service/change_form.html +++ b/waves/wcore/templates/admin/waves/service/change_form.html @@ -2,14 +2,14 @@ {% load i18n admin_modify admin_urls admin_static waves_tags %} {% block object-tools-items %}
  • - Jobs
  • -
  • +
  • - (function ($) { $(document).on('formset:added', function (event, $row, formsetName) { - if (formsetName == 'submission_inputs') { + console.log("formsetName" + formsetName) + if (formsetName == 'inputs') { // Do something event.stopImmediatePropagation(); event.stopPropagation(); diff --git a/waves/core/templates/adminsortable2/tabular.html b/waves/wcore/templates/adminsortable2/tabular.html similarity index 100% rename from waves/core/templates/adminsortable2/tabular.html rename to waves/wcore/templates/adminsortable2/tabular.html diff --git a/waves/core/templates/waves/api/service_api_form.html b/waves/wcore/templates/waves/api/service_api_form.html similarity index 100% rename from waves/core/templates/waves/api/service_api_form.html rename to waves/wcore/templates/waves/api/service_api_form.html diff --git a/waves/core/templates/waves/emails/base.html b/waves/wcore/templates/waves/emails/base.html similarity index 100% rename from waves/core/templates/waves/emails/base.html rename to waves/wcore/templates/waves/emails/base.html diff --git a/waves/core/templates/waves/emails/job_admin_error.html b/waves/wcore/templates/waves/emails/job_admin_error.html similarity index 100% rename from waves/core/templates/waves/emails/job_admin_error.html rename to waves/wcore/templates/waves/emails/job_admin_error.html diff --git a/waves/core/templates/waves/emails/job_cancelled.html b/waves/wcore/templates/waves/emails/job_cancelled.html similarity index 100% rename from waves/core/templates/waves/emails/job_cancelled.html rename to waves/wcore/templates/waves/emails/job_cancelled.html diff --git a/waves/core/templates/waves/emails/job_completed.html b/waves/wcore/templates/waves/emails/job_completed.html similarity index 100% rename from waves/core/templates/waves/emails/job_completed.html rename to waves/wcore/templates/waves/emails/job_completed.html diff --git a/waves/core/templates/waves/emails/job_error.html b/waves/wcore/templates/waves/emails/job_error.html similarity index 100% rename from waves/core/templates/waves/emails/job_error.html rename to waves/wcore/templates/waves/emails/job_error.html diff --git a/waves/core/templates/waves/emails/job_error.txt b/waves/wcore/templates/waves/emails/job_error.txt similarity index 100% rename from waves/core/templates/waves/emails/job_error.txt rename to waves/wcore/templates/waves/emails/job_error.txt diff --git a/waves/core/templates/waves/emails/job_prepared.html b/waves/wcore/templates/waves/emails/job_prepared.html similarity index 100% rename from waves/core/templates/waves/emails/job_prepared.html rename to waves/wcore/templates/waves/emails/job_prepared.html diff --git a/waves/core/templates/waves/emails/job_prepared.txt b/waves/wcore/templates/waves/emails/job_prepared.txt similarity index 100% rename from waves/core/templates/waves/emails/job_prepared.txt rename to waves/wcore/templates/waves/emails/job_prepared.txt diff --git a/waves/core/templates/waves/emails/job_submitted.html b/waves/wcore/templates/waves/emails/job_submitted.html similarity index 100% rename from waves/core/templates/waves/emails/job_submitted.html rename to waves/wcore/templates/waves/emails/job_submitted.html diff --git a/waves/core/templates/waves/emails/job_submitted.txt b/waves/wcore/templates/waves/emails/job_submitted.txt similarity index 100% rename from waves/core/templates/waves/emails/job_submitted.txt rename to waves/wcore/templates/waves/emails/job_submitted.txt diff --git a/waves/core/templates/waves/jobs/job_detail.html b/waves/wcore/templates/waves/jobs/job_detail.html similarity index 100% rename from waves/core/templates/waves/jobs/job_detail.html rename to waves/wcore/templates/waves/jobs/job_detail.html diff --git a/waves/core/templates/waves/jobs/job_list.html b/waves/wcore/templates/waves/jobs/job_list.html similarity index 100% rename from waves/core/templates/waves/jobs/job_list.html rename to waves/wcore/templates/waves/jobs/job_list.html diff --git a/waves/core/templates/waves/parts/job_detail.html b/waves/wcore/templates/waves/parts/job_detail.html similarity index 100% rename from waves/core/templates/waves/parts/job_detail.html rename to waves/wcore/templates/waves/parts/job_detail.html diff --git a/waves/core/templates/waves/parts/job_list_element.html b/waves/wcore/templates/waves/parts/job_list_element.html similarity index 100% rename from waves/core/templates/waves/parts/job_list_element.html rename to waves/wcore/templates/waves/parts/job_list_element.html diff --git a/waves/core/templates/waves/parts/submission_form.html b/waves/wcore/templates/waves/parts/submission_form.html similarity index 100% rename from waves/core/templates/waves/parts/submission_form.html rename to waves/wcore/templates/waves/parts/submission_form.html diff --git a/waves/core/templates/waves/services/_online_execution.html b/waves/wcore/templates/waves/services/_online_execution.html similarity index 100% rename from waves/core/templates/waves/services/_online_execution.html rename to waves/wcore/templates/waves/services/_online_execution.html diff --git a/waves/core/templates/waves/services/_service_head.html b/waves/wcore/templates/waves/services/_service_head.html similarity index 100% rename from waves/core/templates/waves/services/_service_head.html rename to waves/wcore/templates/waves/services/_service_head.html diff --git a/waves/core/templates/waves/services/_service_link_panel.html b/waves/wcore/templates/waves/services/_service_link_panel.html similarity index 100% rename from waves/core/templates/waves/services/_service_link_panel.html rename to waves/wcore/templates/waves/services/_service_link_panel.html diff --git a/waves/core/templates/waves/services/base.html b/waves/wcore/templates/waves/services/base.html similarity index 100% rename from waves/core/templates/waves/services/base.html rename to waves/wcore/templates/waves/services/base.html diff --git a/waves/core/templates/waves/services/file.html b/waves/wcore/templates/waves/services/file.html similarity index 100% rename from waves/core/templates/waves/services/file.html rename to waves/wcore/templates/waves/services/file.html diff --git a/waves/core/templates/waves/services/service_details.html b/waves/wcore/templates/waves/services/service_details.html similarity index 100% rename from waves/core/templates/waves/services/service_details.html rename to waves/wcore/templates/waves/services/service_details.html diff --git a/waves/core/templates/waves/services/service_form.html b/waves/wcore/templates/waves/services/service_form.html similarity index 100% rename from waves/core/templates/waves/services/service_form.html rename to waves/wcore/templates/waves/services/service_form.html diff --git a/waves/core/templates/waves/services/services_list.html b/waves/wcore/templates/waves/services/services_list.html similarity index 100% rename from waves/core/templates/waves/services/services_list.html rename to waves/wcore/templates/waves/services/services_list.html diff --git a/waves/core/templatetags/__init__.py b/waves/wcore/templatetags/__init__.py similarity index 100% rename from waves/core/templatetags/__init__.py rename to waves/wcore/templatetags/__init__.py diff --git a/waves/core/templatetags/waves_tags.py b/waves/wcore/templatetags/waves_tags.py similarity index 92% rename from waves/core/templatetags/waves_tags.py rename to waves/wcore/templatetags/waves_tags.py index 6456aff..9a0d3cd 100644 --- a/waves/core/templatetags/waves_tags.py +++ b/waves/wcore/templatetags/waves_tags.py @@ -2,7 +2,7 @@ from django import template -from waves.core.settings import waves_settings +from waves.wcore.settings import waves_settings register = template.Library() diff --git a/waves/core/tests/__init__.py b/waves/wcore/tests/__init__.py similarity index 100% rename from waves/core/tests/__init__.py rename to waves/wcore/tests/__init__.py diff --git a/waves/core/tests/base.py b/waves/wcore/tests/base.py similarity index 96% rename from waves/core/tests/base.py rename to waves/wcore/tests/base.py index 92f3768..a65ccb4 100644 --- a/waves/core/tests/base.py +++ b/waves/wcore/tests/base.py @@ -12,8 +12,8 @@ from django.core.exceptions import ObjectDoesNotExist from django.test import override_settings, TestCase -from waves.core.models import Service -from waves.core.tests.utils import get_sample_dir +from waves.wcore.models import Service +from waves.wcore.tests.utils import get_sample_dir logger = logging.getLogger(__name__) diff --git a/waves/core/tests/data/sample/fast_me/fail_file.txt b/waves/wcore/tests/data/sample/fast_me/fail_file.txt similarity index 100% rename from waves/core/tests/data/sample/fast_me/fail_file.txt rename to waves/wcore/tests/data/sample/fast_me/fail_file.txt diff --git a/waves/core/tests/data/sample/fast_me/fastme-dna.phy b/waves/wcore/tests/data/sample/fast_me/fastme-dna.phy similarity index 100% rename from waves/core/tests/data/sample/fast_me/fastme-dna.phy rename to waves/wcore/tests/data/sample/fast_me/fastme-dna.phy diff --git a/waves/core/tests/data/sample/fast_me/fastme_matrix.txt b/waves/wcore/tests/data/sample/fast_me/fastme_matrix.txt similarity index 100% rename from waves/core/tests/data/sample/fast_me/fastme_matrix.txt rename to waves/wcore/tests/data/sample/fast_me/fastme_matrix.txt diff --git a/waves/core/tests/data/sample/fast_me/nucleic.phy b/waves/wcore/tests/data/sample/fast_me/nucleic.phy similarity index 100% rename from waves/core/tests/data/sample/fast_me/nucleic.phy rename to waves/wcore/tests/data/sample/fast_me/nucleic.phy diff --git a/waves/core/tests/data/sample/maf/in.maf b/waves/wcore/tests/data/sample/maf/in.maf similarity index 100% rename from waves/core/tests/data/sample/maf/in.maf rename to waves/wcore/tests/data/sample/maf/in.maf diff --git a/waves/core/tests/data/sample/maf/out.fasta b/waves/wcore/tests/data/sample/maf/out.fasta similarity index 100% rename from waves/core/tests/data/sample/maf/out.fasta rename to waves/wcore/tests/data/sample/maf/out.fasta diff --git a/waves/core/tests/data/sample/maf/simple.maf b/waves/wcore/tests/data/sample/maf/simple.maf similarity index 100% rename from waves/core/tests/data/sample/maf/simple.maf rename to waves/wcore/tests/data/sample/maf/simple.maf diff --git a/waves/core/tests/data/sample/mafft/aln.fasta b/waves/wcore/tests/data/sample/mafft/aln.fasta similarity index 100% rename from waves/core/tests/data/sample/mafft/aln.fasta rename to waves/wcore/tests/data/sample/mafft/aln.fasta diff --git a/waves/core/tests/data/sample/physic_ist/outgroup_ex.txt b/waves/wcore/tests/data/sample/physic_ist/outgroup_ex.txt similarity index 100% rename from waves/core/tests/data/sample/physic_ist/outgroup_ex.txt rename to waves/wcore/tests/data/sample/physic_ist/outgroup_ex.txt diff --git a/waves/core/tests/data/sample/physic_ist/physic_ist_ex.txt b/waves/wcore/tests/data/sample/physic_ist/physic_ist_ex.txt similarity index 100% rename from waves/core/tests/data/sample/physic_ist/physic_ist_ex.txt rename to waves/wcore/tests/data/sample/physic_ist/physic_ist_ex.txt diff --git a/waves/core/tests/data/sample/physic_ist/runs.json b/waves/wcore/tests/data/sample/physic_ist/runs.json similarity index 100% rename from waves/core/tests/data/sample/physic_ist/runs.json rename to waves/wcore/tests/data/sample/physic_ist/runs.json diff --git a/waves/core/tests/data/sample/physic_ist/sourcetrees.nwk b/waves/wcore/tests/data/sample/physic_ist/sourcetrees.nwk similarity index 100% rename from waves/core/tests/data/sample/physic_ist/sourcetrees.nwk rename to waves/wcore/tests/data/sample/physic_ist/sourcetrees.nwk diff --git a/waves/core/tests/data/sample/sample_tree.nhx b/waves/wcore/tests/data/sample/sample_tree.nhx similarity index 100% rename from waves/core/tests/data/sample/sample_tree.nhx rename to waves/wcore/tests/data/sample/sample_tree.nhx diff --git a/waves/core/tests/data/sample/services/hello_world.sh b/waves/wcore/tests/data/sample/services/hello_world.sh similarity index 100% rename from waves/core/tests/data/sample/services/hello_world.sh rename to waves/wcore/tests/data/sample/services/hello_world.sh diff --git a/waves/core/tests/data/sample/test_copy.txt b/waves/wcore/tests/data/sample/test_copy.txt similarity index 100% rename from waves/core/tests/data/sample/test_copy.txt rename to waves/wcore/tests/data/sample/test_copy.txt diff --git a/waves/core/tests/fixtures/init.json b/waves/wcore/tests/fixtures/init.json similarity index 100% rename from waves/core/tests/fixtures/init.json rename to waves/wcore/tests/fixtures/init.json diff --git a/waves/core/tests/fixtures/jobs.json b/waves/wcore/tests/fixtures/jobs.json similarity index 100% rename from waves/core/tests/fixtures/jobs.json rename to waves/wcore/tests/fixtures/jobs.json diff --git a/waves/core/tests/fixtures/services.json b/waves/wcore/tests/fixtures/services.json similarity index 100% rename from waves/core/tests/fixtures/services.json rename to waves/wcore/tests/fixtures/services.json diff --git a/waves/core/tests/fixtures/users.json b/waves/wcore/tests/fixtures/users.json similarity index 100% rename from waves/core/tests/fixtures/users.json rename to waves/wcore/tests/fixtures/users.json diff --git a/waves/core/tests/settings.ini b/waves/wcore/tests/settings.ini similarity index 100% rename from waves/core/tests/settings.ini rename to waves/wcore/tests/settings.ini diff --git a/waves/core/tests/settings.ini.sample b/waves/wcore/tests/settings.ini.sample similarity index 100% rename from waves/core/tests/settings.ini.sample rename to waves/wcore/tests/settings.ini.sample diff --git a/waves/core/tests/test_adaptors.py b/waves/wcore/tests/test_adaptors.py similarity index 92% rename from waves/core/tests/test_adaptors.py rename to waves/wcore/tests/test_adaptors.py index bed0d96..7bf2abe 100644 --- a/waves/core/tests/test_adaptors.py +++ b/waves/wcore/tests/test_adaptors.py @@ -6,12 +6,12 @@ from django.test import TestCase import test_settings -import waves.core.adaptors.const -from waves.core.adaptors.cluster import LocalClusterAdaptor, SshClusterAdaptor -from waves.core.adaptors.exceptions import AdaptorException -from waves.core.adaptors.shell import LocalShellAdaptor, SshShellAdaptor, SshKeyShellAdaptor -from waves.core.tests.utils import * -from waves.core.utils.encrypt import Encrypt +import waves.wcore.adaptors.const +from waves.wcore.adaptors.cluster import LocalClusterAdaptor, SshClusterAdaptor +from waves.wcore.adaptors.exceptions import AdaptorException +from waves.wcore.adaptors.shell import LocalShellAdaptor, SshShellAdaptor, SshKeyShellAdaptor +from waves.wcore.tests.utils import * +from waves.wcore.utils.encrypt import Encrypt logger = logging.getLogger('tests') @@ -117,7 +117,7 @@ def testCpLocalJob(self): with open(source_file) as source, open(copied_file) as copy: self.assertEqual(source.read(), copy.read()) self.assertTrue(job.results_available) - self.assertEqual(job.status, waves.core.adaptors.const.JOB_TERMINATED) + self.assertEqual(job.status, waves.wcore.adaptors.const.JOB_TERMINATED) def testAllCpJob(self): for adaptor in self.adaptors: @@ -134,7 +134,7 @@ def testAllCpJob(self): with open(source_file) as source, open(copied_file) as copy: self.assertEqual(source.read(), copy.read()) self.assertTrue(job.results_available) - self.assertEqual(job.status, waves.core.adaptors.const.JOB_TERMINATED) + self.assertEqual(job.status, waves.wcore.adaptors.const.JOB_TERMINATED) except IOError as e: logger.info('Excepted file not present for job %s ', job) logger.exception(e.message) diff --git a/waves/core/tests/test_api.py b/waves/wcore/tests/test_api.py similarity index 93% rename from waves/core/tests/test_api.py rename to waves/wcore/tests/test_api.py index 044ff8c..3039cf2 100644 --- a/waves/core/tests/test_api.py +++ b/waves/wcore/tests/test_api.py @@ -3,15 +3,15 @@ import logging from urlparse import urlparse -import waves.core.adaptors.const +import waves.wcore.adaptors.const from django.contrib.auth import get_user_model from django.core.urlresolvers import reverse from rest_framework import status from rest_framework.test import APITestCase -from waves.core.models import Job -from waves.core.models.inputs import AParam -from waves.core.tests.base import WavesBaseTestCase -from waves.core.tests.utils import create_test_file +from waves.wcore.models import Job +from waves.wcore.models.inputs import AParam +from waves.wcore.tests.base import WavesBaseTestCase +from waves.wcore.tests.utils import create_test_file logger = logging.getLogger(__name__) User = get_user_model() @@ -22,14 +22,14 @@ class WavesAPITestCase(APITestCase, WavesBaseTestCase): def setUp(self): super(WavesAPITestCase, self).setUp() - super_user = User.objects.create(email='superadmin@waves.core.fr', username="superadmin", is_superuser=True) + super_user = User.objects.create(email='superadmin@waves.wcore.fr', username="superadmin", is_superuser=True) super_user.set_password('superadmin1234') super_user.save() - admin_user = User.objects.create(email='admin@waves.core.fr', username="admin", is_staff=True) + admin_user = User.objects.create(email='admin@waves.wcore.fr', username="admin", is_staff=True) admin_user.set_password('admin1234') admin_user.save() - api_user = User.objects.create(email="waves:api@waves.core.fr", username="api_user", is_staff=False, + api_user = User.objects.create(email="waves:api@waves.wcore.fr", username="api_user", is_staff=False, is_superuser=False, is_active=True) api_user.set_password('api_user1234') api_user.save() @@ -119,7 +119,7 @@ def test_create_job(self): jobs = Job.objects.all() for job in jobs: logger.debug('Job %s ', job) - self.assertEqual(job.status, waves.core.adaptors.const.JOB_CREATED) + self.assertEqual(job.status, waves.wcore.adaptors.const.JOB_CREATED) self.assertEqual(job.job_history.count(), 1) self.assertIsNotNone(job.job_inputs) self.assertIsNotNone(job.outputs) diff --git a/waves/core/tests/test_mails.py b/waves/wcore/tests/test_mails.py similarity index 86% rename from waves/core/tests/test_mails.py rename to waves/wcore/tests/test_mails.py index 2a90cff..e69db9b 100644 --- a/waves/core/tests/test_mails.py +++ b/waves/wcore/tests/test_mails.py @@ -2,14 +2,14 @@ import logging -import waves.core.adaptors.const +import waves.wcore.adaptors.const from django.conf import settings from django.core import mail from django.test import override_settings from django.utils import timezone -from waves.core.models import Job, JobInput, JobOutput, Service, Submission -from waves.core.settings import waves_settings as config -from waves.core.tests.base import WavesBaseTestCase +from waves.wcore.models import Job, JobInput, JobOutput, Service, Submission +from waves.wcore.settings import waves_settings as config +from waves.wcore.tests.base import WavesBaseTestCase logger = logging.getLogger(__name__) @@ -45,13 +45,13 @@ def test_mail_job(self): logger.debug('Mail subject: %s', sent_mail.subject) logger.debug('Mail from: %s', sent_mail.from_email) logger.debug('Mail content: \n%s', sent_mail.body) - job.status = waves.core.adaptors.const.JOB_COMPLETED + job.status = waves.wcore.adaptors.const.JOB_COMPLETED # job.save() job.check_send_mail() # no more mails self.assertEqual(len(mail.outbox), 1) - job.status = waves.core.adaptors.const.JOB_TERMINATED + job.status = waves.wcore.adaptors.const.JOB_TERMINATED # job.save() job.check_send_mail() self.assertEqual(len(mail.outbox), 2) @@ -59,7 +59,7 @@ def test_mail_job(self): logger.debug('Mail subject: %s', sent_mail.subject) logger.debug('Mail from: %s', sent_mail.from_email) logger.debug('Mail content: \n%s', sent_mail.body) - job.status = waves.core.adaptors.const.JOB_ERROR + job.status = waves.wcore.adaptors.const.JOB_ERROR # job.save() job.check_send_mail() # mail to user and mail to admin so +2 @@ -68,7 +68,7 @@ def test_mail_job(self): logger.debug('Mail subject: %s', sent_mail.subject) logger.debug('Mail from: %s', sent_mail.from_email) logger.debug('Mail content: \n%s', sent_mail.body) - job.status = waves.core.adaptors.const.JOB_CANCELLED + job.status = waves.wcore.adaptors.const.JOB_CANCELLED # job.save() job.check_send_mail() self.assertEqual(len(mail.outbox), 5) diff --git a/waves/core/tests/test_models.py b/waves/wcore/tests/test_models.py similarity index 86% rename from waves/core/tests/test_models.py rename to waves/wcore/tests/test_models.py index feccd90..997f064 100644 --- a/waves/core/tests/test_models.py +++ b/waves/wcore/tests/test_models.py @@ -7,12 +7,12 @@ from django.test import TestCase from django.utils.module_loading import import_string -import waves.core.adaptors.const -from waves.core.adaptors.adaptor import JobAdaptor -from waves.core.models import Job, Service -from waves.core.models.submissions import Submission -from waves.core.tests.base import WavesBaseTestCase -from waves.core.tests.utils import create_runners, create_service_for_runners +import waves.wcore.adaptors.const +from waves.wcore.adaptors.adaptor import JobAdaptor +from waves.wcore.models import Job, Service +from waves.wcore.models.submissions import Submission +from waves.wcore.tests.base import WavesBaseTestCase +from waves.wcore.tests.utils import create_runners, create_service_for_runners logger = logging.getLogger(__name__) @@ -41,7 +41,7 @@ def test_create_service(self): self.assertListEqual(sorted(service.run_params.keys()), sorted(service.runner.run_params.keys())) def test_load_service(self): - from waves.core.models.serializers.services import ServiceSerializer + from waves.wcore.models.serializers.services import ServiceSerializer import json init_count = Service.objects.all().count() file_paths = [] @@ -69,10 +69,10 @@ def test_jobs_signals(self): self.assertEqual(job.outputs.count(), 2) self.assertTrue(os.path.isdir(job.working_dir)) logger.debug('Job directories has been created %s ', job.working_dir) - self.assertEqual(job.status, waves.core.adaptors.const.JOB_CREATED) + self.assertEqual(job.status, waves.wcore.adaptors.const.JOB_CREATED) self.assertEqual(job.job_history.count(), 1) job.message = "Test job Message" - job.status = waves.core.adaptors.const.JOB_PREPARED + job.status = waves.wcore.adaptors.const.JOB_PREPARED job.save() self.assertGreaterEqual(job.job_history.filter(message__contains=job.message).all(), 0) job.delete() diff --git a/waves/core/tests/test_runner.py b/waves/wcore/tests/test_runner.py similarity index 76% rename from waves/core/tests/test_runner.py rename to waves/wcore/tests/test_runner.py index e50df32..9b2644a 100644 --- a/waves/core/tests/test_runner.py +++ b/waves/wcore/tests/test_runner.py @@ -5,13 +5,13 @@ import logging -import waves.core.adaptors.const -from waves.core.adaptors.exceptions import * -from waves.core.adaptors.mocks import MockJobRunnerAdaptor -from waves.core.exceptions.jobs import * -from waves.core.models import * -from waves.core.tests.base import WavesBaseTestCase -from waves.core.tests.utils import sample_runner, sample_job +import waves.wcore.adaptors.const +from waves.wcore.adaptors.exceptions import * +from waves.wcore.adaptors.mocks import MockJobRunnerAdaptor +from waves.wcore.exceptions.jobs import * +from waves.wcore.models import * +from waves.wcore.tests.base import WavesBaseTestCase +from waves.wcore.tests.utils import sample_runner, sample_job logger = logging.getLogger(__name__) @@ -43,7 +43,7 @@ def setUp(self): def tearDown(self): super(TestJobRunner, self).tearDown() - # if not waves.core.settings.WAVES_TEST_DEBUG: + # if not waves.wcore.settings.WAVES_TEST_DEBUG: # for job in self.jobs: # job.delete_job_dirs() @@ -64,7 +64,7 @@ def testWrongJobStates(self): self.adaptor = MockJobRunnerAdaptor(unexpected_param='unexpected value') self.jobs.append(self.current_job) self._debug_job_state() - self.current_job.status = waves.core.adaptors.const.JOB_RUNNING + self.current_job.status = waves.wcore.adaptors.const.JOB_RUNNING length1 = self.current_job.job_history.count() logger.debug('Test Prepare') self._debug_job_state() @@ -72,21 +72,21 @@ def testWrongJobStates(self): self.current_job.run_prepare() self._debug_job_state() logger.debug('Test Run') - self.current_job.status = waves.core.adaptors.const.JOB_UNDEFINED + self.current_job.status = waves.wcore.adaptors.const.JOB_UNDEFINED with self.assertRaises(JobInconsistentStateError): self.current_job.run_launch() self._debug_job_state() logger.debug('Test Cancel') - self.current_job.status = waves.core.adaptors.const.JOB_COMPLETED + self.current_job.status = waves.wcore.adaptors.const.JOB_COMPLETED with self.assertRaises(JobInconsistentStateError): self.current_job.run_cancel() # self.adaptor.cancel_job(self.current_job) logger.debug('Internal state %s, current %s', self.current_job._status, self.current_job.status) # status hasn't changed - self.assertEqual(self.current_job.status, waves.core.adaptors.const.JOB_COMPLETED) + self.assertEqual(self.current_job.status, waves.wcore.adaptors.const.JOB_COMPLETED) logger.debug('%i => %s', len(self.current_job.job_history.values()), self.current_job.job_history.values()) # assert that no history element has been added - self.current_job.status = waves.core.adaptors.const.JOB_RUNNING + self.current_job.status = waves.wcore.adaptors.const.JOB_RUNNING self.current_job.run_cancel() - self.assertTrue(self.current_job.status == waves.core.adaptors.const.JOB_CANCELLED) + self.assertTrue(self.current_job.status == waves.wcore.adaptors.const.JOB_CANCELLED) diff --git a/waves/core/tests/test_settings.py b/waves/wcore/tests/test_settings.py similarity index 100% rename from waves/core/tests/test_settings.py rename to waves/wcore/tests/test_settings.py diff --git a/waves/core/tests/utils.py b/waves/wcore/tests/utils.py similarity index 89% rename from waves/core/tests/utils.py rename to waves/wcore/tests/utils.py index 8a90f57..c983bb2 100644 --- a/waves/core/tests/utils.py +++ b/waves/wcore/tests/utils.py @@ -5,12 +5,12 @@ import time from os.path import join, dirname, realpath, isfile, basename -import waves.core.adaptors.const +import waves.wcore.adaptors.const from django.contrib.contenttypes.models import ContentType from django.utils.timezone import localtime -from waves.core.adaptors.loader import AdaptorLoader -from waves.core.models import * -from waves.core.settings import waves_settings +from waves.wcore.adaptors.loader import AdaptorLoader +from waves.wcore.models import * +from waves.wcore.settings import waves_settings logger = logging.getLogger(__name__) @@ -58,23 +58,23 @@ def run_job_workflow(self, job): "Wrong job history count %s (expected 1)" % job.job_history.count()) job.run_prepare() time.sleep(3) - self.assertTrue(job.status == waves.core.adaptors.const.JOB_PREPARED, - "Wrong job status %s (expected %s) " % (job.status, waves.core.adaptors.const.JOB_PREPARED)) + self.assertTrue(job.status == waves.wcore.adaptors.const.JOB_PREPARED, + "Wrong job status %s (expected %s) " % (job.status, waves.wcore.adaptors.const.JOB_PREPARED)) job.run_launch() time.sleep(3) logger.debug('Remote Job ID %s', job.remote_job_id) - self.assertTrue(job.status == waves.core.adaptors.const.JOB_QUEUED, - "Wrong job status %s (expected %s) " % (job.status, waves.core.adaptors.const.JOB_QUEUED)) + self.assertTrue(job.status == waves.wcore.adaptors.const.JOB_QUEUED, + "Wrong job status %s (expected %s) " % (job.status, waves.wcore.adaptors.const.JOB_QUEUED)) for ix in range(100): job_state = job.run_status() logger.info(u'Current job state (%i) : %s ', ix, job.get_status_display()) - if job_state >= waves.core.adaptors.const.JOB_COMPLETED: + if job_state >= waves.wcore.adaptors.const.JOB_COMPLETED: logger.info('Job state ended to %s ', job.get_status_display()) - if job_state == waves.core.adaptors.const.JOB_ERROR: + if job_state == waves.wcore.adaptors.const.JOB_ERROR: self.fail('Job is in error') break time.sleep(3) - if job.status in (waves.core.adaptors.const.JOB_COMPLETED, waves.core.adaptors.const.JOB_TERMINATED): + if job.status in (waves.wcore.adaptors.const.JOB_COMPLETED, waves.wcore.adaptors.const.JOB_TERMINATED): # Get job run details job.run_details() time.sleep(3) @@ -89,7 +89,7 @@ def run_job_workflow(self, job): job.title, output_job.value, job.slug) else: logger.info("Expected output file found : %s ", output_job.file_path) - self.assertTrue(job.status == waves.core.adaptors.const.JOB_TERMINATED) + self.assertTrue(job.status == waves.wcore.adaptors.const.JOB_TERMINATED) else: logger.warn('problem with job status %s', job.get_status_display()) return False diff --git a/waves/core/urls.py b/waves/wcore/urls.py similarity index 90% rename from waves/core/urls.py rename to waves/wcore/urls.py index 772d46e..02007a2 100644 --- a/waves/core/urls.py +++ b/waves/wcore/urls.py @@ -4,9 +4,9 @@ from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.decorators import login_required -from waves.core.admin.views import * -from waves.core.views.jobs import * -from waves.core.views.services import * +from waves.wcore.admin.views import * +from waves.wcore.views.jobs import * +from waves.wcore.views.services import * # TODO change auth decorators to specific WAVES ones waves_admin_url = [ @@ -43,8 +43,8 @@ waves_api_url = [ - url(r'^api/v1/', include('waves.core.api.v1.urls', namespace='api_v1')), - url(r'^api/', include('waves.core.api.v2.urls', namespace='api_v2')), + url(r'^api/v1/', include('waves.wcore.api.v1.urls', namespace='api_v1')), + url(r'^api/', include('waves.wcore.api.v2.urls', namespace='api_v2')), ] urlpatterns = waves_admin_url + waves_api_url + waves_front_url diff --git a/waves/core/utils/__init__.py b/waves/wcore/utils/__init__.py similarity index 100% rename from waves/core/utils/__init__.py rename to waves/wcore/utils/__init__.py diff --git a/waves/core/utils/encrypt.py b/waves/wcore/utils/encrypt.py similarity index 96% rename from waves/core/utils/encrypt.py rename to waves/wcore/utils/encrypt.py index 703fe1f..0956bd9 100644 --- a/waves/core/utils/encrypt.py +++ b/waves/wcore/utils/encrypt.py @@ -3,7 +3,7 @@ """ from __future__ import unicode_literals -from waves.core.settings import waves_settings +from waves.wcore.settings import waves_settings from Crypto.Cipher import XOR import base64 diff --git a/waves/core/utils/exception_logging_decorator.py b/waves/wcore/utils/exception_logging_decorator.py similarity index 100% rename from waves/core/utils/exception_logging_decorator.py rename to waves/wcore/utils/exception_logging_decorator.py diff --git a/waves/core/utils/storage.py b/waves/wcore/utils/storage.py similarity index 96% rename from waves/core/utils/storage.py rename to waves/wcore/utils/storage.py index 2ad96de..fe205c8 100644 --- a/waves/core/utils/storage.py +++ b/waves/wcore/utils/storage.py @@ -3,7 +3,7 @@ import os -from waves.core.settings import waves_settings +from waves.wcore.settings import waves_settings from django.core.files.storage import FileSystemStorage diff --git a/waves/core/utils/validators.py b/waves/wcore/utils/validators.py similarity index 93% rename from waves/core/utils/validators.py rename to waves/wcore/utils/validators.py index 8f5bb36..736b414 100644 --- a/waves/core/utils/validators.py +++ b/waves/wcore/utils/validators.py @@ -2,7 +2,7 @@ import os -import waves.core.models.services +import waves.wcore.models.services from django.core.exceptions import ValidationError """ @@ -47,14 +47,14 @@ def validate_input(self, the_input, value, form): form.add_error(the_input.name, 'Unknown param_type for input: %s - param_type: %s' % (the_input, the_input.type)) def _validate_input_boolean(self, the_input, value): - from waves.core.models.inputs import AParam + from waves.wcore.models.inputs import AParam # Add check format values self.specific_message = ' allowed values are "yes", "true", "1", "no", "false", "0", "None"' return str(value).lower() in ("yes", "true", "1", 'no', 'false', '0', 'none') and type( value) == bool and the_input.type == AParam.TYPE_BOOLEAN def _validate_input_file(self, the_input, value): - from waves.core.models.inputs import AParam + from waves.wcore.models.inputs import AParam from django.core.files.base import File assert the_input.type == AParam.TYPE_FILE self.specific_message = 'allowed extension are %s' % str([e[1] for e in the_input.choices]) @@ -75,7 +75,7 @@ def _validate_input_file(self, the_input, value): return True def _validate_input_int(self, the_input, value): - assert the_input.type == waves.core.adaptors.const.TYPE_INTEGER + assert the_input.type == waves.wcore.adaptors.const.TYPE_INTEGER self.specific_message = 'value %s is not a valid integer' % value if not the_input.mandatory and value is None: return True @@ -92,7 +92,7 @@ def _validate_input_number(self, the_input, value): return self._validate_input_int(the_input, value) def _validate_input_float(self, the_input, value): - assert the_input.type == waves.core.adaptors.const.TYPE_FLOAT + assert the_input.type == waves.wcore.adaptors.const.TYPE_FLOAT self.specific_message = 'value %s is not a valid float' % value if not the_input.mandatory and value is None: return True @@ -110,7 +110,7 @@ def _validate_input_select(self, the_input, value): return any(e[0] == value for e in the_input.choices) def _validate_input_text(self, the_input, value): - from waves.core.models.inputs import AParam + from waves.wcore.models.inputs import AParam assert the_input.type == AParam.TYPE_TEXT assert isinstance(value, basestring) or value is None, 'value %s is not a valid string' % value self.specific_message = 'value %s is not a valid string' % value diff --git a/waves/core/views/__init__.py b/waves/wcore/views/__init__.py similarity index 100% rename from waves/core/views/__init__.py rename to waves/wcore/views/__init__.py diff --git a/waves/core/views/files.py b/waves/wcore/views/files.py similarity index 100% rename from waves/core/views/files.py rename to waves/wcore/views/files.py diff --git a/waves/core/views/jobs.py b/waves/wcore/views/jobs.py similarity index 92% rename from waves/core/views/jobs.py rename to waves/wcore/views/jobs.py index bdcbda5..1a93038 100644 --- a/waves/core/views/jobs.py +++ b/waves/wcore/views/jobs.py @@ -3,8 +3,8 @@ from django.views import generic -from waves.core.models import Job, JobOutput, JobInput -from waves.core.views.files import DownloadFileView +from waves.wcore.models import Job, JobOutput, JobInput +from waves.wcore.views.files import DownloadFileView class JobView(generic.DetailView): diff --git a/waves/core/views/services.py b/waves/wcore/views/services.py similarity index 96% rename from waves/core/views/services.py rename to waves/wcore/views/services.py index de4f9e9..b22bcc2 100644 --- a/waves/core/views/services.py +++ b/waves/wcore/views/services.py @@ -6,10 +6,10 @@ from django.core.urlresolvers import reverse from django.views import generic -from waves.core.exceptions.jobs import JobException -from waves.core.forms.services import ServiceSubmissionForm -from waves.core.models import Job, Service -from waves.core.models.submissions import Submission +from waves.wcore.exceptions.jobs import JobException +from waves.wcore.forms.services import ServiceSubmissionForm +from waves.wcore.models import Job, Service +from waves.wcore.models.submissions import Submission diff --git a/waves_core/settings.py b/waves_core/settings.py index 894c957..1295d42 100644 --- a/waves_core/settings.py +++ b/waves_core/settings.py @@ -38,7 +38,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'waves.core', + 'waves.wcore', 'crispy_forms', 'rest_framework', ) @@ -126,7 +126,8 @@ STATIC_URL = '/static/' STATICFILES_DIRS = [ - os.path.join(BASE_DIR, "waves", "core", "static"), + os.path.join(BASE_DIR, "waves", "wcore", "static"), + os.path.join(BASE_DIR, "static") ] STATICFILES_FINDERS = ( diff --git a/waves_core/urls.py b/waves_core/urls.py index d0fb593..aaafbc7 100644 --- a/waves_core/urls.py +++ b/waves_core/urls.py @@ -22,6 +22,6 @@ urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='base_waves.html')), url(r'^admin/', admin.site.urls), - url(r'^waves/', include('waves.core.urls', namespace='waves')), + url(r'^waves/', include('waves.wcore.urls', namespace='waves')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)