From 399eb7796c5149358304b51a2e4123a559e59921 Mon Sep 17 00:00:00 2001 From: mboudet <mateo.boudet@gmail.com> Date: Fri, 1 Jul 2022 20:17:02 +0200 Subject: [PATCH] Release 4.4.0 (#356) --- .github/workflows/lint_test.yml | 6 +- CHANGELOG.md | 54 + Makefile | 39 +- Pipfile | 4 +- Pipfile.lock | 1295 ++++++++++------- README.md | 1 + askomics/api/admin.py | 310 ++++ askomics/api/data.py | 12 +- askomics/api/datasets.py | 7 + askomics/api/file.py | 31 +- askomics/api/ontology.py | 59 + askomics/api/query.py | 8 +- askomics/api/results.py | 10 +- askomics/api/sparql.py | 2 +- askomics/api/start.py | 9 +- askomics/app.py | 4 +- askomics/libaskomics/BedFile.py | 32 +- askomics/libaskomics/CsvFile.py | 114 +- askomics/libaskomics/Database.py | 115 ++ askomics/libaskomics/Dataset.py | 61 +- askomics/libaskomics/DatasetsHandler.py | 10 +- askomics/libaskomics/File.py | 12 +- askomics/libaskomics/FilesHandler.py | 122 +- askomics/libaskomics/GffFile.py | 56 +- askomics/libaskomics/LocalAuth.py | 20 +- askomics/libaskomics/OntologyManager.py | 279 ++++ askomics/libaskomics/PrefixManager.py | 82 +- askomics/libaskomics/RdfFile.py | 33 +- askomics/libaskomics/RdfGraph.py | 1 + askomics/libaskomics/Result.py | 29 +- askomics/libaskomics/SparqlQuery.py | 254 +++- askomics/libaskomics/SparqlQueryLauncher.py | 15 +- askomics/libaskomics/TriplestoreExplorer.py | 69 +- .../react/src/components/autocomplete.jsx | 147 ++ askomics/react/src/navbar.jsx | 4 +- askomics/react/src/routes.jsx | 9 +- askomics/react/src/routes/admin/admin.jsx | 3 +- .../react/src/routes/admin/datasetstable.jsx | 2 +- .../react/src/routes/admin/ontologies.jsx | 365 +++++ askomics/react/src/routes/admin/prefixes.jsx | 257 ++++ askomics/react/src/routes/ask/ask.jsx | 7 +- askomics/react/src/routes/data/data.jsx | 10 +- .../src/routes/datasets/datasetstable.jsx | 4 +- askomics/react/src/routes/form/attribute.jsx | 100 +- askomics/react/src/routes/form/query.jsx | 17 +- .../react/src/routes/form_edit/attribute.jsx | 100 +- askomics/react/src/routes/form_edit/query.jsx | 20 +- .../routes/integration/advancedoptions.jsx | 10 +- .../src/routes/integration/bedpreview.jsx | 23 +- .../react/src/routes/integration/csvtable.jsx | 74 +- .../src/routes/integration/gffpreview.jsx | 30 +- .../src/routes/integration/integration.jsx | 5 +- .../src/routes/integration/rdfpreview.jsx | 23 +- askomics/react/src/routes/query/attribute.jsx | 142 +- .../react/src/routes/query/graphfilters.js | 8 +- .../react/src/routes/query/ontolinkview.jsx | 46 + askomics/react/src/routes/query/query.jsx | 163 ++- .../react/src/routes/query/visualization.jsx | 2 +- .../src/routes/results/resultsfilestable.jsx | 3 +- .../react/src/routes/sparql/resultstable.jsx | 2 +- .../react/src/routes/upload/filestable.jsx | 15 + .../react/src/routes/upload/uploadurlform.jsx | 6 +- askomics/static/about.html | 2 +- askomics/static/css/askomics.css | 35 +- askomics/tasks.py | 41 +- config/askomics.ini.template | 36 +- config/askomics.test.ini | 33 +- docker/Dockerfile | 6 +- docker/DockerfileAll | 6 +- docker/DockerfileCelery | 4 +- docs/abstraction.md | 179 ++- docs/ci.md | 2 +- docs/cli.md | 13 + docs/configure.md | 5 +- docs/console.md | 51 + docs/contribute.md | 6 +- docs/data.md | 181 ++- docs/dev-deployment.md | 6 +- docs/docs.md | 8 +- docs/federation.md | 36 +- docs/galaxy.md | 19 +- docs/img/askogalaxy.png | Bin 15352 -> 15318 bytes docs/img/askograph.png | Bin 0 -> 34589 bytes docs/img/attribute_box.png | Bin 0 -> 1560 bytes docs/img/attributes.png | Bin 0 -> 15032 bytes docs/img/csv_convert.png | Bin 0 -> 251893 bytes docs/img/custom_nodes.png | Bin 0 -> 5745 bytes docs/img/external_startpoint.png | Bin 11895 -> 11646 bytes docs/img/faldo.png | Bin 0 -> 18666 bytes docs/img/filters.png | Bin 0 -> 2612 bytes docs/img/form.png | Bin 0 -> 4052 bytes docs/img/form_edit.png | Bin 0 -> 12392 bytes docs/img/form_example.png | Bin 0 -> 12575 bytes docs/img/gff.png | Bin 2854 -> 2275 bytes docs/img/gff_preview.png | Bin 11601 -> 11892 bytes docs/img/minus.png | Bin 0 -> 13218 bytes docs/img/ontology_autocomplete.png | Bin 0 -> 13559 bytes docs/img/ontology_graph.png | Bin 0 -> 17176 bytes docs/img/ontology_integration.png | Bin 0 -> 6323 bytes docs/img/ontology_link.png | Bin 0 -> 13408 bytes docs/img/sparql.png | Bin 0 -> 119634 bytes docs/img/startpoint.png | Bin 15514 -> 15434 bytes docs/img/template.png | Bin 0 -> 3700 bytes docs/img/union.png | Bin 0 -> 16347 bytes docs/img/union_duplicated.png | Bin 0 -> 15609 bytes docs/index.md | 18 +- docs/issues.md | 1 - docs/manage.md | 45 +- docs/ontologies.md | 60 + docs/prefixes.md | 11 + docs/production-deployment.md | 8 +- docs/query.md | 299 ++++ docs/requirements.txt | 3 +- docs/results.md | 79 + docs/style.css | 23 +- docs/template.md | 98 ++ docs/tutorial.md | 115 +- mkdocs.yml | 18 +- package-lock.json | 160 +- package.json | 8 +- setup.py | 6 +- test-data/agro_min.ttl | 70 + test-data/gene.bed | 2 +- test-data/gene.gff3 | 2 + test-data/transcripts.tsv | 22 +- tests/__init__.py | 3 + tests/conftest.py | 95 +- tests/results/abstraction.json | 62 +- tests/results/data.json | 54 - tests/results/data_full.json | 62 + tests/results/data_public.json | 54 + tests/results/init.json | 2 +- tests/results/preview.json | 28 +- tests/results/preview_files.json | 36 +- tests/results/preview_malformed_files.json | 2 +- tests/results/results.json | 2 +- tests/results/results_admin.json | 2 +- tests/results/results_form.json | 2 +- tests/results/sparql_and_graph.json | 3 +- tests/results/sparql_preview.json | 22 +- tests/results/sparql_query.json | 2 +- tests/results/startpoints.json | 12 +- tests/test_api.py | 5 +- tests/test_api_admin.py | 247 +++- tests/test_api_data.py | 12 +- tests/test_api_datasets.py | 30 +- tests/test_api_file.py | 95 +- tests/test_api_ontology.py | 73 + tests/test_api_query.py | 6 +- 149 files changed, 5825 insertions(+), 1555 deletions(-) create mode 100644 askomics/api/ontology.py create mode 100644 askomics/libaskomics/OntologyManager.py create mode 100644 askomics/react/src/components/autocomplete.jsx create mode 100644 askomics/react/src/routes/admin/ontologies.jsx create mode 100644 askomics/react/src/routes/admin/prefixes.jsx create mode 100644 askomics/react/src/routes/query/ontolinkview.jsx create mode 100644 docs/cli.md create mode 100644 docs/console.md create mode 100644 docs/img/askograph.png create mode 100644 docs/img/attribute_box.png create mode 100644 docs/img/attributes.png create mode 100644 docs/img/csv_convert.png create mode 100644 docs/img/custom_nodes.png create mode 100644 docs/img/faldo.png create mode 100644 docs/img/filters.png create mode 100644 docs/img/form.png create mode 100644 docs/img/form_edit.png create mode 100644 docs/img/form_example.png create mode 100644 docs/img/minus.png create mode 100644 docs/img/ontology_autocomplete.png create mode 100644 docs/img/ontology_graph.png create mode 100644 docs/img/ontology_integration.png create mode 100644 docs/img/ontology_link.png create mode 100644 docs/img/sparql.png create mode 100644 docs/img/template.png create mode 100644 docs/img/union.png create mode 100644 docs/img/union_duplicated.png delete mode 100644 docs/issues.md create mode 100644 docs/ontologies.md create mode 100644 docs/prefixes.md create mode 100644 docs/query.md create mode 100644 docs/results.md create mode 100644 docs/template.md create mode 100644 test-data/agro_min.ttl delete mode 100644 tests/results/data.json create mode 100644 tests/results/data_full.json create mode 100644 tests/results/data_public.json create mode 100644 tests/test_api_ontology.py diff --git a/.github/workflows/lint_test.yml b/.github/workflows/lint_test.yml index 1be124fb..84ca6d05 100644 --- a/.github/workflows/lint_test.yml +++ b/.github/workflows/lint_test.yml @@ -8,7 +8,7 @@ jobs: uses: actions/checkout@v2 - uses: actions/setup-python@v1 with: - python-version: 3.7 + python-version: 3.8 - name: Install flake8 run: pip install flake8 - name: Flake8 @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v2 - uses: actions/setup-python@v1 with: - python-version: 3.6 + python-version: 3.8 - name: Update apt cache run: sudo apt-get update - name: Install python-ldap deps @@ -50,7 +50,7 @@ jobs: docker pull xgaia/corese:latest docker pull xgaia/isql-api:2.1.1 docker pull xgaia/simple-ldap:latest - docker run -d --name virtuoso -p 8891:8890 -p 1112:1111 -e DBA_PASSWORD=dba -e SPARQL_UPDATE=true -e DEFAULT_GRAPH=http://localhost:8891/DAV -t askomics/virtuoso:7.2.5.1 /bin/sh -c "netstat -nr | grep '^0\.0\.0\.0' | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | grep -v '^0\.0\.0\.0' | sed 's/$/ askomics-host/' >> /etc/hosts && /virtuoso/virtuoso.sh" + docker run -d --name virtuoso -p 8891:8890 -p 1112:1111 -e DBA_PASSWORD=dba -e DEFAULT_GRAPH=http://localhost:8891/DAV -t askomics/virtuoso:7.2.5.1 /bin/sh -c "netstat -nr | grep '^0\.0\.0\.0' | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | grep -v '^0\.0\.0\.0' | sed 's/$/ askomics-host/' >> /etc/hosts && /virtuoso/virtuoso.sh" sleep 1m docker run -d --name redis -p 6380:6379 -t redis:4.0 docker run -d --name galaxy -p 8081:80 -t bgruening/galaxy-stable:20.05 diff --git a/CHANGELOG.md b/CHANGELOG.md index a6897dd9..0766ab02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,60 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 This changelog was started for release 4.2.0. +## [4.4.0] - 2022-07-01 + +### Fixed + +- Fixed an issue with forms (missing field and entity name for label & uri fields) (Issue #255) +- Fixed an issue with the data endpoint for FALDO entities (Issue #279) +- Fixed an issue where integration would fail when setting a category type on a empty column (#334) +- Fixed an issue with saved queries for non-logged users + +### Added + +- Added 'scaff' for autodetection of 'reference' columns +- Added a 'Label' column type: only for second column in CSV files. Will use this value if present, else default to old behavior +- Added button to hide FALDO relations (*included_in*) +- Added 'target=_blank' in query results +- Remote upload is now sent in a Celery task +- Added 'Status' for files (for celery upload, and later for better file management) +- Added tooltips to buttons in the query form (and other forms) +- Added owl integration +- Add better error management for RDF files +- Added 'single tenant' mode: Send queries to all graphs to speed up +- Added ontologies management +- Added prefixes management +- Added 'external graph' management for federated request: federated requests will only target this remote graph +- Added support for multithread in web server, with the *WORKERS* env variable when calling make + +### Changed + +- Changed "Query builder" to "Form editor" in form editing interface +- Changed abstraction building method for relations. (Please refer to #248 and #268). Correct 'phantom' relations +- Changed abstraction building method for attributes. (Please refer to #321 and #324). Correct 'attributes' relations +- Changed abstraction building method for 'strand': only add the required strand type, and not all three types (#277) +- Updated documentation +- Changed the sparql endpoint: now use the authenticated SPARQL endpoint instead of public endpoint. Write permissions are not required anymore +- Reverted base docker image to alpine-13 to solve a docker issue + +### Removed + +- Removed "Remote endpoint" field for non-ttl file +- Removed "Custom_uri" field for ttl file + +### Security + +- Bump axios from 0.21.1 to 0.21.2 +- Bump tar from 6.1.0 to 6.1.11 +- Bump @npmcli/git from 2.0.6 to 2.1.0 +- Bump path-parse from 1.0.6 to 1.0.7 +- Bump prismjs from 1.23.0 to 1.27.0 +- Bump simple-get from 2.8.1 to 2.8.2 +- Bump ssri from 6.0.1 to 6.0.2 +- Bump follow-redirects from 1.14.4 to 1.14.8 +- Bump mkdocs from 1.0.4 to 1.2.3 in /docs +- Bump python-ldap from 3.3.1 to 3.4.0 +- Bump minimist from 1.2.5 to 1.2.6 ## [4.3.1] - 2021-06-16 diff --git a/Makefile b/Makefile index 7b1a35bf..12f74d0c 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ FLASKOPTS= PYTESTOPTS= TESTFILE?=tests NTASKS?=1 +WORKERS?=1 HOST?=0.0.0.0 PORT?=5000 @@ -52,20 +53,20 @@ help: @echo ' make clean Uninstall everything' @echo ' make install [MODE=dev] Install Python and Js dependencies (+ dev dependencies if MODE=dev)' @echo ' make build [MODE=dev] Build javascript (and watch for update if MODE=DEV)' - @echo ' make serve [MODE=dev] [HOST=0.0.0.0] [PORT=5000] [NTASKS=1] Serve AskOmics at $(HOST):$(PORT)' + @echo ' make serve [MODE=dev] [HOST=0.0.0.0] [PORT=5000] [NTASKS=1] [WORKERS=1] Serve AskOmics at $(HOST):$(PORT)' @echo ' make test Lint and test javascript and python code' @echo ' make serve-doc [DOCPORT=8000] Serve documentation at localhost:$(DOCPORT)' @echo ' make update-base-url Update all graphs from an old base_url to a new base_url' @echo ' make clear-cache Clear abstraction cache' @echo '' @echo 'Examples:' - @echo ' make clean install build serve NTASKS=10 Clean install and serve AskOmics in production mode, 10 celery tasks in parallel' - @echo ' make clean install serve MODE=dev NTASKS=10 Clean install and serve AskOmics in development mode, 10 celery tasks in parallel' + @echo ' make clean install build serve NTASKS=10 WORKERS=2 Clean install and serve AskOmics in production mode, 10 celery tasks in parallel, 2 workers on the web server' + @echo ' make clean install serve MODE=dev NTASKS=10 WORKERS=2 Clean install and serve AskOmics in development mode, 10 celery tasks in parallel, 2 workers on the web server' @echo '' @echo ' make clean install Clean install AskOmics' @echo ' make clean install MODE=dev Clean install AskOmics in development mode' - @echo ' make serve NTASKS=10 Serve AskOmics, 10 celery tasks in parallel' - @echo ' make serve MODE=dev NTASKS=10 Serve AskOmics in development mode, 10 celery tasks in parallel' + @echo ' make serve NTASKS=10 WORKERS=2 Serve AskOmics, 10 celery tasks in parallel, 2 workers on the web server' + @echo ' make serve MODE=dev NTASKS=10 WORKERS=2 Serve AskOmics in development mode, 10 celery tasks in parallel, 2 workers on the web server' @echo '' @echo ' make pytest MODE=dev TESTFILE=tests/test_api.py Test tests/test_api file only' @@ -81,7 +82,7 @@ test-js: eslint eslint: check-node-modules @echo -n 'Linting javascript... ' - $(NODEDIR)/.bin/eslint --config $(BASEDIR)/.eslintrc.yml "$(BASEDIR)/askomics/react/src/**" + $(NODEDIR)/.bin/eslint --config $(BASEDIR)/.eslintrc.yml "$(BASEDIR)/askomics/react/src/**" || { echo "ERROR"; exit 1; } @echo "Done" test-python: pylint pytest @@ -94,7 +95,7 @@ pytest: check-venv pylint: check-venv @echo -n 'Linting python... ' . $(ACTIVATE) - flake8 $(BASEDIR)/askomics $(BASEDIR)/tests --ignore=E501,W504 + flake8 $(BASEDIR)/askomics $(BASEDIR)/tests --ignore=E501,W504 || { echo "ERROR"; exit 1; } @echo "Done" serve: check-venv build-config create-user @@ -106,7 +107,7 @@ serve-askomics: check-venv build-config create-user ifeq ($(MODE), dev) FLASK_ENV=development FLASK_APP=app flask run --host=$(HOST) --port $(PORT) else - FLASK_ENV=production FLASK_APP=app gunicorn -b $(HOST):$(PORT) app + FLASK_ENV=production FLASK_APP=app gunicorn -w $(WORKERS) -b $(HOST):$(PORT) app endif serve-celery: check-venv build-config create-user @@ -126,32 +127,32 @@ check-node-modules: build-config: @echo -n 'Building config file... ' - bash cli/set_config.sh + bash cli/set_config.sh || { echo "ERROR"; exit 1; } @echo 'Done' create-user: @echo -n 'Creating first user... ' . $(ACTIVATE) - bash cli/set_user.sh + bash cli/set_user.sh || { echo "ERROR"; exit 1; } @echo 'Done' update-base-url: check-venv @echo 'Updating base url...' . $(ACTIVATE) - bash cli/update_base_url.sh + bash cli/update_base_url.sh || { echo "ERROR"; exit 1; } @echo 'Done' clear-cache: check-venv @echo 'Clearing abstraction cache...' . $(ACTIVATE) - bash cli/clear_cache.sh + bash cli/clear_cache.sh || { echo "ERROR"; exit 1; } @echo 'Done' build: build-js build-js: check-node-modules @echo 'Building askomics.js... ' - $(NPM) run --silent $(NPMOPTS) + $(NPM) run --silent $(NPMOPTS) || { echo "ERROR"; exit 1; } @echo ' Done' install: install-python install-js @@ -161,22 +162,22 @@ fast-install: install-python: check-python @echo -n 'Building python virtual environment... ' - $(PYTHON) -m venv $(VENVDIR) + $(PYTHON) -m venv $(VENVDIR) || { echo "ERROR"; exit 1; } @echo 'Done' @echo -n 'Sourcing Python virtual environment... ' - . $(ACTIVATE) + . $(ACTIVATE) || { echo "ERROR"; exit 1; } @echo 'Done' @echo -n 'Upgrading pip... ' - $(PIP) install --upgrade pip > /dev/null + $(PIP) install --upgrade pip > /dev/null || { echo "ERROR"; exit 1; } @echo 'Done' @echo 'Installing Python dependencies inside virtual environment... ' - $(PIP) install -e . > /dev/null - PIPENV_VERBOSITY=-1 $(PIPENV) install $(PIPENVOPTS) + $(PIP) install -e . > /dev/null || { echo "ERROR"; exit 1; } + PIPENV_VERBOSITY=-1 $(PIPENV) install $(PIPENVOPTS) || { echo "ERROR"; exit 1; } @echo ' Done' install-js: check-npm @echo 'Installing javascript dependencies inside node_modules... ' - $(NPM) install --silent + $(NPM) install || { echo "ERROR"; exit 1; } @echo ' Done' clean: clean-js clean-python diff --git a/Pipfile b/Pipfile index 0dde7cdf..6509b8eb 100644 --- a/Pipfile +++ b/Pipfile @@ -5,7 +5,7 @@ name = "pypi" [packages] werkzeug = "==0.16.1" -flask = "==1.1.4" +flask = "<2" flask-reverse-proxy-fix = "*" validate-email = "*" gunicorn = "*" @@ -13,7 +13,7 @@ python-magic = "*" rdflib = "*" sparqlwrapper = "*" requests = "*" -celery = "*" +celery = "==5.0.5" redis = "*" watchdog = "*" gitpython = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 6c8940c3..ef4d555b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f208e36a35ade8b9d94b025ec7085c79f6b57dbd69ae9dd2b08c8b06418242fe" + "sha256": "5d768dd0f5c397f0380f7a594b66aed5e23d923674edfa3c62b4e47f5ce3e81e" }, "pipfile-spec": 6, "requires": {}, @@ -19,6 +19,7 @@ "sha256:03e16e94f2b34c31f8bf1206d8ddd3ccaa4c315f7f6a1879b7b1210d229568c2", "sha256:493a2ac6788ce270a2f6a765b017299f60c1998f5a8617908ee9be082f7300fb" ], + "markers": "python_version >= '3.6'", "version": "==5.0.6" }, "argh": { @@ -31,10 +32,10 @@ }, "bcbio-gff": { "hashes": [ - "sha256:74c6920c91ca18ed9cb872e9471c0be442dad143d8176345917eb1fefc86bc37" + "sha256:34dfa970e14f4533dc63c0a5512b7b5221e4a06449e6aaa344162ed5fdd7a1de" ], "index": "pypi", - "version": "==0.6.6" + "version": "==0.6.9" }, "billiard": { "hashes": [ @@ -45,42 +46,42 @@ }, "bioblend": { "hashes": [ - "sha256:a362a251a9429f17713bda51b29ccd3f4616a7613eedeb23e828307afb93eb34", - "sha256:ed37c858c890c41aff41da071838b92bec77a74f1b8d9e0562d40936ce5c255a" + "sha256:057450d39054cf91fff31e9025f269eb08e1ef1b437d71dfc73957e7cb0d8195", + "sha256:814312e3583a4cbb4ffaa1fb103107d9a24c069604abf51c670251fdc8bf094a" ], "index": "pypi", - "version": "==0.15.0" + "version": "==0.16.0" }, "biopython": { "hashes": [ - "sha256:010142a8ec2549ff0649edd497658964ef1a18eefdb9fd942ec1e81b292ce2d9", - "sha256:0b9fbb0d3022dc22716da108b8a81b80d952cd97ac1f106de491dce850f92f62", - "sha256:0df5cddef2819c975e6508adf5d85aa046e449df5420d02b04871c7836b41273", - "sha256:194528eda6856a4c68f840ca0bcc9b544a5edee3548b97521084e7ac38c833ca", - "sha256:195f099c2c0c39518b6df921ab2b3cc43a601896018fc61909ac8385d5878866", - "sha256:1df0bce7fd5e2414d6e18c9229fa0056914d2b9041531c71cac48f38a622142d", - "sha256:1ee0a0b6c2376680fea6642d5080baa419fd73df104a62d58a8baf7a8bbe4564", - "sha256:2bd5a630be2a8e593094f7b1717fc962eda8931b68542b97fbf9bd8e2ac1e08d", - "sha256:4565c97fab16c5697d067b821b6a1da0ec3ef36a9c96cf103ac7b4a94eb9f9ba", - "sha256:48d424453a5512a1d1d41a4acabdfe5291da1f491a2d3606f2b0e4fbd63aeda6", - "sha256:5c0b369f91a76b8e5e36624d075585c3f0f088ea4a6e3d015c48f08e48ce0114", - "sha256:639461a1ac5765406ec8ab8ed619845351f2ff22fed734d86e09e4a7b7719a08", - "sha256:6ed345b1ef100d58d8376e31c280b13fc87bb8f73ccc447f8140344991b61459", - "sha256:75b55000793f6b76334b8e80dc7e6d8cd2b019af917aa431cea6646e8e696c7f", - "sha256:9b4374a47d924d4d4ffe2fea010ce75427bbfd92e45d50d5b1213a478baf680f", - "sha256:ada611f12ee3b0bef7308ef41ee7b94898613b369ab44e0268d74bd1d6a06920", - "sha256:b470c44d7a04e40a0cfc65853b1a5a6bf506a130c334cf4cffa05df07dbda366", - "sha256:c130c8e64ae2e4c7c73f0c24974ac8a832190cc3cf3c3c7b4aaffc974effc993", - "sha256:cc3b0b78022d14f11d508038a288a189d03c97c476d6636c7b6f98bd8bc8462b", - "sha256:cfb93842501ebc0e0ef6520daddcbeeefc9b61736972580917dafd5c8a5a8041", - "sha256:d15d09bfe0d3a8a416a596a3909d9718c811df852d969592b4fa9e0da9cf7375", - "sha256:e0af107cc62a905d13d35dd7b38f335a37752ede45e4617139e84409a6a88dc4", - "sha256:f1076653937947773768455556b1d24acad9575759e9089082f32636b09add54", - "sha256:f5021a398c898b9cf6815cc5171c146a601b935b55364c53e6516a2545ab740c", - "sha256:fe2bcf85d0f5f1888ed7d86c139e9d4e7d54e036c8ac54e929663d63548046a1" + "sha256:03ee5c72b3cc3f0675a8c22ce1c45fe99a32a60db18df059df479ae6cf619708", + "sha256:155c5b95857bca7ebd607210cb9d8ea459bb0b86b3ca37ea44ec47c26ede7e9a", + "sha256:2dbb4388c75b5dfca8ce729e791f465c9c878dbd7ba2ab9a1f9854609d2b5426", + "sha256:365569543ea58dd07ef205ec351c23b6c1a3200d5d321eb28ceaecd55eb5955e", + "sha256:4b3d4eec2e348c3d97a7fde80ee0f2b8ebeed849d2bd64a616833a9be03b93c8", + "sha256:4be31815226052d86d4c2f6a103c40504e34bba3e25cc1b1d687a3203c42fb6e", + "sha256:51eb467a60c38820ad1e6c3a7d4cb10535606f559646e824cc65c96091d91ff7", + "sha256:5ae69c5e09769390643aa0f8064517665df6fb99c37433821d6664584d0ecb8c", + "sha256:72a1477cf1701964c7224e506a54fd65d1cc5228da200b634a17992230aa1cbd", + "sha256:76988ed3d7383d566db1d7fc69c9cf136c6275813fb749fc6753c340f81f1a8f", + "sha256:83bfea8a19f9352c47b13965c4b73853e7aeef3c5aed8489895b0679e32c621b", + "sha256:884a2b99ac7820cb84f70089769a512e3238ee60438b8c934ed519613dc570ce", + "sha256:8f33dafd3c7254fff5e1684b965e45a7c08d9b8e1bf51562b0a521ff9a6f5ea0", + "sha256:947b793e804c59ea45ae46945a57612ad1789ca87af4af0d6a62dcecf3a6246a", + "sha256:9580978803b582e0612b71673cab289e6bf261a865009cfb9501d65bc726a76e", + "sha256:98deacc30b8654cfcdcf707d93fa4e3c8717bbda07c3f9f828cf84753d4a1e4d", + "sha256:aa23a83a220486af6193760d079b36543fe00afcfbd18280ca2fd0b2c1c8dd6d", + "sha256:ab93d5749b375be3682866b3a606aa2ebd3e6d868079793925bf4fbb0987cf1f", + "sha256:b3ab26f26a1956ef26303386510d84e917e31fcbbc94918c336da0163ef628df", + "sha256:bf634a56f449a4123e48e538d661948e5ac29fb452acd2962b8cb834b472a9d7", + "sha256:ceab668be9cbdcddef55ad459f87acd0316ae4a00d32251fea4cf665f5062fda", + "sha256:d9f6ce961e0c380e2a5435f64c96421dbcebeab6a1b41506bd81251feb733c08", + "sha256:e921571b51514a6d35944242d6fef6427c3998acf58940fe1f209ac8a92a6e87", + "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b", + "sha256:f0a7e1d94a318f74974345fd0987ec389b16988ec484e67218e900b116b932a8" ], "index": "pypi", - "version": "==1.78" + "version": "==1.79" }, "blinker": { "hashes": [ @@ -95,6 +96,14 @@ ], "version": "==2.49.0" }, + "cached-property": { + "hashes": [ + "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", + "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" + ], + "markers": "python_version < '3.8'", + "version": "==1.5.2" + }, "celery": { "hashes": [ "sha256:5e8d364e058554e83bbb116e8377d90c79be254785f357cb2cec026e79febe13", @@ -105,30 +114,34 @@ }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", + "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" ], - "version": "==2020.12.5" + "version": "==2021.10.8" }, - "chardet": { + "charset-normalizer": { "hashes": [ - "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", - "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" + "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721", + "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c" ], - "version": "==4.0.0" + "markers": "python_version >= '3'", + "version": "==2.0.9" }, "click": { "hashes": [ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "click-didyoumean": { "hashes": [ - "sha256:112229485c9704ff51362fe34b2d4f0b12fc71cc20f6d2b3afabed4b8bfa6aeb" + "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667", + "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035" ], - "version": "==0.0.3" + "markers": "python_full_version >= '3.6.2' and python_full_version < '4.0.0'", + "version": "==0.3.0" }, "click-plugins": { "hashes": [ @@ -139,26 +152,34 @@ }, "click-repl": { "hashes": [ - "sha256:9c4c3d022789cae912aad8a3f5e1d7c2cdd016ee1225b5212ad3e8691563cda5", - "sha256:b9f29d52abc4d6059f8e276132a111ab8d94980afe6a5432b9d996544afa95d5" + "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b", + "sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8" ], - "version": "==0.1.6" + "version": "==0.2.0" }, "configparser": { "hashes": [ - "sha256:85d5de102cfe6d14a5172676f09d19c465ce63d6019cf0a4ef13385fc535e828", - "sha256:af59f2cdd7efbdd5d111c1976ecd0b82db9066653362f0962d7bf1d3ab89a1fa" + "sha256:1b35798fdf1713f1c3139016cfcbc461f09edbf099d1fb658d4b7479fcaa3daa", + "sha256:e8b39238fb6f0153a069aa253d349467c3c4737934f253ef6abac5fe0eca1e5d" ], "index": "pypi", - "version": "==5.0.2" + "version": "==5.2.0" }, "deepdiff": { "hashes": [ - "sha256:dd79b81c2d84bfa33aa9d94d456b037b68daff6bb87b80dfaa1eca04da68b349", - "sha256:e054fed9dfe0d83d622921cbb3a3d0b3a6dd76acd2b6955433a0a2d35147774a" + "sha256:e3f1c3a375c7ea5ca69dba6f7920f9368658318ff1d8a496293c79481f48e649", + "sha256:ef3410ca31e059a9d10edfdff552245829835b3ecd03212dc5b533d45a6c3f57" ], "index": "pypi", - "version": "==5.5.0" + "version": "==5.6.0" + }, + "deprecated": { + "hashes": [ + "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", + "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.13" }, "flask": { "hashes": [ @@ -178,18 +199,19 @@ }, "gitdb": { "hashes": [ - "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0", - "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005" + "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd", + "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa" ], - "version": "==4.0.7" + "markers": "python_version >= '3.6'", + "version": "==4.0.9" }, "gitpython": { "hashes": [ - "sha256:29fe82050709760081f588dd50ce83504feddbebdc4da6956d02351552b1c135", - "sha256:ee24bdc93dce357630764db659edaf6b8d664d4ff5447ccfeedd2dc5c253f41e" + "sha256:dc0a7f2f697657acc8d7f89033e8b1ea94dd90356b2983bca89dc8d2ab3cc647", + "sha256:df83fdf5e684fef7c6ee2c02fc68a5ceb7e7e759d08b694088d0cacb4eba59e5" ], "index": "pypi", - "version": "==3.1.17" + "version": "==3.1.24" }, "gunicorn": { "hashes": [ @@ -201,18 +223,19 @@ }, "idna": { "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "version": "==2.10" + "markers": "python_version >= '3'", + "version": "==3.3" }, "importlib-metadata": { "hashes": [ - "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581", - "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d" + "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100", + "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb" ], "markers": "python_version < '3.8'", - "version": "==4.0.1" + "version": "==4.8.2" }, "isodate": { "hashes": [ @@ -226,6 +249,7 @@ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.0" }, "jinja2": { @@ -233,117 +257,176 @@ "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.3" }, "kombu": { "hashes": [ - "sha256:6dc509178ac4269b0e66ab4881f70a2035c33d3a622e20585f965986a5182006", - "sha256:f4965fba0a4718d47d470beeb5d6446e3357a62402b16c510b6a2f251e05ac3c" + "sha256:0f5d0763fb916808f617b886697b2be28e6bc35026f08e679697fc814b48a608", + "sha256:d36f0cde6a18d9eb7b6b3aa62a59bfdff7f5724689850e447eca5be8efc9d501" ], - "version": "==5.0.2" + "markers": "python_version >= '3.7'", + "version": "==5.2.2" }, "markupsafe": { "hashes": [ - "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95", - "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f", - "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d", - "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc", - "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0", - "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901", - "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66", - "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63", - "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b", - "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5", - "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c", - "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1", - "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05", - "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf", - "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527", - "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb", - "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb", - "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2", - "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730", - "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1", - "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75", - "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b", - "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b", - "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715", - "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b", - "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8", - "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96", - "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348", - "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958", - "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd", - "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6", - "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20", - "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf", - "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b" - ], - "version": "==2.0.0" + "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", + "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", + "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", + "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194", + "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", + "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", + "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724", + "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", + "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646", + "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", + "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6", + "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a", + "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6", + "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad", + "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", + "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38", + "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac", + "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", + "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6", + "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047", + "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", + "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", + "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b", + "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", + "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", + "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a", + "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", + "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1", + "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9", + "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864", + "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", + "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee", + "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f", + "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", + "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", + "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", + "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", + "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b", + "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", + "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86", + "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6", + "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", + "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", + "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", + "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28", + "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e", + "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", + "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", + "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f", + "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d", + "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", + "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", + "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145", + "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", + "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c", + "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1", + "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a", + "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207", + "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", + "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53", + "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd", + "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134", + "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85", + "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9", + "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", + "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", + "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", + "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", + "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.1" }, "numpy": { "hashes": [ - "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94", - "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080", - "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e", - "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c", - "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76", - "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371", - "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c", - "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2", - "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a", - "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb", - "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140", - "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28", - "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f", - "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d", - "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff", - "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8", - "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa", - "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea", - "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc", - "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73", - "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d", - "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d", - "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4", - "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c", - "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e", - "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea", - "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd", - "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f", - "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff", - "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e", - "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7", - "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa", - "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827", - "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60" - ], - "version": "==1.19.5" + "sha256:0b78ecfa070460104934e2caf51694ccd00f37d5e5dbe76f021b1b0b0d221823", + "sha256:1247ef28387b7bb7f21caf2dbe4767f4f4175df44d30604d42ad9bd701ebb31f", + "sha256:1403b4e2181fc72664737d848b60e65150f272fe5a1c1cbc16145ed43884065a", + "sha256:170b2a0805c6891ca78c1d96ee72e4c3ed1ae0a992c75444b6ab20ff038ba2cd", + "sha256:2e4ed57f45f0aa38beca2a03b6532e70e548faf2debbeb3291cfc9b315d9be8f", + "sha256:32fe5b12061f6446adcbb32cf4060a14741f9c21e15aaee59a207b6ce6423469", + "sha256:34f3456f530ae8b44231c63082c8899fe9c983fd9b108c997c4b1c8c2d435333", + "sha256:4c9c23158b87ed0e70d9a50c67e5c0b3f75bcf2581a8e34668d4e9d7474d76c6", + "sha256:5d95668e727c75b3f5088ec7700e260f90ec83f488e4c0aaccb941148b2cd377", + "sha256:615d4e328af7204c13ae3d4df7615a13ff60a49cb0d9106fde07f541207883ca", + "sha256:69077388c5a4b997442b843dbdc3a85b420fb693ec8e33020bb24d647c164fa5", + "sha256:74b85a17528ca60cf98381a5e779fc0264b4a88b46025e6bcbe9621f46bb3e63", + "sha256:81225e58ef5fce7f1d80399575576fc5febec79a8a2742e8ef86d7b03beef49f", + "sha256:8890b3360f345e8360133bc078d2dacc2843b6ee6059b568781b15b97acbe39f", + "sha256:92aafa03da8658609f59f18722b88f0a73a249101169e28415b4fa148caf7e41", + "sha256:9864424631775b0c052f3bd98bc2712d131b3e2cd95d1c0c68b91709170890b0", + "sha256:9e6f5f50d1eff2f2f752b3089a118aee1ea0da63d56c44f3865681009b0af162", + "sha256:a3deb31bc84f2b42584b8c4001c85d1934dbfb4030827110bc36bfd11509b7bf", + "sha256:ad010846cdffe7ec27e3f933397f8a8d6c801a48634f419e3d075db27acf5880", + "sha256:b1e2312f5b8843a3e4e8224b2b48fe16119617b8fc0a54df8f50098721b5bed2", + "sha256:bc988afcea53e6156546e5b2885b7efab089570783d9d82caf1cfd323b0bb3dd", + "sha256:c449eb870616a7b62e097982c622d2577b3dbc800aaf8689254ec6e0197cbf1e", + "sha256:c74c699b122918a6c4611285cc2cad4a3aafdb135c22a16ec483340ef97d573c", + "sha256:c885bfc07f77e8fee3dc879152ba993732601f1f11de248d4f357f0ffea6a6d4", + "sha256:e3c3e990274444031482a31280bf48674441e0a5b55ddb168f3a6db3e0c38ec8", + "sha256:e4799be6a2d7d3c33699a6f77201836ac975b2e1b98c2a07f66a38f499cb50ce", + "sha256:e6c76a87633aa3fa16614b61ccedfae45b91df2767cf097aa9c933932a7ed1e0", + "sha256:e89717274b41ebd568cd7943fc9418eeb49b1785b66031bc8a7f6300463c5898", + "sha256:f5162ec777ba7138906c9c274353ece5603646c6965570d82905546579573f73", + "sha256:fde96af889262e85aa033f8ee1d3241e32bf36228318a61f1ace579df4e8170d" + ], + "markers": "python_version < '3.11' and python_version >= '3.7'", + "version": "==1.21.4" }, "ordered-set": { "hashes": [ "sha256:ba93b2df055bca202116ec44b9bead3df33ea63a7d5827ff8e16738b97f33a95" ], + "markers": "python_version >= '3.5'", "version": "==4.0.2" }, "prompt-toolkit": { "hashes": [ - "sha256:bf00f22079f5fadc949f42ae8ff7f05702826a97059ffcc6281036ad40ac6f04", - "sha256:e1b4f11b9336a28fa11810bc623c357420f69dfdb6d2dac41ca2c21a55c033bc" + "sha256:5f29d62cb7a0ecacfa3d8ceea05a63cd22500543472d64298fc06ddda906b25d", + "sha256:7053aba00895473cb357819358ef33f11aa97e4ac83d38efb123e5649ceeecaf" ], - "version": "==3.0.18" + "markers": "python_full_version >= '3.6.2'", + "version": "==3.0.23" }, "pyasn1": { "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba" + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" ], "version": "==0.4.8" }, "pyasn1-modules": { "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", - "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74" + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" ], "version": "==0.2.8" }, @@ -356,111 +439,126 @@ }, "pyparsing": { "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" + "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4", + "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81" ], - "version": "==2.4.7" + "markers": "python_version >= '3.6'", + "version": "==3.0.6" }, "pysam": { "hashes": [ - "sha256:107eca9050d8140910b5ea5c5a9e66313e1155eb44cc180e10f48f9cb71e8095", - "sha256:3eb70111a5ed86cc7a048c9b2205087b1184093e6135f02ad7f144b206951452", - "sha256:9da29490c666a963e5a7f6f5114e86c9b36a8a6adc2227f5772bdc38c09d2d37", - "sha256:9e3597a49e4bc72c31199d6231018ad3034e08a8243b9f8086953afb2ab5a3af", - "sha256:a5a0fc1f0d724d0b7789341add26ba181ac009430021f0998f6083fb62432193", - "sha256:d428a9768691d5ea3c28cc52a949c920ae691aa4c110a8b7328dc4d165ef1ad6", - "sha256:f65659deadc4904984de24cb6f3878b6052cf504a2a85a50b80f2ff7939f96db" + "sha256:0cfa16f76ed3c3119c7b3c8dfdcba9e010fbcdcf87eaa165351bb369da5a6bf1", + "sha256:1d6d49a0b3c626fae410a93d4c80583a8b5ddaacc9b46a080b250dbcebd30a59", + "sha256:2717509556fecddf7c73966fa62066c6a59a7d39b755d8972afa8d143a1d5aa5", + "sha256:493988420db16e6ee03393518e4d272df05f0a35780248c08c61da7411e520e7", + "sha256:7a8a25fceaaa96e5b4c8b0a7fd6bb0b20b6c262dc4cc867c6d1467ac990f1d77", + "sha256:7ea2e019294e4bf25e4892b5de69c43f54fb6ac42b681265268aa322e1f36f5b", + "sha256:7f6a4ec58ad7995b791a71bf35f673ea794e734c587ea7329fca5cce9c53a7af", + "sha256:9422c2d0b581c3d24f247c15bb8981569e636003c4d6cad39ccd1bf205a79f2c", + "sha256:a88f875114bd3d8efb7fade80e0640094383ec5043861aa575175fa9a56edf90", + "sha256:c90341434e7a99439174aa64ca5406f63528be4217d4401fb30ec4ea4629c559", + "sha256:ca0c9289dfdc5e1a81bccdb8305192cd14cf9730bd21320ceca949fde071a572", + "sha256:cfb162358c5284b31b2b88b10947e0f1013da2d85ba0fd0b5723dd142c15329e", + "sha256:cfffad99cf3968cf85aadb70a8a02303f9172ea21abe02d587c44f808c504f52", + "sha256:e13e496da3a432db24f424439834b0ab5f40700a3db6e610d06f8bd639d9fd2d", + "sha256:ef5d8ad01cac8974cd09832c226cbb63a3f7c5bd63727d8e59447021ee16a186", + "sha256:f5a23a5dcf32f01c66d44e89113fa8f7522997ea43fbc0f98e5250a907911a5f" ], "index": "pypi", - "version": "==0.16.0.1" + "version": "==0.18.0" }, "python-dateutil": { "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], "index": "pypi", - "version": "==2.8.1" + "version": "==2.8.2" }, "python-ldap": { "hashes": [ - "sha256:4711cacf013e298754abd70058ccc995758177fb425f1c2d30e71adfc1d00aa5" + "sha256:60464c8fc25e71e0fd40449a24eae482dcd0fb7fcf823e7de627a6525b3e0d12" ], "index": "pypi", - "version": "==3.3.1" + "version": "==3.4.0" }, "python-magic": { "hashes": [ - "sha256:8551e804c09a3398790bd9e392acb26554ae2609f29c72abb0b9dee9a5571eae", - "sha256:ca884349f2c92ce830e3f498c5b7c7051fe2942c3ee4332f65213b8ebff15a62" + "sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626", + "sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf" ], "index": "pypi", - "version": "==0.4.22" + "version": "==0.4.24" }, "pytz": { "hashes": [ - "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", - "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" + "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c", + "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326" ], - "version": "==2021.1" + "version": "==2021.3" }, "pyyaml": { "hashes": [ - "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", - "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", - "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", - "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", - "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", - "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", - "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", - "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", - "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", - "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", - "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", - "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", - "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", - "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", - "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", - "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", - "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", - "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", - "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", - "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", - "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", - "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", - "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", - "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", - "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", - "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", - "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", - "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" - ], - "version": "==5.4.1" + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" }, "rdflib": { "hashes": [ - "sha256:78149dd49d385efec3b3adfbd61c87afaf1281c30d3fcaf1b323b34f603fb155", - "sha256:88208ea971a87886d60ae2b1a4b2cdc263527af0454c422118d43fe64b357877" + "sha256:6136ae056001474ee2aff5fc5b956e62a11c3a9c66bb0f3d9c0aaa5fbb56854e", + "sha256:b7642daac8cdad1ba157fecb236f5d1b2aa1de64e714dcee80d65e2b794d88a6" ], "index": "pypi", - "version": "==5.0.0" + "version": "==6.0.2" }, "redis": { "hashes": [ - "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2", - "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24" + "sha256:c8481cf414474e3497ec7971a1ba9b998c8efad0f0d289a009a5bbef040894f9", + "sha256:ccf692811f2c1fc7a92b466aa2599e4a6d2d73d5f736a2c70be600657c0da34a" ], "index": "pypi", - "version": "==3.5.3" + "version": "==4.0.2" }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], "index": "pypi", - "version": "==2.25.1" + "version": "==2.26.0" }, "requests-toolbelt": { "hashes": [ @@ -474,29 +572,49 @@ "flask" ], "hashes": [ - "sha256:c1227d38dca315ba35182373f129c3e2722e8ed999e52584e6aca7d287870739", - "sha256:c7d380a21281e15be3d9f67a3c4fbb4f800c481d88ff8d8931f39486dd7b4ada" + "sha256:0db297ab32e095705c20f742c3a5dac62fe15c4318681884053d0898e5abb2f6", + "sha256:789a11a87ca02491896e121efdd64e8fd93327b69e8f2f7d42f03e2569648e88" ], "index": "pypi", - "version": "==1.1.0" + "version": "==1.5.0" + }, + "setuptools": { + "hashes": [ + "sha256:6d10741ff20b89cd8c6a536ee9dc90d3002dec0226c78fb98605bfb9ef8a7adf", + "sha256:d144f85102f999444d06f9c0e8c737fd0194f10f2f7e5fdb77573f6e2fa4fad0" + ], + "markers": "python_version >= '3.6'", + "version": "==59.5.0" + }, + "setuptools": { + "hashes": [ + "sha256:b4c634615a0cf5b02cf83c7bedffc8da0ca439f00e79452699454da6fbd4153d", + "sha256:feb5ff19b354cde9efd2344ef6d5e79880ce4be643037641b49508bbb850d060" + ], + "markers": "python_version >= '3.6'", + "version": "==59.4.0" }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "smmap": { "hashes": [ - "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182", - "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2" + "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94", + "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936" ], - "version": "==4.0.0" + "markers": "python_version >= '3.6'", + "version": "==5.0.0" }, "sparqlwrapper": { "hashes": [ + "sha256:17ec44b08b8ae2888c801066249f74fe328eec25d90203ce7eadaf82e64484c7", "sha256:357ee8a27bc910ea13d77836dbddd0b914991495b8cc1bf70676578155e962a8", + "sha256:8cf6c21126ed76edc85c5c232fd6f77b9f61f8ad1db90a7147cdde2104aff145", "sha256:c7f9c9d8ebb13428771bc3b6dee54197422507dcc3dea34e30d5dcfc53478dec", "sha256:d6a66b5b8cda141660e07aeb00472db077a98d22cb588c973209c7336850fb3c" ], @@ -505,32 +623,32 @@ }, "tld": { "hashes": [ - "sha256:1a69b2cd4053da5377a0b27e048e97871120abf9cd7a62ff270915d0c11369d6", - "sha256:1b63094d893657eadfd61e49580b4225ce958ca3b8013dbb9485372cde5a3434", - "sha256:3266e6783825a795244a0ed225126735e8121859113b0a7fc830cc49f7bbdaff", - "sha256:478d9b23157c7e3e2d07b0534da3b1e61a619291b6e3f52f5a3510e43acec7e9", - "sha256:5bd36b24aeb14e766ef1e5c01b96fe89043db44a579848f716ec03c40af50a6b", - "sha256:cf1b7af4c1d9c689ca81ea7cf3cae77d1bfd8aaa4c648b58f76a0b3d32e3f6e0", - "sha256:d5938730cdb9ce4b0feac4dc887d971f964dba873a74ad818f0f25c1571c6045" + "sha256:266106ad9035f54cd5cce5f823911a51f697e7c58cb45bfbd6c53b4c2976ece2", + "sha256:69fed19d26bb3f715366fb4af66fdeace896c55c052b00e8aaba3a7b63f3e7f0", + "sha256:826bbe61dccc8d63144b51caef83e1373fbaac6f9ada46fca7846021f5d36fef", + "sha256:843844e4256c943983d86366b5af3ac9cd1c9a0b6465f04d9f70e3b4c1a7989f", + "sha256:a92ac6b84917e7d9e934434b8d37e9be534598f138fbb86b3c0d5426f2621890", + "sha256:b6650f2d5392a49760064bc55d73ce3397a378ef24ded96efb516c6b8ec68c26", + "sha256:ef5b162d6fa295822dacd4fe4df1b62d8df2550795a97399a8905821b58d3702" ], "index": "pypi", - "version": "==0.12.5" + "version": "==0.12.6" }, "typing-extensions": { "hashes": [ - "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497", - "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342", - "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84" + "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e", + "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b" ], - "markers": "python_version < '3.8'", - "version": "==3.10.0.0" + "markers": "python_version < '3.10'", + "version": "==4.0.1" }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", + "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" ], - "version": "==1.26.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_full_version < '4.0.0'", + "version": "==1.26.7" }, "validate-email": { "hashes": [ @@ -544,30 +662,37 @@ "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30", "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e" ], + "markers": "python_version >= '3.6'", "version": "==5.0.0" }, "watchdog": { "hashes": [ - "sha256:027c532e2fd3367d55fe235510fc304381a6cc88d0dcd619403e57ffbd83c1d2", - "sha256:12645d41d7307601b318c48861e776ce7a9fdcad9f74961013ec39037050582c", - "sha256:16078cd241a95124acd4d8d3efba2140faec9300674b12413cc08be11b825d56", - "sha256:20d4cabfa2ad7239995d81a0163bc0264a3e104a64f33c6f0a21ad75a0d915d9", - "sha256:22c13c19599b0dec7192f8f7d26404d5223cb36c9a450e96430483e685dccd7e", - "sha256:2894440b4ea95a6ef4c5d152deedbe270cae46092682710b7028a04d6a6980f6", - "sha256:4d83c89ba24bd67b7a7d5752a4ef953ec40db69d4d30582bd1f27d3ecb6b61b0", - "sha256:5b391bac7edbdf96fb82a381d04829bbc0d1bb259c206b2b283ef8989340240f", - "sha256:604ca364a79c27a694ab10947cd41de81bf229cff507a3156bf2c56c064971a1", - "sha256:67c645b1e500cc74d550e9aad4829309c5084dc55e8dc4e1c25d5da23e5be239", - "sha256:9f1b124fe2d4a1f37b7068f6289c2b1eba44859eb790bf6bd709adff224a5469", - "sha256:a1b3f76e2a0713b406348dd5b9df2aa02bdd741a6ddf54f4c6410b395e077502", - "sha256:a9005f968220b715101d5fcdde5f5deda54f0d1873f618724f547797171f5e97", - "sha256:aa59afc87a892ed92d7d88d09f4b736f1336fc35540b403da7ee00c3be74bd07", - "sha256:c1325b47463fce231d88eb74f330ab0cb4a1bab5defe12c0c80a3a4f197345b4", - "sha256:dca75d12712997c713f76e6d68ff41580598c7df94cedf83f1089342e7709081", - "sha256:f3edbe1e15e229d2ba8ff5156908adba80d1ba21a9282d9f72247403280fc799" + "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685", + "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04", + "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb", + "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542", + "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6", + "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b", + "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660", + "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3", + "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923", + "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7", + "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b", + "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669", + "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2", + "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3", + "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604", + "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8", + "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5", + "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0", + "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6", + "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65", + "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d", + "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15", + "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9" ], "index": "pypi", - "version": "==2.1.1" + "version": "==2.1.6" }, "wcwidth": { "hashes": [ @@ -584,12 +709,70 @@ "index": "pypi", "version": "==0.16.1" }, + "wrapt": { + "hashes": [ + "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179", + "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096", + "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374", + "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df", + "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185", + "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785", + "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7", + "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909", + "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918", + "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33", + "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068", + "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829", + "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af", + "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79", + "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce", + "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc", + "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36", + "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade", + "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca", + "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32", + "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125", + "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e", + "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709", + "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f", + "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b", + "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb", + "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb", + "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489", + "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640", + "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb", + "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851", + "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d", + "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44", + "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13", + "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2", + "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb", + "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b", + "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9", + "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755", + "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c", + "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a", + "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf", + "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3", + "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229", + "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e", + "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de", + "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554", + "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10", + "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80", + "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056", + "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.13.3" + }, "zipp": { "hashes": [ - "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", - "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098" + "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832", + "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc" ], - "version": "==3.4.1" + "markers": "python_version >= '3.6'", + "version": "==3.6.0" } }, "develop": { @@ -598,96 +781,95 @@ "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==21.2.0" }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", + "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" ], - "version": "==2020.12.5" + "version": "==2021.10.8" }, - "chardet": { + "charset-normalizer": { "hashes": [ - "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", - "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" + "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721", + "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c" ], - "version": "==4.0.0" + "markers": "python_version >= '3'", + "version": "==2.0.9" }, "click": { "hashes": [ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "coverage": { "extras": [ - "toml" - ], - "hashes": [ - "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", - "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", - "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", - "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", - "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", - "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", - "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", - "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", - "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", - "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", - "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", - "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", - "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", - "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", - "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", - "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", - "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", - "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", - "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", - "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", - "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", - "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", - "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", - "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", - "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", - "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", - "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", - "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", - "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", - "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", - "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", - "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", - "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", - "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", - "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", - "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", - "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", - "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", - "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", - "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", - "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", - "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", - "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", - "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", - "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", - "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", - "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", - "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", - "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", - "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", - "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", - "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" - ], - "version": "==5.5" + + ], + "hashes": [ + "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0", + "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd", + "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884", + "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48", + "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76", + "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0", + "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64", + "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685", + "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47", + "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d", + "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840", + "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f", + "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971", + "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c", + "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a", + "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de", + "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17", + "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4", + "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521", + "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57", + "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b", + "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282", + "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644", + "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475", + "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d", + "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da", + "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953", + "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2", + "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e", + "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c", + "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc", + "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64", + "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74", + "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617", + "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3", + "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d", + "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa", + "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739", + "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8", + "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8", + "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781", + "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58", + "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9", + "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c", + "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd", + "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e", + "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49" + ], + "markers": "python_version >= '3.6'", + "version": "==6.2" }, "coveralls": { "hashes": [ - "sha256:7bd173b3425733661ba3063c88f180127cc2b20e9740686f86d2622b31b41385", - "sha256:cbb942ae5ef3d2b55388cb5b43e93a269544911535f1e750e1c656aef019ce60" + "sha256:b32a8bb5d2df585207c119d6c01567b81fba690c9c10a753bfe27a335bfc43ea", + "sha256:f42015f31d386b351d4226389b387ae173207058832fbf5c8ec4b40e27b16026" ], "index": "pypi", - "version": "==3.0.1" + "version": "==3.3.1" }, "docopt": { "hashes": [ @@ -697,32 +879,34 @@ }, "flake8": { "hashes": [ - "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", - "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" + "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", + "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d" ], "index": "pypi", - "version": "==3.9.2" + "version": "==4.0.1" }, - "future": { + "ghp-import": { "hashes": [ - "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" + "sha256:5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46", + "sha256:947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071" ], - "version": "==0.18.2" + "version": "==2.0.2" }, "idna": { "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "version": "==2.10" + "markers": "python_version >= '3'", + "version": "==3.3" }, "importlib-metadata": { "hashes": [ - "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581", - "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d" + "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100", + "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb" ], "markers": "python_version < '3.8'", - "version": "==4.0.1" + "version": "==4.8.2" }, "iniconfig": { "hashes": [ @@ -736,76 +920,91 @@ "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.3" }, - "joblib": { - "hashes": [ - "sha256:9c17567692206d2f3fb9ecf5e991084254fe631665c450b443761c4186a613f7", - "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5" - ], - "version": "==1.0.1" - }, - "livereload": { - "hashes": [ - "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869" - ], - "version": "==2.6.3" - }, - "lunr": { - "extras": [ - "languages" - ], - "hashes": [ - "sha256:aab3f489c4d4fab4c1294a257a30fec397db56f0a50273218ccc3efdbf01d6ca", - "sha256:c4fb063b98eff775dd638b3df380008ae85e6cb1d1a24d1cd81a10ef6391c26e" - ], - "version": "==0.5.8" - }, "markdown": { "hashes": [ - "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49", - "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c" + "sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006", + "sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3" ], - "version": "==3.3.4" + "markers": "python_version >= '3.6'", + "version": "==3.3.6" }, "markupsafe": { "hashes": [ - "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95", - "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f", - "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d", - "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc", - "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0", - "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901", - "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66", - "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63", - "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b", - "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5", - "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c", - "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1", - "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05", - "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf", - "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527", - "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb", - "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb", - "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2", - "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730", - "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1", - "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75", - "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b", - "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b", - "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715", - "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b", - "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8", - "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96", - "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348", - "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958", - "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd", - "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6", - "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20", - "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf", - "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b" - ], - "version": "==2.0.0" + "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", + "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", + "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", + "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194", + "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", + "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", + "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724", + "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", + "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646", + "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", + "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6", + "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a", + "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6", + "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad", + "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", + "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38", + "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac", + "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", + "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6", + "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047", + "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", + "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", + "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b", + "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", + "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", + "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a", + "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", + "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1", + "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9", + "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864", + "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", + "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee", + "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f", + "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", + "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", + "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", + "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", + "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b", + "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", + "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86", + "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6", + "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", + "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", + "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", + "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28", + "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e", + "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", + "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", + "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f", + "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d", + "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", + "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", + "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145", + "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", + "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c", + "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1", + "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a", + "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207", + "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", + "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53", + "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd", + "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134", + "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85", + "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9", + "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", + "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", + "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", + "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", + "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.1" }, "mccabe": { "hashes": [ @@ -814,172 +1013,155 @@ ], "version": "==0.6.1" }, - "mkdocs": { + "mergedeep": { "hashes": [ - "sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9", - "sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39" + "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", + "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307" ], - "index": "pypi", - "version": "==1.1.2" + "markers": "python_version >= '3.6'", + "version": "==1.3.4" }, - "nltk": { + "mkdocs": { "hashes": [ - "sha256:240e23ab1ab159ef9940777d30c7c72d7e76d91877099218a7585370c11f6b9e", - "sha256:57d556abed621ab9be225cc6d2df1edce17572efb67a3d754630c9f8381503eb" + "sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1", + "sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072" ], - "version": "==3.6.2" + "index": "pypi", + "version": "==1.2.3" }, "packaging": { "hashes": [ - "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", - "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], - "version": "==20.9" + "markers": "python_version >= '3.6'", + "version": "==21.3" }, "pluggy": { "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], - "version": "==0.13.1" + "markers": "python_version >= '3.6'", + "version": "==1.0.0" }, "py": { "hashes": [ - "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", - "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a" + "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", + "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" ], - "version": "==1.10.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.11.0" }, "pycodestyle": { "hashes": [ - "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", - "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" + "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", + "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" ], - "version": "==2.7.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.8.0" }, "pyflakes": { "hashes": [ - "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", - "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" + "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c", + "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e" ], - "version": "==2.3.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.4.0" }, "pyparsing": { "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" + "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4", + "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81" ], - "version": "==2.4.7" + "markers": "python_version >= '3.6'", + "version": "==3.0.6" }, "pytest": { "hashes": [ - "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b", - "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890" + "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89", + "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" ], "index": "pypi", - "version": "==6.2.4" + "version": "==6.2.5" }, "pytest-cov": { "hashes": [ - "sha256:8535764137fecce504a49c2b742288e3d34bc09eed298ad65963616cc98fd45e", - "sha256:95d4933dcbbacfa377bb60b29801daa30d90c33981ab2a79e9ab4452c165066e" + "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6", + "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470" ], "index": "pypi", - "version": "==2.12.0" + "version": "==3.0.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "index": "pypi", + "version": "==2.8.2" }, "pyyaml": { "hashes": [ - "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", - "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", - "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", - "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", - "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", - "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", - "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", - "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", - "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", - "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", - "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", - "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", - "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", - "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", - "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", - "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", - "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", - "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", - "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", - "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", - "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", - "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", - "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", - "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", - "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", - "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", - "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", - "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" - ], - "version": "==5.4.1" - }, - "regex": { - "hashes": [ - "sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5", - "sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79", - "sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31", - "sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500", - "sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11", - "sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14", - "sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3", - "sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439", - "sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c", - "sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82", - "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711", - "sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093", - "sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a", - "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb", - "sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8", - "sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17", - "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000", - "sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d", - "sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480", - "sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc", - "sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0", - "sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9", - "sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765", - "sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e", - "sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a", - "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07", - "sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f", - "sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac", - "sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7", - "sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed", - "sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968", - "sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7", - "sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2", - "sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4", - "sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87", - "sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8", - "sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10", - "sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29", - "sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605", - "sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6", - "sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042" - ], - "version": "==2021.4.4" + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" + }, + "pyyaml-env-tag": { + "hashes": [ + "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb", + "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069" + ], + "markers": "python_version >= '3.6'", + "version": "==0.1" }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], "index": "pypi", - "version": "==2.25.1" + "version": "==2.26.0" }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "toml": { @@ -987,83 +1169,68 @@ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, - "tornado": { - "hashes": [ - "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb", - "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c", - "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288", - "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95", - "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558", - "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe", - "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791", - "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d", - "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326", - "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b", - "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4", - "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c", - "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910", - "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5", - "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c", - "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0", - "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675", - "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd", - "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f", - "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c", - "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea", - "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6", - "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05", - "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd", - "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575", - "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a", - "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37", - "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795", - "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f", - "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32", - "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c", - "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01", - "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4", - "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2", - "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921", - "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085", - "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df", - "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102", - "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5", - "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", - "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" - ], - "version": "==6.1" - }, - "tqdm": { - "hashes": [ - "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3", - "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae" - ], - "version": "==4.60.0" + "tomli": { + "hashes": [ + "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee", + "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade" + ], + "version": "==1.2.2" }, "typing-extensions": { "hashes": [ - "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497", - "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342", - "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84" + "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e", + "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b" ], - "markers": "python_version < '3.8'", - "version": "==3.10.0.0" + "markers": "python_version < '3.10'", + "version": "==4.0.1" }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", + "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_full_version < '4.0.0'", + "version": "==1.26.7" + }, + "watchdog": { + "hashes": [ + "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685", + "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04", + "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb", + "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542", + "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6", + "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b", + "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660", + "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3", + "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923", + "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7", + "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b", + "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669", + "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2", + "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3", + "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604", + "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8", + "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5", + "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0", + "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6", + "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65", + "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d", + "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15", + "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9" ], - "version": "==1.26.4" + "index": "pypi", + "version": "==2.1.6" }, "zipp": { "hashes": [ - "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", - "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098" + "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832", + "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc" ], - "version": "==3.4.1" + "markers": "python_version >= '3.6'", + "version": "==3.6.0" } } } diff --git a/README.md b/README.md index a0839fcb..6c863d3e 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,4 @@ AskOmics is a visual SPARQL query interface supporting both intuitive data integ ## Documentation All documentation, included installation instruction is [here](https://flaskomics.readthedocs.io/en/latest/) +A Galaxy Training tutorial is available [here](https://training.galaxyproject.org/training-material/topics/transcriptomics/tutorials/rna-seq-analysis-with-askomics-it/tutorial.html) diff --git a/askomics/api/admin.py b/askomics/api/admin.py index f464182d..5200ebb5 100644 --- a/askomics/api/admin.py +++ b/askomics/api/admin.py @@ -7,6 +7,8 @@ from askomics.libaskomics.FilesHandler import FilesHandler from askomics.libaskomics.LocalAuth import LocalAuth from askomics.libaskomics.Mailer import Mailer +from askomics.libaskomics.PrefixManager import PrefixManager +from askomics.libaskomics.OntologyManager import OntologyManager from askomics.libaskomics.Result import Result from askomics.libaskomics.ResultsHandler import ResultsHandler @@ -256,6 +258,12 @@ def toogle_public_dataset(): datasets_handler.handle_datasets(admin=True) for dataset in datasets_handler.datasets: + if (not data.get("newStatus", False) and dataset.ontology): + return jsonify({ + 'datasets': [], + 'error': True, + 'errorMessage': "Cannot unpublicize a dataset linked to an ontology" + }), 400 current_app.logger.debug(data["newStatus"]) dataset.toggle_public(data["newStatus"], admin=True) @@ -510,3 +518,305 @@ def delete_datasets(): 'error': False, 'errorMessage': '' }) + + +@admin_bp.route("/api/admin/getprefixes", methods=["GET"]) +@api_auth +@admin_required +def get_prefixes(): + """Get all custom prefixes + + Returns + ------- + json + prefixes: list of all custom prefixes + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + try: + pm = PrefixManager(current_app, session) + prefixes = pm.get_custom_prefixes() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'prefixes': prefixes, + 'error': False, + 'errorMessage': '' + }) + + +@admin_bp.route("/api/admin/addprefix", methods=["POST"]) +@api_auth +@admin_required +def add_prefix(): + """Create a new prefix + + Returns + ------- + json + prefixes: list of all custom prefixes + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + + data = request.get_json() + if not data or not (data.get("prefix") and data.get("namespace")): + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': "Missing parameter" + }), 400 + + pm = PrefixManager(current_app, session) + prefixes = pm.get_custom_prefixes() + + prefix = data.get("prefix") + namespace = data.get("namespace") + + if any([prefix == custom['prefix'] for custom in prefixes]): + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': "Prefix {} is already in use".format(prefix) + }), 400 + + try: + pm.add_custom_prefix(prefix, namespace) + prefixes = pm.get_custom_prefixes() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'prefixes': prefixes, + 'error': False, + 'errorMessage': '' + }) + + +@admin_bp.route("/api/admin/delete_prefixes", methods=["POST"]) +@api_auth +@admin_required +def delete_prefix(): + """Delete a prefix + + Returns + ------- + json + prefixes: list of all custom prefixes + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + + data = request.get_json() + if not data or not data.get("prefixesIdToDelete"): + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': "Missing prefixesIdToDelete parameter" + }), 400 + + pm = PrefixManager(current_app, session) + try: + pm.remove_custom_prefixes(data.get("prefixesIdToDelete")) + prefixes = pm.get_custom_prefixes() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'prefixes': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'prefixes': prefixes, + 'error': False, + 'errorMessage': '' + }) + + +@admin_bp.route("/api/admin/getontologies", methods=["GET"]) +@api_auth +@admin_required +def get_ontologies(): + """Get all ontologies + + Returns + ------- + json + prefixes: list of all custom prefixes + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + try: + om = OntologyManager(current_app, session) + ontologies = om.list_full_ontologies() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'ontologies': ontologies, + 'error': False, + 'errorMessage': '' + }) + + +@admin_bp.route("/api/admin/addontology", methods=["POST"]) +@api_auth +@admin_required +def add_ontology(): + """Create a new ontology + + Returns + ------- + json + ontologies: list of all ontologies + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + + data = request.get_json() + if not data or not (data.get("name") and data.get("uri") and data.get("shortName") and data.get("type") and data.get("datasetId") and data.get("labelUri")): + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Missing parameter" + }), 400 + + name = data.get("name").strip() + uri = data.get("uri").strip() + short_name = data.get("shortName") + type = data.get("type").strip() + dataset_id = data.get("datasetId") + label_uri = data.get("labelUri").strip() + + om = OntologyManager(current_app, session) + + if type == "ols" and not om.test_ols_ontology(short_name): + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "{} ontology not found in OLS".format(short_name) + }), 400 + + om = OntologyManager(current_app, session) + ontologies = om.list_full_ontologies() + + if type not in ["none", "local", "ols"]: + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Invalid type" + }), 400 + + datasets_info = [{'id': dataset_id}] + + try: + datasets_handler = DatasetsHandler(current_app, session, datasets_info=datasets_info) + datasets_handler.handle_datasets() + except IndexError: + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Dataset {} not found".format(dataset_id) + }), 400 + + if not len(datasets_handler.datasets) == 1 or not datasets_handler.datasets[0].public: + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Invalid dataset id" + }), 400 + + dataset = datasets_handler.datasets[0] + + if any([name == onto['name'] or short_name == onto['short_name'] for onto in ontologies]): + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Name and short name must be unique" + }), 400 + + if any([dataset_id == onto['dataset_id'] for onto in ontologies]): + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Dataset is already linked to another ontology" + }), 400 + + try: + om.add_ontology(name, uri, short_name, dataset.id, dataset.graph_name, dataset.endpoint, remote_graph=dataset.remote_graph, type=type, label_uri=label_uri) + ontologies = om.list_full_ontologies() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'ontologies': ontologies, + 'error': False, + 'errorMessage': '' + }) + + +@admin_bp.route("/api/admin/delete_ontologies", methods=["POST"]) +@api_auth +@admin_required +def delete_ontologies(): + """Delete one or more ontologies + + Returns + ------- + json + ontologies: list of all ontologies + error: True if error, else False + errorMessage: the error message of error, else an empty string + """ + + data = request.get_json() + if not data or not data.get("ontologiesIdToDelete"): + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': "Missing ontologiesIdToDelete parameter" + }), 400 + + om = OntologyManager(current_app, session) + + ontologies = om.list_full_ontologies() + onto_to_delete = [{"id": ontology['id'], "dataset_id": ontology['dataset_id']} for ontology in ontologies if ontology['id'] in data.get("ontologiesIdToDelete")] + + try: + om.remove_ontologies(onto_to_delete) + ontologies = om.list_full_ontologies() + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + 'ontologies': [], + 'error': True, + 'errorMessage': str(e) + }), 500 + + return jsonify({ + 'ontologies': ontologies, + 'error': False, + 'errorMessage': '' + }) diff --git a/askomics/api/data.py b/askomics/api/data.py index 2e92d875..24a26cdd 100644 --- a/askomics/api/data.py +++ b/askomics/api/data.py @@ -5,7 +5,6 @@ from askomics.api.auth import api_auth from askomics.libaskomics.SparqlQuery import SparqlQuery -from askomics.libaskomics.SparqlQueryLauncher import SparqlQueryLauncher from flask import (Blueprint, current_app, jsonify, session) @@ -26,7 +25,7 @@ def get_data(uri): """ try: - query = SparqlQuery(current_app, session) + query = SparqlQuery(current_app, session, get_graphs=True) graphs, endpoints = query.get_graphs_and_endpoints(all_selected=True) endpoints = [val['uri'] for val in endpoints.values()] @@ -40,14 +39,7 @@ def get_data(uri): base_uri = current_app.iniconfig.get('triplestore', 'namespace_data') full_uri = "<%s%s>" % (base_uri, uri) - raw_query = "SELECT DISTINCT ?predicat ?object\nWHERE {\n?URI ?predicat ?object\nVALUES ?URI {%s}}\n" % (full_uri) - federated = query.is_federated() - replace_froms = query.replace_froms() - - sparql = query.format_query(raw_query, replace_froms=replace_froms, federated=federated) - - query_launcher = SparqlQueryLauncher(current_app, session, get_result_query=True, federated=federated, endpoints=endpoints) - header, data = query_launcher.process_query(sparql) + data = query.get_uri_parameters(full_uri, endpoints) except Exception as e: current_app.logger.error(str(e).replace('\\n', '\n')) diff --git a/askomics/api/datasets.py b/askomics/api/datasets.py index bceb125e..665a0490 100644 --- a/askomics/api/datasets.py +++ b/askomics/api/datasets.py @@ -119,6 +119,7 @@ def toogle_public(): error: True if error, else False errorMessage: the error message of error, else an empty string """ + data = request.get_json() if not (data and data.get("id")): return jsonify({ @@ -135,6 +136,12 @@ def toogle_public(): datasets_handler.handle_datasets() for dataset in datasets_handler.datasets: + if (not data.get("newStatus", False) and dataset.ontology): + return jsonify({ + 'datasets': [], + 'error': True, + 'errorMessage': "Cannot unpublicize a dataset linked to an ontology" + }), 400 current_app.logger.debug(data.get("newStatus", False)) dataset.toggle_public(data.get("newStatus", False)) diff --git a/askomics/api/file.py b/askomics/api/file.py index 62e9587e..5d224030 100644 --- a/askomics/api/file.py +++ b/askomics/api/file.py @@ -1,4 +1,5 @@ """Api routes""" +import requests import sys import traceback import urllib @@ -7,6 +8,7 @@ from askomics.libaskomics.FilesHandler import FilesHandler from askomics.libaskomics.FilesUtils import FilesUtils from askomics.libaskomics.Dataset import Dataset +from askomics.libaskomics.RdfFile import RdfFile from flask import (Blueprint, current_app, jsonify, request, send_from_directory, session) @@ -188,8 +190,19 @@ def upload_url(): }), 400 try: - files = FilesHandler(current_app, session) - files.download_url(data["url"]) + if session["user"]["quota"] > 0: + with requests.get(data["url"], stream=True) as r: + # Check header for total size, and check quota. + if r.headers.get('Content-length'): + total_size = int(r.headers.get('Content-length')) + disk_space + if total_size >= session["user"]["quota"]: + return jsonify({ + 'errorMessage': "File will exceed quota", + "error": True + }), 400 + + session_dict = {'user': session['user']} + current_app.celery.send_task('download_file', (session_dict, data["url"])) except Exception as e: traceback.print_exc(file=sys.stdout) return jsonify({ @@ -224,6 +237,7 @@ def get_preview(): }), 400 try: + files_handler = FilesHandler(current_app, session) files_handler.handle_files(data['filesId']) @@ -318,19 +332,22 @@ def integrate(): for file in files_handler.files: - data["externalEndpoint"] = data["externalEndpoint"] if data.get("externalEndpoint") else None - data["customUri"] = data["customUri"] if data.get("customUri") else None + data["externalEndpoint"] = data["externalEndpoint"] if (data.get("externalEndpoint") and isinstance(file, RdfFile)) else None + data["externalGraph"] = data["externalGraph"] if (data.get("externalGraph") and isinstance(file, RdfFile)) else None + data["customUri"] = data["customUri"] if (data.get("customUri") and not isinstance(file, RdfFile)) else None dataset_info = { "celery_id": None, "file_id": file.id, "name": file.human_name, "graph_name": file.file_graph, - "public": data.get("public") if session["user"]["admin"] else False + "public": (data.get("public", False) if session["user"]["admin"] else False) or current_app.iniconfig.getboolean("askomics", "single_tenant", fallback=False) } + endpoint = data["externalEndpoint"] or current_app.iniconfig.get('triplestore', 'endpoint') + dataset = Dataset(current_app, session, dataset_info) - dataset.save_in_db() + dataset.save_in_db(endpoint, data["externalGraph"]) data["dataset_id"] = dataset.id dataset_ids.append(dataset.id) task = current_app.celery.send_task('integrate', (session_dict, data, request.host_url)) @@ -393,7 +410,7 @@ def get_column_types(): types: list of available column types """ - data = ["numeric", "text", "category", "boolean", "date", "reference", "strand", "start", "end", "general_relation", "symetric_relation"] + data = ["numeric", "text", "category", "boolean", "date", "reference", "strand", "start", "end", "general_relation", "symetric_relation", "label"] return jsonify({ "types": data diff --git a/askomics/api/ontology.py b/askomics/api/ontology.py new file mode 100644 index 00000000..fc1efe37 --- /dev/null +++ b/askomics/api/ontology.py @@ -0,0 +1,59 @@ +import traceback +import sys + +from askomics.api.auth import api_auth +from askomics.libaskomics.OntologyManager import OntologyManager + +from flask import (Blueprint, current_app, jsonify, request, session) + +onto_bp = Blueprint('ontology', __name__, url_prefix='/') + + +@onto_bp.route("/api/ontology/<short_ontology>/autocomplete", methods=["GET"]) +@api_auth +def autocomplete(short_ontology): + """Get the default sparql query + + Returns + ------- + json + """ + + if "user" not in session and current_app.iniconfig.getboolean("askomics", "protect_public"): + return jsonify({ + "error": True, + "errorMessage": "Ontology {} not found".format(short_ontology), + "results": [] + }), 401 + try: + om = OntologyManager(current_app, session) + ontology = om.get_ontology(short_name=short_ontology) + if not ontology: + return jsonify({ + "error": True, + "errorMessage": "Ontology {} not found".format(short_ontology), + "results": [] + }), 404 + + if ontology['type'] == "none": + return jsonify({ + "error": True, + "errorMessage": "Ontology {} does not have autocompletion".format(short_ontology), + "results": [] + }), 404 + + results = om.autocomplete(ontology["uri"], ontology["type"], request.args.get("q"), short_ontology, ontology["graph"], ontology["endpoint"], ontology['label_uri'], ontology['remote_graph']) + + except Exception as e: + traceback.print_exc(file=sys.stdout) + return jsonify({ + "error": True, + "errorMessage": str(e), + "results": [] + }), 500 + + return jsonify({ + "error": False, + "errorMessage": "", + "results": results + }), 200 diff --git a/askomics/api/query.py b/askomics/api/query.py index f5bfc8af..45dd8c6d 100644 --- a/askomics/api/query.py +++ b/askomics/api/query.py @@ -186,14 +186,8 @@ def save_result(): 'errorMessage': "Missing graphState parameter" }), 400 - query = SparqlQuery(current_app, session, data["graphState"]) - query.build_query_from_json(preview=False, for_editor=False) - info = { - "graph_state": query.json, - "query": query.sparql, - "graphs": query.graphs, - "endpoints": query.endpoints, + "graph_state": data["graphState"], "celery_id": None } diff --git a/askomics/api/results.py b/askomics/api/results.py index 854aeb08..d87f9e9e 100644 --- a/askomics/api/results.py +++ b/askomics/api/results.py @@ -14,6 +14,8 @@ def can_access(user): + if not user: + return False login_allowed = current_app.iniconfig.getboolean('askomics', 'enable_sparql_console', fallback=False) return login_allowed or user['admin'] @@ -164,8 +166,9 @@ def get_graph_and_sparql_query(): graphs = result.graphs endpoints = result.endpoints # Get all graphs and endpoint, and mark as selected the used one - query = SparqlQuery(current_app, session) + query = SparqlQuery(current_app, session, get_graphs=True) graphs, endpoints = query.get_graphs_and_endpoints(selected_graphs=graphs, selected_endpoints=endpoints) + console_enabled = can_access(session.get('user')) except Exception as e: traceback.print_exc(file=sys.stdout) @@ -186,7 +189,8 @@ def get_graph_and_sparql_query(): 'endpoints': endpoints, 'diskSpace': disk_space, 'error': False, - 'errorMessage': '' + 'errorMessage': '', + 'console_enabled': console_enabled }) @@ -359,7 +363,7 @@ def get_sparql_query(): 'error': True, 'errorMessage': "You do not have access to this result" }), 401 - query = SparqlQuery(current_app, session) + query = SparqlQuery(current_app, session, get_graphs=True) sparql = result.get_sparql_query() diff --git a/askomics/api/sparql.py b/askomics/api/sparql.py index c501ab92..043897c8 100644 --- a/askomics/api/sparql.py +++ b/askomics/api/sparql.py @@ -32,7 +32,7 @@ def init(): disk_space = files_utils.get_size_occupied_by_user() if "user" in session else None # Get graphs and endpoints - query = SparqlQuery(current_app, session) + query = SparqlQuery(current_app, session, get_graphs=True) graphs, endpoints = query.get_graphs_and_endpoints(all_selected=True) # Default query diff --git a/askomics/api/start.py b/askomics/api/start.py index eca8f91b..910af044 100644 --- a/askomics/api/start.py +++ b/askomics/api/start.py @@ -5,6 +5,7 @@ from askomics.api.auth import api_auth from askomics.libaskomics.LocalAuth import LocalAuth from askomics.libaskomics.Start import Start +from askomics.libaskomics.OntologyManager import OntologyManager from flask import (Blueprint, current_app, jsonify, session) @@ -64,6 +65,9 @@ def start(): except Exception: pass + ontologies_manager = OntologyManager(current_app, session) + ontologies = ontologies_manager.list_ontologies() + config = { "footerMessage": current_app.iniconfig.get('askomics', 'footer_message'), "frontMessage": front_message, @@ -79,7 +83,10 @@ def start(): "namespaceInternal": current_app.iniconfig.get('triplestore', 'namespace_internal'), "proxyPath": proxy_path, "user": {}, - "logged": False + "logged": False, + "ontologies": ontologies, + "singleTenant": current_app.iniconfig.getboolean('askomics', 'single_tenant', fallback=False), + "autocompleteMaxResults": current_app.iniconfig.getint("askomics", "autocomplete_max_results", fallback=10) } json = { diff --git a/askomics/app.py b/askomics/app.py index 1c23650b..e26b858c 100644 --- a/askomics/app.py +++ b/askomics/app.py @@ -19,6 +19,7 @@ from askomics.api.view import view_bp from askomics.api.results import results_bp from askomics.api.galaxy import galaxy_bp +from askomics.api.ontology import onto_bp from celery import Celery from kombu import Exchange, Queue @@ -46,7 +47,8 @@ datasets_bp, query_bp, results_bp, - galaxy_bp + galaxy_bp, + onto_bp ) diff --git a/askomics/libaskomics/BedFile.py b/askomics/libaskomics/BedFile.py index 7e55a7be..98802ada 100644 --- a/askomics/libaskomics/BedFile.py +++ b/askomics/libaskomics/BedFile.py @@ -17,7 +17,7 @@ class BedFile(File): Public or private dataset """ - def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -31,7 +31,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non host_url : None, optional AskOmics url """ - File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri) + File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri, external_graph=external_graph) self.entity_name = '' self.category_values = {} @@ -94,13 +94,19 @@ def set_rdf_abstraction_domain_knowledge(self): self.graph_abstraction_dk.add((self.namespace_data[self.format_uri(self.entity_name, remove_space=True)], rdflib.RDF.type, rdflib.OWL["Class"])) self.graph_abstraction_dk.add((self.namespace_data[self.format_uri(self.entity_name, remove_space=True)], rdflib.RDFS.label, rdflib.Literal(self.entity_name))) + attribute_blanks = {} + for attribute in self.attribute_abstraction: + blank = BNode() + for attr_type in attribute["type"]: - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDF.type, attr_type)) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.label, attribute["label"])) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.domain, attribute["domain"])) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.range, attribute["range"])) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, attr_type)) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute["uri"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, attribute["label"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, attribute["domain"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, attribute["range"])) + attribute_blanks[attribute["uri"]] = blank # Domain Knowledge if "values" in attribute.keys(): for value in attribute["values"]: @@ -115,7 +121,9 @@ def set_rdf_abstraction_domain_knowledge(self): if self.faldo_entity: for key, value in self.faldo_abstraction.items(): if value: - self.graph_abstraction_dk.add((value, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + blank = attribute_blanks[value] + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], value)) def generate_rdf_content(self): """Generate RDF content of the BED file @@ -218,6 +226,7 @@ def generate_rdf_content(self): # Strand strand = False + strand_type = None if feature.strand == "+": self.category_values["strand"] = {"+", } relation = self.namespace_data[self.format_uri("strand")] @@ -226,6 +235,7 @@ def generate_rdf_content(self): self.faldo_abstraction["strand"] = relation self.graph_chunk.add((entity, relation, attribute)) strand = True + strand_type = "+" elif feature.strand == "-": self.category_values["strand"] = {"-", } relation = self.namespace_data[self.format_uri("strand")] @@ -234,6 +244,7 @@ def generate_rdf_content(self): self.faldo_abstraction["strand"] = relation self.graph_chunk.add((entity, relation, attribute)) strand = True + strand_type = "-" else: self.category_values["strand"] = {".", } relation = self.namespace_data[self.format_uri("strand")] @@ -242,17 +253,18 @@ def generate_rdf_content(self): self.faldo_abstraction["strand"] = relation self.graph_chunk.add((entity, relation, attribute)) strand = True + strand_type = "." if strand: - if "strand" not in attribute_list: - attribute_list.append("strand") + if ("strand", strand_type) not in attribute_list: + attribute_list.append(("strand", strand_type)) self.attribute_abstraction.append({ "uri": self.namespace_data[self.format_uri("strand")], "label": rdflib.Literal("strand"), "type": [self.namespace_internal[self.format_uri("AskomicsCategory")], rdflib.OWL.ObjectProperty], "domain": entity_type, "range": self.namespace_data[self.format_uri("{}Category".format("strand"))], - "values": ["+", "-", "."] + "values": [strand_type] }) # Score diff --git a/askomics/libaskomics/CsvFile.py b/askomics/libaskomics/CsvFile.py index 299a2965..821f00dd 100644 --- a/askomics/libaskomics/CsvFile.py +++ b/askomics/libaskomics/CsvFile.py @@ -8,6 +8,7 @@ from rdflib import BNode from askomics.libaskomics.File import File +from askomics.libaskomics.OntologyManager import OntologyManager from askomics.libaskomics.Utils import cached_property @@ -28,7 +29,7 @@ class CsvFile(File): Public """ - def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -42,7 +43,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non host_url : None, optional AskOmics url """ - File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri) + File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri, external_graph=external_graph) self.preview_limit = 30 try: self.preview_limit = self.settings.getint("askomics", "npreview") @@ -191,8 +192,12 @@ def guess_column_type(self, values, header_index): if self.header[header_index].find("@") > 0: return "general_relation" + # If it matches "label" + if header_index == 1 and re.match(r".*label.*", self.header[header_index].lower(), re.IGNORECASE) is not None: + return "label" + special_types = { - 'reference': ('chr', 'ref'), + 'reference': ('chr', 'ref', 'scaff'), 'strand': ('strand', ), 'start': ('start', 'begin'), 'end': ('end', 'stop'), @@ -295,7 +300,7 @@ def is_date(value): try: parser.parse(value, dayfirst=True).date() return True - except parser.ParserError: + except Exception: return False @property @@ -357,8 +362,7 @@ def set_rdf_abstraction_domain_knowledge(self): def set_rdf_domain_knowledge(self): """Set the domain knowledge""" for index, attribute in enumerate(self.header): - - if self.columns_type[index] in ('category', 'reference', 'strand'): + if self.columns_type[index] in ('category', 'reference', 'strand') and self.header[index] in self.category_values: s = self.namespace_data["{}Category".format(self.format_uri(attribute, remove_space=True))] p = self.namespace_internal["category"] for value in self.category_values[self.header[index]]: @@ -392,6 +396,11 @@ def set_rdf_abstraction(self): if self.columns_type[0] == 'start_entity': self.graph_abstraction_dk.add((entity, rdflib.RDF.type, self.namespace_internal['startPoint'])) + available_ontologies = {} + for ontology in OntologyManager(self.app, self.session).list_ontologies(): + available_ontologies[ontology['short_name']] = ontology['uri'] + attribute_blanks = {} + # Attributes and relations for index, attribute_name in enumerate(self.header): @@ -401,6 +410,11 @@ def set_rdf_abstraction(self): if index == 0: continue + # Skip label for second column + if self.columns_type[index] == "label" and index == 1: + continue + + blank = BNode() # Relation if self.columns_type[index] in ('general_relation', 'symetric_relation'): symetric_relation = True if self.columns_type[index] == 'symetric_relation' else False @@ -410,7 +424,45 @@ def set_rdf_abstraction(self): label = rdflib.Literal(splitted[0]) rdf_range = self.rdfize(splitted[1]) rdf_type = rdflib.OWL.ObjectProperty - self.graph_abstraction_dk.add((attribute, rdflib.RDF.type, self.namespace_internal["AskomicsRelation"])) + + # New way of storing relations (starting from 4.4.0) + + endpoint = rdflib.Literal(self.external_endpoint) if self.external_endpoint else rdflib.Literal(self.settings.get('triplestore', 'endpoint')) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, rdflib.OWL.ObjectProperty)) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.namespace_internal["AskomicsRelation"])) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, label)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, entity)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, rdf_range)) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.endpointURL, endpoint)) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.dataset, rdflib.Literal(self.name))) + if symetric_relation: + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, rdf_range)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, entity)) + + continue + + # Manage ontologies + if self.columns_type[index] in available_ontologies: + + attribute = self.rdfize(attribute_name) + label = rdflib.Literal(attribute_name) + rdf_range = self.rdfize(available_ontologies[self.columns_type[index]]) + rdf_type = rdflib.OWL.ObjectProperty + + # New way of storing relations (starting from 4.4.0) + blank = BNode() + endpoint = rdflib.Literal(self.external_endpoint) if self.external_endpoint else rdflib.Literal(self.settings.get('triplestore', 'endpoint')) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, rdflib.OWL.ObjectProperty)) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.namespace_internal["AskomicsRelation"])) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, label)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, entity)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, rdf_range)) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.endpointURL, endpoint)) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.dataset, rdflib.Literal(self.name))) + + continue # Category elif self.columns_type[index] in ('category', 'reference', 'strand'): @@ -418,7 +470,7 @@ def set_rdf_abstraction(self): label = rdflib.Literal(attribute_name) rdf_range = self.namespace_data["{}Category".format(self.format_uri(attribute_name, remove_space=True))] rdf_type = rdflib.OWL.ObjectProperty - self.graph_abstraction_dk.add((attribute, rdflib.RDF.type, self.namespace_internal["AskomicsCategory"])) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.namespace_internal["AskomicsCategory"])) # Numeric elif self.columns_type[index] in ('numeric', 'start', 'end'): @@ -448,19 +500,22 @@ def set_rdf_abstraction(self): rdf_range = rdflib.XSD.string rdf_type = rdflib.OWL.DatatypeProperty - self.graph_abstraction_dk.add((attribute, rdflib.RDF.type, rdf_type)) - self.graph_abstraction_dk.add((attribute, rdflib.RDFS.label, label)) - self.graph_abstraction_dk.add((attribute, rdflib.RDFS.domain, entity)) - self.graph_abstraction_dk.add((attribute, rdflib.RDFS.range, rdf_range)) - if symetric_relation: - self.graph_abstraction_dk.add((attribute, rdflib.RDFS.domain, rdf_range)) - self.graph_abstraction_dk.add((attribute, rdflib.RDFS.range, entity)) + attribute_blanks[attribute] = blank + + # New way of storing attributes (starting from 4.4.0) + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, rdf_type)) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, label)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, entity)) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, rdf_range)) # Faldo: if self.faldo_entity: for key, value in self.faldo_abstraction.items(): if value: - self.graph_abstraction_dk.add((value, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + blank = attribute_blanks[value] + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], value)) def generate_rdf_content(self): """Generator of the rdf content @@ -472,6 +527,10 @@ def generate_rdf_content(self): """ total_lines = sum(1 for line in open(self.path)) + available_ontologies = {} + for ontology in OntologyManager(self.app, self.session).list_ontologies(): + available_ontologies[ontology['short_name']] = ontology['uri'] + with open(self.path, 'r', encoding='utf-8') as file: reader = csv.reader(file, dialect=self.dialect) @@ -489,6 +548,11 @@ def generate_rdf_content(self): # Faldo self.faldo_entity = True if 'start' in self.columns_type and 'end' in self.columns_type else False + has_label = None + # Get first value, ignore others + if "label" in self.columns_type and self.columns_type.index("label") == 1: + has_label = True + # Loop on lines for row_number, row in enumerate(reader): @@ -501,7 +565,10 @@ def generate_rdf_content(self): # Entity entity = self.rdfize(row[0], custom_namespace=self.namespace_entity) - label = self.get_uri_label(row[0]) + if has_label and row[1]: + label = row[1] + else: + label = self.get_uri_label(row[0]) self.graph_chunk.add((entity, rdflib.RDF.type, entity_type)) self.graph_chunk.add((entity, rdflib.RDFS.label, rdflib.Literal(label))) @@ -525,6 +592,11 @@ def generate_rdf_content(self): relation = None symetric_relation = False + # Skip label type for second column + # if type is label but not second column, default to string + if current_type == "label" and column_number == 1: + continue + # Skip entity and blank cells if column_number == 0 or (not cell and not current_type == "strand"): continue @@ -536,6 +608,12 @@ def generate_rdf_content(self): relation = self.rdfize(splitted[0]) attribute = self.rdfize(cell) + # Ontology + elif current_type in available_ontologies: + symetric_relation = False + relation = self.rdfize(current_header) + attribute = self.rdfize(cell) + # Category elif current_type in ('category', 'reference', 'strand'): potential_relation = self.rdfize(current_header) @@ -583,7 +661,7 @@ def generate_rdf_content(self): elif current_type == "date": relation = self.rdfize(current_header) - attribute = rdflib.Literal(self.convert_type(cell)) + attribute = rdflib.Literal(self.convert_type(cell, try_date=True)) # default is text else: diff --git a/askomics/libaskomics/Database.py b/askomics/libaskomics/Database.py index 5afadeae..9fc02acb 100644 --- a/askomics/libaskomics/Database.py +++ b/askomics/libaskomics/Database.py @@ -76,6 +76,8 @@ def init_database(self): self.create_files_table() self.create_datasets_table() self.create_abstraction_table() + self.create_prefixes_table() + self.create_ontologies_table() def create_user_table(self): """Create the user table""" @@ -196,6 +198,39 @@ def update_datasets_table(self): except Exception: pass + query = ''' + ALTER TABLE datasets + ADD ontology boolean NULL + DEFAULT(0) + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + + query = ''' + ALTER TABLE datasets + ADD endpoint text NULL + DEFAULT(null) + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + + query = ''' + ALTER TABLE datasets + ADD remote_graph text NULL + DEFAULT(null) + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + def create_integration_table(self): """Create the integration table""" query = ''' @@ -350,6 +385,28 @@ def create_files_table(self): ''' self.execute_sql_query(query) + query = ''' + ALTER TABLE files + ADD status text NOT NULL + DEFAULT('available') + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + + query = ''' + ALTER TABLE files + ADD task_id text NULL + DEFAULT(NULL) + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + def create_abstraction_table(self): """Create abstraction table""" query = """ @@ -361,3 +418,61 @@ def create_abstraction_table(self): ) """ self.execute_sql_query(query) + + def create_prefixes_table(self): + """Create the prefix table""" + query = ''' + CREATE TABLE IF NOT EXISTS prefixes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + prefix text NOT NULL, + namespace text NOT NULL + ) + ''' + self.execute_sql_query(query) + + def create_ontologies_table(self): + """Create the ontologies table""" + query = ''' + CREATE TABLE IF NOT EXISTS ontologies ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name text NOT NULL, + uri text NOT NULL, + short_name text NOT NULL, + type text DEFAULT 'sparql', + dataset_id INTEGER NOT NULL, + graph text NOT NULL, + FOREIGN KEY(dataset_id) REFERENCES datasets(id) + ) + ''' + self.execute_sql_query(query) + + query = ''' + ALTER TABLE ontologies + ADD label_uri text NOT NULL + DEFAULT('rdfs:label') + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + + query = ''' + ALTER TABLE ontologies + ADD endpoint text NULL + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass + + query = ''' + ALTER TABLE ontologies + ADD remote_graph text NULL + ''' + + try: + self.execute_sql_query(query) + except Exception: + pass diff --git a/askomics/libaskomics/Dataset.py b/askomics/libaskomics/Dataset.py index 927f4896..c3fd7b1b 100644 --- a/askomics/libaskomics/Dataset.py +++ b/askomics/libaskomics/Dataset.py @@ -45,6 +45,9 @@ def __init__(self, app, session, dataset_info={}): self.public = dataset_info["public"] if "public" in dataset_info else False self.start = dataset_info["start"] if "start" in dataset_info else None self.end = dataset_info["end"] if "end" in dataset_info else None + self.ontology = dataset_info["ontology"] if "ontology" in dataset_info else False + self.endpoint = dataset_info["endpoint"] if "endpoint" in dataset_info else False + self.remote_graph = dataset_info["remote_graph"] if "remote_graph" in dataset_info else False def set_info_from_db(self, admin=False): """Set the info in from the database""" @@ -58,7 +61,7 @@ def set_info_from_db(self, admin=False): where_query = "AND user_id = ?" query = ''' - SELECT celery_id, file_id, name, graph_name, public, start, end + SELECT celery_id, file_id, name, graph_name, public, start, end, ontology, endpoint, remote_graph FROM datasets WHERE id = ? {} @@ -73,11 +76,40 @@ def set_info_from_db(self, admin=False): self.public = rows[0][4] self.start = rows[0][5] self.end = rows[0][6] + self.ontology = rows[0][7] + self.endpoint = rows[0][8] + self.remote_graph = rows[0][9] - def save_in_db(self): + def save_in_db(self, endpoint, remote_graph=None, set_graph=False): """Save the dataset into the database""" database = Database(self.app, self.session) + subquery = "NULL" + args = ( + self.session["user"]["id"], + self.celery_id, + self.file_id, + self.name, + self.public, + 0, + endpoint, + remote_graph + ) + + if set_graph: + subquery = "?" + args = ( + self.session["user"]["id"], + self.celery_id, + self.file_id, + self.name, + self.graph_name, + self.public, + 0, + endpoint, + remote_graph + ) + query = ''' INSERT INTO datasets VALUES( NULL, @@ -85,7 +117,7 @@ def save_in_db(self): ?, ?, ?, - NULL, + {}, ?, "queued", strftime('%s', 'now'), @@ -93,18 +125,14 @@ def save_in_db(self): ?, NULL, NULL, - NULL + NULL, + 0, + ?, + ? ) - ''' + '''.format(subquery) - self.id = database.execute_sql_query(query, ( - self.session["user"]["id"], - self.celery_id, - self.file_id, - self.name, - self.public, - 0 - ), get_id=True) + self.id = database.execute_sql_query(query, args, get_id=True) def toggle_public(self, new_status, admin=False): """Change public status of a dataset (triplestore and db) @@ -228,3 +256,10 @@ def delete_from_db(self, admin=False): '''.format(where_query) database.execute_sql_query(query, query_params) + + query = ''' + DELETE FROM ontologies + WHERE dataset_id = ? + ''' + + database.execute_sql_query(query, (self.id,)) diff --git a/askomics/libaskomics/DatasetsHandler.py b/askomics/libaskomics/DatasetsHandler.py index 332dfc80..cdd1d172 100644 --- a/askomics/libaskomics/DatasetsHandler.py +++ b/askomics/libaskomics/DatasetsHandler.py @@ -51,7 +51,7 @@ def get_datasets(self): database = Database(self.app, self.session) query = ''' - SELECT id, name, public, status, start, end, ntriples, error_message, traceback, percent + SELECT id, name, public, status, start, end, ntriples, error_message, traceback, percent, ontology FROM datasets WHERE user_id = ? ''' @@ -76,7 +76,8 @@ def get_datasets(self): 'ntriples': row[6], 'error_message': row[7], 'traceback': row[8], - 'percent': row[9] + 'percent': row[9], + 'ontology': row[10] } datasets.append(dataset) @@ -97,7 +98,7 @@ def get_all_datasets(self): database = Database(self.app, self.session) query = ''' - SELECT datasets.id, datasets.name, datasets.public, datasets.status, datasets.start, datasets.end, datasets.ntriples, datasets.error_message, datasets.traceback, datasets.percent, users.username + SELECT datasets.id, datasets.name, datasets.public, datasets.status, datasets.start, datasets.end, datasets.ntriples, datasets.error_message, datasets.traceback, datasets.percent, users.username, datasets.ontology FROM datasets INNER JOIN users ON datasets.user_id=users.user_id ''' @@ -123,7 +124,8 @@ def get_all_datasets(self): 'error_message': row[7], 'traceback': row[8], 'percent': row[9], - 'user': row[10] + 'user': row[10], + 'ontology': row[11] } datasets.append(dataset) diff --git a/askomics/libaskomics/File.py b/askomics/libaskomics/File.py index 24292fa8..030f30e3 100644 --- a/askomics/libaskomics/File.py +++ b/askomics/libaskomics/File.py @@ -69,7 +69,7 @@ class File(Params): User graph """ - def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -97,6 +97,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non self.ntriples = 0 self.timestamp = int(time.time()) self.external_endpoint = external_endpoint + self.external_graph = external_graph self.default_graph = "{}".format(self.settings.get('triplestore', 'default_graph')) self.user_graph = "{}:{}_{}".format( @@ -130,6 +131,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non self.faldo = Namespace('http://biohackathon.org/resource/faldo/') self.prov = Namespace('http://www.w3.org/ns/prov#') self.dc = Namespace('http://purl.org/dc/elements/1.1/') + self.dcat = Namespace('http://www.w3.org/ns/dcat#') self.faldo_entity = False self.faldo_abstraction = { @@ -277,6 +279,8 @@ def set_metadata(self): self.graph_metadata.add((rdflib.Literal(self.file_graph), self.prov.wasDerivedFrom, rdflib.Literal(self.name))) self.graph_metadata.add((rdflib.Literal(self.file_graph), self.dc.hasVersion, rdflib.Literal(get_distribution('askomics').version))) self.graph_metadata.add((rdflib.Literal(self.file_graph), self.prov.describesService, rdflib.Literal(os.uname()[1]))) + if self.external_graph: + self.graph_metadata.add((rdflib.Literal(self.file_graph), self.dcat.Dataset, rdflib.Literal(self.external_graph))) if self.public: self.graph_metadata.add((rdflib.Literal(self.file_graph), self.namespace_internal['public'], rdflib.Literal(True))) @@ -461,7 +465,7 @@ def get_rdf_type(self, value): return rdflib.XSD.string - def convert_type(self, value): + def convert_type(self, value, try_date=False): """Convert a value to a date, an int or float or text Parameters @@ -480,9 +484,11 @@ def convert_type(self, value): try: return float(value) except ValueError: + if not try_date: + return value try: return parser.parse(value, dayfirst=True).date() - except parser.ParserError: + except Exception: return value return value diff --git a/askomics/libaskomics/FilesHandler.py b/askomics/libaskomics/FilesHandler.py index 54bc495c..04254028 100644 --- a/askomics/libaskomics/FilesHandler.py +++ b/askomics/libaskomics/FilesHandler.py @@ -24,7 +24,7 @@ class FilesHandler(FilesUtils): Upload path """ - def __init__(self, app, session, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -47,6 +47,7 @@ def __init__(self, app, session, host_url=None, external_endpoint=None, custom_u self.date = None self.external_endpoint = external_endpoint self.custom_uri = custom_uri + self.external_graph = external_graph def handle_files(self, files_id): """Handle file @@ -60,13 +61,13 @@ def handle_files(self, files_id): for file in files_infos: if file['type'] == 'csv/tsv': - self.files.append(CsvFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri)) + self.files.append(CsvFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri, external_graph=self.external_graph)) elif file['type'] == 'gff/gff3': - self.files.append(GffFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri)) + self.files.append(GffFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri, external_graph=self.external_graph)) elif file['type'] in ('rdf/ttl', 'rdf/xml', 'rdf/nt'): - self.files.append(RdfFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri)) + self.files.append(RdfFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri, external_graph=self.external_graph)) elif file['type'] == 'bed': - self.files.append(BedFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri)) + self.files.append(BedFile(self.app, self.session, file, host_url=self.host_url, external_endpoint=self.external_endpoint, custom_uri=self.custom_uri, external_graph=self.external_graph)) def get_files_infos(self, files_id=None, files_path=None, return_path=False): """Get files info @@ -89,7 +90,7 @@ def get_files_infos(self, files_id=None, files_path=None, return_path=False): subquery_str = '(' + ' OR '.join(['id = ?'] * len(files_id)) + ')' query = ''' - SELECT id, name, type, size, path, date + SELECT id, name, type, size, path, date, status FROM files WHERE user_id = ? AND {} @@ -101,7 +102,7 @@ def get_files_infos(self, files_id=None, files_path=None, return_path=False): subquery_str = '(' + ' OR '.join(['path = ?'] * len(files_path)) + ')' query = ''' - SELECT id, name, type, size, path, date + SELECT id, name, type, size, path, date, status FROM files WHERE user_id = ? AND {} @@ -112,7 +113,7 @@ def get_files_infos(self, files_id=None, files_path=None, return_path=False): else: query = ''' - SELECT id, name, type, size, path, date + SELECT id, name, type, size, path, date, status FROM files WHERE user_id = ? ''' @@ -126,7 +127,8 @@ def get_files_infos(self, files_id=None, files_path=None, return_path=False): 'name': row[1], 'type': row[2], 'size': row[3], - 'date': row[5] + 'date': row[5], + 'status': row[6] } if return_path: file['path'] = row[4] @@ -142,7 +144,7 @@ def get_all_files_infos(self): database = Database(self.app, self.session) query = ''' - SELECT files.id, files.name, files.type, files.size, files.date, users.username + SELECT files.id, files.name, files.type, files.size, files.date, files.status, users.username FROM files INNER JOIN users ON files.user_id=users.user_id ''' @@ -157,7 +159,8 @@ def get_all_files_infos(self): 'type': row[2], 'size': row[3], 'date': row[4], - 'user': row[5] + 'status': row[5], + 'user': row[6] } files.append(file) @@ -203,7 +206,7 @@ def write_data_into_file(self, data, file_name, mode, should_exist=False): with open(file_path, mode) as file: file.write(data) - def store_file_info_in_db(self, name, filetype, file_name, size): + def store_file_info_in_db(self, name, filetype, file_name, size, status="available", task_id=None): """Store the file info in the database Parameters @@ -216,6 +219,12 @@ def store_file_info_in_db(self, name, filetype, file_name, size): Local file name size : string Size of file + status: string + Status of the file (downloading, available, unavailable) + Returns + ------- + str + file id """ file_path = "{}/{}".format(self.upload_path, file_name) @@ -228,6 +237,8 @@ def store_file_info_in_db(self, name, filetype, file_name, size): ?, ?, ?, + ?, + ?, ? ) ''' @@ -237,7 +248,7 @@ def store_file_info_in_db(self, name, filetype, file_name, size): filetype = 'csv/tsv' elif filetype in ('text/turtle', 'ttl'): filetype = 'rdf/ttl' - elif filetype == "text/xml": + elif filetype in ["text/xml", "application/rdf+xml"]: filetype = "rdf/xml" elif filetype == "application/n-triples": filetype = "rdf/nt" @@ -248,7 +259,57 @@ def store_file_info_in_db(self, name, filetype, file_name, size): self.date = int(time.time()) - database.execute_sql_query(query, (self.session['user']['id'], name, filetype, file_path, size, self.date)) + return database.execute_sql_query(query, (self.session['user']['id'], name, filetype, file_path, size, self.date, status, task_id), get_id=True) + + def update_file_info(self, file_id, size=None, status="", task_id=""): + """Update file size and status + + Parameters + ---------- + file_id : str + File id + file_size : str + File current size + status : str + File status + task_id : str + Current task id + """ + + if not (size is not None or status or task_id): + return + + query_vars = [] + database = Database(self.app, self.session) + + size_query = "" + status_query = "" + task_query = "" + + # Should be a cleaner way of doing this... + if size is not None: + size_query = "size=?," if (status or task_id) else "size=?" + query_vars.append(size) + + if status: + status_query = "status=?," if task_id else "status=?" + query_vars.append(status) + + if task_id: + task_query = "task_id=?" + query_vars.append(task_id) + + query_vars.append(file_id) + + query = ''' + UPDATE files SET + {} + {} + {} + WHERE id=? + '''.format(size_query, status_query, task_query) + + database.execute_sql_query(query, tuple(query_vars)) def persist_chunk(self, chunk_info): """Persist a file by chunk. Store info in db if the chunk is the last @@ -297,7 +358,7 @@ def persist_chunk(self, chunk_info): pass raise(e) - def download_url(self, url): + def download_url(self, url, task_id): """Download a file from an URL and insert info in database Parameters @@ -309,14 +370,33 @@ def download_url(self, url): name = url.split("/")[-1] file_name = self.get_file_name() path = "{}/{}".format(self.upload_path, file_name) + file_id = self.store_file_info_in_db(name, "", file_name, 0, "downloading", task_id) # Get file - req = requests.get(url) - with open(path, 'wb') as file: - file.write(req.content) - - # insert in db - self.store_file_info_in_db(name, "", file_name, os.path.getsize(path)) + try: + with requests.get(url, stream=True) as r: + r.raise_for_status() + count = 0 + with open(path, 'wb') as file: + for chunk in r.iter_content(chunk_size=1024 * 1024 * 10): + # Update size every ~1GO + # + Check quota + if count == 100: + if self.session['user']['quota'] > 0: + total_size = self.get_size_occupied_by_user() + os.path.getsize(path) + if total_size >= self.session['user']['quota']: + raise Exception("Exceeded quota") + self.update_file_info(file_id, size=os.path.getsize(path)) + count = 0 + + file.write(chunk) + count += 1 + + # Update final value + self.update_file_info(file_id, size=os.path.getsize(path), status="available") + + except Exception: + self.update_file_info(file_id, size=os.path.getsize(path), status="error") def get_type(self, file_ext): """Get files type, based on extension diff --git a/askomics/libaskomics/GffFile.py b/askomics/libaskomics/GffFile.py index 102691b4..7c413de7 100644 --- a/askomics/libaskomics/GffFile.py +++ b/askomics/libaskomics/GffFile.py @@ -18,7 +18,7 @@ class GffFile(File): Public or private dataset """ - def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -32,7 +32,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non host_url : None, optional AskOmics url """ - File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri) + File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri, external_graph=external_graph) self.entities = [] self.entities_to_integrate = [] @@ -108,13 +108,32 @@ def set_rdf_abstraction_domain_knowledge(self): self.graph_abstraction_dk.add((self.namespace_data[self.format_uri(entity, remove_space=True)], rdflib.RDF.type, rdflib.OWL["Class"])) self.graph_abstraction_dk.add((self.namespace_data[self.format_uri(entity, remove_space=True)], rdflib.RDFS.label, rdflib.Literal(entity))) - for attribute in self.attribute_abstraction: - for attr_type in attribute["type"]: - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDF.type, attr_type)) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.label, attribute["label"])) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.domain, attribute["domain"])) - self.graph_abstraction_dk.add((attribute["uri"], rdflib.RDFS.range, attribute["range"])) + attribute_blanks = {} + for attribute in self.attribute_abstraction: + blank = BNode() + # New way of storing relations (starting from 4.4.0) + if attribute.get("relation"): + endpoint = rdflib.Literal(self.external_endpoint) if self.external_endpoint else rdflib.Literal(self.settings.get('triplestore', 'endpoint')) + for attr_type in attribute["type"]: + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, attr_type)) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute["uri"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, attribute["label"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, attribute["domain"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, attribute["range"])) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.endpointURL, endpoint)) + self.graph_abstraction_dk.add((blank, rdflib.DCAT.dataset, rdflib.Literal(self.name))) + + else: + # New way of storing attributes (starting from 4.4.0) + for attr_type in attribute["type"]: + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, attr_type)) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], attribute["uri"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.label, attribute["label"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.domain, attribute["domain"])) + self.graph_abstraction_dk.add((blank, rdflib.RDFS.range, attribute["range"])) + + attribute_blanks[attribute["uri"]] = blank # Domain Knowledge if "values" in attribute.keys(): for value in attribute["values"]: @@ -129,7 +148,9 @@ def set_rdf_abstraction_domain_knowledge(self): if self.faldo_entity: for key, value in self.faldo_abstraction.items(): if value: - self.graph_abstraction_dk.add((value, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + blank = attribute_blanks[value] + self.graph_abstraction_dk.add((blank, rdflib.RDF.type, self.faldo_abstraction_eq[key])) + self.graph_abstraction_dk.add((blank, self.namespace_internal["uri"], value)) def format_gff_entity(self, entity): """Format a gff entity name by removing type (type:entity --> entity) @@ -182,7 +203,7 @@ def generate_rdf_content(self): faldo_strand = None faldo_start = None faldo_end = None - + strand_type = None # Entity if not feature.id: if "ID" not in feature.qualifiers.keys(): @@ -272,6 +293,7 @@ def generate_rdf_content(self): attribute = self.namespace_data[self.format_uri("+")] faldo_strand = self.get_faldo_strand("+") self.faldo_abstraction["strand"] = relation + strand_type = "+" # self.graph_chunk.add((entity, relation, attribute)) elif feature.location.strand == -1: self.category_values["strand"] = {"-", } @@ -279,6 +301,7 @@ def generate_rdf_content(self): attribute = self.namespace_data[self.format_uri("-")] faldo_strand = self.get_faldo_strand("-") self.faldo_abstraction["strand"] = relation + strand_type = "-" # self.graph_chunk.add((entity, relation, attribute)) else: self.category_values["strand"] = {".", } @@ -286,16 +309,17 @@ def generate_rdf_content(self): attribute = self.namespace_data[self.format_uri(".")] faldo_strand = self.get_faldo_strand(".") self.faldo_abstraction["strand"] = relation + strand_type = "." - if (feature.type, "strand") not in attribute_list: - attribute_list.append((feature.type, "strand")) + if (feature.type, "strand", strand_type) not in attribute_list: + attribute_list.append((feature.type, "strand", strand_type)) self.attribute_abstraction.append({ "uri": self.namespace_data[self.format_uri("strand")], "label": rdflib.Literal("strand"), "type": [self.namespace_internal[self.format_uri("AskomicsCategory")], rdflib.OWL.ObjectProperty], "domain": entity_type, "range": self.namespace_data[self.format_uri("{}Category".format("strand"))], - "values": ["+", "-", "."] + "values": [strand_type] }) # Qualifiers (9th columns) @@ -319,7 +343,8 @@ def generate_rdf_content(self): "domain": entity_type, "range": value, "qualifier_key": qualifier_key, - "feature_type": feature.type + "feature_type": feature.type, + "relation": True }) skip = True else: @@ -336,7 +361,8 @@ def generate_rdf_content(self): "label": rdflib.Literal(qualifier_key), "type": [rdflib.OWL.ObjectProperty, self.namespace_internal[self.format_uri("AskomicsRelation")]], "domain": entity_type, - "range": self.namespace_data[self.format_uri(related_type)] + "range": self.namespace_data[self.format_uri(related_type)], + "relation": True }) else: diff --git a/askomics/libaskomics/LocalAuth.py b/askomics/libaskomics/LocalAuth.py index 4759cedb..a1bf0c4f 100644 --- a/askomics/libaskomics/LocalAuth.py +++ b/askomics/libaskomics/LocalAuth.py @@ -1044,22 +1044,21 @@ def send_mail_to_new_user(self, user): mailer = Mailer(self.app, self.session) if mailer.check_mailer(): body = textwrap.dedent(""" - Welcome {username}! + Dear {username}! - We heard that administrators of {url} create an account for you. + An account with this email adress was created by the administrators of {url}. - To use it, use the following link to create your password. Then, login with you email adress ({email}) or username ({username}). + To use it, please use the following link to create your password. You will then be able to log in with your username ({username}). {url}/password_reset?token={token} - If you don’t use this link within 3 hours, it will expire. To get a new password creation link, visit {url}/password_reset + This link will expire after 3 hours. To get a new password creation link, please visit {url}/password_reset Thanks, The AskOmics Team """.format( username=user["username"], - email=user["email"], url=self.settings.get('askomics', 'instance_url'), token=token )) @@ -1104,16 +1103,17 @@ def send_reset_link(self, login): body = textwrap.dedent(""" Dear {user}, - We heard that you lost your AskOmics password. Sorry about that! + A password reset request has been received for your {url} account. - But don’t worry! You can use the following link to reset your password: + If you did not initiate this request, feel free to ignore this message. - {url}/password_reset?token={token} + You can use the following link to reset your password: - If you don’t use this link within 3 hours, it will expire. To get a new password reset link, visit {url}/password_reset + {url}/password_reset?token={token} + This link will expire after 3 hours. To get a new password reset link, please visit {url}/password_reset - Thanks, + Best regards, The AskOmics Team """.format( diff --git a/askomics/libaskomics/OntologyManager.py b/askomics/libaskomics/OntologyManager.py new file mode 100644 index 00000000..eed16a87 --- /dev/null +++ b/askomics/libaskomics/OntologyManager.py @@ -0,0 +1,279 @@ +import requests + +from collections import defaultdict +from urllib.parse import quote_plus + + +from askomics.libaskomics.Database import Database +from askomics.libaskomics.Params import Params + + +class OntologyManager(Params): + """Manage ontologies + + Attributes + ---------- + namespace_internal : str + askomics namespace, from config file + namespace_data : str + askomics prefix, from config file + prefix : dict + dict of all prefixes + """ + + def __init__(self, app, session): + """init + + Parameters + ---------- + app : Flask + Flask app + session : + AskOmics session + """ + Params.__init__(self, app, session) + + def list_ontologies(self): + """Get all ontologies + + Returns + ------- + list + ontologies + """ + + database = Database(self.app, self.session) + + query = ''' + SELECT id, name, uri, short_name, type + FROM ontologies + ''' + + rows = database.execute_sql_query(query) + + ontologies = [] + for row in rows: + prefix = { + 'id': row[0], + 'name': row[1], + 'uri': row[2], + 'short_name': row[3], + 'type': row[4] + } + ontologies.append(prefix) + + return ontologies + + def list_full_ontologies(self): + """Get all ontologies for admin + + Returns + ------- + list + ontologies + """ + + database = Database(self.app, self.session) + + query = ''' + SELECT ontologies.id, ontologies.name, ontologies.uri, ontologies.short_name, ontologies.type, ontologies.label_uri, datasets.id, datasets.name, ontologies.graph, ontologies.endpoint, ontologies.remote_graph + FROM ontologies + INNER JOIN datasets ON datasets.id=ontologies.dataset_id + ''' + + rows = database.execute_sql_query(query) + + ontologies = [] + for row in rows: + prefix = { + 'id': row[0], + 'name': row[1], + 'uri': row[2], + 'short_name': row[3], + 'type': row[4], + 'label_uri': row[5], + 'dataset_id': row[6], + 'dataset_name': row[7], + 'graph': row[8], + 'endpoint': row[9], + 'remote_graph': row[10] + } + ontologies.append(prefix) + + return ontologies + + def get_ontology(self, short_name="", uri=""): + """Get a specific ontology based on short name or uri + + Returns + ------- + dict + ontology + """ + + if not (short_name or uri): + return None + + if short_name: + where_clause = "WHERE short_name = ?" + args = (short_name,) + + if uri: + where_clause = "WHERE uri = ?" + args = (uri,) + + database = Database(self.app, self.session) + + query = ''' + SELECT id, name, uri, short_name, type, dataset_id, graph, label_uri, endpoint, remote_graph + FROM ontologies + {} + '''.format(where_clause) + + rows = database.execute_sql_query(query, args) + + if not rows: + return None + + ontology = rows[0] + return { + 'id': ontology[0], + 'name': ontology[1], + 'uri': ontology[2], + 'short_name': ontology[3], + 'type': ontology[4], + 'dataset_id': ontology[5], + 'graph': ontology[6], + 'label_uri': ontology[7], + 'endpoint': ontology[8], + 'remote_graph': ontology[9] + } + + def add_ontology(self, name, uri, short_name, dataset_id, graph, endpoint, remote_graph=None, type="local", label_uri="rdfs:label"): + """Create a new ontology + + Returns + ------- + list of dict + Prefixes information + """ + database = Database(self.app, self.session) + if not endpoint: + endpoint = self.settings.get('triplestore', 'endpoint') + + query = ''' + INSERT INTO ontologies VALUES( + NULL, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ? + ) + ''' + + database.execute_sql_query(query, (name, uri, short_name, type, dataset_id, graph, label_uri, endpoint, remote_graph)) + + query = ''' + UPDATE datasets SET + ontology=1 + WHERE id=? + ''' + + database.execute_sql_query(query, (dataset_id,)) + + def remove_ontologies(self, ontology_ids): + """Remove ontologies + + Returns + ------- + None + """ + # Make sure we only remove the 'ontology' tag to datasets without any ontologies + ontologies = self.list_full_ontologies() + datasets = defaultdict(set) + datasets_to_modify = set() + ontos_to_delete = [ontology['id'] for ontology in ontology_ids] + + for onto in ontologies: + datasets[onto['dataset_id']].add(onto['id']) + + for key, values in datasets.items(): + if values.issubset(ontos_to_delete): + datasets_to_modify.add(key) + + database = Database(self.app, self.session) + + query = ''' + DELETE FROM ontologies + WHERE id = ? + ''' + + dataset_query = ''' + UPDATE datasets SET + ontology=0 + WHERE id=? + ''' + + for ontology in ontology_ids: + database.execute_sql_query(query, (ontology['id'],)) + if ontology['dataset_id'] in datasets_to_modify: + database.execute_sql_query(dataset_query, (ontology['dataset_id'],)) + + def test_ols_ontology(self, shortname): + base_url = "https://www.ebi.ac.uk/ols/api/ontologies/" + quote_plus(shortname.lower()) + + r = requests.get(base_url) + return r.status_code == 200 + + def autocomplete(self, ontology_uri, ontology_type, query_term, onto_short_name, onto_graph, onto_endpoint, custom_label, remote_graph): + """Search in ontology + + Returns + ------- + list of dict + Results + """ + # Circular import + from askomics.libaskomics.SparqlQuery import SparqlQuery + max_results = self.settings.getint("askomics", "autocomplete_max_results", fallback=10) + + if ontology_type == "local": + query = SparqlQuery(self.app, self.session, get_graphs=False) + # TODO: Actually store the graph in the ontology to quicken search + query.set_graphs([onto_graph]) + query.set_endpoints(set([self.settings.get('triplestore', 'endpoint'), onto_endpoint])) + if remote_graph: + query.set_remote_graph({onto_endpoint: [remote_graph]}) + + return query.autocomplete_local_ontology(ontology_uri, query_term, max_results, custom_label) + elif ontology_type == "ols": + base_url = "https://www.ebi.ac.uk/ols/api/select" + arguments = { + "q": query_term, + "ontology": quote_plus(onto_short_name.lower()), + "rows": max_results, + "type": "class", + "fieldList": "label" + } + + data = [] + + try: + r = requests.get(base_url, params=arguments, timeout=10) + + if not r.status_code == 200: + return data + + res = r.json() + if res['response']['docs']: + data = [term['label'] for term in res['response']['docs']] + + except requests.exceptions.Timeout: + pass + + return data diff --git a/askomics/libaskomics/PrefixManager.py b/askomics/libaskomics/PrefixManager.py index 3dc71dfc..493fab53 100644 --- a/askomics/libaskomics/PrefixManager.py +++ b/askomics/libaskomics/PrefixManager.py @@ -1,3 +1,4 @@ +from askomics.libaskomics.Database import Database from askomics.libaskomics.Params import Params import rdflib @@ -40,7 +41,9 @@ def __init__(self, app, session): 'rdf:': str(rdflib.RDF), 'rdfs:': str(rdflib.RDFS), 'owl:': str(rdflib.OWL), - 'xsd:': str(rdflib.XSD) + 'xsd:': str(rdflib.XSD), + 'skos:': str(rdflib.SKOS), + 'dcat:': str(rdflib.DCAT) } def get_prefix(self): @@ -79,4 +82,81 @@ def get_namespace(self, prefix): try: return prefix_cc[prefix] except Exception: + prefixes = self.get_custom_prefixes(prefix) + if prefixes: + return prefixes[0]["namespace"] return "" + + def get_custom_prefixes(self, prefix=None): + """Get custom (admin-defined) prefixes + + Returns + ------- + list of dict + Prefixes information + """ + database = Database(self.app, self.session) + + query_args = () + subquery = "" + + if prefix: + query_args = (prefix, ) + subquery = "WHERE prefix = ?" + + query = ''' + SELECT id, prefix, namespace + FROM prefixes + {} + '''.format(subquery) + + rows = database.execute_sql_query(query, query_args) + + prefixes = [] + for row in rows: + prefix = { + 'id': row[0], + 'prefix': row[1], + 'namespace': row[2], + } + prefixes.append(prefix) + + return prefixes + + def add_custom_prefix(self, prefix, namespace): + """Create a new custom (admin-defined) prefixes + + Returns + ------- + list of dict + Prefixes information + """ + database = Database(self.app, self.session) + + query = ''' + INSERT INTO prefixes VALUES( + NULL, + ?, + ? + ) + ''' + + database.execute_sql_query(query, (prefix, namespace,)) + + def remove_custom_prefixes(self, prefixes_id): + """Create a new custom (admin-defined) prefixes + + Returns + ------- + list of dict + Prefixes information + """ + database = Database(self.app, self.session) + + query = ''' + DELETE FROM prefixes + WHERE id = ? + ''' + + for prefix_id in prefixes_id: + database.execute_sql_query(query, (prefix_id,)) diff --git a/askomics/libaskomics/RdfFile.py b/askomics/libaskomics/RdfFile.py index 0954d91f..008bbd3b 100644 --- a/askomics/libaskomics/RdfFile.py +++ b/askomics/libaskomics/RdfFile.py @@ -14,7 +14,7 @@ class RdfFile(File): Public or private dataset """ - def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None): + def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None): """init Parameters @@ -28,7 +28,7 @@ def __init__(self, app, session, file_info, host_url=None, external_endpoint=Non host_url : None, optional AskOmics url """ - File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri) + File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri, external_graph=external_graph) self.type_dict = { "rdf/ttl": "turtle", @@ -40,7 +40,7 @@ def set_preview(self): """Summary""" pass - def get_location(self): + def get_location_and_remote_graph(self): """Get location of data if specified Returns @@ -50,10 +50,19 @@ def get_location(self): """ graph = RdfGraph(self.app, self.session) graph.parse(self.path, format=self.type_dict[self.type]) - triple = (None, self.prov.atLocation, None) - for s, p, o in graph.graph.triples(triple): - return str(o) - return None + triple_loc = (None, self.prov.atLocation, None) + triple_graph = (None, self.dcat.Dataset, None) + loc = None + remote_graph = None + for s, p, o in graph.graph.triples(triple_loc): + loc = str(o) + break + + for s, p, o in graph.graph.triples(triple_graph): + remote_graph = str(o) + break + + return loc, remote_graph def get_preview(self): """Get a preview of the frist 100 lines of a ttl file @@ -69,6 +78,12 @@ def get_preview(self): for x in range(1, 100): head += ttl_file.readline() + location = None + try: + location, remote_graph = self.get_location_and_remote_graph() + except Exception as e: + self.error_message = str(e) + return { 'type': self.type, 'id': self.id, @@ -77,13 +92,15 @@ def get_preview(self): 'error_message': self.error_message, 'data': { 'preview': head, - 'location': self.get_location() + 'location': location, + 'remote_graph': remote_graph } } def delete_metadata_location(self): """Delete metadata from data""" self.graph_chunk.remove((None, self.prov.atLocation, None)) + self.graph_chunk.remove((None, self.dcat.Dataset, None)) def integrate(self, public=False): """Integrate the file into the triplestore diff --git a/askomics/libaskomics/RdfGraph.py b/askomics/libaskomics/RdfGraph.py index 0bd40e0b..0024a3ed 100644 --- a/askomics/libaskomics/RdfGraph.py +++ b/askomics/libaskomics/RdfGraph.py @@ -40,6 +40,7 @@ def __init__(self, app, session): self.graph.bind('faldo', "http://biohackathon.org/resource/faldo/") self.graph.bind('dc', 'http://purl.org/dc/elements/1.1/') self.graph.bind('prov', 'http://www.w3.org/ns/prov#') + self.graph.bind('dcat', 'http://www.w3.org/ns/dcat#') self.ntriple = 0 self.percent = None diff --git a/askomics/libaskomics/Result.py b/askomics/libaskomics/Result.py index 07e74ca5..d48f7725 100644 --- a/askomics/libaskomics/Result.py +++ b/askomics/libaskomics/Result.py @@ -389,6 +389,33 @@ def save_in_db(self): return self.id + def populate_db(self, graphs, endpoints): + """Update status of results in db + + Parameters + ---------- + query : bool, optional + True if error during integration + error_message : bool, optional + Error string if error is True + """ + + database = Database(self.app, self.session) + + query = ''' + UPDATE results SET + graphs_and_endpoints=? + WHERE user_id=? AND id=? + ''' + + variables = [ + json.dumps({"graphs": graphs, "endpoints": endpoints}), + self.session["user"]["id"], + self.id + ] + + database.execute_sql_query(query, tuple(variables)) + def update_public_status(self, public): """Change public status @@ -471,7 +498,7 @@ def update_db_status(self, status, size=None, update_celery=False, update_date=F def rollback(self): """Delete file""" - self.delete_file_from_filesystem(self) + self.delete_file_from_filesystem() def delete_result(self): """Remove results from db and filesystem""" diff --git a/askomics/libaskomics/SparqlQuery.py b/askomics/libaskomics/SparqlQuery.py index ae098b87..57d2c29a 100644 --- a/askomics/libaskomics/SparqlQuery.py +++ b/askomics/libaskomics/SparqlQuery.py @@ -6,6 +6,8 @@ from askomics.libaskomics.SparqlQueryLauncher import SparqlQueryLauncher from askomics.libaskomics.Utils import Utils +from collections import defaultdict + class SparqlQuery(Params): """Format a sparql query @@ -18,7 +20,7 @@ class SparqlQuery(Params): all public graph """ - def __init__(self, app, session, json_query=None): + def __init__(self, app, session, json_query=None, get_graphs=False): """init Parameters @@ -35,6 +37,7 @@ def __init__(self, app, session, json_query=None): self.graphs = [] self.endpoints = [] + self.remote_graphs = defaultdict(list) self.selects = [] self.federated = False @@ -44,8 +47,9 @@ def __init__(self, app, session, json_query=None): self.local_endpoint_f = self.settings.get('federation', 'local_endpoint') except Exception: pass - - self.set_graphs_and_endpoints() + # No need to call this twice if we need it later (sparql queries) + if get_graphs: + self.set_graphs_and_endpoints() def set_graphs(self, graphs): """Set graphs @@ -67,6 +71,16 @@ def set_endpoints(self, endpoints): """ self.endpoints = endpoints + def set_remote_graph(self, remote_graphs): + """Set endpoints + + Parameters + ---------- + endpoints : list + Endpoints + """ + self.remote_graphs = remote_graphs + def is_federated(self): """Return True if there is more than 1 endpoint @@ -275,7 +289,7 @@ def get_default_query_with_prefix(self): self.get_default_query() ) - def format_query(self, query, limit=30, replace_froms=True, federated=False): + def format_query(self, query, limit=30, replace_froms=True, federated=False, ignore_single_tenant=True): """Format the Sparql query - remove all FROM @@ -295,11 +309,13 @@ def format_query(self, query, limit=30, replace_froms=True, federated=False): formatted sparql query """ froms = '' - if replace_froms: - froms = self.get_froms() if federated: - federated_line = "{}\n{}".format(self.get_federated_line(), self.get_federated_froms()) + federated_line = "" if self.settings.getboolean("askomics", "single_tenant", fallback=False) else "{}\n{}".format(self.get_federated_line(), self.get_federated_froms()) + federated_graphs_string = self.get_federated_remote_from_graphs() + else: + if replace_froms and (not self.settings.getboolean("askomics", "single_tenant", fallback=False)): + froms = self.get_froms() query_lines = query.split('\n') @@ -310,6 +326,7 @@ def format_query(self, query, limit=30, replace_froms=True, federated=False): if not line.upper().lstrip().startswith('FROM') and not line.upper().lstrip().startswith('LIMIT') and not line.upper().lstrip().startswith('@FEDERATE'): if line.upper().lstrip().startswith('SELECT') and federated: new_query += "\n{}\n".format(federated_line) + new_query += "\n{}\n".format(federated_graphs_string) new_query += '\n{}'.format(line) # Add new FROM if line.upper().lstrip().startswith('SELECT'): @@ -374,6 +391,22 @@ def get_federated_froms_from_graphs(self, graphs): from_string = "@from <{}>".format(self.local_endpoint_f) for graph in graphs: from_string += " <{}>".format(graph) + return from_string + + def get_federated_remote_from_graphs(self): + """Get @from string fir the federated query engine + + Returns + ------- + string + The from string + """ + from_string = "" + + for endpoint in self.endpoints: + remote_graphs = self.remote_graphs.get(endpoint, []) + if len(remote_graphs) == 1: + from_string += "\n@graph <{}> <{}>".format(endpoint, remote_graphs[0]) return from_string @@ -391,7 +424,7 @@ def get_endpoints_string(self): return endpoints_string - def set_graphs_and_endpoints(self, entities=None, graphs=None, endpoints=None): + def set_graphs_and_endpoints(self, entities=None, graphs=None, endpoints=None, ontologies={}): """Get all public and private graphs containing the given entities Parameters @@ -399,26 +432,33 @@ def set_graphs_and_endpoints(self, entities=None, graphs=None, endpoints=None): entities : list, optional list of entity uri """ - substrlst = [] filter_entity_string = '' if entities: - for entity in entities: - substrlst.append("?entity_uri = <{}>".format(entity)) - filter_entity_string = 'FILTER (' + ' || '.join(substrlst) + ')' + substr = ",".join(["<{}>".format(entity) for entity in entities]) + filter_entity_string = 'FILTER (?entity_uri IN( ' + substr + ' ))' filter_public_string = 'FILTER (?public = <true>)' if 'user' in self.session: filter_public_string = 'FILTER (?public = <true> || ?creator = <{}>)'.format(self.session["user"]["username"]) query = ''' - SELECT DISTINCT ?graph ?endpoint + SELECT DISTINCT ?graph ?endpoint ?entity_uri ?remote_graph WHERE {{ + ?graph_abstraction askomics:public ?public . + ?graph_abstraction dc:creator ?creator . ?graph askomics:public ?public . ?graph dc:creator ?creator . + GRAPH ?graph_abstraction {{ + ?graph_abstraction prov:atLocation ?endpoint . + OPTIONAL {{?graph_abstraction dcat:Dataset ?remote_graph .}} + ?entity_uri a ?askomics_type . + }} GRAPH ?graph {{ - ?graph prov:atLocation ?endpoint . - ?entity_uri a askomics:entity . + {{ [] a ?entity_uri . }} + UNION + {{ ?entity_uri a ?askomics_type . }} }} + VALUES ?askomics_type {{askomics:entity askomics:ontology}} {} {} }} @@ -428,11 +468,17 @@ def set_graphs_and_endpoints(self, entities=None, graphs=None, endpoints=None): header, results = query_launcher.process_query(self.prefix_query(query)) self.graphs = [] self.endpoints = [] + self.remote_graphs = defaultdict(list) for res in results: if not graphs or res["graph"] in graphs: - self.graphs.append(res["graph"]) + # Override with onto graph if matching uri + if ontologies.get(res['entity_uri']): + graph = ontologies[res['entity_uri']]['graph'] + else: + graph = res["graph"] + self.graphs.append(graph) - # If local triplestore url is not accessible by federetad query engine + # If local triplestore url is not accessible by federated query engine if res["endpoint"] == self.settings.get('triplestore', 'endpoint') and self.local_endpoint_f is not None: endpoint = self.local_endpoint_f else: @@ -440,10 +486,143 @@ def set_graphs_and_endpoints(self, entities=None, graphs=None, endpoints=None): if not endpoints or endpoint in endpoints: self.endpoints.append(endpoint) + if res.get("remote_graph"): + self.remote_graphs[endpoint].append(res.get("remote_graph")) self.endpoints = Utils.unique(self.endpoints) self.federated = len(self.endpoints) > 1 + def get_uri_parameters(self, uri, endpoints): + """Get parameters for a specific data URI + + Parameters + ---------- + uri : string + URI to search + + Returns + ------- + dict + The corresponding parameters + """ + raw_query = ''' + SELECT DISTINCT ?predicate ?object ?faldo_value ?faldo_relation + WHERE {{ + ?URI ?predicate ?object . + ?URI a ?entitytype . + + FILTER(! STRSTARTS(STR(?predicate), STR(askomics:))) + OPTIONAL {{ + + ?faldo_uri rdfs:domain ?entitytype . + ?faldo_uri rdfs:label ?attribute_label . + + OPTIONAL {{ + ?object faldo:begin/faldo:position ?faldo_value . + ?faldo_uri rdf:type askomics:faldoStart + }} + + OPTIONAL {{ + ?object faldo:end/faldo:position ?faldo_value . + ?faldo_uri rdf:type askomics:faldoEnd + }} + + OPTIONAL {{ + ?object faldo:begin/faldo:reference/rdfs:label ?faldo_value . + ?faldo_uri rdf:type askomics:faldoReference + }} + + OPTIONAL {{ + ?object faldo:begin/rdf:type ?Gene1_strandCategory . + ?Gene1_strand_faldoStrand a ?Gene1_strandCategory . + ?Gene1_strand_faldoStrand rdfs:label ?faldo_value . + ?faldo_uri rdf:type askomics:faldoStrand . + }} + + OPTIONAL {{ + ?faldo_uri askomics:uri ?node_uri + }} + + VALUES ?predicate {{faldo:location}} + }} + VALUES ?URI {{{}}} + BIND(IF(isBlank(?faldo_uri), ?node_uri ,?faldo_uri) as ?faldo_relation) + }} + '''.format(uri) + + federated = self.is_federated() + replace_froms = self.replace_froms() + + raw_query = self.prefix_query(raw_query) + + sparql = self.format_query(raw_query, replace_froms=replace_froms, federated=federated) + + query_launcher = SparqlQueryLauncher(self.app, self.session, get_result_query=True, federated=federated, endpoints=endpoints) + _, data = query_launcher.process_query(sparql) + + formated_data = [] + for row in data: + + predicate = row['predicate'] + object = row['object'] + + if row.get('faldo_relation'): + predicate = row.get("faldo_relation") + + if row.get('faldo_value'): + object = row.get('faldo_value') + + formated_data.append({ + 'predicate': predicate, + 'object': object, + }) + + return formated_data + + def autocomplete_local_ontology(self, uri, query, max_terms, label): + """Get results for a specific query + + Parameters + ---------- + uri : string + ontology uri + query : string + query to search + + Returns + ------- + dict + The corresponding parameters + """ + + subquery = "" + + if query: + subquery = 'FILTER(contains(lcase(?label), "{}"))'.format(query.lower()) + raw_query = ''' + SELECT DISTINCT ?label + WHERE {{ + ?uri rdf:type owl:Class . + ?uri {} ?label . + {} + }} + '''.format(label, subquery) + + raw_query = self.prefix_query(raw_query) + + is_federated = self.is_federated() + + sparql = self.format_query(raw_query, limit=max_terms, replace_froms=True, federated=is_federated) + + query_launcher = SparqlQueryLauncher(self.app, self.session, get_result_query=True, federated=is_federated) + _, data = query_launcher.process_query(sparql) + + formated_data = [] + for row in data: + formated_data.append(row['label']) + + return formated_data + def format_sparql_variable(self, name): """Format a name into a sparql variable by remove spacial char and add a ? @@ -873,6 +1052,8 @@ def build_query_from_json(self, preview=False, for_editor=False): for_editor : bool, optional Remove FROMS and @federate """ + # Circular import + from askomics.libaskomics.OntologyManager import OntologyManager entities = [] attributes = {} linked_attributes = [] @@ -890,14 +1071,19 @@ def build_query_from_json(self, preview=False, for_editor=False): var_to_replace = [] + ontologies = {} + om = OntologyManager(self.app, self.session) + # Browse attributes to get entities for attr in self.json["attr"]: entities = entities + attr["entityUris"] + if attr["type"] == "uri" and attr.get("ontology", False) is True and not attr["entityUris"][0] in ontologies: + ontologies[attr["entityUris"][0]] = om.get_ontology(uri=attr["entityUris"][0]) entities = list(set(entities)) # uniq list # Set graphs in function of entities needed - self.set_graphs_and_endpoints(entities=entities) + self.set_graphs_and_endpoints(entities=entities, ontologies=ontologies) # self.log.debug(self.json) @@ -1009,7 +1195,20 @@ def build_query_from_json(self, preview=False, for_editor=False): # Classic relation else: - relation = "<{}>".format(link["uri"]) + # Manage ontology stuff + inverse = "" + recurrence = "" + relation = link["uri"] + + if relation.startswith("^"): + inverse = "^" + relation = relation.lstrip("^") + + if relation.endswith("*"): + recurrence = "*" + relation = relation.rstrip("*") + + relation = inverse + "<{}>".format(relation) + recurrence triple = { "subject": source, "predicate": relation, @@ -1031,7 +1230,6 @@ def build_query_from_json(self, preview=False, for_editor=False): # Browse attributes for attribute in self.json["attr"]: - # Get blockid and sblockid of the attribute node block_id, sblock_id, pblock_ids = self.get_block_ids(attribute["nodeId"]) @@ -1040,13 +1238,20 @@ def build_query_from_json(self, preview=False, for_editor=False): subject = self.format_sparql_variable("{}{}_uri".format(attribute["entityLabel"], attribute["nodeId"])) predicate = attribute["uri"] obj = "<{}>".format(attribute["entityUris"][0]) - if not self.is_bnode(attribute["entityUris"][0], self.json["nodes"]): + if not (self.is_bnode(attribute["entityUris"][0], self.json["nodes"]) or attribute.get("ontology", False) is True): self.store_triple({ "subject": subject, "predicate": predicate, "object": obj, "optional": False }, block_id, sblock_id, pblock_ids) + if attribute.get("ontology", False) is True: + self.store_triple({ + "subject": subject, + "predicate": predicate, + "object": "owl:Class", + "optional": False + }, block_id, sblock_id, pblock_ids) if attribute["visible"]: self.selects.append(subject) @@ -1114,6 +1319,8 @@ def build_query_from_json(self, preview=False, for_editor=False): subject = self.format_sparql_variable("{}{}_uri".format(attribute["entityLabel"], attribute["nodeId"])) if attribute["uri"] == "rdfs:label": predicate = attribute["uri"] + if ontologies.get(attribute["entityUris"][0]): + predicate = ontologies[attribute["entityUris"][0]]["label_uri"] else: predicate = "<{}>".format(attribute["uri"]) @@ -1300,9 +1507,10 @@ def build_query_from_json(self, preview=False, for_editor=False): )) var_to_replace.append((category_value_uri, var_2)) - from_string = self.get_froms_from_graphs(self.graphs) + from_string = "" if self.settings.getboolean("askomics", "single_tenant", fallback=False) else self.get_froms_from_graphs(self.graphs) federated_from_string = self.get_federated_froms_from_graphs(self.graphs) endpoints_string = self.get_endpoints_string() + federated_graphs_string = self.get_federated_remote_from_graphs() # Linked attributes: replace SPARQL variable target by source self.replace_variables_in_blocks(var_to_replace) @@ -1332,6 +1540,7 @@ def build_query_from_json(self, preview=False, for_editor=False): query = """ {endpoints} {federated} +{remote_graphs} SELECT DISTINCT {selects} WHERE {{ @@ -1343,6 +1552,7 @@ def build_query_from_json(self, preview=False, for_editor=False): """.format( endpoints=endpoints_string, federated=federated_from_string, + remote_graphs=federated_graphs_string, selects=' '.join(self.selects), triples='\n '.join([self.triple_dict_to_string(triple_dict) for triple_dict in self.triples]), blocks='\n '.join([self.triple_block_to_string(triple_block) for triple_block in self.triples_blocks]), diff --git a/askomics/libaskomics/SparqlQueryLauncher.py b/askomics/libaskomics/SparqlQueryLauncher.py index aae8cc51..64fe2802 100644 --- a/askomics/libaskomics/SparqlQueryLauncher.py +++ b/askomics/libaskomics/SparqlQueryLauncher.py @@ -44,6 +44,7 @@ def __init__(self, app, session, get_result_query=False, federated=False, endpoi except Exception: pass + local = False # Use the federated query engine if federated: self.federated = True @@ -65,16 +66,20 @@ def __init__(self, app, session, get_result_query=False, federated=False, endpoi self.triplestore = self.settings.get('triplestore', 'triplestore') self.url_endpoint = self.settings.get('triplestore', 'endpoint') self.url_updatepoint = self.settings.get('triplestore', 'updatepoint') + local = True + + self.endpoint = SPARQLWrapper(self.url_endpoint, self.url_updatepoint) + + if local: try: self.endpoint.setCredentials( self.settings.get('triplestore', 'username'), self.settings.get('triplestore', 'password') ) + self.endpoint.setHTTPAuth(self.settings.get('triplestore', 'http_auth', fallback="basic")) except Exception: pass - self.endpoint = SPARQLWrapper(self.url_endpoint, self.url_updatepoint) - def load_data(self, file_name, graph, host_url): """Load data in function of the triplestore @@ -220,7 +225,7 @@ def insert_data(self, ttl, graph, metadata=False): TYPE query result """ - triples = self.get_triples_from_graph(ttl) if metadata else ttl.serialize(format='nt').decode("utf-8") + triples = self.get_triples_from_graph(ttl) if metadata else ttl.serialize(format='nt') query = ''' INSERT {{ @@ -305,8 +310,8 @@ def execute_query(self, query, disable_log=False, isql_api=False): if self.endpoint.isSparqlUpdateRequest(): self.endpoint.setMethod('POST') # Virtuoso hack - if self.triplestore == 'virtuoso': - self.endpoint.queryType = "SELECT" + # if self.triplestore == 'virtuoso': + # self.endpoint.queryType = "SELECT" results = self.endpoint.query() # Select diff --git a/askomics/libaskomics/TriplestoreExplorer.py b/askomics/libaskomics/TriplestoreExplorer.py index 50557c6c..ced8a54e 100644 --- a/askomics/libaskomics/TriplestoreExplorer.py +++ b/askomics/libaskomics/TriplestoreExplorer.py @@ -208,12 +208,14 @@ def get_abstraction(self): """ insert, abstraction = self.get_cached_asbtraction() + single_tenant = self.settings.getboolean("askomics", "single_tenant", fallback=False) + # No abstraction entry in database, create it if not abstraction: abstraction = { - "entities": self.get_abstraction_entities(), - "attributes": self.get_abstraction_attributes(), - "relations": self.get_abstraction_relations() + "entities": self.get_abstraction_entities(single_tenant), + "attributes": self.get_abstraction_attributes(single_tenant), + "relations": self.get_abstraction_relations(single_tenant) } # Cache abstraction in DB, only for logged users @@ -305,7 +307,7 @@ def uncache_abstraction(self, public=True, force=False): database.execute_sql_query(query, sql_var) - def get_abstraction_entities(self): + def get_abstraction_entities(self, single_tenant=False): """Get abstraction entities Returns @@ -328,7 +330,7 @@ def get_abstraction_entities(self): GRAPH ?graph {{ ?graph prov:atLocation ?endpoint . ?entity_uri a ?entity_type . - VALUES ?entity_type {{ askomics:entity askomics:bnode }} . + VALUES ?entity_type {{ askomics:entity askomics:bnode askomics:ontology}} . # Faldo OPTIONAL {{ ?entity_uri a ?entity_faldo . @@ -362,6 +364,7 @@ def get_abstraction_entities(self): "label": label, "instancesHaveLabels": True if "have_no_label" not in result else False if result["have_no_label"] == "1" else True, "faldo": True if "entity_faldo" in result else False, + "ontology": True if result["entity_type"] == "{}ontology".format(self.settings.get("triplestore", "namespace_internal")) else False, "endpoints": [result["endpoint"]], "graphs": [result["graph"]], } @@ -378,7 +381,7 @@ def get_abstraction_entities(self): return entities - def get_abstraction_attributes(self): + def get_abstraction_attributes(self, single_tenant=False): """Get user abstraction attributes from the triplestore Returns @@ -407,13 +410,16 @@ def get_abstraction_attributes(self): ?graph askomics:public ?public . ?graph dc:creator ?creator . GRAPH ?graph {{ - ?attribute_uri a ?attribute_type . + ?node a ?attribute_type . VALUES ?attribute_type {{ owl:DatatypeProperty askomics:AskomicsCategory }} - ?attribute_uri rdfs:label ?attribute_label . - ?attribute_uri rdfs:range ?attribute_range . + ?node rdfs:label ?attribute_label . + ?node rdfs:range ?attribute_range . + # Retrocompatibility + OPTIONAL {{?node askomics:uri ?new_attribute_uri}} + BIND( IF(isBlank(?node),?new_attribute_uri, ?node) as ?attribute_uri ) # Faldo OPTIONAL {{ - ?attribute_uri a ?attribute_faldo . + ?node a ?attribute_faldo . VALUES ?attribute_faldo {{ askomics:faldoStart askomics:faldoEnd askomics:faldoStrand askomics:faldoReference }} }} # Categories (DK) @@ -424,10 +430,10 @@ def get_abstraction_attributes(self): }} # Attribute of entity (or motherclass of entity) {{ - ?attribute_uri rdfs:domain ?mother . + ?node rdfs:domain ?mother . ?entity_uri rdfs:subClassOf ?mother . }} UNION {{ - ?attribute_uri rdfs:domain ?entity_uri . + ?node rdfs:domain ?entity_uri . }} FILTER ( ?public = <true>{} @@ -441,13 +447,13 @@ def get_abstraction_attributes(self): attributes = [] for result in data: - # Attributes - if "attribute_uri" in result and "attribute_label" in result and result["attribute_type"] != "{}AskomicsCategory".format(self.settings.get("triplestore", "namespace_internal")) and result["attribute_range"] in litterals: - attr_tpl = (result["attribute_uri"], result["entity_uri"]) + attribute_uri = result.get("attribute_uri") + if attribute_uri and "attribute_label" in result and result["attribute_type"] != "{}AskomicsCategory".format(self.settings.get("triplestore", "namespace_internal")) and result["attribute_range"] in litterals: + attr_tpl = (attribute_uri, result["entity_uri"]) if attr_tpl not in attributes_list: attributes_list.append(attr_tpl) attribute = { - "uri": result["attribute_uri"], + "uri": attribute_uri, "label": result["attribute_label"], "graphs": [result["graph"], ], "entityUri": result["entity_uri"], @@ -465,12 +471,12 @@ def get_abstraction_attributes(self): index_attribute = attributes_list.index(attr_tpl) # Categories - if "attribute_uri" in result and result["attribute_type"] == "{}AskomicsCategory".format(self.settings.get("triplestore", "namespace_internal")) and "category_value_uri" in result: - attr_tpl = (result["attribute_uri"], result["entity_uri"]) + if attribute_uri and result["attribute_type"] == "{}AskomicsCategory".format(self.settings.get("triplestore", "namespace_internal")) and "category_value_uri" in result: + attr_tpl = (attribute_uri, result["entity_uri"]) if attr_tpl not in attributes_list: attributes_list.append(attr_tpl) attribute = { - "uri": result["attribute_uri"], + "uri": attribute_uri, "label": result["attribute_label"], "graphs": [result["graph"], ], "entityUri": result["entity_uri"], @@ -497,7 +503,7 @@ def get_abstraction_attributes(self): return attributes - def get_abstraction_relations(self): + def get_abstraction_relations(self, single_tenant=False): """Get user abstraction relations from the triplestore Returns @@ -513,24 +519,27 @@ def get_abstraction_relations(self): query_builder = SparqlQuery(self.app, self.session) query = ''' - SELECT DISTINCT ?graph ?entity_uri ?entity_faldo ?entity_label ?node_type ?attribute_uri ?attribute_faldo ?attribute_label ?attribute_range ?property_uri ?property_faldo ?property_label ?range_uri ?category_value_uri ?category_value_label + SELECT DISTINCT ?graph ?entity_uri ?entity_faldo ?entity_label ?attribute_uri ?attribute_faldo ?attribute_label ?attribute_range ?property_uri ?property_faldo ?property_label ?range_uri ?category_value_uri ?category_value_label WHERE {{ # Graphs ?graph askomics:public ?public . ?graph dc:creator ?creator . GRAPH ?graph {{ # Property (relations and categories) - ?property_uri a owl:ObjectProperty . - ?property_uri a askomics:AskomicsRelation . - ?property_uri rdfs:label ?property_label . - ?property_uri rdfs:range ?range_uri . + ?node a owl:ObjectProperty . + ?node a askomics:AskomicsRelation . + ?node rdfs:label ?property_label . + ?node rdfs:range ?range_uri . + # Retrocompatibility + OPTIONAL {{?node askomics:uri ?new_property_uri}} + BIND( IF(isBlank(?node), ?new_property_uri, ?node) as ?property_uri) }} # Relation of entity (or motherclass of entity) {{ - ?property_uri rdfs:domain ?mother . + ?node rdfs:domain ?mother . ?entity_uri rdfs:subClassOf ?mother . }} UNION {{ - ?property_uri rdfs:domain ?entity_uri . + ?node rdfs:domain ?entity_uri . }} FILTER ( ?public = <true>{} @@ -542,15 +551,15 @@ def get_abstraction_relations(self): relations_list = [] relations = [] - for result in data: # Relation if "property_uri" in result: - rel_tpl = (result["property_uri"], result["entity_uri"], result["range_uri"]) + property_uri = result.get("property_uri") + rel_tpl = (property_uri, result["entity_uri"], result["range_uri"]) if rel_tpl not in relations_list: relations_list.append(rel_tpl) relation = { - "uri": result["property_uri"], + "uri": property_uri, "label": result["property_label"], "graphs": [result["graph"], ], "source": result["entity_uri"], diff --git a/askomics/react/src/components/autocomplete.jsx b/askomics/react/src/components/autocomplete.jsx new file mode 100644 index 00000000..452e9575 --- /dev/null +++ b/askomics/react/src/components/autocomplete.jsx @@ -0,0 +1,147 @@ +import React, { Component} from 'react' +import axios from 'axios' +import PropTypes from 'prop-types' +import { Input } from 'reactstrap' +import Autosuggest from 'react-autosuggest'; + + +export default class Autocomplete extends Component { + constructor (props) { + super(props) + this.state = { + ontologyShort: this.getAutoComplete(), + maxResults: this.props.config.autocompleteMaxResults, + options: [] + } + + this.handleFilterValue = this.props.handleFilterValue.bind(this) + this.autocompleteOntology = this.autocompleteOntology.bind(this) + this.onSuggestionsFetchRequested = this.onSuggestionsFetchRequested.bind(this) + this.onSuggestionsClearRequested = this.onSuggestionsClearRequested.bind(this) + this.cancelRequest + this.handleOntoValue = this.handleOntoValue.bind(this) + this.WAIT_INTERVAL = 500 + this.timerID + } + + getAutoComplete () { + let selectedOnto = this.props.config.ontologies.find(onto => onto.uri == this.props.entityUri) + if (selectedOnto){ + return selectedOnto.short_name + } + return "" + } + + autocompleteOntology (value) { + if (this.state.ontologyShort.length == 0){ return } + + let userInput = value + let requestUrl = '/api/ontology/' + this.state.ontologyShort + "/autocomplete" + + if (value.length < 3) { return } + + axios.get(requestUrl, {baseURL: this.props.config.proxyPath, params:{q: userInput}, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + this.setState({ + options: response.data.results + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + error: true, + errorMessage: error.response.data.errorMessage, + status: error.response.status, + waiting: false + }) + }) + } + + + handleOntoValue (event, value) { + this.handleFilterValue({target:{value: value.newValue, id: this.props.attributeId}}) + } + + + renderSuggestion (suggestion, {query, isHighlighted}) { + let textArray = suggestion.split(RegExp(query, "gi")); + let match = suggestion.match(RegExp(query, "gi")); + + return ( + <span> + {textArray.map((item, index) => ( + <span key={index}> + {item} + {index !== textArray.length - 1 && match && ( + <b>{match[index]}</b> + )} + </span> + ))} + </span> + ); + } + + onSuggestionsClearRequested () { + this.setState({ + options: [] + }) + } + + getSuggestionValue (suggestion) { + return suggestion + }; + + onSuggestionsFetchRequested ( value ){ + clearTimeout(this.timerID) + this.timerID = setTimeout(() => { + this.autocompleteOntology(value.value) + }, this.WAIT_INTERVAL) + }; + + + renderInputComponent (inputProps){ + return( + <div> + <Input type="text" {...inputProps} /> + </div> + ) + } + + + shouldRenderSuggestions(value, reason){ + return value.trim().length > 2; + } + + render () { + + let value = this.props.filterValue + + let inputProps = { + placeholder: '', + value, + onChange: this.handleOntoValue + }; + + return ( + <Autosuggest + suggestions={this.state.options} + onSuggestionsFetchRequested={this.onSuggestionsFetchRequested} + onSuggestionsClearRequested={this.onSuggestionsClearRequested} + getSuggestionValue={this.getSuggestionValue} + renderSuggestion={this.renderSuggestion} + inputProps={inputProps} + renderInputComponent={this.renderInputComponent} + shouldRenderSuggestions={this.shouldRenderSuggestions} + /> + ) + + } +} + +Autocomplete.propTypes = { + handleFilterValue: PropTypes.func, + entityUri: PropTypes.string, + attributeId: PropTypes.number, + filterValue: PropTypes.string, + config: PropTypes.object, +} diff --git a/askomics/react/src/navbar.jsx b/askomics/react/src/navbar.jsx index ff3062fc..01b5e457 100644 --- a/askomics/react/src/navbar.jsx +++ b/askomics/react/src/navbar.jsx @@ -43,6 +43,8 @@ export default class AskoNavbar extends Component { adminLinks = ( <DropdownItem className="bg-dark" tag="Link"> <Link className="nav-link" to="/admin"><i className="fas fa-chess-king"></i> Admin</Link> + <Link className="nav-link" to="/prefixes"><i className="fas fa-edit"></i> Prefixes</Link> + <Link className="nav-link" to="/ontologies"><i className="fas fa-project-diagram"></i> Ontologies</Link> </DropdownItem> ) } @@ -104,4 +106,4 @@ export default class AskoNavbar extends Component { AskoNavbar.propTypes = { waitForStart: PropTypes.bool, config: PropTypes.object -} \ No newline at end of file +} diff --git a/askomics/react/src/routes.jsx b/askomics/react/src/routes.jsx index 6555c070..94e92c7e 100644 --- a/askomics/react/src/routes.jsx +++ b/askomics/react/src/routes.jsx @@ -14,6 +14,8 @@ import Logout from './routes/login/logout' import PasswordReset from './routes/login/passwordreset' import Account from './routes/account/account' import Admin from './routes/admin/admin' +import Prefixes from './routes/admin/prefixes' +import Ontologies from './routes/admin/ontologies' import Sparql from './routes/sparql/sparql' import FormQuery from './routes/form/query' import FormEditQuery from './routes/form_edit/query' @@ -44,7 +46,10 @@ export default class Routes extends Component { gitUrl: null, disableIntegration: null, namespaceData: null, - namespaceInternal: null + namespaceInternal: null, + ontologies: [], + singleTenant: false, + autocompleteMaxResults: 10 } } this.cancelRequest @@ -113,6 +118,8 @@ export default class Routes extends Component { <Route path="/password_reset" component={(props) => <PasswordReset config={this.state.config} waitForStart={this.state.waiting} setStateNavbar={p => this.setState(p)} {...props}/>}/> <Route path="/account" exact component={() => (<Account config={this.state.config} waitForStart={this.state.waiting} setStateNavbar={p => this.setState(p)} />)} /> <Route path="/admin" exact component={() => (<Admin config={this.state.config} waitForStart={this.state.waiting} setStateNavbar={p => this.setState(p)} />)} /> + <Route path="/prefixes" exact component={() => (<Prefixes config={this.state.config} waitForStart={this.state.waiting} setStateNavbar={p => this.setState(p)} />)} /> + <Route path="/ontologies" exact component={() => (<Ontologies config={this.state.config} waitForStart={this.state.waiting} setStateNavbar={p => this.setState(p)} />)} /> <Route path="/query" exact component={Query} /> <Route path="/form" exact component={FormQuery} /> <Route path="/form_edit" exact component={FormEditQuery} /> diff --git a/askomics/react/src/routes/admin/admin.jsx b/askomics/react/src/routes/admin/admin.jsx index 17cebd31..9f4bfb63 100644 --- a/askomics/react/src/routes/admin/admin.jsx +++ b/askomics/react/src/routes/admin/admin.jsx @@ -43,7 +43,7 @@ export default class Admin extends Component { instanceUrl: "", usersSelected: [], filesSelected: [], - datasetsSelected: [] + datasetsSelected: [], } this.handleChangeUserInput = this.handleChangeUserInput.bind(this) this.handleChangeFname = this.handleChangeFname.bind(this) @@ -404,6 +404,7 @@ export default class Admin extends Component { <QueriesTable config={this.props.config} queries={this.state.queries} setStateQueries={p => this.setState(p)} queriesLoading={this.state.queriesLoading} /> <br /> <ErrorDiv status={this.state.queryStatus} error={this.state.queryError} errorMessage={this.state.queryErrorMessage} /> + </div> ) } diff --git a/askomics/react/src/routes/admin/datasetstable.jsx b/askomics/react/src/routes/admin/datasetstable.jsx index e961b6b4..dd199566 100644 --- a/askomics/react/src/routes/admin/datasetstable.jsx +++ b/askomics/react/src/routes/admin/datasetstable.jsx @@ -99,7 +99,7 @@ render () { return ( <FormGroup> <div> - <CustomInput type="switch" id={"dataset-" + row.id} onChange={this.togglePublicDataset} checked={cell} value={cell} /> + <CustomInput disabled={row.ontology == 0 ? false: true}type="switch" id={"dataset-" + row.id} onChange={this.togglePublicDataset} checked={cell} value={cell} /> </div> </FormGroup> ) diff --git a/askomics/react/src/routes/admin/ontologies.jsx b/askomics/react/src/routes/admin/ontologies.jsx new file mode 100644 index 00000000..d7b97511 --- /dev/null +++ b/askomics/react/src/routes/admin/ontologies.jsx @@ -0,0 +1,365 @@ +import React, { Component } from 'react' +import axios from 'axios' +import {Button, Form, FormGroup, Label, Input, Alert, Row, Col, CustomInput } from 'reactstrap' +import BootstrapTable from 'react-bootstrap-table-next' +import paginationFactory from 'react-bootstrap-table2-paginator' +import update from 'react-addons-update' +import PropTypes from 'prop-types' +import Utils from '../../classes/utils' +import { Redirect } from 'react-router-dom' +import WaitingDiv from '../../components/waiting' +import ErrorDiv from '../error/error' + +export default class Ontologies extends Component { + constructor (props) { + super(props) + this.utils = new Utils() + this.state = { + error: false, + errorMessage: '', + ontologyError: false, + ontologyErrorMessage: '', + newontologyError: false, + newontologyErrorMessage: '', + ontologies: [], + datasets: [], + name: "", + uri: "", + shortName: "", + type: "local", + datasetId: "", + labelUri: "rdfs:label", + ontologiesSelected: [] + } + this.handleChangeValue = this.handleChangeValue.bind(this) + this.handleAddOntology = this.handleAddOntology.bind(this) + this.deleteSelectedOntologies = this.deleteSelectedOntologies.bind(this) + this.handleOntologySelection = this.handleOntologySelection.bind(this) + this.handleOntologySelectionAll = this.handleOntologySelectionAll.bind(this) + this.cancelRequest + } + + isOntologiesDisabled () { + return this.state.ontologiesSelected.length == 0 + } + + cleanupOntologies (newOntologies) { + let cleanOntologies = [] + newOntologies.map(onto => { + cleanOntologies.push({ + id:onto.id, + name:onto.name, + uri:onto.uri, + short_name: onto.short_name, + type: onto.type + }) + }) + return cleanOntologies + } + + deleteSelectedOntologies () { + let requestUrl = '/api/admin/delete_ontologies' + let data = { + ontologiesIdToDelete: this.state.ontologiesSelected + } + + axios.post(requestUrl, data, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + console.log(requestUrl, response.data) + this.setState({ + ontologies: response.data.ontologies, + ontologiesSelected: [], + }) + this.props.setStateNavbar({ + config: update(this.props.config, {ontologies: {$set: this.cleanupOntologies(response.data.ontologies)}}) + }) + }) + } + + handleChangeValue (event) { + let data = {} + data[event.target.id] = event.target.value + this.setState(data) + } + + validateOntologyForm () { + return ( + this.state.name.length > 0 && + this.state.uri.length > 0 && + this.state.shortName.length > 0 && + this.state.datasetId.length > 0 && + this.state.labelUri.length > 0 + ) + } + + handleOntologySelection (row, isSelect) { + if (isSelect) { + this.setState({ + ontologiesSelected: [...this.state.ontologiesSelected, row.id] + }) + } else { + this.setState({ + ontologiesSelected: this.state.ontologiesSelected.filter(x => x !== row.id) + }) + } + } + + handleOntologySelectionAll (isSelect, rows) { + const ontologies = rows.map(r => r.id) + if (isSelect) { + this.setState({ + ontologiesSelected: ontologies + }) + } else { + this.setState({ + ontologiesSelected: [] + }) + } + } + + handleAddOntology(event) { + + let requestUrl = "/api/admin/addontology" + let data = { + name: this.state.name, + uri: this.state.uri, + shortName: this.state.shortName, + type: this.state.type, + datasetId: this.state.datasetId, + labelUri: this.state.labelUri + } + + axios.post(requestUrl, data, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + this.setState({ + newontologyError: response.data.error, + newontologyErrorMessage: [response.data.errorMessage], + ontologies: response.data.ontologies, + newontologyStatus: response.status, + name: "", + uri: "", + shortName: "", + type: "local", + labelUri: "rdfs:label" + }) + this.props.setStateNavbar({ + config: update(this.props.config, {ontologies: {$set: this.cleanupOntologies(response.data.ontologies)}}) + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + newontologyError: true, + newontologyErrorMessage: [error.response.data.errorMessage], + newontologyStatus: error.response.status, + }) + }) + event.preventDefault() + } + + componentDidMount () { + if (!this.props.waitForStart) { + this.loadOntologies() + this.loadDatasets() + } + } + + loadOntologies() { + let requestUrl = '/api/admin/getontologies' + axios.get(requestUrl, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + this.setState({ + ontologiesLoading: false, + ontologies: response.data.ontologies + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + ontologyError: true, + ontologyErrorMessage: error.response.data.errorMessage, + ontologyStatus: error.response.status, + success: !error.response.data.error + }) + }) + } + + loadDatasets() { + let requestUrl = '/api/datasets' + axios.get(requestUrl, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + this.setState({ + datasets: response.data.datasets + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + success: !error.response.data.error + }) + }) + } + + componentWillUnmount () { + if (!this.props.waitForStart) { + this.cancelRequest() + } + } + + render () { + + if (!this.props.waitForStart && !this.props.config.logged) { + return <Redirect to="/login" /> + } + if (!this.props.waitForStart && this.props.config.user.admin != 1) { + return <Redirect to="/" /> + } + + if (this.props.waitForStart) { + return <WaitingDiv waiting={this.props.waitForStart} center /> + } + + let ontologiesColumns = [{ + editable: false, + dataField: 'name', + text: 'Name', + sort: true + }, { + editable: false, + dataField: 'short_name', + text: 'Short name', + sort: true + }, { + editable: false, + dataField: 'uri', + text: 'Uri', + sort: true + }, { + editable: false, + dataField: 'dataset_name', + text: 'Dataset', + sort: true + }, { + editable: false, + dataField: 'label_uri', + text: 'Label uri', + sort: true + }, { + editable: false, + dataField: 'type', + text: 'Autocomplete type', + sort: true + } + + ] + + let ontologiesDefaultSorted = [{ + dataField: 'short_name', + order: 'asc' + }] + + let ontologiesSelectRow = { + mode: 'checkbox', + clickToSelect: false, + selected: this.state.ontologiesSelected, + onSelect: this.handleOntologySelection, + onSelectAll: this.handleOntologySelectionAll + } + + let ontologiesNoDataIndication = 'No ontologies' + if (this.state.ontologiesLoading) { + ontologiesNoDataIndication = <WaitingDiv waiting={this.state.ontologiesLoading} /> + } + + return ( + <div className="container"> + <h2>Admin</h2> + <hr /> + <h4>Add a ontology</h4> + <div> + <Form onSubmit={this.handleAddOntology}> + <Row form> + <Col md={4}> + <FormGroup> + <Label for="name">Ontology name</Label> + <Input type="text" name="name" id="name" placeholder="Ontology name" value={this.state.name} onChange={this.handleChangeValue} /> + </FormGroup> + </Col> + <Col md={4}> + <FormGroup> + <Label for="shortName">Ontology short name</Label> + <Input type="text" name="shortName" id="shortName" placeholder="shortName" value={this.state.shortName} onChange={this.handleChangeValue} /> + </FormGroup> + </Col> + <Col md={4}> + <FormGroup> + <Label for="uri">Ontology uri</Label> + <Input type="text" name="uri" id="uri" placeholder="uri" value={this.state.uri} onChange={this.handleChangeValue} /> + </FormGroup> + </Col> + </Row> + <Row> + <Col md={6}> + <FormGroup> + <Label for="type">Linked public dataset</Label> + <CustomInput type="select" name="datasetId" id="datasetId" value={this.state.datasetId} onChange={this.handleChangeValue}> + <option value=""></option> + {this.state.datasets.map(dataset => { + if (dataset.public == 1 && dataset.status == "success"){ + return <option key={dataset.id} value={dataset.id}>{dataset.name}</option> + } + })} + </CustomInput> + </FormGroup> + </Col> + <Col md={3}> + <FormGroup> + <Label for="type">Label uri</Label> + <Input type="text" name="labelUri" id="labelUri" value={this.state.labelUri} onChange={this.handleChangeValue} /> + </FormGroup> + </Col> + <Col md={3}> + <FormGroup> + <Label for="type">Autocomplete type</Label> + <CustomInput type="select" name="type" id="type" value={this.state.type} onChange={this.handleChangeValue}> + <option value="none" >none</option> + <option value="local" >local</option> + <option value="ols" >ols</option> + </CustomInput> + </FormGroup> + </Col> + </Row> + <Button disabled={!this.validateOntologyForm()}>Create</Button> + </Form> + <br /> + <ErrorDiv status={this.state.newontologyStatus} error={this.state.newontologyError} errorMessage={this.state.newontologyErrorMessage} /> + </div> + <hr /> + <div className="asko-table-height-div"> + <BootstrapTable + classes="asko-table" + wrapperClasses="asko-table-wrapper" + tabIndexCell + bootstrap4 + keyField='id' + data={this.state.ontologies} + columns={ontologiesColumns} + defaultSorted={ontologiesDefaultSorted} + pagination={paginationFactory()} + noDataIndication={ontologiesNoDataIndication} + selectRow={ ontologiesSelectRow } + /> + </div> + <br /> + <Button disabled={this.isOntologiesDisabled()} onClick={this.deleteSelectedOntologies} color="danger"><i className="fas fa-trash-alt"></i> Delete</Button> + <ErrorDiv status={this.state.ontologyStatus} error={this.state.ontologyError} errorMessage={this.state.ontologyErrorMessage} /> + </div> + ) + } +} + +Ontologies.propTypes = { + setStateNavbar: PropTypes.func, + waitForStart: PropTypes.bool, + config: PropTypes.object +} diff --git a/askomics/react/src/routes/admin/prefixes.jsx b/askomics/react/src/routes/admin/prefixes.jsx new file mode 100644 index 00000000..8be17418 --- /dev/null +++ b/askomics/react/src/routes/admin/prefixes.jsx @@ -0,0 +1,257 @@ +import React, { Component } from 'react' +import axios from 'axios' +import {Button, Form, FormGroup, Label, Input, Alert, Row, Col, CustomInput } from 'reactstrap' +import BootstrapTable from 'react-bootstrap-table-next' +import paginationFactory from 'react-bootstrap-table2-paginator' +import PropTypes from 'prop-types' +import Utils from '../../classes/utils' +import { Redirect } from 'react-router-dom' +import WaitingDiv from '../../components/waiting' +import ErrorDiv from '../error/error' + +export default class Prefixes extends Component { + constructor (props) { + super(props) + this.utils = new Utils() + this.state = { + error: false, + errorMessage: '', + prefixError: false, + prefixErrorMessage: '', + newprefixError: false, + newprefixErrorMessage: '', + prefixes: [], + prefix: "", + namespace: "", + prefixesSelected: [] + } + this.handleChangePrefix = this.handleChangePrefix.bind(this) + this.handleChangeNamespace = this.handleChangeNamespace.bind(this) + this.handleAddPrefix = this.handleAddPrefix.bind(this) + this.deleteSelectedPrefixes = this.deleteSelectedPrefixes.bind(this) + this.handlePrefixSelection = this.handlePrefixSelection.bind(this) + this.handlePrefixSelectionAll = this.handlePrefixSelectionAll.bind(this) + this.cancelRequest + } + + isPrefixesDisabled () { + return this.state.prefixesSelected.length == 0 + } + + deleteSelectedPrefixes () { + let requestUrl = '/api/admin/delete_prefixes' + let data = { + prefixesIdToDelete: this.state.prefixesSelected + } + axios.post(requestUrl, data, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + console.log(requestUrl, response.data) + this.setState({ + prefixes: response.data.prefixes, + prefixesSelected: [], + }) + }) + } + + handleChangePrefix (event) { + this.setState({ + prefix: event.target.value + }) + } + + handleChangeNamespace (event) { + this.setState({ + namespace: event.target.value + }) + } + + validatePrefixForm () { + return ( + this.state.prefix.length > 0 && + this.state.namespace.length > 0 + ) + } + + handlePrefixSelection (row, isSelect) { + if (isSelect) { + this.setState({ + prefixesSelected: [...this.state.prefixesSelected, row.id] + }) + } else { + this.setState({ + prefixesSelected: this.state.prefixesSelected.filter(x => x !== row.id) + }) + } + } + + handlePrefixSelectionAll (isSelect, rows) { + const prefixes = rows.map(r => r.id) + if (isSelect) { + this.setState({ + prefixesSelected: prefixes + }) + } else { + this.setState({ + prefixesSelected: [] + }) + } + } + + handleAddPrefix(event) { + + let requestUrl = "/api/admin/addprefix" + let data = { + prefix: this.state.prefix, + namespace: this.state.namespace, + } + + axios.post(requestUrl, data, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + console.log(requestUrl, response.data) + this.setState({ + newprefixError: response.data.error, + newprefixErrorMessage: response.data.errorMessage, + prefixes: response.data.prefixes, + newprefixStatus: response.status, + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + newprefixError: true, + newprefixErrorMessage: error.response.data.errorMessage, + newprefixStatus: error.response.status, + }) + }) + event.preventDefault() + } + + componentDidMount () { + if (!this.props.waitForStart) { + this.loadPrefixes() + } + } + + loadPrefixes() { + let requestUrl = '/api/admin/getprefixes' + axios.get(requestUrl, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) + .then(response => { + this.setState({ + prefixesLoading: false, + prefixes: response.data.prefixes + }) + }) + .catch(error => { + console.log(error, error.response.data.errorMessage) + this.setState({ + prefixError: true, + prefixErrorMessage: error.response.data.errorMessage, + prefixStatus: error.response.status, + success: !error.response.data.error + }) + }) + } + + componentWillUnmount () { + if (!this.props.waitForStart) { + this.cancelRequest() + } + } + + render () { + + if (!this.props.waitForStart && !this.props.config.logged) { + return <Redirect to="/login" /> + } + if (!this.props.waitForStart && this.props.config.user.admin != 1) { + return <Redirect to="/" /> + } + + if (this.props.waitForStart) { + return <WaitingDiv waiting={this.props.waitForStart} center /> + } + + let prefixesColumns = [{ + editable: false, + dataField: 'prefix', + text: 'Prefix', + sort: true + }, { + editable: false, + dataField: 'namespace', + text: 'Namespace', + sort: true + }] + + let prefixesDefaultSorted = [{ + dataField: 'prefix', + order: 'asc' + }] + + let prefixesSelectRow = { + mode: 'checkbox', + clickToSelect: false, + selected: this.state.prefixesSelected, + onSelect: this.handlePrefixSelection, + onSelectAll: this.handlePrefixSelectionAll + } + + let prefixesNoDataIndication = 'No custom prefixes' + if (this.state.prefixesLoading) { + prefixesNoDataIndication = <WaitingDiv waiting={this.state.prefixesLoading} /> + } + + return ( + <div className="container"> + <h2>Admin</h2> + <hr /> + <h4>Add a prefix</h4> + <div> + <Form onSubmit={this.handleAddPrefix}> + <Row form> + <Col md={6}> + <FormGroup> + <Label for="fname">Prefix</Label> + <Input type="text" name="prefix" id="prefix" placeholder="prefix" value={this.state.prefix} onChange={this.handleChangePrefix} /> + </FormGroup> + </Col> + <Col md={6}> + <FormGroup> + <Label for="lname">Namespace</Label> + <Input type="text" name="namespace" id="namespace" placeholder="namespace" value={this.state.namespace} onChange={this.handleChangeNamespace} /> + </FormGroup> + </Col> + </Row> + <Button disabled={!this.validatePrefixForm()}>Create</Button> + </Form> + <ErrorDiv status={this.state.newprefixstatus} error={this.state.newprefixerror} errorMessage={this.state.newprefixerrorMessage} /> + <br /> + </div> + <hr /> + <div className="asko-table-height-div"> + <BootstrapTable + classes="asko-table" + wrapperClasses="asko-table-wrapper" + tabIndexCell + bootstrap4 + keyField='id' + data={this.state.prefixes} + columns={prefixesColumns} + defaultSorted={prefixesDefaultSorted} + pagination={paginationFactory()} + noDataIndication={prefixesNoDataIndication} + selectRow={ prefixesSelectRow } + /> + </div> + <br /> + <Button disabled={this.isPrefixesDisabled()} onClick={this.deleteSelectedPrefixes} color="danger"><i className="fas fa-trash-alt"></i> Delete</Button> + <ErrorDiv status={this.state.prefixStatus} error={this.state.prefixError} errorMessage={this.state.prefixErrorMessage} /> + </div> + ) + } +} + +Prefixes.propTypes = { + waitForStart: PropTypes.bool, + config: PropTypes.object +} diff --git a/askomics/react/src/routes/ask/ask.jsx b/askomics/react/src/routes/ask/ask.jsx index e788fef5..991ed46a 100644 --- a/askomics/react/src/routes/ask/ask.jsx +++ b/askomics/react/src/routes/ask/ask.jsx @@ -29,7 +29,8 @@ export default class Ask extends Component { dropdownOpen: false, selectedEndpoint: [], frontMessage: "", - redirectFormBuilder: false + redirectFormBuilder: false, + console_enabled: false } this.utils = new Utils() this.cancelRequest @@ -155,6 +156,7 @@ export default class Ask extends Component { graphs: response.data.graphs, endpoints_sparql: response.data.endpoints, diskSpace: response.data.diskSpace, + console_enabled: response.data.console_enabled }) } }) @@ -276,7 +278,8 @@ export default class Ask extends Component { graphs: this.state.graphs, endpoints: this.state.endpoints_sparql, diskSpace: this.state.diskSpace, - config: this.props.config + config: this.props.config, + console_enabled: this.state.console_enabled } }} /> } diff --git a/askomics/react/src/routes/data/data.jsx b/askomics/react/src/routes/data/data.jsx index 1b23cbc2..18b41092 100644 --- a/askomics/react/src/routes/data/data.jsx +++ b/askomics/react/src/routes/data/data.jsx @@ -16,7 +16,7 @@ class Data extends Component { constructor (props) { super(props) this.utils = new Utils() - this.state = { + this.state = { isLoading: true, error: false, errorMessage: '', @@ -32,7 +32,7 @@ class Data extends Component { loadData() { let uri = this.props.match.params.uri; - let requestUrl = '/api/data/' + uri + let requestUrl = '/api/data/' + uri axios.get(requestUrl, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) .then(response => { console.log(requestUrl, response.data) @@ -61,7 +61,7 @@ class Data extends Component { let uri = this.props.match.params.uri; let columns = [{ - dataField: 'predicat', + dataField: 'predicate', text: 'Property', sort: true, formatter: (cell, row) => { @@ -79,7 +79,7 @@ class Data extends Component { if (cell.startsWith(this.props.config.namespaceInternal)){ return this.utils.splitUrl(cell) } else { - return <a href={cell}>{this.utils.splitUrl(cell)}</a> + return <a href={cell} target="_blank" rel="noreferrer">{this.utils.splitUrl(cell)}</a> } } return cell @@ -90,7 +90,7 @@ class Data extends Component { return ( <div className="container"> <h2>Information about uri {uri}</h2> - <br /> + <br /> <div className="asko-table-height-div"> <BootstrapTable classes="asko-table" diff --git a/askomics/react/src/routes/datasets/datasetstable.jsx b/askomics/react/src/routes/datasets/datasetstable.jsx index 23cec291..ae1f8723 100644 --- a/askomics/react/src/routes/datasets/datasetstable.jsx +++ b/askomics/react/src/routes/datasets/datasetstable.jsx @@ -118,7 +118,7 @@ export default class DatasetsTable extends Component { return ( <FormGroup> <div> - <CustomInput disabled={this.props.config.user.admin ? false : true} type="switch" id={row.id} onChange={this.togglePublicDataset} checked={cell} value={cell} /> + <CustomInput disabled={this.props.config.user.admin && row.ontology == 0 ? false : true} type="switch" id={row.id} onChange={this.togglePublicDataset} checked={cell} value={cell} /> </div> </FormGroup> ) @@ -209,4 +209,4 @@ DatasetsTable.propTypes = { waiting: PropTypes.bool, datasets: PropTypes.object, config: PropTypes.object -} \ No newline at end of file +} diff --git a/askomics/react/src/routes/form/attribute.jsx b/askomics/react/src/routes/form/attribute.jsx index 7b59e403..7581a5da 100644 --- a/askomics/react/src/routes/form/attribute.jsx +++ b/askomics/react/src/routes/form/attribute.jsx @@ -32,6 +32,17 @@ export default class AttributeBox extends Component { this.handleDateFilter = this.props.handleDateFilter.bind(this) } + subNums (id) { + let newStr = "" + let oldStr = id.toString() + let arrayString = [...oldStr] + arrayString.forEach(char => { + let code = char.charCodeAt() + newStr += String.fromCharCode(code + 8272) + }) + return newStr + } + renderLinker () { let options = [] @@ -68,58 +79,6 @@ export default class AttributeBox extends Component { } } - renderUri () { - let eyeIcon = 'attr-icon fas fa-eye-slash inactive' - if (this.props.attribute.visible) { - eyeIcon = 'attr-icon fas fa-eye' - } - - let linkIcon = 'attr-icon fas fa-unlink inactive' - if (this.props.attribute.linked) { - linkIcon = 'attr-icon fas fa-link' - } - - let selected_sign = { - '=': !this.props.attribute.negative, - "≠": this.props.attribute.negative - } - - let form - - if (this.props.attribute.linked) { - form = this.renderLinker() - } else { - form = ( - <table style={{ width: '100%' }}> - <tr> - <td> - <CustomInput disabled={this.props.attribute.optional} type="select" id={this.props.attribute.id} onChange={this.handleNegative}> - {Object.keys(selected_sign).map(type => { - return <option key={type} selected={selected_sign[type]} value={type}>{type}</option> - })} - </CustomInput> - </td> - <td> - <Input invalid={this.checkUnvalidUri(this.props.attribute.filterValue)} disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} /> - <FormFeedback tooltip>Please filter with a valid URI or CURIE</FormFeedback> - </td> - </tr> - </table> - ) - } - - return ( - <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> - <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> - </div> - {form} - </div> - ) - } - renderText () { let eyeIcon = 'attr-icon fas fa-eye-slash inactive' @@ -186,11 +145,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> + <label className="attr-label">{this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label}</label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> } - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> } + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -256,11 +214,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> + <label className="attr-label">{this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label}</label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -308,12 +265,11 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> + <label className="attr-label">{this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label}</label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude} data-tip data-for={"excludeTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -354,11 +310,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> + <label className="attr-label">{this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label}</label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -432,11 +387,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.displayLabel}</label> + <label className="attr-label">{this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label}</label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> diff --git a/askomics/react/src/routes/form/query.jsx b/askomics/react/src/routes/form/query.jsx index 3b0fe52d..c3ce9c20 100644 --- a/askomics/react/src/routes/form/query.jsx +++ b/askomics/react/src/routes/form/query.jsx @@ -5,6 +5,7 @@ import { Redirect } from 'react-router-dom' import ErrorDiv from '../error/error' import WaitingDiv from '../../components/waiting' import update from 'react-addons-update' +import ReactTooltip from "react-tooltip"; import AttributeBox from './attribute' import Entity from './entity' import ResultsTable from '../sparql/resultstable' @@ -55,7 +56,7 @@ export default class FormQuery extends Component { this.handlePreview = this.handlePreview.bind(this) this.handleQuery = this.handleQuery.bind(this) - + } subNums (id) { @@ -275,6 +276,7 @@ export default class FormQuery extends Component { saveIcon: "play", waiting: waiting }) + ReactTooltip.rebuild(); } // Preview results and Launch query buttons ------- @@ -383,7 +385,6 @@ export default class FormQuery extends Component { }) }).then(response => { this.graphState = this.props.location.state.graphState - console.log(this.props.location.state.graphState) this.updateGraphState() this.setState({ waiting: false }) }) @@ -435,12 +436,21 @@ export default class FormQuery extends Component { let previewButton let launchQueryButton let entityMap = new Map() + let tooltips = ( + <div> + <ReactTooltip id="formTooltip" place="top" effect="solid">Mark attribute as a <i>form</i> attribute</ReactTooltip> + <ReactTooltip id="linkTooltip">Link this attribute to another</ReactTooltip> + <ReactTooltip id="optionalTooltip">Show all values, including empty values.</ReactTooltip> + <ReactTooltip id="excludeTooltip">Exclude categories, instead of including</ReactTooltip> + <ReactTooltip id="visibleTooltip">Display attribute value in the results</ReactTooltip> + </div> + ) if (!this.state.waiting) { this.state.graphState.attr.forEach(attribute => { if (attribute.form) { if (! entityMap.has(attribute.nodeId)){ - entityMap.set(attribute.nodeId, {entity_label: attribute.entityDisplayLabel, attributes:[]}) + entityMap.set(attribute.nodeId, {entity_label: attribute.entityDisplayLabel ? attribute.entityDisplayLabel : attribute.entityLabel, attributes:[]}) } entityMap.get(attribute.nodeId).attributes.push( <AttributeBox @@ -505,6 +515,7 @@ export default class FormQuery extends Component { <Col xs="12"> <div style={{ display: 'block', 'overflow-y': 'auto' }}> {Entities} + {tooltips} </div> </Col> </Row> diff --git a/askomics/react/src/routes/form_edit/attribute.jsx b/askomics/react/src/routes/form_edit/attribute.jsx index f7c95455..eb85d041 100644 --- a/askomics/react/src/routes/form_edit/attribute.jsx +++ b/askomics/react/src/routes/form_edit/attribute.jsx @@ -32,6 +32,17 @@ export default class AttributeBox extends Component { this.handleDateFilter = this.props.handleDateFilter.bind(this) } + subNums (id) { + let newStr = "" + let oldStr = id.toString() + let arrayString = [...oldStr] + arrayString.forEach(char => { + let code = char.charCodeAt() + newStr += String.fromCharCode(code + 8272) + }) + return newStr + } + renderLinker () { let options = [] @@ -68,58 +79,6 @@ export default class AttributeBox extends Component { } } - renderUri () { - let eyeIcon = 'attr-icon fas fa-eye-slash inactive' - if (this.props.attribute.visible) { - eyeIcon = 'attr-icon fas fa-eye' - } - - let linkIcon = 'attr-icon fas fa-unlink inactive' - if (this.props.attribute.linked) { - linkIcon = 'attr-icon fas fa-link' - } - - let selected_sign = { - '=': !this.props.attribute.negative, - "≠": this.props.attribute.negative - } - - let form - - if (this.props.attribute.linked) { - form = this.renderLinker() - } else { - form = ( - <table style={{ width: '100%' }}> - <tr> - <td> - <CustomInput disabled={this.props.attribute.optional} type="select" id={this.props.attribute.id} onChange={this.handleNegative}> - {Object.keys(selected_sign).map(type => { - return <option key={type} selected={selected_sign[type]} value={type}>{type}</option> - })} - </CustomInput> - </td> - <td> - <Input invalid={this.checkUnvalidUri(this.props.attribute.filterValue)} disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} /> - <FormFeedback tooltip>Please filter with a valid URI or CURIE</FormFeedback> - </td> - </tr> - </table> - ) - } - - return ( - <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> - <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> - </div> - {form} - </div> - ) - } - renderText () { let eyeIcon = 'attr-icon fas fa-eye-slash inactive' @@ -188,11 +147,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> + <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} value={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} onChange={this.props.setAttributeName} /></label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> } - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> } + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -258,11 +216,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> + <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} value={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} onChange={this.props.setAttributeName} /></label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -310,12 +267,11 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> + <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} value={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} onChange={this.props.setAttributeName} /></label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude} data-tip data-for={"excludeTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -356,11 +312,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> + <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} value={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} onChange={this.props.setAttributeName} /></label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -434,11 +389,10 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> - <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel} value={this.props.attribute.displayLabel} onChange={this.props.setAttributeName} /></label> + <label className="attr-label"><Input type="text" id={this.props.attribute.id} placeholder={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} value={this.props.attribute.displayLabel ? this.props.attribute.displayLabel : this.props.attribute.label} onChange={this.props.setAttributeName} /></label> <div className="attr-icons"> - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> diff --git a/askomics/react/src/routes/form_edit/query.jsx b/askomics/react/src/routes/form_edit/query.jsx index 88aeeb44..a77207ac 100644 --- a/askomics/react/src/routes/form_edit/query.jsx +++ b/askomics/react/src/routes/form_edit/query.jsx @@ -5,6 +5,7 @@ import { Redirect } from 'react-router-dom' import ErrorDiv from '../error/error' import WaitingDiv from '../../components/waiting' import update from 'react-addons-update' +import ReactTooltip from "react-tooltip"; import AttributeBox from './attribute' import Entity from './entity' import ResultsTable from '../sparql/resultstable' @@ -267,6 +268,7 @@ export default class FormEditQuery extends Component { saveIcon: "play", waiting: waiting }) + ReactTooltip.rebuild(); } // Preview results and Launch query buttons ------- @@ -385,12 +387,21 @@ export default class FormEditQuery extends Component { let Entities = [] let previewButton let entityMap = new Map() + let tooltips = ( + <div> + <ReactTooltip id="formTooltip" place="top" effect="solid">Mark attribute as a <i>form</i> attribute</ReactTooltip> + <ReactTooltip id="linkTooltip">Link this attribute to another</ReactTooltip> + <ReactTooltip id="optionalTooltip">Show all values, including empty values.</ReactTooltip> + <ReactTooltip id="excludeTooltip">Exclude categories, instead of including</ReactTooltip> + <ReactTooltip id="visibleTooltip">Display attribute value in the results</ReactTooltip> + </div> + ) if (!this.state.waiting) { this.state.graphState.attr.forEach(attribute => { if (attribute.form) { if (! entityMap.has(attribute.nodeId)){ - entityMap.set(attribute.nodeId, {entity_label: attribute.entityDisplayLabel, attributes:[]}) + entityMap.set(attribute.nodeId, {entity_label: attribute.entityDisplayLabel ? attribute.entityDisplayLabel : attribute.entityLabel, attributes:[]}) } entityMap.get(attribute.nodeId).attributes.push( <AttributeBox @@ -430,8 +441,8 @@ export default class FormEditQuery extends Component { }) // buttons - - + + let saveButton = <Button onClick={this.handleSave} color="secondary" disabled={this.state.disableSave}><i className={"fas fa-" + this.state.saveIcon}></i> Save</Button> // preview @@ -445,7 +456,7 @@ export default class FormEditQuery extends Component { return ( <div className="container"> {redirectLogin} - <h2>Query Builder</h2> + <h2>Form editor</h2> <hr /> <WaitingDiv waiting={this.state.waiting} center /> <br /> @@ -453,6 +464,7 @@ export default class FormEditQuery extends Component { <Col xs="12"> <div style={{ display: 'block', 'overflow-y': 'auto' }}> {Entities} + {tooltips} </div> </Col> </Row> diff --git a/askomics/react/src/routes/integration/advancedoptions.jsx b/askomics/react/src/routes/integration/advancedoptions.jsx index 4a6c8988..d54375bf 100644 --- a/askomics/react/src/routes/integration/advancedoptions.jsx +++ b/askomics/react/src/routes/integration/advancedoptions.jsx @@ -41,6 +41,12 @@ export default class AdvancedOptions extends Component { <Input onChange={this.handleChangeEndpoint} value={this.props.externalEndpoint} type="text" name="endpoint" id="endpoint" placeholder="External endpoint" /> </Col> </FormGroup> + <FormGroup hidden={this.props.hideDistantEndpoint} row> + <Label for="endpoint" sm={2}>Distant graph</Label> + <Col sm={8}> + <Input onChange={this.handleChangeExternalGraph} value={this.props.externalGraph} type="text" name="graph" id="graph" placeholder="External graph" /> + </Col> + </FormGroup> </Form> </Collapse> </div> @@ -55,5 +61,7 @@ AdvancedOptions.propTypes = { hideCustomUri: PropTypes.bool, customUri: PropTypes.string, hideDistantEndpoint: PropTypes.bool, - externalEndpoint: PropTypes.string + externalEndpoint: PropTypes.string, + handleChangeExternalGraph: PropTypes.function, + externalGraph: PropTypes.string } diff --git a/askomics/react/src/routes/integration/bedpreview.jsx b/askomics/react/src/routes/integration/bedpreview.jsx index 803ba86c..ad3f7269 100644 --- a/askomics/react/src/routes/integration/bedpreview.jsx +++ b/askomics/react/src/routes/integration/bedpreview.jsx @@ -21,7 +21,8 @@ export default class BedPreview extends Component { externalEndpoint: "", error: false, errorMessage: null, - status: null + status: null, + externalGraph: "" } this.cancelRequest this.integrate = this.integrate.bind(this) @@ -81,6 +82,14 @@ export default class BedPreview extends Component { }) } + handleChangeExternalGraph (event) { + this.setState({ + externalGraph: event.target.value, + publicTick: false, + privateTick: false + }) + } + render () { let privateIcon = <i className="fas fa-lock"></i> @@ -91,9 +100,12 @@ export default class BedPreview extends Component { if (this.state.publicTick) { publicIcon = <i className="fas fa-check text-success"></i> } - + let privateButton + if (this.props.config.user.admin || !this.props.config.singleTenant){ + privateButton = <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + } let publicButton - if (this.props.config.user.admin) { + if (this.props.config.user.admin || this.props.config.singleTenant) { publicButton = <Button onClick={this.integrate} value="public" color="secondary" disabled={this.state.publicTick}>{publicIcon} Integrate (public dataset)</Button> } @@ -116,14 +128,17 @@ export default class BedPreview extends Component { <br /> <AdvancedOptions config={this.props.config} + hideDistantEndpoint={true} handleChangeUri={p => this.handleChangeUri(p)} handleChangeEndpoint={p => this.handleChangeEndpoint(p)} + handleChangeExternalGraph={p => this.handleChangeExternalGraph(p)} + externalGraph={this.state.externalGraph} customUri={this.state.customUri} /> <br /> <div className="center-div"> <ButtonGroup> - <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + {privateButton} {publicButton} </ButtonGroup> <br /> diff --git a/askomics/react/src/routes/integration/csvtable.jsx b/askomics/react/src/routes/integration/csvtable.jsx index f8c0547e..dddd55ba 100644 --- a/askomics/react/src/routes/integration/csvtable.jsx +++ b/askomics/react/src/routes/integration/csvtable.jsx @@ -26,7 +26,8 @@ export default class CsvTable extends Component { externalEndpoint: "", error: false, errorMessage: null, - status: null + status: null, + externalGraph: "" } this.cancelRequest this.headerFormatter = this.headerFormatter.bind(this) @@ -91,6 +92,51 @@ export default class CsvTable extends Component { ) } + let ontoInput + + if (this.props.ontologies.length > 0){ + ontoInput = ( + <optgroup label="Ontologies"> + {this.props.ontologies.map(onto => { + return <option key={onto.id} value={onto.short_name}>{onto.name}</option> + })} + </optgroup> + ) + } + + if (colIndex == 1) { + return ( + <div> + <FormGroup> + {colInput} + <CustomInput type="select" id="typeSelect" name="typeSelect" value={this.state.columns_type[colIndex]} onChange={boundChangeType}> + <optgroup label="Properties"> + <option value="label" >Entity label</option> + </optgroup> + <optgroup label="Attributes"> + <option value="numeric" >Numeric</option> + <option value="text" >Text</option> + <option value="category" >Category</option> + <option value="boolean" >Boolean</option> + <option value="date" >Date</option> + </optgroup> + <optgroup label="Faldo attributes"> + <option value="reference" >Reference</option> + <option value="strand" >Strand</option> + <option value="start" >Start</option> + <option value="end" >End</option> + </optgroup> + <optgroup label="Relation"> + <option value="general_relation" >Directed</option> + <option value="symetric_relation" >Symetric</option> + </optgroup> + {ontoInput} + </CustomInput> + </FormGroup> + </div> + ) + } + return ( <div> <FormGroup> @@ -113,6 +159,7 @@ export default class CsvTable extends Component { <option value="general_relation" >Directed</option> <option value="symetric_relation" >Symetric</option> </optgroup> + {ontoInput} </CustomInput> </FormGroup> </div> @@ -167,6 +214,14 @@ export default class CsvTable extends Component { }) } + handleChangeExternalGraph (event) { + this.setState({ + externalGraph: event.target.value, + publicTick: false, + privateTick: false + }) + } + toggleHeaderForm(event) { this.setState({ header: update(this.state.header, { [event.target.id]: { input: { $set: true } } }) @@ -192,7 +247,7 @@ export default class CsvTable extends Component { formatter: (cell, row) => { let text = row[this.state.header[index]["name"]] if (this.utils.isUrl(text)) { - return <a href={text}>{this.utils.truncate(this.utils.splitUrl(text), 25)}</a> + return <a href={text} target="_blank" rel="noreferrer">{this.utils.truncate(this.utils.splitUrl(text), 25)}</a> } else { return this.utils.truncate(text, 25) } @@ -208,9 +263,12 @@ export default class CsvTable extends Component { if (this.state.publicTick) { publicIcon = <i className="fas fa-check text-success"></i> } - + let privateButton + if (this.props.config.user.admin || !this.props.config.singleTenant){ + privateButton = <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + } let publicButton - if (this.props.config.user.admin) { + if (this.props.config.user.admin || this.props.config.singleTenant) { publicButton = <Button onClick={this.integrate} value="public" color="secondary" disabled={this.state.publicTick}>{publicIcon} Integrate (public dataset)</Button> } @@ -236,14 +294,17 @@ export default class CsvTable extends Component { <br /> <AdvancedOptions config={this.props.config} + hideDistantEndpoint={true} handleChangeUri={p => this.handleChangeUri(p)} handleChangeEndpoint={p => this.handleChangeEndpoint(p)} + handleChangeExternalGraph={p => this.handleChangeExternalGraph(p)} + externalGraph={this.state.externalGraph} customUri={this.state.customUri} /> <br /> <div className="center-div"> <ButtonGroup> - <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + {privateButton} {publicButton} </ButtonGroup> </div> @@ -264,5 +325,6 @@ export default class CsvTable extends Component { CsvTable.propTypes = { file: PropTypes.object, - config: PropTypes.object + config: PropTypes.object, + ontologies: PropTypes.array } diff --git a/askomics/react/src/routes/integration/gffpreview.jsx b/askomics/react/src/routes/integration/gffpreview.jsx index 077ccf90..ecff25c9 100644 --- a/askomics/react/src/routes/integration/gffpreview.jsx +++ b/askomics/react/src/routes/integration/gffpreview.jsx @@ -18,7 +18,8 @@ export default class GffPreview extends Component { publicTick: false, privateTick: false, customUri: "", - externalEndpoint: "" + externalEndpoint: "", + externalGraph: "" } this.cancelRequest this.integrate = this.integrate.bind(this) @@ -90,6 +91,22 @@ export default class GffPreview extends Component { }) } + handleChangeRemoteGraph (event) { + this.setState({ + remoteGraph: event.target.value, + publicTick: false, + privateTick: false + }) + } + + handleChangeExternalGraph (event) { + this.setState({ + externalGraph: event.target.value, + publicTick: false, + privateTick: false + }) + } + render () { let privateIcon = <i className="fas fa-lock"></i> @@ -100,8 +117,12 @@ export default class GffPreview extends Component { if (this.state.publicTick) { publicIcon = <i className="fas fa-check text-success"></i> } + let privateButton + if (this.props.config.user.admin || !this.props.config.singleTenant){ + privateButton = <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + } let publicButton - if (this.props.config.user.admin) { + if (this.props.config.user.admin || this.props.config.singleTenant) { publicButton = <Button onClick={this.integrate} value="public" color="secondary" disabled={this.state.publicTick}>{publicIcon} Integrate (public dataset)</Button> } @@ -122,14 +143,17 @@ export default class GffPreview extends Component { <br /> <AdvancedOptions config={this.props.config} + hideDistantEndpoint={true} handleChangeUri={p => this.handleChangeUri(p)} handleChangeEndpoint={p => this.handleChangeEndpoint(p)} + handleChangeExternalGraph={p => this.handleChangeExternalGraph(p)} + externalGraph={this.state.externalGraph} customUri={this.state.customUri} /> <br /> <div className="center-div"> <ButtonGroup> - <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + {privateButton} {publicButton} </ButtonGroup> <br /> diff --git a/askomics/react/src/routes/integration/integration.jsx b/askomics/react/src/routes/integration/integration.jsx index ada6f4af..7d3f50f7 100644 --- a/askomics/react/src/routes/integration/integration.jsx +++ b/askomics/react/src/routes/integration/integration.jsx @@ -19,7 +19,8 @@ export default class Integration extends Component { errorMessage: null, config: this.props.location.state.config, filesId: this.props.location.state.filesId, - previewFiles: [] + previewFiles: [], + ontologies: this.props.location.state.config.ontologies } this.cancelRequest } @@ -74,7 +75,7 @@ export default class Integration extends Component { this.state.previewFiles.map(file => { console.log(file) if (file.type == 'csv/tsv') { - return <CsvTable config={this.state.config} key={file.name} file={file} /> + return <CsvTable config={this.state.config} key={file.name} file={file} ontologies={this.state.ontologies} /> } if (["rdf/ttl", "rdf/xml", "rdf/nt"].includes(file.type)) { return <RdfPreview config={this.state.config} file={file} /> diff --git a/askomics/react/src/routes/integration/rdfpreview.jsx b/askomics/react/src/routes/integration/rdfpreview.jsx index 4d62c6e5..654747b4 100644 --- a/askomics/react/src/routes/integration/rdfpreview.jsx +++ b/askomics/react/src/routes/integration/rdfpreview.jsx @@ -24,6 +24,7 @@ export default class RdfPreview extends Component { privateTick: false, customUri: "", externalEndpoint: props.file.data.location ? props.file.data.location : "", + externalGraph: props.file.data.remote_graph ? props.file.data.remote_graph : "", error: false, errorMessage: null, status: null @@ -49,7 +50,8 @@ export default class RdfPreview extends Component { public: event.target.value == 'public', type: this.props.file.type, customUri: this.state.customUri, - externalEndpoint: this.state.externalEndpoint + externalEndpoint: this.state.externalEndpoint, + externalGraph: this.state.externalGraph } axios.post(requestUrl, data, { baseURL: this.props.config.proxyPath, cancelToken: new axios.CancelToken((c) => { this.cancelRequest = c }) }) .then(response => { @@ -85,6 +87,14 @@ export default class RdfPreview extends Component { }) } + handleChangeExternalGraph (event) { + this.setState({ + externalGraph: event.target.value, + publicTick: false, + privateTick: false + }) + } + guess_mode(type) { if (type == "rdf/ttl") { return "turtle" @@ -107,9 +117,12 @@ export default class RdfPreview extends Component { if (this.state.publicTick) { publicIcon = <i className="fas fa-check text-success"></i> } - + let privateButton + if (this.props.config.user.admin || !this.props.config.singleTenant){ + privateButton = <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + } let publicButton - if (this.props.config.user.admin) { + if (this.props.config.user.admin || this.props.config.singleTenant) { publicButton = <Button onClick={this.integrate} value="public" color="secondary" disabled={this.state.publicTick}>{publicIcon} Integrate (public dataset)</Button> } @@ -139,12 +152,14 @@ export default class RdfPreview extends Component { config={this.props.config} handleChangeEndpoint={p => this.handleChangeEndpoint(p)} externalEndpoint={this.state.externalEndpoint} + handleChangeExternalGraph={p => this.handleChangeExternalGraph(p)} + externalGraph={this.state.externalGraph} handleChangeUri={p => this.handleChangeUri(p)} /> <br /> <div className="center-div"> <ButtonGroup> - <Button onClick={this.integrate} value="private" color="secondary" disabled={this.state.privateTick}>{privateIcon} Integrate (private dataset)</Button> + {privateButton} {publicButton} </ButtonGroup> </div> diff --git a/askomics/react/src/routes/query/attribute.jsx b/askomics/react/src/routes/query/attribute.jsx index c26e8d4a..7f37204f 100644 --- a/askomics/react/src/routes/query/attribute.jsx +++ b/askomics/react/src/routes/query/attribute.jsx @@ -3,12 +3,14 @@ import axios from 'axios' import { Input, FormGroup, CustomInput, FormFeedback } from 'reactstrap' import { Redirect } from 'react-router-dom' import DatePicker from "react-datepicker"; +import ReactTooltip from "react-tooltip"; import ErrorDiv from '../error/error' import WaitingDiv from '../../components/waiting' import update from 'react-addons-update' import Visualization from './visualization' import PropTypes from 'prop-types' import Utils from '../../classes/utils' +import Autocomplete from '../../components/autocomplete' export default class AttributeBox extends Component { constructor (props) { @@ -32,6 +34,7 @@ export default class AttributeBox extends Component { this.toggleAddNumFilter = this.props.toggleAddNumFilter.bind(this) this.toggleAddDateFilter = this.props.toggleAddDateFilter.bind(this) this.handleDateFilter = this.props.handleDateFilter.bind(this) + this.cancelRequest } subNums (id) { @@ -45,6 +48,13 @@ export default class AttributeBox extends Component { return newStr } + + isRegisteredOnto () { + return this.props.config.ontologies.some(onto => { + return (onto.uri == this.props.entityUri && onto.type != "none") + }) + } + renderLinker () { let options = [] @@ -81,65 +91,6 @@ export default class AttributeBox extends Component { } } - renderUri () { - - let formIcon = 'attr-icon fas fa-bookmark inactive' - if (this.props.attribute.form) { - formIcon = 'attr-icon fas fa-bookmark ' - } - - let eyeIcon = 'attr-icon fas fa-eye-slash inactive' - if (this.props.attribute.visible) { - eyeIcon = 'attr-icon fas fa-eye' - } - - let linkIcon = 'attr-icon fas fa-unlink inactive' - if (this.props.attribute.linked) { - linkIcon = 'attr-icon fas fa-link' - } - - let selected_sign = { - '=': !this.props.attribute.negative, - "≠": this.props.attribute.negative - } - - let form - - if (this.props.attribute.linked) { - form = this.renderLinker() - } else { - form = ( - <table style={{ width: '100%' }}> - <tr> - <td> - <CustomInput disabled={this.props.attribute.optional} type="select" id={this.props.attribute.id} onChange={this.handleNegative}> - {Object.keys(selected_sign).map(type => { - return <option key={type} selected={selected_sign[type]} value={type}>{type}</option> - })} - </CustomInput> - </td> - <td> - <Input invalid={this.checkUnvalidUri(this.props.attribute.filterValue)} disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} /> - <FormFeedback tooltip>Please filter with a valid URI or CURIE</FormFeedback> - </td> - </tr> - </table> - ) - } - - return ( - <div className="attribute-box"> - <label className="attr-label">{this.props.attribute.label}</label> - <div className="attr-icons"> - {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} : <nodiv></nodiv>} - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> - </div> - {form} - </div> - ) - } - renderText () { let formIcon = 'attr-icon fas fa-bookmark inactive' @@ -181,6 +132,36 @@ export default class AttributeBox extends Component { let form + let input + let attrIcons + + if (this.props.isOnto){ + attrIcons = ( + <div className="attr-icons"> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> + </div> + ) + if (this.isRegisteredOnto() && this.props.attribute.uri == "rdfs:label"){ + input = ( + <Autocomplete config={this.props.config} entityUri={this.props.entityUri} attributeId={this.props.attribute.id} filterValue={this.props.attribute.filterValue} handleFilterValue={p => this.handleFilterValue(p)}/> + ) + } else { + input = (<Input disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} />) + } + + } else { + attrIcons = ( + <div className="attr-icons"> + {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute} data-tip data-for={"formTooltip"}></i> : <nodiv></nodiv>} + <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute} data-tip data-for={"linkTooltip"}></i> + {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> } + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> + </div> + ) + input = (<Input disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} />) + } + + if (this.props.attribute.linked) { form = this.renderLinker() } else { @@ -202,7 +183,7 @@ export default class AttributeBox extends Component { </CustomInput> </td> <td> - <Input disabled={this.props.attribute.optional} type="text" id={this.props.attribute.id} value={this.props.attribute.filterValue} onChange={this.handleFilterValue} /> + {input} </td> </tr> </table> @@ -212,12 +193,7 @@ export default class AttributeBox extends Component { return ( <div className="attribute-box"> <label className="attr-label">{this.props.attribute.label}</label> - <div className="attr-icons"> - {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - {this.props.attribute.uri == "rdf:type" || this.props.attribute.uri == "rdfs:label" ? <nodiv></nodiv> : <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> } - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> - </div> + {attrIcons} {form} </div> ) @@ -289,10 +265,10 @@ export default class AttributeBox extends Component { <div className="attribute-box"> <label className="attr-label">{this.props.attribute.label}</label> <div className="attr-icons"> - {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute} data-tip data-for={"formTooltip"}></i> : <nodiv></nodiv>} + <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute} data-tip data-for={"linkTooltip"}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -347,11 +323,11 @@ export default class AttributeBox extends Component { <div className="attribute-box"> <label className="attr-label">{this.props.attribute.label}</label> <div className="attr-icons"> - {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute} data-tip data-for={"formTooltip"}></i> : <nodiv></nodiv>} + <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute} data-tip data-for={"linkTooltip"}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={excludeIcon} id={this.props.attribute.id} onClick={this.toggleExclude} data-tip data-for={"excludeTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -399,10 +375,10 @@ export default class AttributeBox extends Component { <div className="attribute-box"> <label className="attr-label">{this.props.attribute.label}</label> <div className="attr-icons"> - {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} - <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute} data-tip data-for={"formTooltip"}></i> : <nodiv></nodiv>} + <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute} data-tip data-for={"linkTooltip"}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -485,8 +461,8 @@ export default class AttributeBox extends Component { <div className="attr-icons"> {this.props.config.user.admin ? <i className={formIcon} id={this.props.attribute.id} onClick={this.toggleFormAttribute}></i> : <nodiv></nodiv>} <i className={linkIcon} id={this.props.attribute.id} onClick={this.toggleLinkAttribute}></i> - <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional}></i> - <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility}></i> + <i className={optionalIcon} id={this.props.attribute.id} onClick={this.toggleOptional} data-tip data-for={"optionalTooltip"}></i> + <i className={eyeIcon} id={this.props.attribute.id} onClick={this.toggleVisibility} data-tip data-for={"visibleTooltip"}></i> </div> {form} </div> @@ -534,5 +510,7 @@ AttributeBox.propTypes = { handleDateFilter: PropTypes.func, attribute: PropTypes.object, graph: PropTypes.object, - config: PropTypes.object + config: PropTypes.object, + isOnto: PropTypes.bool, + entityUri: PropTypes.string } diff --git a/askomics/react/src/routes/query/graphfilters.js b/askomics/react/src/routes/query/graphfilters.js index 2750c8d7..8dd4f4e0 100644 --- a/askomics/react/src/routes/query/graphfilters.js +++ b/askomics/react/src/routes/query/graphfilters.js @@ -47,7 +47,7 @@ export default class GraphFilters extends Component { <Col md={6}> <div> <Input type="text" disabled={disabled} name="filternodes" id="filternodes" value={filterNodeValue} placeholder="Filter nodes" onChange={this.props.handleFilterNodes}/> - </div> + </div> </Col> </Row> ) @@ -57,6 +57,8 @@ export default class GraphFilters extends Component { GraphFilters.propTypes = { graph: PropTypes.object, current: PropTypes.object, + showFaldo: PropTypes.bool, handleFilterLinks: PropTypes.func, - handleFilterNodes: PropTypes.func -} \ No newline at end of file + handleFilterNodes: PropTypes.func, + handleFilterFaldo: PropTypes.func +} diff --git a/askomics/react/src/routes/query/ontolinkview.jsx b/askomics/react/src/routes/query/ontolinkview.jsx new file mode 100644 index 00000000..99e5e435 --- /dev/null +++ b/askomics/react/src/routes/query/ontolinkview.jsx @@ -0,0 +1,46 @@ +import React, { Component } from 'react' +import axios from 'axios' +import { Input, FormGroup, CustomInput, Col, Row, Button } from 'reactstrap' +import { Redirect } from 'react-router-dom' +import ErrorDiv from '../error/error' +import WaitingDiv from '../../components/waiting' +import update from 'react-addons-update' +import Visualization from './visualization' +import PropTypes from 'prop-types' + +export default class OntoLinkView extends Component { + constructor (props) { + super(props) + this.handleChangeOntologyType = this.props.handleChangeOntologyType.bind(this) + } + + + render () { + return ( + <div className="container"> + <h5>Ontological Relation</h5> + <hr /> + <p>Search on ...</p> + <table> + <tr> + <td> + <CustomInput type="select" id={this.props.link.id} name="ontology_position" onChange={this.handleChangeOntologyType}> + <option selected={this.props.link.uri == 'http://www.w3.org/2000/01/rdf-schema#subClassOf' ? true : false} value="http://www.w3.org/2000/01/rdf-schema#subClassOf">children of</option> + <option selected={this.props.link.uri == 'http://www.w3.org/2000/01/rdf-schema#subClassOf*' ? true : false} value="http://www.w3.org/2000/01/rdf-schema#subClassOf*">descendants of</option> + <option selected={this.props.link.uri == '^http://www.w3.org/2000/01/rdf-schema#subClassOf' ? true : false} value="^http://www.w3.org/2000/01/rdf-schema#subClassOf">parents of</option> + <option selected={this.props.link.uri == '^http://www.w3.org/2000/01/rdf-schema#subClassOf*' ? true : false} value="^http://www.w3.org/2000/01/rdf-schema#subClassOf*">ancestors of</option> + </CustomInput> + </td> + <td> a term</td> + </tr> + </table> + <br /> + </div> + ) + } +} + +OntoLinkView.propTypes = { + link: PropTypes.object, + handleChangeOntologyType: PropTypes.func, +} diff --git a/askomics/react/src/routes/query/query.jsx b/askomics/react/src/routes/query/query.jsx index 66624e0b..ac4000de 100644 --- a/askomics/react/src/routes/query/query.jsx +++ b/askomics/react/src/routes/query/query.jsx @@ -1,13 +1,15 @@ import React, { Component } from 'react' import axios from 'axios' -import { Alert, Button, Row, Col, ButtonGroup, Input, Spinner } from 'reactstrap' +import { Alert, Button, CustomInput, Row, Col, ButtonGroup, Input, Spinner } from 'reactstrap' import { Redirect } from 'react-router-dom' import ErrorDiv from '../error/error' import WaitingDiv from '../../components/waiting' import update from 'react-addons-update' +import ReactTooltip from "react-tooltip"; import Visualization from './visualization' import AttributeBox from './attribute' import LinkView from './linkview' +import OntoLinkView from './ontolinkview' import GraphFilters from './graphfilters' import ResultsTable from '../sparql/resultstable' import PropTypes from 'prop-types' @@ -40,7 +42,8 @@ export default class Query extends Component { // Preview icons disablePreview: false, - previewIcon: "table" + previewIcon: "table", + ontologies: this.props.location.state.config.ontologies } this.graphState = { @@ -50,6 +53,8 @@ export default class Query extends Component { } this.divHeight = 650 + this.showFaldo = true; + this.idNumber = 0 this.specialNodeIdNumber = 0 @@ -62,6 +67,7 @@ export default class Query extends Component { this.handleRemoveNode = this.handleRemoveNode.bind(this) this.handleFilterNodes = this.handleFilterNodes.bind(this) this.handleFilterLinks = this.handleFilterLinks.bind(this) + this.handleFilterFaldo = this.handleFilterFaldo.bind(this) } resetIcons() { @@ -208,6 +214,33 @@ export default class Query extends Component { }) } + isRemoteOnto (currentUri, targetUri) { + + let node = this.state.abstraction.entities.find(entity => { + return entity.uri == targetUri + }) + + if (! node){ + return false + } + + return node.ontology ? currentUri == targetUri ? "endNode" : "node" : false + } + + isOntoNode (currentId) { + + return this.graphState.nodes.some(node => { + return (node.id == currentId && node.ontology) + }) + } + + isOntoEndNode (currentId) { + + return this.graphState.nodes.some(node => { + return (node.id == currentId && node.ontology == "endNode") + }) + } + attributeExist (attrUri, nodeId) { return this.graphState.attr.some(attr => { return (attr.uri == attrUri && attr.nodeId == nodeId) @@ -240,6 +273,8 @@ export default class Query extends Component { let nodeAttributes = [] let isBnode = this.isBnode(nodeId) + let isOnto = this.isOntoNode(nodeId) + // if bnode without uri, first attribute is visible let firstAttrVisibleForBnode = isBnode @@ -255,7 +290,9 @@ export default class Query extends Component { humanNodeId: this.getHumanIdFromId(nodeId), uri: 'rdf:type', label: 'Uri', + displayLabel: 'Uri', entityLabel: this.getLabel(nodeUri), + entityDisplayLabel: this.getLabel(nodeUri), entityUris: [nodeUri, ], type: 'uri', faldo: false, @@ -265,7 +302,8 @@ export default class Query extends Component { form: false, negative: false, linked: false, - linkedWith: null + linkedWith: null, + ontology: isOnto }) } @@ -278,7 +316,9 @@ export default class Query extends Component { humanNodeId: this.getHumanIdFromId(nodeId), uri: 'rdfs:label', label: 'Label', + displayLabel: 'Label', entityLabel: this.getLabel(nodeUri), + entityDisplayLabel: this.getLabel(nodeUri), entityUris: [nodeUri, ], type: 'text', faldo: false, @@ -474,7 +514,12 @@ export default class Query extends Component { let specialNodeGroupId = incrementSpecialNodeGroupId ? incrementSpecialNodeGroupId : node.specialNodeGroupId + if (this.isOntoEndNode(node.id)){ + return + } + this.state.abstraction.relations.map(relation => { + let isOnto = this.isRemoteOnto(relation.source, relation.target) if (relation.source == node.uri) { if (this.entityExist(relation.target)) { targetId = this.getId() @@ -498,29 +543,30 @@ export default class Query extends Component { label: label, faldo: this.isFaldoEntity(relation.target), selected: false, - suggested: true + suggested: true, + ontology: isOnto }) // push suggested link this.graphState.links.push({ uri: relation.uri, - type: "link", + type: isOnto == "endNode" ? "ontoLink" : "link", sameStrand: this.nodeHaveStrand(node.uri) && this.nodeHaveStrand(relation.target), sameRef: this.nodeHaveRef(node.uri) && this.nodeHaveRef(relation.target), strict: true, id: linkId, - label: relation.label, + label: isOnto == "endNode" ? this.getOntoLabel(relation.uri) : relation.label, source: node.id, target: targetId, selected: false, suggested: true, - directed: true + directed: true, }) incrementSpecialNodeGroupId ? specialNodeGroupId += 1 : specialNodeGroupId = specialNodeGroupId } } } - if (relation.target == node.uri) { + if (relation.target == node.uri && ! isOnto) { if (this.entityExist(relation.source)) { sourceId = this.getId() linkId = this.getId() @@ -557,7 +603,7 @@ export default class Query extends Component { target: node.id, selected: false, suggested: true, - directed: true + directed: true, }) incrementSpecialNodeGroupId ? specialNodeGroupId += 1 : specialNodeGroupId = specialNodeGroupId } @@ -566,7 +612,7 @@ export default class Query extends Component { }) // Position - if (node.faldo) { + if (node.faldo && this.showFaldo) { this.state.abstraction.entities.map(entity => { if (entity.faldo) { let new_id = this.getId() @@ -585,7 +631,7 @@ export default class Query extends Component { label: entity.label, faldo: entity.faldo, selected: false, - suggested: true + suggested: true, }) // push suggested link this.graphState.links.push({ @@ -600,7 +646,7 @@ export default class Query extends Component { target: new_id, selected: false, suggested: true, - directed: true + directed: true, }) incrementSpecialNodeGroupId ? specialNodeGroupId += 1 : specialNodeGroupId = specialNodeGroupId } @@ -626,7 +672,9 @@ export default class Query extends Component { if (link.source.id == node1.id && link.target.id == node2.id) { newLink = { uri: link.uri, - type: ["included_in", "overlap_with"].includes(link.uri) ? "posLink" : "link", + // What's the point of this? + // type: ["included_in", "overlap_with"].includes(link.uri) ? "posLink" : "link", + type: link.type, sameStrand: this.nodeHaveStrand(node1.uri) && this.nodeHaveStrand(node2.uri), sameRef: this.nodeHaveRef(node1.uri) && this.nodeHaveRef(node2.uri), strict: true, @@ -636,14 +684,16 @@ export default class Query extends Component { target: node2.id, selected: false, suggested: false, - directed: true + directed: link.directed, } } if (link.source.id == node2.id && link.target.id == node1.id) { newLink = { uri: link.uri, - type: ["included_in", "overlap_with"].includes(link.uri) ? "posLink" : "link", + // What's the point of this? + // type: ["included_in", "overlap_with"].includes(link.uri) ? "posLink" : "link", + type: link.type, sameStrand: this.nodeHaveStrand(node1.uri) && this.nodeHaveStrand(node2.uri), sameRef: this.nodeHaveRef(node1.uri) && this.nodeHaveRef(node2.uri), strict: true, @@ -653,7 +703,7 @@ export default class Query extends Component { target: node1.id, selected: false, suggested: false, - directed: true + directed: link.directed, } } }) @@ -720,7 +770,7 @@ export default class Query extends Component { handleLinkSelection (clickedLink) { // Only position link are clickabl - if (clickedLink.type == "posLink") { + if (clickedLink.type == "posLink" || clickedLink.type == "ontoLink") { // case 1: link is selected, so deselect it if (clickedLink.selected) { // Update current and previous @@ -859,6 +909,7 @@ export default class Query extends Component { waiting: waiting }) console.log(this.graphState) + ReactTooltip.rebuild(); } initGraph () { @@ -983,6 +1034,17 @@ export default class Query extends Component { this.updateGraphState() } + // Filter Faldo -------------------------- + handleFilterFaldo (event) { + // Toggle filter + + this.showFaldo = !this.showFaldo + // Reset suggestion + this.removeAllSuggestion() + this.insertSuggestion(this.currentSelected) + this.updateGraphState() + } + // Attributes managment ----------------------- toggleVisibility (event) { this.graphState.attr.map(attr => { @@ -1269,6 +1331,27 @@ export default class Query extends Component { return result } + // Ontology link methods ----------------------------- + + handleChangeOntologyType (event) { + this.graphState.links.map(link => { + if (link.id == event.target.id) { + link.uri = event.target.value + link.label = this.getOntoLabel(event.target.value) + } + }) + this.updateGraphState() + } + + getOntoLabel (uri) { + let labels = {} + labels["http://www.w3.org/2000/01/rdf-schema#subClassOf"] = "is children of" + labels["http://www.w3.org/2000/01/rdf-schema#subClassOf*"] = "is descendant of" + labels["^http://www.w3.org/2000/01/rdf-schema#subClassOf"] = "is parents of" + labels["^http://www.w3.org/2000/01/rdf-schema#subClassOf*"] = "is ancestor of" + return labels[uri] + } + // ------------------------------------------------ // Preview results and Launch query buttons ------- @@ -1438,15 +1521,27 @@ export default class Query extends Component { let visualizationDiv let uriLabelBoxes let AttributeBoxes + let isOnto let linkView let previewButton + let faldoButton let launchQueryButton let removeButton let graphFilters + let tooltips = ( + <div> + <ReactTooltip id="formTooltip" place="top" effect="solid">Mark attribute as a <i>form</i> attribute</ReactTooltip> + <ReactTooltip id="linkTooltip">Link this attribute to another</ReactTooltip> + <ReactTooltip id="optionalTooltip">Show all values, including empty values.</ReactTooltip> + <ReactTooltip id="excludeTooltip">Exclude categories, instead of including</ReactTooltip> + <ReactTooltip id="visibleTooltip">Display attribute value in the results</ReactTooltip> + </div> + ) if (!this.state.waiting) { // attribute boxes (right view) only for node if (this.currentSelected) { + isOnto = this.isOntoNode(this.currentSelected.id) AttributeBoxes = this.state.graphState.attr.map(attribute => { if (attribute.nodeId == this.currentSelected.id && this.currentSelected.type == "node") { return ( @@ -1470,6 +1565,8 @@ export default class Query extends Component { handleFilterDateValue={p => this.handleFilterDateValue(p)} handleDateFilter={p => this.handleDateFilter(p)} config={this.state.config} + isOnto={isOnto} + entityUri={this.currentSelected.uri} /> ) } @@ -1498,6 +1595,24 @@ export default class Query extends Component { nodesHaveStrands={p => this.nodesHaveStrands(p)} /> } + + if (this.currentSelected.type == "ontoLink") { + + let link = Object.assign(this.currentSelected) + this.state.graphState.nodes.map(node => { + if (node.id == this.currentSelected.target) { + link.target = node + } + if (node.id == this.currentSelected.source) { + link.source = node + } + }) + + linkView = <OntoLinkView + link={link} + handleChangeOntologyType={p => this.handleChangeOntologyType(p)} + /> + } } // visualization (left view) @@ -1531,6 +1646,12 @@ export default class Query extends Component { ) } + faldoButton = ( + <div> + <CustomInput type="switch" id="filterFaldo" onChange={this.handleFilterFaldo} checked={this.showFaldo} value={this.showFaldo} label="Show FALDO relations" /> + </div> + ) + // Filters graphFilters = ( <GraphFilters @@ -1558,11 +1679,14 @@ export default class Query extends Component { <h2>Query Builder</h2> <hr /> <WaitingDiv waiting={this.state.waiting} center /> - <Row> + <Row className="align-items-center"> <Col xs="7"> {graphFilters} </Col> - <Col xs="5"> + <Col xs="3"> + {faldoButton} + </Col> + <Col xs="2"> {removeButton} </Col> </Row> @@ -1578,6 +1702,7 @@ export default class Query extends Component { {uriLabelBoxes} {AttributeBoxes} {linkView} + {tooltips} </div> </Col> </Row> diff --git a/askomics/react/src/routes/query/visualization.jsx b/askomics/react/src/routes/query/visualization.jsx index 90ee0ef0..c2a62360 100644 --- a/askomics/react/src/routes/query/visualization.jsx +++ b/askomics/react/src/routes/query/visualization.jsx @@ -169,7 +169,7 @@ export default class Visualization extends Component { link.suggested ? ctx.setLineDash([this.lineWidth, this.lineWidth]) : ctx.setLineDash([]) let greenArray = ["included_in", "overlap_with"] - let unselectedColor = greenArray.indexOf(link.uri) >= 0 ? this.colorGreen : this.colorGrey + let unselectedColor = greenArray.indexOf(link.uri) >= 0 || link.type == "ontoLink" ? this.colorGreen : this.colorGrey let unselectedColorText = greenArray.indexOf(link.uri) >= 0 ? this.colorGreen : this.colorDarkGrey ctx.strokeStyle = link.selected ? this.colorFirebrick : unselectedColor diff --git a/askomics/react/src/routes/results/resultsfilestable.jsx b/askomics/react/src/routes/results/resultsfilestable.jsx index 3bde0dd2..d51aa5b9 100644 --- a/askomics/react/src/routes/results/resultsfilestable.jsx +++ b/askomics/react/src/routes/results/resultsfilestable.jsx @@ -28,7 +28,8 @@ export default class ResultsFilesTable extends Component { status: null, modalTracebackTitle: "", modalTracebackContent: "", - modalTraceback: false + modalTraceback: false, + console_enabled: false } this.utils = new Utils() this.handleSelection = this.handleSelection.bind(this) diff --git a/askomics/react/src/routes/sparql/resultstable.jsx b/askomics/react/src/routes/sparql/resultstable.jsx index f2592ee1..be61dde4 100644 --- a/askomics/react/src/routes/sparql/resultstable.jsx +++ b/askomics/react/src/routes/sparql/resultstable.jsx @@ -59,7 +59,7 @@ export default class ResultsTable extends Component { index: index, formatter: (cell, row) => { if (this.utils.isUrl(cell)) { - return <a href={cell}>{this.utils.splitUrl(cell)}</a> + return <a href={cell} target="_blank" rel="noreferrer">{this.utils.splitUrl(cell)}</a> } return cell }, diff --git a/askomics/react/src/routes/upload/filestable.jsx b/askomics/react/src/routes/upload/filestable.jsx index 7b399c19..2864fcb9 100644 --- a/askomics/react/src/routes/upload/filestable.jsx +++ b/askomics/react/src/routes/upload/filestable.jsx @@ -3,6 +3,7 @@ import axios from 'axios' import BootstrapTable from 'react-bootstrap-table-next' import paginationFactory from 'react-bootstrap-table2-paginator' import cellEditFactory from 'react-bootstrap-table2-editor' +import {Badge} from 'reactstrap' import WaitingDiv from '../../components/waiting' import Utils from '../../classes/utils' import PropTypes from 'prop-types' @@ -88,6 +89,20 @@ export default class FilesTable extends Component { formatter: (cell, row) => { return this.utils.humanFileSize(cell, true) }, sort: true, editable: false + }, { + dataField: 'status', + text: 'File status', + formatter: (cell, row) => { + if (cell == 'downloading') { + return <Badge color="secondary">Downloading</Badge> + } + if (cell == 'available') { + return <Badge color="success">Available</Badge> + } + return <Badge color="danger">Error</Badge> + }, + sort: true, + editable: false }] let defaultSorted = [{ diff --git a/askomics/react/src/routes/upload/uploadurlform.jsx b/askomics/react/src/routes/upload/uploadurlform.jsx index 28646b68..ce631744 100644 --- a/askomics/react/src/routes/upload/uploadurlform.jsx +++ b/askomics/react/src/routes/upload/uploadurlform.jsx @@ -45,8 +45,8 @@ export default class UploadUrlForm extends Component { this.setState({ disabled: true, progressAnimated: true, - progressValue: 99, - progressDisplay: "99 %", + progressValue: 0, + progressDisplay: "0 %", progressColor: "success" }) @@ -96,7 +96,7 @@ export default class UploadUrlForm extends Component { <Input onChange={this.handleChange} value={this.state.url} type="url" name="url" id="url" placeholder="Enter file URL" /> <Progress animated={this.state.progressAnimated} color={this.state.progressColor} value={this.state.progressValue}>{this.state.progressDisplay}</Progress> <br /> - <Button disabled={this.state.disabled} onClick={this.handleSubmit} color="secondary">Upload</Button> + <Button disabled={this.state.disabled} onClick={this.handleSubmit} color="secondary">Request upload</Button> <br /> <ErrorDiv status={this.state.status} error={this.state.error} errorMessage={this.state.errorMessage} /> </div> diff --git a/askomics/static/about.html b/askomics/static/about.html index 4b1fc22e..8c8b1402 100644 --- a/askomics/static/about.html +++ b/askomics/static/about.html @@ -12,7 +12,7 @@ <h4>What is AskOmics?</h4> Visit <a target="_newtab" rel="noopener noreferrer" href="https://askomics.org">askomics.org</a> to learn how to use and deploy AskOmics. </p> -<h4>Usefull links</h4> +<h4>Useful links</h4> <p> <div> <a target="_newtab" rel="noopener noreferrer" href="https://flaskomics.readthedocs.io">Docs</a> diff --git a/askomics/static/css/askomics.css b/askomics/static/css/askomics.css index 7f7bb842..2d6a4065 100644 --- a/askomics/static/css/askomics.css +++ b/askomics/static/css/askomics.css @@ -276,4 +276,37 @@ button.input-with-icon { display: block; } -/***********************************************************************/ \ No newline at end of file +/***********************************************************************/ + + +.react-autosuggest__suggestions-container--open { + background-clip: padding-box; + background-color: #fff; + border: 1px solid rgba(0,0,0,0.15); + bottom: auto; + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + display: block; + font-size: 14px; + list-style: none; + padding: 1px; + position: absolute; + text-align: left; + z-index: 20000; +} + +.react-autosuggest__suggestions-list { + margin: 0; + padding: 0; + list-style-type: none; +} + +.react-autosuggest__suggestion { + cursor: pointer; + padding: 10px; + min-width: 100px; +} + +.react-autosuggest__suggestion--highlighted { + background-color: #0356fc; + color: #fff; +} diff --git a/askomics/tasks.py b/askomics/tasks.py index e0059151..ee048d3e 100644 --- a/askomics/tasks.py +++ b/askomics/tasks.py @@ -44,10 +44,10 @@ def integrate(self, session, data, host_url): error: True if error, else False errorMessage: the error message of error, else an empty string """ - files_handler = FilesHandler(app, session, host_url=host_url, external_endpoint=data["externalEndpoint"], custom_uri=data["customUri"]) + files_handler = FilesHandler(app, session, host_url=host_url, external_endpoint=data["externalEndpoint"], custom_uri=data["customUri"], external_graph=data['externalGraph']) files_handler.handle_files([data["fileId"], ]) - public = data.get("public", False) if session["user"]["admin"] else False + public = (data.get("public", False) if session["user"]["admin"] else False) or app.iniconfig.getboolean("askomics", "single_tenant", fallback=False) for file in files_handler.files: @@ -151,20 +151,28 @@ def query(self, session, info): info["celery_id"] = self.request.id result = Result(app, session, info, force_no_db=True) + query = SparqlQuery(app, session, info["graph_state"]) + query.build_query_from_json(preview=False, for_editor=False) + federated = query.is_federated() + result.populate_db(query.graphs, query.endpoints) + + info["query"] = query.sparql + info["graphs"] = query.graphs + info["endpoints"] = query.endpoints + info["federated"] = federated + info["selects"] = query.selects + # Save job in database database result.set_celery_id(self.request.id) result.update_db_status("started", update_celery=True, update_date=True) # launch query - query = SparqlQuery(app, session, info["graph_state"]) - query.build_query_from_json(for_editor=False) - - headers = query.selects + headers = info["selects"] results = [] - if query.graphs: - query_launcher = SparqlQueryLauncher(app, session, get_result_query=True, federated=query.federated, endpoints=query.endpoints) - headers, results = query_launcher.process_query(query.sparql, isql_api=True) + if info["graphs"] or app.iniconfig.getboolean("askomics", "single_tenant", fallback=False): + query_launcher = SparqlQueryLauncher(app, session, get_result_query=True, federated=info["federated"], endpoints=info["endpoints"]) + headers, results = query_launcher.process_query(info["query"], isql_api=True) # write result to a file file_size = result.save_result_in_file(headers, results) @@ -288,3 +296,18 @@ def send_mail_new_user(self, session, user): """ local_auth = LocalAuth(app, session) local_auth.send_mail_to_new_user(user) + + +@celery.task(bind=True, name="download_file") +def download_file(self, session, url): + """Send a mail to the new user + + Parameters + ---------- + session : dict + AskOmics session + user : dict + New user + """ + files = FilesHandler(app, session) + files.download_url(url, download_file.request.id) diff --git a/config/askomics.ini.template b/config/askomics.ini.template index e22d88a2..5e75e378 100644 --- a/config/askomics.ini.template +++ b/config/askomics.ini.template @@ -12,9 +12,9 @@ debug = false debug_ttl = false # If Askomics is running under a sub path (like http://example.org/askomics, subpath is /askomics) -#reverse_proxy_path = +#reverse_proxy_path = -# subtitle = +# subtitle = footer_message = Welcome to AskOmics! #front_message= @@ -61,12 +61,12 @@ instance_url = http://localhost:5000 # If set, host, port and sender are mandatory. # user and password are optional # connection: starttls or nothing -#smtp_host = -#smtp_port = -#smtp_sender = -#smtp_user = -#smtp_password = -#smtp_connection = +#smtp_host = +#smtp_port = +#smtp_sender = +#smtp_user = +#smtp_password = +#smtp_connection = # LDAP ldap_auth = false @@ -80,16 +80,20 @@ ldap_username_attribute = uid ldap_first_name_attribute = givenName ldap_surname_attribute = sn ldap_mail_attribute = mail -#ldap_password_reset_link = -#ldap_account_link = +#ldap_password_reset_link = +#ldap_account_link = + +# Max results returned for autocompletion +autocomplete_max_results = 10 + [triplestore] # name of the triplestore, can be virtuoso or fuseki triplestore = virtuoso # Sparql endpoint -endpoint = http://localhost:8890/sparql +endpoint = http://localhost:8890/sparql-auth # Sparql updatepoint -updatepoint = http://localhost:8890/sparql +updatepoint = http://localhost:8890/sparql-auth # Isql API # If triplestore is virtuoso, set the (optional) isql api for fastest graph deletion #isqlapi = http://localhost:5050 @@ -98,8 +102,10 @@ updatepoint = http://localhost:8890/sparql # Triplestore credentials username = dba password = dba +# Http auth method for sparqlwrapper: basic or digest (virtuoso require digest) +http_auth = digest # If the triplesotre and askomics are on different network, the loadurl is askomics url accessible by the triplesotre -# load_url = +# load_url = upload_method = load # Number of triple to integrate in one request chunk_size = 60000 @@ -122,6 +128,10 @@ preview_limit = 25 # Triplestore max rows limit # result_set_max_rows = 10000 +# Single tenant means all graphs are public +# All queries are launched on all graphes (speedup queries) +single_tenant=False + [federation] # Query engine can be corese or fedx #query_engine = corese diff --git a/config/askomics.test.ini b/config/askomics.test.ini index 5609a185..6d9bd17c 100644 --- a/config/askomics.test.ini +++ b/config/askomics.test.ini @@ -11,7 +11,7 @@ result_backend = redis://localhost:6380 debug = false debug_ttl = false -# subtitle = +# subtitle = footer_message = Test #front_message= @@ -55,12 +55,12 @@ instance_url = http://localhost:5000 # If set, host, port and sender are mandatory. # user and password are optional # connection: starttls or nothing -#smtp_host = -#smtp_port = -#smtp_sender = -#smtp_user = -#smtp_password = -#smtp_connection = +#smtp_host = +#smtp_port = +#smtp_sender = +#smtp_user = +#smtp_password = +#smtp_connection = # LDAP ldap_auth = false @@ -74,16 +74,17 @@ ldap_username_attribute = uid ldap_first_name_attribute = givenName ldap_surname_attribute = sn ldap_mail_attribute = mail -#ldap_password_reset_link = -#ldap_account_link = +#ldap_password_reset_link = +#ldap_account_link = +autocomplete_max_results = 20 [triplestore] # name of the triplestore, can be virtuoso or fuseki triplestore = virtuoso # Sparql endpoint -endpoint = http://localhost:8891/sparql +endpoint = http://localhost:8891/sparql-auth # Sparql updatepoint -updatepoint = http://localhost:8891/sparql +updatepoint = http://localhost:8891/sparql-auth # Isql API # If triplestore is virtuoso, set the (optional) isql api for fastest graph deletion isqlapi = http://localhost:5051 @@ -92,8 +93,10 @@ isqlapi = http://localhost:5051 # Triplestore credentials username = dba password = dba -# If the triplesotre and askomics are on different network, the loadurl is askomics url accessible by the triplesotre -# load_url = +# Http auth method for sparqlwrapper: basic or digest (virtuoso require digest) +http_auth = digest +# If the triplestore and askomics are on different network, the loadurl is askomics url accessible by the triplesotre +# load_url = upload_method = insert # Number of triple to integrate in one request chunk_size = 60000 @@ -116,6 +119,8 @@ preview_limit = 25 # Triplestore max rows limit result_set_max_rows = 10000 +single_tenant=False + [federation] # Query engine can be corese or fedx query_engine = corese @@ -128,3 +133,5 @@ local_endpoint=http://askomics-host:8891/sparql # Sentry dsn to report python and js errors in a sentry instance # server_dsn = https://00000000000000000000000000000000@exemple.org/1 # frontend_dsn = https://00000000000000000000000000000000@exemple.org/2 + +# Max results returned for autocompletion diff --git a/docker/Dockerfile b/docker/Dockerfile index c8b7ce9f..10c4902e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM askomics/flaskomics-base:4.0.0-alpine3.9 AS builder +FROM quay.io/askomics/flaskomics-base:4.0.0-alpine3.13 AS builder MAINTAINER "Xavier Garnier <xavier.garnier@irisa.fr>" COPY . /askomics @@ -7,10 +7,10 @@ WORKDIR /askomics RUN make clean-config fast-install build # Final image -FROM alpine:3.9 +FROM alpine:3.13 WORKDIR /askomics -RUN apk add --no-cache make python3 bash git libc-dev libstdc++ nodejs nodejs-npm openldap-dev +RUN apk add --no-cache make python3 bash git libc-dev libstdc++ nodejs-current npm openldap-dev COPY --from=builder /askomics . EXPOSE 5000 diff --git a/docker/DockerfileAll b/docker/DockerfileAll index fb9709cc..65224511 100644 --- a/docker/DockerfileAll +++ b/docker/DockerfileAll @@ -1,5 +1,5 @@ # Build AskOmics -FROM askomics/flaskomics-base:4.0.0-alpine3.9 AS askomics_builder +FROM quay.io/askomics/flaskomics-base:4.0.0-alpine3.13 AS askomics_builder MAINTAINER "Xavier Garnier <xavier.garnier@irisa.fr>" COPY . /askomics @@ -14,7 +14,7 @@ FROM xgaia/corese:20.6.11 AS corese_builder FROM askomics/virtuoso:7.2.5.1 AS virtuoso_builder # Final image -FROM alpine:3.8 +FROM alpine:3.13 ENV MODE="prod" \ NTASKS="5" \ @@ -35,7 +35,7 @@ RUN apk add --no-cache openssl py-pip && \ apk --no-cache add --update openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community && \ mkdir /corese && \ apk add --no-cache redis sqlite && \ - apk add --no-cache make python3 bash git libc-dev libstdc++ nodejs nodejs-npm openldap-dev + apk add --no-cache make python3 bash git libc-dev libstdc++ nodejs-current nodejs openldap-dev COPY --from=virtuoso_builder /usr/local/virtuoso-opensource /usr/local/virtuoso-opensource COPY --from=virtuoso_builder /virtuoso /virtuoso diff --git a/docker/DockerfileCelery b/docker/DockerfileCelery index d2df8601..db08157a 100644 --- a/docker/DockerfileCelery +++ b/docker/DockerfileCelery @@ -1,4 +1,4 @@ -FROM askomics/flaskomics-base:4.0.0-alpine3.9 AS builder +FROM quay.io/askomics/flaskomics-base:4.0.0-alpine3.13 AS builder MAINTAINER "Xavier Garnier <xavier.garnier@irisa.fr>" COPY . /askomics @@ -7,7 +7,7 @@ WORKDIR /askomics RUN make clean-config fast-install # Final image -FROM alpine:3.9 +FROM alpine:3.13 WORKDIR /askomics RUN apk add --no-cache make python3 bash git libc-dev libstdc++ openldap-dev diff --git a/docs/abstraction.md b/docs/abstraction.md index dec0278b..208ff7ad 100644 --- a/docs/abstraction.md +++ b/docs/abstraction.md @@ -1,6 +1,10 @@ During integration of TSV/CSV, GFF and BED files, AskOmics create RDF triples that describe the data. This set of triple are called *Abstraction*. *Abstraction* is a set of RDF triples who describes the data. This triples define *Entities*, *Attributes* and *Relations*. Abstraction is used to build the *Query builder*. -Raw RDF can be integrated into AskOmics. In this case, abstraction have to be built manually. The following documentation explain how to write an AskOmics abstraction in turtle format. +Raw RDF can be integrated into AskOmics. In this case, abstraction have to be built manually. The following documentation explain how to write manually write an AskOmics abstraction in turtle format. + +!!! warning + Starting from 4.4, attributes & relations are defined using blank nodes, to avoid overriding information + They are linked to the correct node using askomics:uri # Namespaces @@ -10,16 +14,19 @@ AskOmics use the following namespaces. PREFIX : <http://askomics.org/data/> PREFIX askomics: <http://askomics.org/internal/> PREFIX dc: <http://purl.org/dc/elements/1.1/> +PREFIX dcat: <http://www.w3.org/ns/dcat#> PREFIX faldo: <http://biohackathon.org/resource/faldo/> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX prov: <http://www.w3.org/ns/prov#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> +PREFIX dcat: <http://www.w3.org/ns/dcat#> ``` <br /> -!!! info +!!! note "Info" Namespaces `:` and `askomics:` are defined in the AskOmics config file (`config/askomics.ini`) # Entity @@ -31,12 +38,17 @@ The entity is a class. In the query builder, it is represented with a graph node :EntityName rdf:type owl:Class . :EntityName rdf:type askomics:startPoint . :EntityName rdfs:label "EntityName" . +# Optional (use if no label) +:EntityName askomics:instancesHaveNoLabels true . ``` <br /> -!!! info +!!! note "Info" `:EntityName rdf:type :startPoint` is not mandatory. If the entity have this triple, a query can be started with this this node. +!!! note "Info" + `:EntityName rdfs:label "EntityName"` is optional. If your entity has no label, you can use `:EntityName askomics:instancesHaveNoLabels true` instead. In the query view, the label tab will not be displayed. + # Attributes Attributes are linked to an entity. 3 types of attributes are used in AskOmics: *numeric*, *text* and *category*. @@ -44,19 +56,21 @@ Attributes are linked to an entity. 3 types of attributes are used in AskOmics: ## Numeric ```turtle -:numeric_attribute rdf:type owl:DatatypeProperty . -:numeric_attribute rdfs:label "numeric_attribute" . -:numeric_attribute rdfs:domain :EntityName . -:numeric_attribute rdfs:range xsd:decimal . +_:blank rdf:type owl:DatatypeProperty . +_:blank rdfs:label "numeric_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range xsd:decimal . +_:blank askomics:uri :numeric_attribute_uri ``` ## Text ```turtle -:text_attribute rdf:type owl:DatatypeProperty . -:text_attribute rdfs:label "text_attribute" . -:text_attribute rdfs:domain :EntityName . -:text_attribute rdfs:range xsd:string . +_:blank rdf:type owl:DatatypeProperty . +_:blank rdfs:label "text_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range xsd:string . +_:blank askomics:uri :text_attribute_uri ``` ## Category @@ -64,11 +78,13 @@ Attributes are linked to an entity. 3 types of attributes are used in AskOmics: Category is an attribute that have a limited number of values. All values of the category are stored in the abstraction. The ttl below represent a category `category_attribute` who can takes 2 values: `value_1` and `value_2`. ```turtle -:category_attribute rdf:type owl:ObjectProperty . -:category_attribute rdf:type askomics:AskomicsCategory . -:category_attribute rdfs:label "category_attribute" . -:category_attribute rdfs:domain :EntityName . -:category_attribute rdfs:range :category_attributeCategory . +_:blank rdf:type owl:ObjectProperty . +_:blank rdf:type askomics:AskomicsCategory . +_:blank rdfs:label "category_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range :category_attributeCategory . +_:blank askomics:uri :category_attribute_uri + :category_attributeCategory askomics:category :value_1 . :category_attributeCategory askomics:category :value_2 . @@ -101,12 +117,13 @@ Four FALDO attributes are supported by AskOmics: reference, strand, start and en A faldo:reference attribute derive from a Category attribute. ```turtle -:reference_attribute rdf:type askomics:faldoReference . -:reference_attribute rdf:type askomics:AskomicsCategory . -:reference_attribute rdf:type owl:ObjectProperty . -:reference_attribute rdfs:label "reference_attribute" . -:reference_attribute rdfs:domain :EntityName . -:reference_attribute rdfs:range :reference_attributeCategory. +_:blank rdf:type askomics:faldoReference . +_:blank rdf:type askomics:AskomicsCategory . +_:blank rdf:type owl:ObjectProperty . +_:blank rdfs:label "reference_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range :reference_attributeCategory. +_:blank askomics:uri :reference_attribute ``` ### faldo:strand @@ -114,12 +131,13 @@ A faldo:reference attribute derive from a Category attribute. faldo:strand is also a category. ```turtle -:strand_attribute rdf:type askomics:faldoStrand . -:strand_attribute rdf:type askomics:AskomicsCategory . -:strand_attribute rdf:type owl:ObjectProperty . -:strand_attribute rdfs:label "strand_attribute" . -:strand_attribute rdfs:domain :EntityName . -:strand_attribute rdfs:range :strand_attributeCategory. +_:blank rdf:type askomics:faldoStrand . +_:blank rdf:type askomics:AskomicsCategory . +_:blank rdf:type owl:ObjectProperty . +_:blank rdfs:label "strand_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range :strand_attributeCategory. +_:blank askomics:uri :strand_attribute ``` ### faldo:start and faldo:end @@ -127,29 +145,102 @@ faldo:strand is also a category. faldo:start and faldo:end are numeric attributes. ```turtle -:start_attribute rdf:type askomics:faldoStart . -:start_attribute rdf:type owl:DatatypeProperty . -:start_attribute rdfs:label "start_attribute" . -:start_attribute rdfs:domain :EntityName . -:start_attribute rdfs:range xsd:decimal . +_:blank rdf:type askomics:faldoStart . +_:blank rdf:type owl:DatatypeProperty . +_:blank rdfs:label "start_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range xsd:decimal . +_:blank askomics_uri :start_attribute ``` ```turtle -:end_attribute rdf:type askomics:faldoEnd . -:end_attribute rdf:type owl:DatatypeProperty . -:end_attribute rdfs:label "end_attribute" . -:end_attribute rdfs:domain :EntityName . -:end_attribute rdfs:range xsd:decimal . +_:blank rdf:type askomics:faldoEnd . +_:blank rdf:type owl:DatatypeProperty . +_:blank rdfs:label "end_attribute" . +_:blank rdfs:domain :EntityName . +_:blank rdfs:range xsd:decimal . +_:blank askomics:uri :end_attribute ``` # Relations -Entities are linked between them with relations. Relations are displayed with arrows between nodes on the query builder. The following turtle explain how relations are described. +Entities are linked between them with relations. Relations are displayed with arrows between nodes on the query builder. The following turtle explain how relations are described. To avoid overwriting information, relations are described using a blank node. The relation `:RelationExample`, linking `EntitySource` to `EntityTarget`, with the label *relation_example*, will be defined as follows: + +```turtle +_:blank askomics:uri :RelationExample . +_:blank a askomics:AskomicsRelation . +_:blank a owl:ObjectProperty . +_:blank rdfs:label "relation_example" . +_:blank rdfs:domain :EntitySource . +_:blank rdfs:range :EntityTarget . +# Optional information for future-proofing +_:blank dcat:endpointURL <url...> . +_:blank dcat:dataset <file_turtle_XXXXX_gene_tsv> . +``` + +# Federation + +To describe a remote dataset, you can either fill out the "Distant endpoint" and optionally the "Distant graph" fields when integrating an RDF dataset, or you could add description triples in your dataset, as follows: + +```turtle +_:blank ns1:atLocation "https://my_remote_endpoint/sparql" . +_:blank dcat:Dataset <my_remote_graph> . +``` + +# Ontologies + +Ontologies needs to be are defined as follows: + +```turtle +<ontology_uri> rdf:type askomics:ontology . +<ontology_uri> rdf:type owl:Ontology . +:EntityName rdfs:label "OntologyLabel" . +``` + +!!! note "Info" + Make sure to use `rdfs:label`, even if your classes use another type of label. + +You will then need to add any relations and attributes using blank nodes: + +```turtle +# SubCLassOf relation +_:blank1 a askomics:AskomicsRelation . +_:blank1 askomics:uri rdfs:subClassOf . +_:blank1 rdfs:label "subClassOf" . +_:blank1 rdfs:domain <ontology_uri> . +_:blank1 rdfs:range <ontology_uri> . + +# Ontology attribute 'taxon rank' +_:blank2 a owl:DatatypeProperty . +_:blank2 askomics:uri <http://purl.bioontology.org/ontology/NCBITAXON/RANK> . +_:blank2 rdfs:label "Taxon rank" . +_:blank2 rdfs:domain <ontology_uri> . +_:blank2 rdfs:range xsd:string . +``` + +With these triples, your ontology will appears in the graph view. +You can then either add your classes directly, or refer to an external endpoint / graph + +## Adding the classes directly + +Here is an example of an ontological class: + +```turtle +<class_uri> rdf:type owl:Class . +<class_uri> rdfs:subClassOf <another_class_uri> . +<class_uri> <rank_uri> "order" . +<class_uri> skos:prefLabel "OntologyLabel" . +``` + +!!! note "Info" + The label does not need to be `rdfs:label`, but you will need to specify the correct label in the UI. + +## Using federated queries + +If instead you have access to a remote SPARQL endpoint, you can indicate it here: ```turtle -:relation_example a askomics:AskomicsRelation . -:relation_example a owl:ObjectProperty . -:relation_example rdfs:label "relation_example" . -:relation_example rdfs:domain :EntityName . -:relation_example rdfs:range :EntityName_2 . +_:blank ns1:atLocation "https://my_remote_endpoint/sparql" . +# Optional: Set a specific graph for remote queries +_:blank dcat:Dataset <my_remote_graph> . ``` diff --git a/docs/ci.md b/docs/ci.md index 7fe6b072..1b201d19 100644 --- a/docs/ci.md +++ b/docs/ci.md @@ -1,4 +1,4 @@ -AskOmics continuous integration is composed of code linting and unit tests on the Python API. CI is launched automaticaly on the [askomics](https://github.com/askomics/flaskomics) repository on every pull requests. No PR will be merged if the CI fail. +AskOmics continuous integration includes code linting and unit tests on the Python API. CI is launched automaticaly on the [askomics](https://github.com/askomics/flaskomics) repository on every pull requests. No PR will be merged if the CI fail. # Setup CI environment diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 00000000..3fffd0bb --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,13 @@ +Starting from release 4.3.0, a CLI is available with the [askoclics](https://github.com/askomics/askoclics) python package. +This CLI relies on the AskOmics **API Key**, found in your <navbar><i class="fa fa-cog"></i> Account management</navbar> tab. + +The main goal of the CLI is to help automatize data upload and integration into an existing AskOmics instance. + +Both the python package and the bash command line currently include the following features: + +- File management (Upload, list, preview, integrate, delete) +- Dataset management (List and delete) +- Results management (List, preview results, download results, get sparql query, and delete) +- SPARQL management (Send SPARQL query) + +This library is currently a work in progress. diff --git a/docs/configure.md b/docs/configure.md index cc138e92..31132d21 100644 --- a/docs/configure.md +++ b/docs/configure.md @@ -29,7 +29,7 @@ All AskOmics configuration is set in `config/askomics.ini` files. When AskOmics - `disable_integration` (`true` or `false`): Disable integration to non admin users - `protect_public` (`true` or `false`): Public datasets and queries are visible only for logged users - `enable_sparql_console`(`true` or `false`): Allow non-admin logged users to use the sparql console. **This is unsafe.** - - `quota` (size): Default quota for new users + - `quota` (size): Default quota for new users (can be customized individually later) - `github` (url): Github repository URL - `instance_url` (url): Instance URL. Used to send link by email when user reset his password - `smtp_host` (url): SMTP host url @@ -51,7 +51,7 @@ All AskOmics configuration is set in `config/askomics.ini` files. When AskOmics - `ldap_mail_attribute` (string): Mail attribute - `ldap_password_reset_link` (url): Link to manage the LDAP password - `ldap_account_link` (url): Link to the LDAP account manager - + - `autocomplete_max_results` (int): Max results queries by autocompletion - `virtuoso` @@ -73,6 +73,7 @@ All AskOmics configuration is set in `config/askomics.ini` files. When AskOmics - `namespace_internal` (url): AskOmics namespace for internal triples. Correspond to the `askomics:` prefix. You should change this to your instance url if you want your URIs to be resolved. - `preview_limit` (int): Number of line to be previewed in the results page - `result_set_max_rows` (int): Triplestore max row. Must be the same as SPARQL[ResultSetMaxRows] in virtuoso.ini config + - `single_tenant` (bool): Enable [single tenant mode](/manage/#single-tenant-mode) - `federation` diff --git a/docs/console.md b/docs/console.md new file mode 100644 index 00000000..59993c7e --- /dev/null +++ b/docs/console.md @@ -0,0 +1,51 @@ +A SPARQL console is available through AskOmics, allowing you to send direct SPARQL queries to the endpoint. + +!!! warning + The console access is restricted to **logged users** + +!!! warning + The default AskOmics configuration restrict SPARQL edition and query to the administrators. + This can be disabled with the *enable_sparql_console* configuration option. + +![SPARQL query generated by AskOmics](img/sparql.png){: .center} + +You can reach this console in two ways: + +# Console access + +- By clicking <btn class="white">SPARQL</btn> of an existing result in the *Results* page + - The console will be pre-filled with the generated SPARQL query of the result +- Simply heading to the "/sparql" URL + - The console will be pre-filled with a default SPARQL query + +# Editing your query + +You can edit the SPARQL query through the console to customize your query. + +## Advanced options + +The **Advanced options** tab allows you to customize *how* the query will be sent. +Namely, you will be able to select which endpoints and datasets the query will use, allowing you to fine-tune the query + +- For example, you can exclude some datasets to restrict the results. + +!!! note "Info" + When accessing the console through the "Results" page, the datasets of interest (relevant to the query) will already be selected. Make sure to customize the selection if you modify the query. + +!!! note "Info" + When accessing the console directly, all datasets will be selected (which can increase query time) + +# Launching query + +If you have **editing privileges** (either as an administrator, or through the configuration key), you will be able to either preview or save the query, much like a "normal" query. + +If you save the query, it will appears as a normal result in the "Results" tab. The basic functionalities (templates, download) will be available. + +!!! warning + The <btn class="white">Redo</btn> button will be disabled for results created from the console + +!!! warning + The generated *template* will redirect to the SPARQL console. It means + + - Non-logged users will not be able to use it + - Only logged users with **editing privileges** will be able to launch the query diff --git a/docs/contribute.md b/docs/contribute.md index 4e8ec20c..82b9a446 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -14,7 +14,7 @@ git checkout -b my_new_feature Commit and push your modification to your [fork](https://help.github.com/articles/pushing-to-a-remote/). If your changes modify code, please ensure that is conform to [AskOmics style](#coding-style-guidlines) -Write tests for your changes, and make sure that they [passes](dev-deployment.md#launch-continuous-integration-locally). +Write tests for your changes, and make sure that they [passe](dev-deployment.md#launch-continuous-integration-locally). Open a pull request against the `dev` branch of flaskomics. The message of your pull request should describe your modifications (why and how). @@ -29,10 +29,10 @@ Ensure all user-enterable strings are unicode capable. Use only English language ### Python -We follow [PEP-8](https://www.python.org/dev/peps/pep-0008/), with particular emphasis on the parts about knowing when to be inconsistent, and readability being the ultimate goal. +We follow the [PEP-8](https://www.python.org/dev/peps/pep-0008/) coding convention. - Whitespace around operators and inside parentheses -- 4 spaces per indent, spaces, not tabs +- 4 spaces per indent (not tabs) - Include docstrings on your modules, class and methods - Avoid from module import \*. It can cause name collisions that are tedious to track down. - Class should be in `CamelCase`, methods and variables in `lowercase_with_underscore` diff --git a/docs/data.md b/docs/data.md index 655bfd3a..88d8253d 100644 --- a/docs/data.md +++ b/docs/data.md @@ -1,5 +1,182 @@ -In this tutorial, we will learn how to build CSV/TSV file for AskOmics. +# Uploading files +You can head to the *Files* tab to manage your files. From there, you will be able to upload new files (from your local computer, or a remote endpoint), and delete them. +!!! warning + Deleting files does not delete related datasets. -*-- Work in progress --* \ No newline at end of file + +# Data visibility + +By default, all your uploaded files and datasets are private. +If you have administrator privileges, you can select the <btn><i class="fa fa-globe-europe"></i>Integrate (Public dataset)</btn> button during integration to make the dataset **Public** + +!!! note "Info" + *Public* datasets will be queriable by any user, including non-logged users. They will not be able to directly access the file, but generated entities will appear on the query graph (and on the starting screen for starting entities). + +!!! warning + Make sure your public datasets do not contain sensitive information. + + +# CSV/TSV files + +AskOmics will integrate a CSV/TSV file using its header. The *type* of each column will be predicted, but you will be able to modify it before integration. + +![CSV/TSV integration](img/csv_convert.png){: .center} + + +## Entity (first column) + +### Entity URI + +The first column of the file will manage the entity itself : the column name will become the entity name, and the values will become the entity's instances **URIs**. +**URIs** will be created as follows : + +* If the value is an **URL**, it will be integrated as it is. +* If the value is a [CURIE](https://www.w3.org/TR/2010/NOTE-curie-20101216/), it will be transformed into an URL before integration. The list of managed CURIE formats is available [here](https://github.com/askomics/flaskomics/blob/master/askomics/libaskomics/prefix.cc.json). +* Else, the value will be added to either AskOmics *namespace_data* value, or a custom base URI if specified in the integration form. + +!!! Warning + Unless you are trying to merge entities, make sure your URIs are unique across **both your personal and public datasets**. + +### Entity type + +The entity type can either be "starting entity", or "entity". If "starting entity", it may be used to start a query on the AskOmics homepage. Both types will appear as a node in the AskOmics interface. + +### Inheritance + +The entity can inherit the attributes and relations of a 'mother' entity. Meaning, you will be able to query the sub-entity on both its own, and its 'mother' attributes and relations. The 'mother' entity however will not have access to any 'daughter' attributes or relations. + +To setup inheritance, the **column name** needs to be formated as follows: +- *daughter_entity_name* < *mother_entity_name* (with the < symbol) + ie: *Custom_population* < *General population* + +!!! Warning + The values of this column must be an URI of the *mother* entity + +## Entity label (first and second column) + +To manually set an entity label, you can set the second column as a *Label* column. +The values of this column will be used as labels for the generated entities. + +!!! Warning + If a value is missing in the column, the label will be created based on the entity *URI*. (See below) + +If there is no *Label* column, the labels will be generated based on the URIs (The first column). + +* If the value is an **URL**, the last non-empty value after a "/" or "#" will be the label. +* If the value is a **CURIE**, the value after ":" will be the label +* Else, the raw value is the label + +!!! node "Info" + For example, a one-column CSV file with the column name "Gene", and the values "gene1", "rdfs:gene2" and "http://myurl/gene3/" will create the entity *Gene*, with two instances labelled *gene1*, *gene2* and *gene3*. + +## Attributes + +Each column after the first one will be integrated as an *attribute* of the entity. The column name will be set as the name of the attribute. +Several attribute types are available. The type of an attribute will dictate the way it will be managed in the query form (eg: text field, value selector...) + +!!! note 'Info' + AskOmics will try to guess the type of a column based on its name and its values. You will be able to set it manually if the auto-detected type doesn't fit. + +Attributes can be of the following types : + +### Base types + +- Numeric: if the values are numeric +- Text: if all values are strings +- Date: if all values are dates (using *dateutil.parser*) + - *Auto-detected terms are 'date', 'time', 'birthday', 'day'* +- Category: if there is a limited number of repeated values +- Boolean: if the values are binary ("True" and "False", or "0" and "1") + +!!! Warning + If the date format is ambiguous (eg: 01/01/2020), AskOmics will interpret it as *day/month/year* + +### FALDO types + +If the entity describe a locatable element on a genome (based on the FALDO ontology): + +- [Reference](http://biohackathon.org/resource/faldo#reference): chromosome *(Auto-detected terms : 'chr', 'ref', 'scaff')* +- [Strand](http://biohackathon.org/resource/faldo#StrandedPosition): strand *(Auto-detected terms : 'strand')* +- Start: start position *(Auto-detected term : 'start', 'begin')* +- End: end position *(Auto-detected terms : 'end', 'stop')* + +!!! Warning + To mark an entity as a *FALDO entity*, you need to provide **at least** a *Start* and *End* columns. + *Reference* and/or *Strand* are optional, but will enable more specific queries (eg: *Same reference* or *Same strand*) + +### Relations + +A column can also symbolize a relation to another entity. In this case, the column name must be of the form : + +- *relationName@RelatedEntityName* (with the @ symbol) + - ie: *Derives_from@Gene* + +Two types are available : + +- Directed: Relation from this entity to the targeted one *(e.g. A is B’s father, but B is not A’s father)* +- Symetric: Relation that works in both directions *(e.g. A loves B, and B loves A)* + +!!! Warning + The content of the column must be URIs of the related entity. + *(The related entity and its URIs may be created afterwards)* + +Linked URIs must match one of these three formats : + +- Full URI +- CURIE +- Simple value (the value will transformed into an URI with AskOmics *namespace_data* value) + +This link between entities will show up in the query screen, allowing users to query related entities. + +!!! note "Info" + **All** FALDO entities will be automatically linked with the *included_in* relation, without needing an explicit link. + You can still specify your own relations. + +!!! Warning + For federated queries, the syntax is slightly different. Please refer to [this page](abstraction.md#linking-your-own-data) for more information. + + +# GFF files + +!!! Warning + Only the *GFF3* format is managed by AskOmics. + +Each GFF file can be integrated into several entities. You will be able to select the entities you wish to integrate beforehand. Available entities are the values of the 'type' column of the GFF file. The relations between entities (eg: *Parents* or *Derives_from*) will also be integrated. + +![Integration interface for GFF files](img/gff_preview.png){: .center} + +Extracted attributes are the following : + +- Reference +- Strand +- Start +- End +- Any attribute in the *attributes* column + - *Parents* and *Derives_from* will be converted in relations + +!!! note "Info" + All entities extracted from GFF files are *FALDO entities*, and will be linked implicitly with the *included_in* relation. + +# BED files + +Each BED file will be integrated into one entity (the default entity name will be the file name, but it can be customized). + +Extracted attributes are the following : + +- Reference +- Strand +- Start +- End +- Score + +!!! note "Info" + All entities extracted from BED files are *FALDO entities*, and will be linked implicitly with the *included_in* relation. + +# TTL Files + +You can integrate TTL files in AskOmics, either to integrate your own data, or to enable [federated queries](federation.md) to remote endpoints. +In both case, you will need to generate or convert your data in AskOmics's format. + +This can be done either [manually](abstraction.md) or [automatically](federation.md#auto-generate-external-abstraction-with-abstractor) diff --git a/docs/dev-deployment.md b/docs/dev-deployment.md index da82a868..047ed4cf 100644 --- a/docs/dev-deployment.md +++ b/docs/dev-deployment.md @@ -1,8 +1,8 @@ -In development mode, AskOmics dependencies can be deployed with docker-compose, but AskOmics have to be running locally, on your dev machine. +In development mode, you can deploy AskOmics dependencies with docker-compose, but AskOmics itself should be running locally, on your development machine. # Prerequisites -Install dev dependencies +Install AskOmics dependencies ```bash @@ -28,7 +28,7 @@ apt install -y docker-compose dnf install -y docker-compose ``` -# Deploy dependencies +# Deploying dependencies We provide a `docker-compose` template to run external services used by AskOmics. Clone the [flaskomics-docker-compose](https://github.com/askomics/flaskomics-docker-compose) repository to use it. diff --git a/docs/docs.md b/docs/docs.md index ef0ea300..fe752ab6 100644 --- a/docs/docs.md +++ b/docs/docs.md @@ -1,6 +1,6 @@ -all the documentation (including what you are reading) can be found [here](https://flaskomics.readthedocs.io). Files are on the [AskOmics repository](https://github.com/askomics/flaskomics/tree/master/docs). +All the documentation (including what you are reading) can be found [here](https://flaskomics.readthedocs.io). Files are on the [AskOmics repository](https://github.com/askomics/flaskomics/tree/master/docs). -# Serve doc locally +# Serve the documentation locally First, [install askomics in dev mode](/dev-deployment/#install-askomics). @@ -9,6 +9,6 @@ Then, run ```bash make serve-doc ``` -Doc will be available at [localhost:8000](localhost:8000) +The documentation will be available at [localhost:8000](localhost:8000) -To change port, use `make serve-doc DOCPORT=8001` +To change the port, use `make serve-doc DOCPORT=8001` diff --git a/docs/federation.md b/docs/federation.md index 78478230..a33f294a 100644 --- a/docs/federation.md +++ b/docs/federation.md @@ -1,9 +1,11 @@ -A federated query is a query who involve several SPARQL endpoints. AskOmics have his dedicated endpoint for the integrated data, but it is also possible to query external resources. +A federated query is a query who involve several SPARQL endpoints. AskOmics uses its own dedicated endpoint for the integrated data, but it is also possible to query external resources. # Define an external endpoint -The first step is to define an external endpoint. External endpoint have their own description. To Display external entities, AskOmics need the *Abstraction* of the distant endpoint. This external abstraction can be build [automatically](#auto-generate-external-abstraction-with-abstractor) or [manually](abstraction.md). +The first step is to define an external endpoint. External endpoint have their own description. To display external entities, AskOmics need the *Abstraction* of the distant endpoint. + +This external abstraction can be build [automatically](#auto-generate-external-abstraction-with-abstractor) or [manually](abstraction.md). ## Auto-generate external abstraction with abstractor @@ -15,39 +17,35 @@ abstractor -e <endpoint_url> -p <entity_prefix> -o <output_file> ``` !!! Warning - Abstractor scan all things in the SPARQL endpoint. You may review the generated file to delete unwanted things. + Abstractor scan all things in the SPARQL endpoint. You may wish to review the generated file to delete unwanted things. ## Integrate external abstraction into AskOmics -Once external endpoint's abstraction is generated, its time to add it into AskOmis. Upload it and integrate it. -![integrate_external](img/integrate_external.png) +Once external endpoint's abstraction is generated, its time to add it into AskOmics. Upload it and integrate it. +![Integrating an external abstraction](img/integrate_external.png){: .center} !!! Warning Check that `advanced options` > `Distant endpoint` contain URL of the external endpoint - # Query external endpoint -## Simple query - -If AskOmics contain local data, external startpoint are not displayed by default on the start page. Use the `Source` dropdown button to display external entities. - -![external_startpoint](img/external_startpoint.png) - +## Starting entities -## Federated query +If AskOmics already contains local data, external startpoint are not displayed by default on the start page. Use the `Source` dropdown button to display external entities. +![External startpoint](img/external_startpoint.png){: .center} -External entities can be interrogate just as local entities. But to link a local dataset to the external endpoint, the file must be structured in a certain way. +## Linking to your own data -### Build file +To link a local dataset to the external endpoint, the file must be structured in a certain way. -The input file must describe the relation with the external entity. It goes through the header, who must contain the URI of the targeted entity. Content of the file must also be the exact uri of the targeted entity. +The input file must describe the relation with the external entity. Much like a 'normal' relation, it goes through the header. +In this case however, instead of simply the entity name, the column name must contain either the full URI or the CURIE of the external entity (e.g *http://nextprot.org/rdf#Gene*). The values of the column must also be the exact uri (full URI or CURIE) of the targeted entity, instead of a raw value. -For example, the file below describe en entity *gene* who is linked to an external entity *Gene*. The external one is prefixed with the full uri used in the external endpoint. In the content of the file, full URI have to be used to. +For example, the file below describe en entity *gene* who is linked to an external entity *Gene*. The external one is prefixed with the full uri used in the external endpoint. In the values of the column, you will need to also use the full URI / CURIE. gene|value|concern@http://nextprot.org/rdf#Gene @@ -56,6 +54,6 @@ gene_1|0|http://nextprot.org/rdf/gene/ENSG00000169594 gene_2|1|http://nextprot.org/rdf/gene/ENSG00000156603 -### Perform a federated query +## Perform a federated query -Once the relations are well described, link between local and distant entities are automatically done by AskOmics. The Query is distributed to the concerned endpoint and results are returned like a classic query. +Once the relations are described, links between local and distant entities are automatically created by AskOmics. The query is distributed to the external endpoint and results are returned like a classic query. diff --git a/docs/galaxy.md b/docs/galaxy.md index d47a062e..9b6fd1f6 100644 --- a/docs/galaxy.md +++ b/docs/galaxy.md @@ -1,5 +1,7 @@ Galaxy is a scientific workflow, data integration, and data and analysis persistence and publishing platform that aims to make computational biology accessible to research scientists that do not have computer programming or systems administration experience. +A Galaxy Training tutorial is available [here](https://training.galaxyproject.org/training-material/topics/transcriptomics/tutorials/rna-seq-analysis-with-askomics-it/tutorial.html) + AskOmics can be used with a Galaxy instance in two way: - With a dedicated AskOmics, import Galaxy datasets into AskOmics and export AskOmics results into Galaxy. @@ -17,7 +19,7 @@ On your Galaxy account, go to the top menu *User* → *API Keys* and copy your A On AskOmics, got to <navbar><i class="fa fa-user"></i> Your Name</navbar> → <navbar><i class="fa fa-cog"></i> Account management</navbar> → **Connect a Galaxy account** and enter the Galaxy URL and API Key. -![askogalaxy](img/askogalaxy.png) +![](img/askogalaxy.png){: .center} Once a Galaxy account is added to AskOmics, you can access to all your Galaxy Datasets from AskOmics. @@ -51,30 +53,30 @@ Galaxy Interactive Tools (GxITs) are a method to run containerized tools that ar Search for the AskOmics Interactive tool using the search bar. -![Search a Galaxy Tool](img/galaxy_search_tool.png) +![](img/galaxy_search_tool.png){: .center} Choose input files to automatically upload them into AskOmics -![Input files](img/galaxy_input_data.png) +![](img/galaxy_input_data.png){: .center} !!! Tip You will able to add more input files later A dedicated AskOmics instance will be deployed into the Cluster. Wait few minutes and go to the instance using the `click here to display` link. -![Galaxy](img/galaxy_execute_it.png) +![](img/galaxy_execute_it.png){: .center} Once you are into your AskOmics instance, you can see your uploaded files into the <navbar><i class="fa fa-file"></i> Files</navbar> tab. -![Galaxy](img/galaxy_askomics_files.png) +![](img/galaxy_askomics_files.png){: .center} ## Upload additional files in addition to the <navbar><i class="fa fa-upload"></i> Computer</navbar> and <navbar><i class="fa fa-upload"></i> URL</navbar> buttons, you can now use the <navbar><i class="fa fa-upload"></i> galaxy</navbar> button to import datasets from your galaxy histories -![Galaxy](img/galaxy_import_from_galaxy.png) +![](img/galaxy_import_from_galaxy.png){: .center} ## Integrate and Query @@ -84,7 +86,4 @@ follow the [tutorial](/tutorial#data-integration) to integrate and query your da Once you have your result, Use the `Send result to Galaxy` to export a TSV file into your last recently used Galaxy history. -![Galaxy](img/galaxy_history_result.png) - - - +![](img/galaxy_history_result.png){: .center} diff --git a/docs/img/askogalaxy.png b/docs/img/askogalaxy.png index 44dcaa72619fabfe2646f2797600231506f809f5..5dd6e0379e50191323aa06bb58b16b8f03e55c8b 100644 GIT binary patch literal 15318 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 Ie*X490F#JdEdT%j literal 15352 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 diff --git a/docs/img/askograph.png b/docs/img/askograph.png new file mode 100644 index 0000000000000000000000000000000000000000..a898d77c6bd0ad7fc8ee6cbcdb0f0d0a7673f2a0 GIT binary patch literal 34589 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≈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 literal 0 HcmV?d00001 diff --git a/docs/img/attribute_box.png b/docs/img/attribute_box.png new file mode 100644 index 0000000000000000000000000000000000000000..32faaa7c93339ab2fa98c2e37cfab2dbd015eaac GIT binary patch literal 1560 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 KMNUMnLSTaHw)vm{ literal 0 HcmV?d00001 diff --git a/docs/img/attributes.png b/docs/img/attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..aa607c80c276c8347b1156ccd4f07a9f1f70974f GIT binary patch literal 15032 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≷+ONvF&zP5)Syos+jtlyVa_L~{b8~YWko%{t zs}UgRIB5!CbV;DMz|y`p^GQf>EFQdIqFtiir^sCAAKI<R{Naop*STvHvvs}pN#@dE z#8Iv?T?t(GV1k=o)|(oXcAfSX9IA?-)`qqB6d}DYsCpi{MY{&Vy~oz%Pw%FVDp%!= z*)8kVc6}*sF6NI{sH<RGv+JHuwjH3asTAH8d(J1mD6AxH-X$l+z>_aJ9LC*^lV+8v z6aic*(|R*U04`<twv*ywGuT_D;p=st%7|^;RPKx@hc0I6z2kGI30$pe->s;qoyDT| zQnRSCIPAU|)V!FE+G}iTMx!q_e~N?`4y@S;)!sqXJoIQbK>CHcRBC%OaJZe?{!UXq zyV4wrgbFU64X!#eI#@qn*T~8ADzOTl#Q_QHOe`=zq=B#>*wyU<3D?Kr*ESc$59(bv z5?f8$Xy%DUZ85_o1QurQq@NB4YR-Iv240mPM1+NsH<_Q+c$z$P(``P*%U5Na*)bv; z*P2Rtg5Sa<o=3wfRqOD?;Z^C%X`5w(Wya#__T+VtrrsxZe6Ci&j`$Nti9J{tUs_s! zN)DI_Q1qkdfNU!vl^`Ii24u?mU?D*F(jw;HOJumbDPn4!9c}LB77_RJ*=6y%U@Qab z)lmjQvKQ-r{Bx{%j=V@01me6o>+P(gMv_4FK`ur6L%<0`48xioZ<F~SI?pBe^#cdU z&;oOEa<YvR>Dr6jd4?gvD9c4S0Dmv$Fj}2pAR`kb%yD1Wi2)LL!USBGC^vfak^gyP zxqi+M6uhpVrhpr;a^Dj!4fp@{-HZR};j9}7K>si%{VV+655LU!Q^=^h3pDeOTX+BV zj-5FSCdxpvI|nEc+}wYQMt^Ee3_uSpg8mj6hKIEqW;KG2=zwDT%XGy*C8j!Gtf!Nc zAT7~O?0-reWd`mrUJsI`JqBJ6+$sd*j}%gZ0N@58&^_Q*BY7yg0tfWnlk<1}r^_^n z87X98IA52Lkg%NOgb9$P<N=xJQe?W)hxg_+jP#D0wHz|mls^OmT=`u8QyAj9M)V<o zofs^OjiKQ)ex$Ar=v~z`f+8Y{lXHoHKhyK}GT(D?2Jeqt(o|TvO6(ozi}IbdwL91P z(de&z%eycr5^zmI0l(%kAUZ)Sc84ak5>r`)*==nvm|h8E;?{C7TfiVd$`94$i)2mT F{x8wH(A@w4 literal 0 HcmV?d00001 diff --git a/docs/img/csv_convert.png b/docs/img/csv_convert.png new file mode 100644 index 0000000000000000000000000000000000000000..d27ecb489dc613d7f5d8e906401311bbc74067d9 GIT binary patch literal 251893 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 literal 0 HcmV?d00001 diff --git a/docs/img/custom_nodes.png b/docs/img/custom_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..65429b9f4d17ebb7983a0b8833664376f534b21d GIT binary patch literal 5745 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 G@_ztm)N|(m literal 0 HcmV?d00001 diff --git a/docs/img/external_startpoint.png b/docs/img/external_startpoint.png index 5cca2bcc00a14732457d9affcc67f8016c25ffae..8c75d197b72f1cd50cd4f790183ddc0c90a2447e 100644 GIT binary patch literal 11646 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 literal 11895 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 DJ|O$! diff --git a/docs/img/faldo.png b/docs/img/faldo.png new file mode 100644 index 0000000000000000000000000000000000000000..791f9076c26211e504af8fa0c9eb0dad3750ecb2 GIT binary patch literal 18666 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 literal 0 HcmV?d00001 diff --git a/docs/img/filters.png b/docs/img/filters.png new file mode 100644 index 0000000000000000000000000000000000000000..10a8e58d82e20c5174deb7c0f9c00414439b7a9c GIT binary patch literal 2612 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 HZ~VUib3O4Y literal 0 HcmV?d00001 diff --git a/docs/img/form.png b/docs/img/form.png new file mode 100644 index 0000000000000000000000000000000000000000..bf87c5da9ad9e3548e65b4598ac29dc1d45d1bbb GIT binary patch literal 4052 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 literal 0 HcmV?d00001 diff --git a/docs/img/form_edit.png b/docs/img/form_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c8cf67410eb46c873a92f1d62473d4e867c86d GIT binary patch literal 12392 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�(Am7p;+g=K^nb;UL`r5psLp>9iwYjlP6hiqIn# zqwBtuTH4yaU}KB3mcFJe0IJKxB%|<aVAbNQ9#jx;w+u)>GQ;?HQH{zJyYQEusH~g} z<#iFFQqF(qKDx|<KPKXXV`Eyn6v?}Fz)%39rn6H{8`xff4?9dvL&K}yAc5$b5<vij z8Z$Gqq=;!2`fXGHUz8UMGjocFH$9jC^)LX6N=j8#Rb4%%kQ80z5jnsbB_<{s)Opa{ zR3WUXsmU)W@FsIbXHXzSJV4c~t*sRovnJq6K2Jx}P@<_NrKP3S)!G_p1{H)TURqiL z)Jp9mEm8!FO9I5@`N=-Oq$$7fQbKn`I4L>V2(&3G+Po&)NJD}Evh9`H@8x}f|I$=f z=it7%A^k(T{79<6u>8VD)X?Q477aEa3Lw7z#rt6w5lC5E7vvUC-DtN{L$v8NP&0Ze z7joEOi3+cTKCoZxmtuhThn$LdA9k;!Mn*<r<Kp6Auq5<#TTn?FFq6XF>Mf_kc^fQO z!w)aJWazjDx^KD%-2;*nw8CSd|Mi8O+Ow-WEMlT9R(K=m`x&xQiju|RM*jZ`&Yx6- literal 0 HcmV?d00001 diff --git a/docs/img/form_example.png b/docs/img/form_example.png new file mode 100644 index 0000000000000000000000000000000000000000..76bf4709858c9f0ded3a0e63c8c347a425a88408 GIT binary patch literal 12575 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 WUNF=!_zvAfKtfbjq)1rD^S=RIY^GiS literal 0 HcmV?d00001 diff --git a/docs/img/gff.png b/docs/img/gff.png index a12eac4915caf4bd57e99d2429549bd075a989b6..22872e7fc55e9b29d1c124160aed60e9719ba5e3 100644 GIT binary patch literal 2275 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 AJpcdz literal 2854 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 Kok$mcNd7l2yGyeG diff --git a/docs/img/gff_preview.png b/docs/img/gff_preview.png index 90653374da51d7627430bda5a19fac5b90021748..eb8a8127aad707256be4ac68dc0d5e4074dd83ce 100644 GIT binary patch literal 11892 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 literal 11601 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 LSxBL%&X@lNRrN5* diff --git a/docs/img/minus.png b/docs/img/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..84030a3cc6377535025656df77e37e7d2043f37d GIT binary patch literal 13218 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 literal 0 HcmV?d00001 diff --git a/docs/img/ontology_autocomplete.png b/docs/img/ontology_autocomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..c87c10787ca5aa50830d8e063d2ae468cc561c3e GIT binary patch literal 13559 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 literal 0 HcmV?d00001 diff --git a/docs/img/ontology_graph.png b/docs/img/ontology_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5726caf9077887b5cf00a343c5267cbf0f17d18d GIT binary patch literal 17176 zcmZ|1cRbba|37X!_RQuGB0DL2ucSgYq3lrhIJS_zLM4t_5h0^w@6EAC_OXtcacl>_ zORvxS_uu!AbK_jk>-o5@>v27<`(s`wO8bdA88H(v78Vwn#sih7SXkIP;PV@T16tfI zlr6v?Z1<<?N?0WbmUZw2&rb2NA{JIz0tw~?KKM@L^1#>~3yZw<`h(r+TwslbrBtk; zqNwL%zFiOVV4i@Zq=Oy}c(BxNbFp&&o&2*T;VLQ%Kgd`YpDkUY@vduoUo{!;-TVHh z5&uu&QK6)FywT^xf6s6JWygMpr4dY`K+UB{&5S+xemir0f~TS}EfcoWc>1nN?;9;| zbguUEsFT2F>VyR~o||tvP?v#KLWLVy{WMC8L{eH0{1s6|QNn979DDe19<GLLbXXg` zM`q&58w3rt#UM;+k>vl;sm4W)mN>li#h$N+hljOw8`7l@f#~5U;ux|Ngdd;!TUlAX zSKT%FzV+*)sfj68B?UpK(cQauLoEXvv&^tKyb&f+J6^TY{j8qw)YS2e_t`lY6>l7~ z@=*vD4R3C1DT;{!8!vO=pB6hm;y+5qZohi<D)P$R-F+AlmZ(qVh>~R+SYGBDB|{AS zK}pB(2wVR?%CA03341c`pQ(3o8ooFf)zVb<Y#=9k)2@s_6VaE0NgA=KPgAz?lG5s8 zrPf8gsQu&g`tGlfcFdpT`U_8Gs=54oM7-;^mPUS<RgYpW-dvIN+R;b9i83BJub3g+ zK$T9(uYWwB6ql9VKJ-o7peZM|MEUd5Zmh3=+xgzZDwihh{(JvS^3SfR&>9ZqQIVW< z!s}ccxzgF;(V-!vTeWt+o-~KGO`8~E`ogxgEiE<*FYGnsJGEc9X2Z?{#9G-DV))n5 zeLR0PKc&|(MiRnb7c(XVC*(AR$+DvRmYp4&{~G_jShqUwOP;_et~<$dSclvHmFd{M zmHf@Gyn4^Kre{uHxC^a`(i#hJvpHLGT^9*UOwB1qvnAx$*47RgC5yZDP#Oiu1yy`G ztiasa`O%8pJ--;{AmZrFEk@JO(5UJ9g<SY|w8^R1rj~g((Drk`C;#&7?l{_?je}nW zJu@dap}#0=$|6N|$ezGG;3v`gvvJBv#LEk8{=*2auo;$Da0<i#qr4!s{I4O)<|a8u z-=J>$@_@Po`3VkdZu=D(Qk4bPw4LfB<4+Gq*MvyWM_HNB^WX9^12dV4rg^F8rKKe^ zGqbnIWhD#CmHetbbo!X!_-0&4g6wb^5r?=sKWf{{PuDOYeo5l(jES_x;h)p5F27#Y zd0Se(VU*+O1tcymF2>$tNKwu2b~RFSbu38TJ1cHcjDOPf6|B#w<g|uWx&h%m3>emv z%=+BE?mJe#+grDOaYMHHYvz;E3I3nKl;yN0k`!m9;u8VybN6*)zF?B?R%a@cwYK9b z2gIVo1QOmN(&dT^E-<-0T5<0`HENYVbKdQDj|OYVjzSB4C<6SRbRAkqXxH!)_=3)# z!nEi8eUaG;1{ZS;^!Kl;sJI(+@(9t_4CGTkP%S{Q>dl^i*|uA9*$ZD^69+sF>)T?k zY>S?ro;Rl6mFJUN{wRJbwn0LUjp{ucp04?HO7cwUy*dr*B2Zo_ptkY*>PSpuV{fW0 z$)Z0Hrc~Md)|u74-4Bvs0ui?m5%i3h&qaIaB0l+hCW93csN&{bmU#YqZ@@Y~NeF*D zn;gOz8<4J|%ESWR-$6%dN{MhRuiCHF4WQg5SZ$I&xY<#>^xa@fWnPW<#?!1v%lN5x z6%X~CuCKpL?$#UskSQ6sOYR(8g?UOXm$p7<IP~Ea;~J8}4N}c*A_*l97ogL$vU`kJ zb8UOEEsDwb6Z$89=@6cZi;D}u#xxh{6X@nPyzcR7)nVf&24Co1<WzHufmOxy_Ud*S zpur?1jF>xLwKI|L9TP%S1sRCkmA@k`&Ch0UY-R@VBm5)uG*rfkPgq!eg1tT~%Ugow z@#DuZ7;KVTT$~>N?EHKs-)4Mt^m+ZemX?<B@$slAqH6c%&GK?ly_<pb!BrArdcL<m zrKj83+O{<`Io+qHr5zm~=QG70G&9iCTX0cURxXSub$s~nArsT(!h|~S{M?-Rvu6VF zZ|*;T&aGv-=ouI&N38P1I{I;IYwNHdHKF}l9oE#e{JOv%y!)6nYOz~JPoMVD_e-%q zuzGO`Xp>GGGW(&42~)#?uCA_S9O?aLy0wrA2K>s(%H`!{2GX~V6D6J=9!+X>Z$*3r zg%CxBg-YJRhaJocPquJ=s&F^0xFKIzS>=f^vRSHdrru{7itX!rbaK01oGBHTa_bF_ z1m2J7?T1x+uG-YI*i!;fk_F|Q7)1*aDJi}n>l6V#KBe9vJ4Gk<GgdKD(Yz@H;)xiu zqn<i8IDC^Ts3qclxccPQ&!hKKPw#dd(-Xw2axdgj>!nJ%X4~>QPaXSl2fMJbvlq2| z8b1B?>%K(r3F%&T2-eCAXD_e&EyAD3P&sjt8={k8O^_HBscbhkHk@zvym%MSN4vTr z4+4|IzY4sG6!c}0h&?JO!BNxj#}gw+jeNW&pv`a!nPT^52@MUk$CAPsrGwzLabO*& zsbjV6WDk*I9`DjOby7(aulcj&R-+$OpP!wXNR`}}9H942Q0E?vaX)N7>WyRldD6f) z;^SY;L4A{FM%(739Q|OO12^}ksDq>laYsjoN@duUi}_zp>uk!Sa6cutR5V|rsDerU z$nE+o<wX1JK$fzG2Da2}zL%|J3wAa(+!<|9N+@38k~?zH%^)E(7t3Ig=9?U(veP_Q zyjiFKufJnn1!0NjAxAzm0}I}9^!E17s;|2HOy~I2Cbg-^$U(kVPyYS<%pd!oCREO; z7Tz594}wo0xTY>y|AFP)e7D<mr;+8$o}~tgs*;03g<7Mn5U&0cg2>%z%2!}2jh(}( z#6~hfKUY@LmN9j<3rXZ+U{up()OiWqrJ@S`ya}_aogr8FYlz(z+X^IZv?!QKR5%)I zeic7yRhePhFg)4amSXO8W<tx`>ZQotds(-pOTAB8D^8A-WllHwwWH&l?_Q=3ba$t- z-=+4$Gb+2ZRgp?)is6toP`d9rqc5GnMregMw3BUOB)Cuh5>4hpyQerjGSdFTBBPKN zV)gh|GKMiV+mTY4L5!h&&^BpzNnyX6TnZY|)&-Lk!(YV+hK|8F^M}od_~nZXkM`EL z(s0+4{oK`QSl!15J4yB!J$uG_AZ2^-xAH!M4Vx`me_*HKlPk7Ou-K5hSCqVXI(OXY zYz(&jm6dTnai~q4&@$9;jwZy%M;AX#?B;x-sM!{&Y*Gt(BfnwMVWjgMd7x&(6ph?r zM^GtvCg~2IN^q$mdKKD*bnP@v-SwRVSDuys-YDVy7|BrLui&|kxn1_ugP4S8`_>b~ z!(|Ic=O2FvF(K)fM`~VdH=}gtyPQ-p&%)7=;vV!7Lx@#atd6U*bLn89C&G$sv3Oq~ zuM4>{;`#6g5n*^`(kt^Qw6=*Co8w?FJF+v&#>Iuw3=5v1Y`HC?*GA7;=IvrXNWc3i zP}J$-_cxafy-$u>Q*CUn$<G+#3*xKRO9DKb#d;5YCwPt&QNd*uxHwJ3R8=2Tyx2;0 zNV|(!#;wO39UOL5q0q+myRTGVQ)p->kaBfC{Jdg$JSLgo#KKBA?0Fm3)z{b675u(y zS9SRVRkHh<FXhIN?Fx|$dxph+TNoA`LQQiZ>^8w(qvUb(@bHl2LKvPP52n~OLB79W z5$rv3_peYzSy|q%hT4{mb%u<cmSO9n@7sK}w%<MD6Z*n&Car`dA_je}O4D;a*cKeg zOxYQH8M`<$=!dj2Na@>C*nf~jaCV}x)FU2D&N}?GJl2;;cxO+2q%_XHLJ{-)qaXpf zThXAFqTBa2gU=WC6uuFE|GqxegIeAz5A8D6z>a=FzZTaR_0$Qow^Bk0eUIp5c3h|< z&KigiJ_vr*WLtHLY1qZId~2ZU{L${PzO$n)p`ZD)hMNzS!^@{=R8m~5T1iX3#7|E1 z<JMC>7!w83Ljx5eV%$|tj2b$R6f@5VPEjm!v5!Ts6t*q1jAx@-2o<qeNNjd-R&=o9 zXrpTU5lT^!sI_~P!}^v>rO_EU($NQs)luL5#^+%E>3ad~jX1C`u|^e2dI;RnVEecB zQOm{>v8_?}3L#PT3z7mi?)Yn<bO?SasJc!C-9T{Gaqcud98*^=V&}OZbr*I*uO3n9 z!|^Z|>*ihZILn)@oxU9R0RZCR3@Jv=CfzD%>xj2JVp}4C6=*Gn{q#2PkViq`Y^<3q zUNvy{oG*k0Rb0ccU`5fEye*mWY^+6|u(o41>YKT_^a@hJqHgL~s4@cQI~cmA7m;{c z%gL{*Hf7@DyS`@#>JCp&$8hGldGIcN4t0yiTF5p^Ace+JG0JV-7&+&SZNO@!3qISU zgZA52<e;go7*i)7lny%SsiKz1SS5i1*0KA>|5u>o=jfAj0~l^BH=O<jnN&A83~g_9 z260W4tS}^S5vBJ*%eW{c?)~m;(v41Y7p;_PGgMjW52<~OjKU+e`7jwA_2&4s*qcSF z-oaYf-5iCGEqfv_+6$_8^p!ODl+#HhkvN)C6p6?@E_j0Y!HWN5=eTD3g1^OHeq)VK zj5!!ExE!CUzbm%szHTAm<><k6YB%MGQkcqC(8q0Z{N8NdlPYQ?T$nn?KR)vvv*=3q z+xU*Fij)597RQwag=%5*qE8%@`cW;zeAI+%T`;XCD;ClFNB4gHncg)q(S$_tNx89w zwdAm0k_fXB5OH|NH)QaH*~i6a91on<V++4m*gZaOVh>ZHXO-OXkaiUO`Q_{I*UPWQ z@=!(9$XkG7XG&gSe$R6;v7>v#FeNc1bwomctp2fH>*;EUZDtjZ3a7_1rp3dRmzORc zMKlCqmDGYnVPAV;pzE~RQAb0EiDt3Q=wepwI@|@q;r%8)qpI5J#%gpfBG=2WwsXMU zC(Qo3G2W!Ne}y3L1@idFBa`ygU=ljy`EyGzODA8aDQQ;H*^YWw2nWBq1!}iNJaLXj zDL3waYk{UQ-AVXZ`?mHiPlREBvw%|9{#w^5o4QtYb=~iZ-_t|eBm#RPx0Jfzd7P-n zoL@!V)0*wqT#sA=Gb!W1I3>m(Jo|`|opv3tx&K;_E)ulldmTn$_R;ZxVQpBfk_jn+ z)(&_vJPR)h{w><Sw!Xek&tO<zR79?+TIwHbs-{e0q+`g`Li=r&BxU|JnW_ms#(f+Y z5Ep-&5dQDQI-hKOI=P2Yl-pqFutbJzPLwQmLg&sNK^^2|m`~|J<xmp3AGhD;tEj+} zs^lq}Tq-HIhO*M3=VH%YA4vjtm+7D1>#^)FLYqO-{{ji~Q>s)}N6;u)VqN>egE8n! z$)K3xFXK;5?Y_DD%?_Jf6OBPP1XKK?_oRD~_7R>qPW_L8^r-E18IGwOdQ>Y?L=Wnj zV2KQ`46~1jM<5mbLJl%1bFrn|GAXHX4;Jfq7S>%4JjlF}7S2ul#oS>k%=HrT+vz10 zqc^<i48089O5(wqV$i#F<4+w$m<oLh!CbFN2Vl=PohT$!bV@lK_U|?8huMdlXHW>s z4Jyqr$K?Md8X~Wk08&Hd>pHh|9Q!08{!!d-+h>r&|IK^p?vm&Gny0!itt^&eoz<@8 z`abA;XQg1{n<xXBNEU)7mlZT@dsa<PGk+)hN<|ZttQ_gJ)_&?DA@Db@9eo5g()@ZO z3F;+wve2AgI;kN93_xDN$nv81p4t`ji+`x1_~nOTdnw4lHMQ0bOYb#!Q6j=X_Uh=q zl-565%~8!ge;<M`<AAWXL|Bpx-Sq*`Jy?|C;JW`W-cT>$%=#0Yzj5P@-4=P&hksl) z&)9K2NJ;OFk&5Z#w4J*f`fumK_J$5AfGN;|DN&pO;e)@<pWa+OME}SB@K&TYZ(9@) zEY*Ko8*H8d&0yH_@~{%w`Lt4B1{tEPmzbBFF@7y1yw0}{-9g>u`?nrv7EvXi(4j%` zae4^B=bvGT_IdOuR^51WJK^E;y)@TVz>Em<j1N%z5PBePkpy6|N)MdC#w~`>kyo`Y z9lJzl{@cjnU*n>>#%a~0tL`%Yv0yc1H5YL+bVx)@QsqDH&2O*0-g0zWb7V+oTY4!2 z1W_2l`D-A26{i_1{QqYT7$RXlw4HfZ6l~S)8W*;x0JMU8bu~+j<9ItbJeA7yh;tOi z^SxB)P_T`YZ|wDso<*XO3qLO%ElXZodMSZjAHu4SMd3CF3oo>`?8$I^%B4pUag>Ez zM|;*<zyKo-j>Q$D_sGQhPi(=$Dai)I(Iay&Ar_;?dP8P+R?^;q{SZ^2N7UB;1)$Vy z&ny061b~_<Jt9IW=k`v@$aY&xI+7~)wy$JF)viK}OC*gaK+FFm$4p{p&(9ZL|Mi9L zyit~q!k2c-myOMXgWBx7=V9~PUchG7di3bI3VX2$aqaBuia(gkdHHc)CnwS|Um3Rb z06gBA>1k<EQBiSk@0sU8K0cH7VvAa0va*83H<u08T2A-U_DnQiX&7oKTZ9I*y}qB$ zkvXv$zJc|&RX<D1*JvArj2hNJgrQd&N=lGZvY&tcB%kKqK;Mjq5G5l0(bwi?MH~7& z(_L=`$35_Yh2t1Y*0=;Z*?zC7@<rCwm(_hMCPI>&b<Z#T`D5%~UG_9={)QB^Tgsg+ z?TMWoYLqr#vTHks1XYh++HbSzdL)*fUfXAu_>A%QF4L(@!{S3!QdO%~5(XHpHw$B0 zM3bs7-XUWA%|}DcwB0|WjY8Q7*9m&M%qTh_`|%)-(Su8*(r=$G^F&cLsr@y<2Cbjq zA1!1>_P752eh?C~Kk6ysR-s3<ZY(U~3VshTNG-tGi**Q|Xn}=Ec;F?{<OS5lRpKCw ziVa{YSU2IFA?#f7k>&*YiaJKL>zJk{teMuo1!QoNPuNI5U*Ba`9jt;+aa9t}936`$ zhgRHjl3O-SGX)f0R1(KE^RlK|eGFyQ=k&rT4yG@Ja?Vpdes`bJjo$-VM{4=<vkYGt zTHCBE^o4v%B<Uf)t2y3_HLeUrzK~BJJj{P`%7mefIK5QJ>{}-%Kf3+q$WUh<RH{?e z7_E5sG1m77=Q}SQ$&Ik9Br^_ozj7%LBqr9m1L+m}C{C<O{Fp)@iHDyG(fcMx#6P(f zD=k%mf+$reN2JhX80JByWERpzzRWsA?SWl*itp5pOnFyC?tNEV?eA?o@(5gYl_wna z7Ga3wF|accJP|-g+k7o=sZr8RcnRazL+xrCNt9B1h9mglwEBYUb>)1t%CZlpl6Jjk zutITYb$>mh)s>u|n8;6oX|y3z+@meuCn1sxvH`JM5q!1$WNOM9x=};cv6V_(NXq~Z zctqI4G{ZHS=oj2vZH|m%znL6w!qsJqTmpT37}jOsJUWWt0NI+chOz>!)`4y1s9xmY zLT;C`gyEG+cp*97B~(58+Q>r_#c`j{(35WMou2$^bI+J0^v@H$cuqcfl5DiKClGgS z2`)DKkRT3!LqmED)s!+rm;~2=i-O7!uN1|_kJ9hlqcwkEe){_Mp%Mj&EUpaBLpCbh zh&-$_iE6E8o_16?vZn_d&Qk=SgFmGEgiV>_j!8%35BeM<2J+lB8G#nlJA3g~f1K`* z)={I%I7!uCS*nkUfa6xB{lfvJBUwZ3p^)o#5S-M4E2U)+A(U}^B3p53jERv*5Efr< z{=ilU(Oa@E)2DmHkjsbrgIb^>Phm?43Mu6*qTbZ!PmPQHP8azp^{1fmK)=EZ9Z9L| zuAb(1&<GF`B0&*$5IP9{1Xj*#^{U?;Zz*%BYFy@|90bKbFvk)sB@QwFR^8BqRMQ-+ z)V-W+lhBI%3OMqd7cxeLZ1*w$hjnJxI+5|8B}I<_X2jvRuRthG=!2av{|9YfsdUr6 zeJ`jenE11ql^oct1R26HlK}Al-XoPEmSD3W_4ryn{U?m~Hr*ac&X{|Pd~WEy!NC;` zhTC1-d8LdDXMV0x1mTzh0zt%a2QYK`*{>3$5IPdpa<_RVlk)LUIC}f&2q*##!>C!C ze4w79g)*Gk?1eT2fbvyNRtDDEbtmmvQHOOe4}h(^GFnSixf}rI%UFA#*~bs$-coV& zKmsjk3x+LQzw`N+yed?_g;T{5xFObuz}Q(?brZ<@tMm2vANA6zalj@4$O+~)8-RHd z)Z^B#1dhte7Oibt)Z(7E!c?ftVo@k1_e)86x?4b>#R*+2cT%(Eqs*q3yMlGt!b>t7 zCKX2rKTIajS;X$Do?1VrH{S#NuT&&N5X$`1G}^#;TTe^5ZhWx~KgRb50<8*HU0L0~ zO_BBcLFBLR^=PCE!xU#L$|p0C;m6UniA8j6Vj20N?!0wowEtEy?n&y!-g>R*uW4j` zgcqzA-`)^tX&h;I2}}tU=J7eO;<AlQ2cX%s<+r~8{`F1)1jnb^VAUlTr~@`=@ld;D zUAUb|m~vtk{TNm5y&4x_a@_@Q-X73P$jf&x7+Edf%K>&-|CIE9W;(YSH{co&*Z+-? z)13p1lh7e7U`!$gXmSM|cQCO*w$J^ur-xp7|G747i;ew&mFMEJ7eXiFto48tECQ%c z6~gLzXImtp<m-s(O|^pmt)%mL!`G^>GtcHEN7u=Gu0`$@=wF;?0C5&!id9y-HiH0r zo>W!zkB>ip^&{T+G@V7M(smo($-q{4zUuFuBYABdUGK2c0|7AfowxK9mCrMHxCp>| z0agJ&-%s`Y?YZ0wyd+NmbK^vXHa|Bs%>LZ=;hpGj$C%T@IM$tdCoP!;!7hqlm3@9E zMZnCx`4tf{^S3&hct9OmeYGh3wP7#r8yWMhMvTow){MB<0KM8yedpm9!ds1JW8Vm& z9#^MXese+c+C~gsXdQzvl{5xP=#dZR+qb`27fx=iZ_CJz)35pi^r3;=g2%{|ednyZ zfx@n9NlWqS2v2`;&ZV5iP-dyj-$4hC$BzRJi$>(n)2<HIfAn&XDM6~OERmRuW|4~+ z3-&_OAP=qPZ-fJ${yPPm5rjDMPkvuc&J6^XpUY#cC$7*VW>+V=bxofxa-h&m*umr) z1sWkgi7wq?o!|YE)_9uUG**PXEjJ#W$eUe^My4^&UtZ|WpT-}S`NdEKTv%UG9EC%t z(L3DTA1sdg<-M%;hw4Zuj%0mz+TO|^I?b^#F(z$rhkd6bgHs$H4_qEqEzM(0F48Tk z2hYs#j=~e!kVpF@eezO!_WiXMUV%%Of9TC2M~AL*35n8*{3zww*^!|0Dytx0i}g&h zPPqIG`j|g@TilfVEKtv7aZ`D|+WD;XO3MEJfUcjCK@5n@o0X)|n+NZn+Of%O1$x{- z%DOd6Ts<ADN<t01o?&2PNQ_s3R6iDTovU?6owPFd962=w`ya~}Y?~dHA6H~CkO#dw zL7vO(G(uM=GeKr70Cmybtvi2a(8_F~!2;vrqcX4FqPYBhc2Oz;^=%5;(6e`YD#gWN z-LCTIG`oNG@^qj!C~(Jk<d_aIp#H!Q)jJdg{dKY5&>e&>4K*_x)*<5Hztw{{Cx@yT zWVx?1GXxeriyME_+%onig0SIAb*CW!x#zmx1Tsxjk5S6EMh>#BV4J!Y4_SP<qFYb8 zxRJ@7CYfi+QR<EKTWg8&k0Hj4LmqQMX9uHi$<~c2nl)0t=vb7{`MWRFTI^=ZFfQ(( zA=Rw8>zKaMpjot`g_PuOsB~Ji1=4NsoD)6pH!a}k4<%~*y3eZrk9@lgb$JJ$ZB6xC zQ2o<y?QhDIyXVN_JK2bT{dy?K9`-%BKys(iAGXm<IO5Ls@OKH!QuuvJxigvn70G1` zJ<9IXT2sm3;b_M3Ev{J1^HxUmv1Q_9%u3q=XTALC8|QgBb0^KNo~TdgOz-)h7YF=2 z=Rw(`y0tbzyPd09zznRsz2)*Cjy-H9x<FFC*41if04nh!0gh%E_P!XSx3lo!u&&Vf z-}8%!pxMhd+|CSny|i!Z!+Qr=H9?0egO*85ije9XI_`n19~!qX?YN!lY&tJNhs&b# z{45yX=mZbQ)wuEJif3N+JD**S;qtsH>)oa}3$#A#^|Q4IxF;sT`(F<fCITwec)Bto zJ8ziwZPv}{AVT(PgCtYXROw0nC`75NIPw#EPC4S1IA$Gex}L2=RmL_Z^KeN1h)s^= z)5paBn~9vZp4ef(GhN2XS%_qDNrA55%W8`0hC^Xof>z8-#{VcGySvx3E-TmnoF~M0 zu8jt4Gh4V_tZ2Pa%NxZ}>LLbXp^>{=rp{zR=OH8SjY!uM9?3Xdp2}7@H{M`kd(Wf* zF~%Np2d2I6*=XxLuLNVvfgI-&$Fy<~?QdVtxy@8^t?M2hfq}NRtKB@?^R+vAS-<Xj zMJXo;%&=`5HbOkT(G3$}GjuwhY&mk$ejDi&FIhJ<$(<N3EBr7oU%p7lFDrBHjAyk& zWH7R_rZTyPg3QVb-Ip)dx8g{4Kqi2cptU)aa6aI8R(#IK>iF+$T3Q-NOu5I{Ve15< z5OAZ?<&(W75FB0WS0Q7Umk&a(_Rp@prn}9{d$QX~@nu+(;{z=hH+MZ6A^qpipX4AP zih-k}BU!&A7Fk~pd;13_o}uOC<$|WamRDD6ZcuECrT5>yeS2{*{r)Q@X-7xL6|Y5# zH-}?mV{%zq-;*T$j<!N@33tDJIp#t{mZQ;Z16!KHf1oh-FI%R5@?*=nQ!$?Ne*?A> z^0NYNS^vD*_2I*Zt5xwv*v7Z~=;&zcD*PKaZj{#TKQu6SFOpMKL}G?T>^$Fa(H2GX z14r0A@YDw5D4LcX0CE~VttH7kT9*6@cTS>2LAq>YWF&V=^MjD=`BsItUY%+}Vn&8Q z4^+<o<P?<^gzgtlV3oc#j`gLL^05ARZu++?r%7%(V)HOlKIk%>-u$=!>3*2yQCVKz zQYeMo<WEOKEiElx+7>4NjEoExv8|sI=9&*4NCcdT`9@dG2QqIzdi03JT&B6qduOf_ z8stCy>lJW$V#Y9RPAv`f_4Oc+W~VZJdU{&@_U$)y==$lptjRNHck9KW_xV@Wi}~^y zMc=4&Jz8M?jq|>nf_X!{H-9Ot122nmp{nsha4S3v<klk7Am{Dv?WK*EQaEx3#3(A6 zJtkA^XiqP%7D~LQ#%!r*$mcb371;MMzb;Mzx)>wel*cVYI@1jS=Y!Oh&u)Yj8*Gjj zo9?+T&*0&3p5%#4tyb?D1zOYnVBN@-cBy`5&vgc2p<=`v&yw=&S@$4D1sxVy<j6B! zwMvH%pGxqYAtEjUt!I<x1AiYH9<wsXt=5^f9CjAYpGTu>nQ;tDx{kXk5uBAR%Ko!C zWkwV!2+ldVi-VDyc?NQO<U=>o<<8bP59me6R+6@RIau*R6}eg?=MpWx>qwU3-Fz_` zTtKq<S)X`;t%F>f{FU0BWt>7w3A%FE1I3-jD>;mM1=Xpm01MT5v@NHuf?R?%9+?`f zj8lO)*p~B-;@99ZEGdbw05Rq)$OXRKSG{;dr|gh-Ac&@UV}5TUOMl8S-rJ@^I?kQ$ z?|!(dw%f@B8gy>gKq6s*6mIUnr)u+7SeinXvVcm7s)!Tn8YK~xiNj%-Vkk+$PCc%C zf6r?SQB_%)?fg(v6NF=UEX$welYR<0LvB~Qqjq!50}l1?9MKueb`1;!t$+Ejo1+&; zD<&rPoFRcAdntI5;THQv^MYy`a^zG(of$>7J^OmT%xZA%MBGAVVsAFwPEXCgZl4=i z8(-s&69Sj82jUan+-H9C$>Sq4q7^%~XwS3L@EIFVFM^(qZV_K?y+?qZI%%38-bsRI zu1BJ};vQDy#iq!dX{8Q%rmr6!d(o51Uw9XWbt<EFJ|KHMQyO&P7`v>$$ATMSmkIk? zT@C9-p>MJ(gms!n?ou*W6G@Td`LBem`DcK_1FR{+r@B0WyRSAmgEEpac16<3S-ag< zK+7>-t<DWW1E&2h{kxD5emtylG{cCJVOtXky-=k4bMQ@dN!8a^N^Qcjl$#3SJoB6C z9Va`kie}ie2XBVTSza2VWFDz01ul0bCAITx=NvbiF5mhU$sD+#05S%_EIMXv9V8-k z>aD)MzMqeSAV;d$q)S1ky%xk}L%5d9ZwAIDCwUP9AO)tbjH2K5S>@yV8g$sUt9<N< zS)BVm>im5MqdE<BI9~|}wYcI$Q#6eDtPPItx-2`@ZON!Ll1E%4BgB<q&=Rl6jZOG{ zUxZB<ngOQ^wT(?Mz#z(X>sAj_DdP0qJ8Hf7_t|hC5=p9%A-76-Hz_hW{TY))(8lQP zF&3_r4vs-WjUCS5;Ylh;8B&rwBm-wt^-2k~#1aR$koiK-#CF8Pqjfnp5CJ{29MEdi z{)H~mh@00q@mWu+3)@V9-wBex8V%h}m=`};fW~1?l0Km_HD{~uuJ<uo7bf}g!XqAl z-2X`+XZ6qNZNS&%CH$w36Xo8$w1^mxwp%92X7Os{05K$$Pd}tk0ML$>leKcs6;e8| z@Yr({#NsP!0DfJlx@faNa?JneH^Y`UZY68@UPUY<1iNDI({Ay`#69A;eVd4pQVvIs z3ZCFD=5222MYrT~^-Xsq=vWh#HS2uU0X2r6e&`7DcHTC%5SqOhYq7Ermiv*j3KzEU zySyw3I&TkgzKTh5o|8YUx<dHvKF_YNqUZNU$F#)WzirN3nK1?>~_1bg1eD8yM3 zAeX6$$z0(1cEI^jRJG#`7t&Nt_**kxD2$xKS6L4R5^K)))63YpF;VUF_+1K5vN1#C zHO!y+3ZNIXX97CeKY!|H?rJ`MtlFsq>JI)~V2feF@z3!6DZfkx1O!Z1IR_n%88S05 z4c->mk-0=jJY06p=sIIJKnPQ3W~%j3czK)%KijR_k3QeK^1}#2-2<-_JF{jtF_#k^ zSBpbYomZvn^jXK;w-EQlBM1mvb#)o)6A}`Xtr*;nwv1P_`tkTs*rNW+sOw_|G+ZKw z6-|q@Imi|ronPdBBz5Tcy0~cRS|~gWBhBQ9`q<hz4RVDkY`ILN1P8`911LX#`4Y9u zFADL;yCdoScSdp)t4KAZHG-nIe(a~?#2`tN1DB{}9QE($1MI8UQ<WOGy+jyPcyLe@ zY%-BDYqp3btvGWcvL>qb2=2{<k5a;r2qnllM?Q@~1Ob5(o#u~P>B(v4jU5Z4C6{bR z?aVawj@M#L!WIprlF7-*dp7!)J>0{v6!i%#zpTKsms|suG>g-YrS-pH=+)I#+b>6v zUtFF~l$ZhAp}+xT@vmM8__DZ8U3tOjNA@9&3}Hp@XjObtJ`619+_~09i$DB(C@<*u zNjx-8Xmc$T)LoD*_?3jA_^wjg!2?DH25&iV9hC15Dt~Lsgu`WF`&?fBi%~r9J=nHY z`tRMlw?<D*L$i+YwIR!}z(2`Ve&ElUBWwB9Es%d0#@-g3mLPxmdot`Eq+*cm<<;I& zrw-90Ik#oVQF~8eAs;Q}63iN}y1F_t8Yi}@jGBu2U5sSKw5R!_-YmHQDN$2$Je<ga z0<x^!q9RA2mnF1yb(3elHT!RoCl5V=$y&<g-jVAfg!%`UP_7fnao&^{#o>~$XNVS* zv=>i%v{Qea>F=v$;)lD1zrE+(1Z6xNIX&!|ManR+u(V0gSg2b!o*ebc3z&k`WvKvO z;*!j`k4)y-nXiwK?E<At5?7uQo~i#3RY*9xi#(C7w@F+gR!s5o+rYL|g33jjU1l>x z#?1(un3(vvuoM&I3WFZ7sCH95wekzDZ_DQ7;J^;T`>v=SY)+xWN~jbOuGVq{3^4XD zoxfQxAUy)>GWT<ql=U^Ggq2Yf;@)xS$g&5$!sd06&RmzOq5`=>{%SMIbNugKFxII) zYtJ^UCVJh<o6_k!8a%@g>TpUg{DUd|hdEKtbNZp%k(Rq;e_zD;6yfnF#nnC&T3N$& z)?rH(KILZ`3KY9>rF55+Uk{4++(Hc3CZ(RhS5}O)Han>RYO0f3C;XPfUc*|LQ*P;9 zy7e07Y_-IdZ9zINjAh9o_{TRU&t!YW>-i<4Ba^!xBwZ|OMv>0jiwQA0b+an{_W+A? zcxr0u^Jgx9;r4dEVFGGd5o>KStuEh1A$PVWw9VH|P~7K!d|iYkB_-A7A&Vnd9-zjh zWPq4O$$;WN8yg$T8aa7+`F%G%rLO+p{BXja^)n#PD*?|T9K9}8QVISI-@a))ny{$x z=zd+*JF*p)X!F|?P6&*}o^{_ncMp&&oM}fyw7!UGfA{HAw01(-#XG|Z8YMl@8mhn! zB!~00a8^<h6^x36L#2IoTSoiwM6Y2BrPBN55^r-!Gbqec7CbQ9k!ccX`2KwhbBZ1` z_x#u9>%vA#PX6`FmuA=<v(g%QF%A`5xJ2ovlB(I?H6XQS374Qq89C(U=FTYLvDO$* zK<8)|<mX3>9EJ%DoVl_UeBHbzp7fm`)x5S=@UcYR`!7rWCQ+1iz2r3&BLVQ9O1G~& z+j9mB6BEAwy7P_apqp$fZs-4dS#)y*w&EeX?_WDBG=Bn5l&}ksqL_JIC1Yk`V9=3{ zq`7HSh2YQMOn&z+R&7aC>oo^gAZWpTU~Xz!lu=@_zpfM3c4PAo3~K;Xz#?V9@KoR3 zuVXcSezhM<8h!R|mIpkUNS3gJOH=5L92WA((oj2p4?=~=m<1tQ!r#BA15bT!31y%> zWI04#kuol|v%p%n8^{bl^7oRBvRiCF?JC-oG}Bs4_HkuXa68>N>+9>=+jG69$`zk+ zy`?oZQvbd+WPnoK{jo!OVe{qwT@4m$3k2>;#U=?cv5%*0l=vb7_PpZHvfYGxO=cVO z-kOXk2KY<eBZq4^5`cb$j|UrX{$|n!+V+GiFjDtA8s_aSp1%nQ<pV<fyA|c-*Mw*m zCt%mLW?wgxmM6x>`uqAGFhh(R+kS!#dH}Y>`K{Js$Zsz;-qI3bUfzYVL+e?Z9RzOe zETU*r1EYYVFDWs6GJ)RkEpNy{lRSF-I4T{fe7?W$1{UE-3b#;@G|Ng!X<PR#j|a60 ziFGwKOfAZOuAcRkA&H0h@GIFT`MM1?4Gj&MhTsJv&`_9;1Z(=PxrTwVf8A^!I}8sG z2b;f1Ayum8dDlOolk*k3wV48H46IN0=~DtiLcq{*8jnDtuV25mjU8s!)n$mc@@x`G zHR2VnpOusdT~7rUZoxF>aRE{qVBlI7sUTez@(8z@>roG};f=SiN1&E!WHB!_%q$US zAgyDRGbS87HEjYjM`WX`z&e6fdTszxwX9M>j%^+nz%B-y9>?~$99J<n+d-dxeib(J zYVh<1b~oUgF?8@WHMg#&AtxsUj8RJ~)%f&H^K(<v^p7Q4PoDfT5-{R?#ku@91Tjxg z_)jMOs;yzR?}&)7XPOPH`?`HlLOCZWuxDqKp!#>a%?RO*uM&rW^uq4?yLl_3oYR3M zrH&j5eIQ}IJ~0P!Qz`G?larG_bcR$1tYI9CY-{AWxmVVP@|a#48yZ%*qn=d!5vb=` zKFUECslYtz-D)m@zkGhYGtqSlsx6P_gP>{Q2bqb}5s1=v)zy-)8uMpnApHjL!y@o> z#V#x02<|<%zP+6qjTl(E_vUI<b$EC<@k*1Kc64Hbhl?vxw2M9CNq!}g0J2Yc`7J-w zcPUQ1r>Dn<f}&h%4YNUII1ytv5mU6uu`yTgSM_T8ZJ$LvhB6Qsti0m@97je%ak{Sb zr>d%|od1-6DJX#8C*E_Kt+~g^Y31PXaH<Znp-zvB)FI6yy1W_rom?tN{owex*Kk7l zWkM%S+B6RjPb)0Bn@d1YSomroltS-RQf#iwiZHBmQ-S??)$|?vgxKZ2?QXa-Y6oI{ z5*HT-5cS@@8--A5uSe@Li>K<)0FU)y?$acRUB<c9m6hA6YTQ6W&P_Wv#<2_kEh9m5 z+Fh>8RJ*TX;5RePguia`^Yb5X{mJuaC@rNBwMuM!IdbccLD2E6_qFAL7qk*uCPHcd z@+Axf_cn*E+_1*x9iN>Qe5I>^`ZtRd7l~MzXPG4t$wWj%zy|JXT?T%BbaP!F*ii=s zp{Kr1N(G%l40CyniN9up5y{dK2z6|LaT$6Yu+oXzfO9Vi;j4#)=}$5wLUb<rpVTP_ zT3<p=wzs#33z^vy6fCX>Qb6T}%9tgv1OorKhcd1Y>RMY+@F1gGOG86(gFGwMwc+#U zWgsWOAX+T$qNhZ+o2GsG#3ZHlmr@GKy1ahID(zKwvKW(CS5~Hz5$9ezOUYKEWHs3U z!U5L`Xuz|1a+2XJCLDQrbM4;7=BB<4mK45|FNi}7B^221LyS2*<QyW`&qngKpfWy` zS1nqnZPLR&b=&56)d8RTu%=7}=yV9eKL~JkV0eR*aG*aF4G7^0w_NleO~hC%WYZ_! zr_5zu^B0TCD4~dG9lo!0fDKO&?J3&i=i>t)HpJ{9*TeoJ{n4#EW?2~-GwpU0G;l>! zUV>YVoV0X00E3!02*)?A$gZ9qY992-mTxZqTHP%GX^kH1)BxcQaN!fg37xtI24CxH z%%>E(J}IH@eJ(B4$}CZz1Ykad>tU{p6QTevOSrj-R%$(d%*w>H2#)0^Wz<jAM-y3Q zpL28H43zLVlEWwH@VrhpeD9bwE>o-%fvlFfJAerfe0T!>{y)$F3_9KNEq^<BYDB3g zQ)@m$nq}DX?&ljsCnTXWuZFP!0Mw)s$|_>t_5^4RWBxV&EeIYC85tSS2B5&X4gfxz z6jb-tty}-05a56@&6@usqHrb919IZi51=_V2VK^ILhI}6N3EZMs15)w24F)41NH8D z7lTF(@MoEU#7H*UF?eI+3{**j4j+LLL$Klzprb<t6h$9+_IBgX;q`a~QjNAJ7lEg? zCx)fwtSl_cV~1P>gQq`LB+V?0jl02k*OW9QSpIHo)VQq>D+K^P0UFn>q+B2JH!CVC zIy*W(lZDv>AohD35dkpUk^uY*^r%4*z%do+wK^eSZ-BZ2pn#(8dzcG%jT|ye1O0XV z$Q+nJ41F=_NQ-*kRIs6-F32;icjaCFCMdWD{H+W|Y(mB=u6676za(Idz++eNn<LG# z$A(X^wzjtJS8OsfGlLGfB%lFYQ7JAi?)j%bRj8y&)n(YgdFb9ZoXF$+n3m>R{j7^b zO-*eVhY{Og-@L{ewpPa$QUwetptGNgNZh|~E1Jf~$G4A0yMv|Py$ewCuBfO8OVf$G zuyAQj&6LyqJd)>L3h%=Zo3yTX{b4l?0N22615g+IF5j%-o!{Bhv7z2#LR~`YVfAC{ zDH>7V<1baLk6uY+ybIcRYVwe;CK#yEqOqRN1?n3f=8fzIsMS>=nd-|eWBV-E6^G_- z&Drx2Td$R8^O;u^)5JklW4rTm0+&!I-O~J3`Ij~M*LN^W2Ca6}B)7cmJlTGm_-weH zr52^8rh3(~%0}wlj`CZp3j|UFY7`dLq!@XGjE=tqVRSBo=AIsCrE6X`Qarr6N*4y# zdAft9o*tYY;g~9^9i?e9aEjf#w?{9hqJTP#X+`q#@;;DE4$EepNs4%I*~ocd9;k@9 z^6*pKZ02Xw_y9KO77q{XZNeZ7E-E5|g>*+eWBQXG#c~-Gq@BADTOsk<ng5U(@YhX8 zXQ-<S64U`j4Z>ta#l-NCy-z+r+Cp5GLg@svx=XDU;}_;q&0IE~y1L#G9*uKftNRNA zdyp;=;kj%KGV({Y#NdZwx@Z5K<_k}ZkMIBaxJL?~pa;SSLak|b!jebUYTPaSAFhsD z7c(zjrqK(DgN5+ay8?-zx2=%m<o@X$G!-;MZG&uo<6uf|-d*EAW?SL<9GW!<V+~1} zelC*2ZGO3&hnbdDZQNg}*v4<~6xKI1bUzZ3%Rx)E*o%ENd+7SNTZy`a`d)PJ)zq`$ zdU-+4_40O0B7)H2GL0F)vX;I+(l`ENWhnzy^!7<({2ziQ4UF8jZYl@(E1?dRf`Wp4 zea{BxVy{YU66s0KQobr1mXF+pKgsv-p%x#6)enx2rUb}w|K`-%WEZB3WiNkXv9-RA zT=Cu`fKTAdWl=;0^be(6{V3Mv&R6T*`Nh-|Z(dkb)cR4$0WXRI95cW(5CC7jczN|w zGwI=zI67+@vIyOWq^c5?qY!H7Ak0ieOe`fWEz18q$Z6bPL|B-Wu!PQbW&hj9e?u4) z-4hgiW$Aq+|H}O0r&v|(!IoBUb;hcT#Amg{6L9=+_Go=~5Hph*O*AogIi!#MiJy{w zqvDdwM%Q2=@;`q*@m?*g9QAPB>hF>ChPk+C|KG&cwzok{2tJ#dH>>rUlip8BZLYlt z9Nnj!5BwESo+16Vnp#@W>EuIsD~Ze<8JBzVvN7_#QQ}}t!9E}z5PIj7DzmPV^^sr? z|H4w)BAHYviLIR-dVl{Dh1qFmF+pk?li(FhQ)euxSN}#Th&ultWkp`v!f)R|d64U6 zo_}fvli(%18WyFYmX}o391qBwul@bo;LAN$&wn1&ZvDX7R3=1ROsq{B*})8e>i4q} zfUvP;LHPl`SG9s~H#k3N#`wth`GB(@{#;~oa4<0~W${mHo@W8{PjVVes=BBsCMtkM z3FX<gwq|c&V36Elw}1J<^u<b2uPT1Hj8%|nY+PJwN{XJI-pqD46?}pUatKaoTK8?; z+KPLh3a;||xkLT#x*^Q|Zf~!oqI;J-q(JpAhJ80ABqS^>EKfZF08kl$PrZ5GkdOC8 zM+m^gHp<XuZJ)*AnRppNQB0bdWO!$CQ4ha_YL(33NnhGs;HRVprN>^~gY1JOhnp~# zgM-5_V5KRh9bCQ!yBed-8z%BD>Akt@!SKBL`6XkPe~Ja{;Hi#z^X{(5PGGeR$O<IF z<{JVaJC<aZmK8C)R~{gAA>43s^9*PGVipVF?t|*bw{+EdT3VOy92vlBH}G4;*&g10 zFwjwDjMz|DS5GnkH*46V1cihe+*Tff+d2&^yn_=H5yBqeQjf85nrJz;2P5zZ7IQuf z7q%CIM2a3ox1yfP9lglImoe;ILZ`H>DT<m;fiv6dBg6I}yvG$%)`4_cc=ht-H~)u9 z->C*R6!d)r3kyq26Z-6bP~TYG(FW%6WPw<nb|BqoFvVpLe<|jus!`T;5w8%Qme%aU zrmh!{8hUa-q9uDcnknnI>&?u_SY}dul4n-y^%&-^<FPmi?APd!;7W(bIcVRuonvos z+49+wVp)GijZ4<}?K^MPA11VM2n*6!JX{fBv)q}frm@n)#FXxUl!Zmm#i4Qpxs9zY zn}iFN<Na4t2OZ4L8S+8qur%3*+Nh|gNnjgu7Jtfec5<4jgSkI>62HG0Z@G&-M4hh9 zMw}CPAW+EcDJCwS$8bO31Q`MH376M4E2k1i*$vkl1eP>v2urfhO5srdU2G}!GJ@gU zy{^i#mpgOy1rKQz^t%T1CrCJ7&e!`LUtXN+5cnZ+b6-e=$q4LhY)JW^>{blO)w(XJ zr6>|cuwk=?ILJ`cmo3p~$?UDBJLft!&C^{#;!Bv&R^EDVeywv=<)WqVn~Q5}rFjHf z6MbAgw8n$Xws&@cep;AGe<_ja)Yac9{`8)tU767WL-~k13h}e5YDv&v!9SG1*w`3y z2@2+Fy|$IG>k^NQ@l16{T?bI;sCyrTE!6aX7@qpDc(4q}p!+~Fkjg{{cAXxpI~+HK z!{JY(m{A=IJZB^lv4LE-Z)=Dt#2<l(gHfo80t>krb$tA%q|itq0ZB<l^OcpAW^29h z09Ae9Uxy{~mc|~rP@m_%+NCU3y7eYNhcpOWAJ$<tV>qkbp046lR-_2e1JUxLzM~}X zXTM#rFK|ThNzaFF<W_V*DOt&$^5_siu_LB|w{htleec=~6h6V>c*a0X478n6rhN5o z?9{Xf6ggXU_joFY-<T)4Cq{Gci=LWK2q+yQPkQX6`uA+gv9y`czXFseE79y*LkI}l zgm4(bS+(F&-21Pr&u?02tLlx0Ug9_)D;5M}!!wNXzLOPNkyR=p1kOmrZn!ceLE$O9 zBh%9)f;lwg5p%m;Nt~v?oKE|l14H8p{F*gX48N=V2mtAu#4!*6)44Gf`WS=`_4M!u z5%lIh*jai9?DouW!0iNhE>=@c(nnsh1P?Zqc$7}J^iEx90;iO~!E1X--#ajsAFDu1 z;I8Z*s$#ky5A?{T&IF3wxN|k{%>QgPMNaRkvpAflwj!Ovto!jJzP_I33G!5dG$WAJ zi?A`I8mH6|Hml)Ea89~!71sls#BtwUq5E^MW7{WAhyU$JZZH;tGq8tIqN}UR=kgRq zb@b&JjqXf<2A!^a;Gh^L{!ONRIay|96ctj*%Sj&b8lUW~+uCRL8=vAVfn_7v<+oEG zF&WREP*3;wR$&40VV<}4FQ`6}rdx+KGLR74!Z(Nzu_PSjmD}3#o5*>H4->v8KB{3! zv4%0jYS@F=Fnpu?Y-b05qLw@7CF04>5#X;y_eTDWWCvyrUR^T#XFOnig8WMgOYO&i zGfQ(d15J05j)F)l@pGMe7d9)yQv_oRtgU_pP6(vT$U<8?xG9E~{;h(DjU~lG-Hb5g zCOo1>OYW5G9Z5=x;%K`BW5j!6K?kC;J6;Ox;ePfM{;i5RLR_8p&~$QEsjxzkj`t46 zcu#Wq4jw*LjX_xXb7Zk%>3FaOZ66$Xu+R&#K%t%aG#bg3Fyq8=4vME_dAa29M(N;6 zNR9~fz0$|rt-6fm(LP;`G#;U4u3H?Lc2<%BcTkHh+<Pa#ko++%3@?O&i2C867?79R z>11SZ5Q`C!Da)T__`x^_JxK6UQmKk~C7^cU7XzBJRb58CmqU^%q0CoF>CG<jx~x=8 zTbs(uApD+Whfh)zA|KUt_rz7IBIT(}e!q)=EZ{D>U#F=-{BoG@RW{n2@c|Wwyqjl4 zYls*%5m&4dU(62goF(^tj@`n=?f&01D5^n`jE?6wYI3Q==DX1N{H~W9V?`hk?`v+( zRzn&ag6&50nS$XxKU}?U=BFe5cOT$xUmp><OW?obQCNUX<<N6HBRm*Hz%bmBAQU^I ziBh2uRLs1PAfR1~(q@1KIy!C&UU@6{VDNWui_qqxm%p;VUFxNU;IT8C3qXfIEI-L0 zG$O*iV=`CkEnN6+oX;o<JxTn5k^+rJOG`@+1u2^8#bg(gBG$H4c7nI+L8wBOTmrVg z+!4n-ge69euYJQ8d--%%T`!y=rf?TKHMgV<=0R5r9OfENM}Syo?3knv9@l<%s-d~! z{KWKh5$Wn$1-SI}%c?Uz$NAm(91G^>kQPT#=R7F-CaYFP?Fp(cT+}w6*Ybl*^h)aY zHW;{D)k8%=l{+7J{wgIx)n|HilnYVR`&>9o(J57{F(=&zoOH@W)r8P}knRXA>M8Wv znhZHh)h`B<;nmR4C}7EAZDz@Ot$~u3lG-Iyxr1R%X*5uv4{iae9~LQmJ?`TA8*87} zWQORt`cB?*2&yv)j4zOw85u>EmSghnl&#t}Z-5{$CFxhew1$?apT~P#<sOATFPviM zQt|~?q74k_I_B1FT(nbnvG#re&xeeyb}yN&Xe|2I?VzfN`X9oDJqQGyevYla{u<5? z`kU1Ufp;c?Cm*I^6EC<F;B{9sXmPCO+1l*9eWB;>em6dxcm+y@ouVil96}-X-k=yu zN=u9|6sOI>KgY%@hj4ts0`{4GTqS<2xvdRvk?q}X`XOXZLhn5H*ZTT8x1+L*%8SX` zWrN@?vr2=^W9r%k-a<CJ(?a&bLVex@1J$|5Sll{M1r`|^&GGv~_=`q`#NgVhNRPr- z7gKtH5m>GTWlho(PJ)|V>Q8z*?><mVyq6*E{d(l<<3)kc$`|;9pa*aYMV3448Lg~7 zw`txw+9TTcpS%Rf&dtNaPk4_XyBo*%De2A6$5S9Q;}DEuDB!&LqOy<K>Gt}@Mo)LQ zVpzm()s1B<0#NRYZDokZO^RSd>PI5$GtU+OA3yN`>Slc`123<zA_Bg8|84A42ES&3 OrJ?#nr9|oZoBt0Ot1s*T literal 0 HcmV?d00001 diff --git a/docs/img/ontology_integration.png b/docs/img/ontology_integration.png new file mode 100644 index 0000000000000000000000000000000000000000..e0fa51b91489695262df1ddb24bb8531a1f488ce GIT binary patch literal 6323 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 EAM$q<*#H0l literal 0 HcmV?d00001 diff --git a/docs/img/ontology_link.png b/docs/img/ontology_link.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b96f7ab6db59df34183662e4abf2381584ba61 GIT binary patch literal 13408 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 literal 0 HcmV?d00001 diff --git a/docs/img/sparql.png b/docs/img/sparql.png new file mode 100644 index 0000000000000000000000000000000000000000..b77f36259929cbfe95523cb9984619c9f19ef133 GIT binary patch literal 119634 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%0AeRif7)!wh;9?SuoZwEwWK;1ez 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%0A~X&eyn- z!7r+^#ZKK0W>I-Ij8FSup382V(kWJs<jGtJN@9qgJpW#mGM{L<xzf;&MP+IHx&t}3 z+<qHlH#}OMveBf^vz@c!eCqxEC4i85pTLAgtT+tWfxJi&966k=U1z20ElC_WG%*)Y zl<Yns!U$H})`B+a_JNDy9VI7nvNmb$1uurTzxzzEA9AXe8#`>Z&jgAY3{B6ssENE0 zX)kKQ8`hNo$;7*0REFGCBN5O@R%3Sv(O8Y%<;60I$;*m>(C4`&+|`7bmN!`CEkH!a z^3zHTEQ?i}EGkftgvDnJdKJm15^p`c3br~)_88op&)kLG*58eG$`8v@J^d<vmVJN| zS6mtnv7WLJ@Yd$?#fhjE7GYb^=6b9J1J5WbYT#WO{YcuG0i=gNJcOklEJF6x6fV#M z^Q?7v2HqR4dSljnYn)AN(Q2Zmg;MF-$LmtpemXSVkLfh)vn4C(WSB95CJlU=E%G6* z(>dTci{)EH1|E+OqU`YnGqBeG3d?;bC#R8@hr7c$sRwgFxH%ytWVXz3J}PsCSX#nj zG3cws<)K7%q)%+CjE>5alFoeixq;BcvK_L)^X1ud(-e|(cvjJ94STsjj-Q>+(W^I2 z2}Q;1cx>6mh+6Hdnui5p@tRVa(F)EQIdRC3$$@<wi@J9BW>BTMGMkay!gfDHX6Y_j z_VU5>wKlw_!4!8HeWm*PqlD4RTth84-E;&tn)lx6Z+D?x{$ou%ClO=m1t9Ye&Mr!b zg2faHxJGIQGUzTb>(%=8j0epzhryt1NTA=QBXf?{S3X)|+6hj{aZZoE_L8r%7?;jC z&z&N^9-ic<-p{0La|-|)m4S-+=}umFYwOq~B%}tL6~p(ge46kZKGcK!mhseAL-Eo* z+izy+FOfUvw<AE5%^EdLrZL@p{le!DXC7>V%tydt=pzw}JcUt_T)&gzm+!-LIu=j# z9lw=^n`Av*AH2?wsdeku-unWm2b*0vrl*%lh9ay;BXtdz(J$$7MR=f`it}g+n2WS; zb99ci4D`T+>HzEdhBqq|>AIcNqBQcx{W6h2y&;wPR5BJ;{flfq*Uq|h?WvsOZydhf zf1;xj>T$rVV8-H~TwzbIkUt{HVK5kwQ2>luWLGq$%2lyS`h3KT`Go}m!&?6{mHATo zW=_73X)jeHWcnG$mnmL6-Wp2o|DrSApnccwgQSX|l37s4M)Y~bg>9&ER7h+rAbwNC zsU!K*rQ;98LjxDVKLB&g`Inb$#=dB=<fFbe4HKkt*Rc8(HAU2@M6{MOD|^pw$`dkY zDeg$Xqj3}5cpzdDWGo*|B&xO;kRPH@>f%?DnG=`%pfRZ?$C*?@H|rlh<|~;|TI{d) zjnd-@7wp2G3O7n_D=N-gG0ZcTOx|zMUS`(+K|9RmK|WUD=LW^&5pit;EP}6I@Q-%A zAdblwR{8GhAkJ(fE1L&Vtx!B;DK*aR7fP?X5usv^*UBB{AWtGFhS7TRU5qZUjPko} zsCq1rZFFcmcqrN+K8|a?d!sVi%<osn4jJhBDQO=VtQ7PK7#)VANUGU;%IE*Aka(IQ zaI0Lhh&KBDta|_5bcxn*+yF9;$EXh#>}2zl`3}ZebI2D;QqJZjkVqhwr{H6Y03&|L znwsVv@o2M+@(-yQwZ40WiCAJV(1&XK2BQ6z1s1Pe%|oQvp3)s+s-io=DaH7gSN6w5 zLPpg&7x7kc=(vHUx!MU3Tfq?Ptb6!)kHTW^x!eRP%SKX5LrPl7{WOz-iD;`VR0xNz zR;C7ijTYSt_rsya*x$b-;8OA)<m8NAGDx8J*z57#=YV3x1^A-`Y_-yrwo*amY3VEB zpv|7EpGz;uv#fVf6Uc?X;<j$g29sep>XlLK|I4I)vB{*3#9QC73uh~(mz4P5PCpMY zDqWQ~yGX~}<}kPS)Dbea_)zt>A_W>*2*G{_+dRmDXp*lniB-8^&|SFh_gI!-V}z_m zafly@LP2_Wr(l;hGB6g^n%*RqfXn^nonpA4N}>gYQpq!+L|L?5ycqBCyU}{CjT@Cv z4&l&-)my1+EkM47c4x*Rsbi#FIKly7o6zAxF0UGLl36v$z0a68FyFLq$V3T2C(e%4 zNsVP%C~`&_`PsB5LY(8ovy;}`ALNwu{x1y7$1tBp>l_bl)CG&Fi>lS>jBBT9ipuSx z2rhpWUyCY6vwcti0_3fpe^QFzF94iFAbPONf&d-u$FP)KCj79QB3OZ3$msHB(ai|L zas2otGOj!)H-@ydM@O$LRie~<g0NrndA(`0|G4Jn(e?9xMx`khX?OgypE!z(*+Pp; zp^>x7E&%WHJ`#VWzi%a|Gpv=xZs(=jK%enc!A*AnA^hZM3aa=GBPUKrJl|PA5yK(+ z%X={wh%&+1h^vd4^(<3hQpIP}A|v;QVll=!Qit!Lrur2c1{<7a1UY_XRm$bv01l!5 zDd1pQ^0`xxGmtq$=d(6ER8191<wkfb%fI+DU(?bg2+lG1EF4zgK|bwzWk+S&0jA_s z_$gURW3S9N8D+CO<2US_o;&3bs4Z$CB<);0thWB`{r2ygrpLv?@55r4NJUE3{kK|_ z>c0$M48Z$ept|~LzB}*mwKI31GY<<$ubCv0jvz3)54BzY=E|H?;VZuRO|pEpW@m%- z<Y?r7WevQ`U0_0&#R6$0o!$aO)ruPW(i1r-J+7hMDAp%$?`Eo9@37GaAyZRRR^nC@ zKYn<_F=9eI3_y06KOhe|+9O24WrCQWuL$@zP1H(}i%eMFlrg<9pRy6B=J2uQ;Vl2o z5c2e>9;<TJJ0xUUU8Q!;Fcb04!3CyvmG^Rddb)L+E$5@5)=Lo^bs)G5NRNm?oFfi- z<NORi=&UU&0cKBzoSe)#QWldDciS!vQC!@>ANHjT2#0}+C6U=#Te`Hg*cvNP<g8(s zr!ClPe)-DALN9$$_m!QpU3Jl%zI#IN-z^#Uvl7*I4H?h5HQ%!e`NlOoDxDwNNLC@U zcT37E%hx}=f~q;xd8D<T+}Bli*)`-SJ|M-ocQs$bIReD2pzgFO#><v&gbbeY-{_vT zK2s18IVwwIl9+VPD`sa`VZN6-D1yY9UVIk4nC>(5!71m*qNa}neH!+bcAMWH6;sXv zKpH@)pS<Z5_W~RnOr_xkuWX$Q08Ojr*Csp~pvZo9(A0wTq`E464KHB&R%9NOibjs= zzJ#0x7+OCan>asN^@MW-Je7t<GErac^jZZ$b{OpnAK8d!`QPdqQwyRGAckS{EE${k zp=wIb(!ZMAzfbyau#ef`yBkR!y`S8X$-4E%mgwTz305cx%~orC_(YT-bN6=(oS`(S zN~!;zQzq|u9E<Stjn-r(q`UoWp~%U<LN)7@q}O@cwp<$s%Z8UM{7vWSz3nfj_0wX> zsi-p<H|2cJ`<3P^3XnDL!ifhyHH6LO8#PFEP@z&roMSU)-JUI-4Td`)po@R&q>Czx zFUhH(X|@+X*Raj#H06oAvfk4Mu7Z0`OLLJxH0eX@g#Po3-2v-(HlVTVzkDQ}Irt4o zb+rKaMEB+p#2dZjB*M$j<F-@P^jb&f==j)f3#j|HN&w)2{$$9gzpUeI#0$rH#s|xP zx)*1p4Kq%D|FLbCj&=jgz@<%PU|Mjc?m|I66K;U?(+37l9x72NO=>M=F9P|4IS><n z5uX9$m{bXqR2K7$xtilQm0Z0zq@vw;ObXj_PdLX1xu*BsWAL1{#-YTLlr(Fvv^bi* z8u!Xieh-uwY6MZmzfs+j!G+XyZOx^YRA3r0ahVp$bRbt^?WHw1)$Gf^yDOVj$PAQJ zAY)Ln-ZpmnFCU|lda4b!Z{!tm(0|_5eG6z3BLShn*DU7LxvV-_h#z6epDk&GilVB~ zR2%@7ME6pIG<LcoNYLU1Sc^;;75NbW1G9Zw(1b)ue}JH`cUjY!@v*1NRVE~48$J6O zFWNSPC;LvEJc=Xx2PjTPkA$@O{kQI5kj36H!_bXNs%Fh?wDgigO3Y@7x^FP$$8QW< zIl1vCWpOZD*<yY7Gn&WtoiM~k@s=_F`cK!hUQ#}-=Fbjb0>xhNFI2`(;}EG|$<D7? zz`WTYd&jWPdcxh~8KD$iCdPY~R-xN>v`HSGvMAY5iimsS5oF~kdbD%(UhIip0UUlj zlpgh5)k66n7TcY)&o|gj7<(^%by*gl*n0}1c>ZP|ILG--!)x$MBex9lt`OobC<_9~ z^Ziv03<C(-`2@5FaOeyts;l@9pm9LJ0Y}xIsx{P@aKPIEo^vc`#Jv>(vcaj!iI=~p zxkGMgIf=U`m)}t4IR6<(Yp@L_@Ru1HQX`QtFJ+>$tOI~7YuE4x^I$ElH)HZ+4Wmd3 zaWH-flm61b0+Fsm%7vO`Q*kgXO3%y%5QuzWLkdO`8QugokJAWmSf?p=M>BHBIg}sJ zS@recb=#oS>tY5*eQb3UK1Q>_F=5o?2_049{8;-Zm@n0{h)}|*soHxLsNbWUAD_Hp zMDK>iFcDA%M8@RgB;83KvxMwuX6o2p!?h}L3!~Ix(xMJuYI*pBLtDJge<a7yM?bAs zd8{^FZLuiQ;&mV;Qd~+!Gs-8@oKSm&M~QcO1-sLiqx^-l(XrA5W5~OyP;+6wR$UVx zd$O}2NdP!cRH!tmYwOcJR!$qRL*h5m1#c5N4Imc@1IlK4@6ypF&LLGqz$Snz-yG`I zr*LmrC9iWQ&`^G~W?<`Ne#^5=r8~v5=KKskG3J=j&fE*wFBis1Ri%%F?lmMnByR!d zel&IL$h=yQ%$ov8-7K<~(tPKQ!?rAV0*US;WzOVrZ4H)GOaUo7I%&YhJAs;4n@<bB zIl<ktF5OKyeFWBEgdVH|%b9l$s|OAoz5Y}euq&V}1LDN!C`5}*czQaH{BNX&HO~*E z>?$L{r*$;c0Gv0Kf5HgL1J2*tP-fL}n&sD%+u;i$0U#SFad~*Ema-Vb4qyY2K1oYQ zKn76=DA0kusf2}}+zqpL1vH8XmIGo7;4qc5xwJgDHk+o8JGqsa?p;=@OPfMNO$x2F zsUWgnhf5j9M<zwTsGSpTHXtABoba15yaNBE=NeLbFoO?zuQj>@*ZHF6{kEZAJDIfA z;O3WWh*CKrF{8on6a{n*M7Oon)oGEFYlxq%0|(@tTlO0L(3cAT7+(OI&EP$kjP>iO z83!HpsTncx%T1jd{gK%7b%4o6x|3UELOy#mapSL$Ta5S$X_p^KOF92@iKvoCM!q{g zoSGI-N`uZbAud>INJfU}>9D4`bVm6D014%`;ujiw;j*+pS3hs_($?!0UECgPBOcD+ zbAye9oIq&f^itHzYy28X3m{v2d|$(}AjecLO+E%V8&)3VHh~vh&KBdw4<BYJJx2wI ze6RcuAj_}-G>yQnYhW>S*wrAvpOGwpvllRGad}R}Tk;pueLFo)W`@EQ3vx?!Bq$jx zgZSB$(cT!;mEqt3=0iCt24UWv>5PeX3fQ~AVmk>H8MlCwD(<q|XVIT64Y_0QX3Bn- zy9R&xsaD4)J2{&CITXx){_e@!-rY@6{||Wn@Y$X2?#WHi56J-7!i(%lxgAsnaHcPw zD#oGH*84QGSjEZ1nJfZ+F*8Q7SQ5GkstDP%Q&PndPGJ^eSZ9$8#C7b~3Z!4Rkq&%5 z_!j5JUjUknj0)xO0ss+V3jm`|7OoiBco^0of64h@z;afSrn7lLO^t>K{1k@XQdGtL zdr!aza5U9ZrasuoX%jMLWqipQ`ys16VTWW|{_m)El%ne7)Knk+e1~dRCE@iqBSWu& za$9Hf-#={}&80;ae}sB9d#m=+@1;oncl<jqa~nAatse)0egJmT$y~b96yDy*Gd4ZF z>6P{0?p5lb-G-0!nRn@RE?)<zbhv)KCu8`Fr(fgqe-ZO*1pXhu9>CcDf#d-c{U6Z% z|9=Re*#BEPsZzECtr`n0FE}+@rx2sjTYf>NcFp2SQxMor(0Ub`I|m2nE$EtElI5-S z{UZV|11G_oa?S;~m?e5(^?Qth^G%%h<KNa7#g<!kSeA}!d~cQLJy{1GoV!MQPskrq z;ouBDzAmU>jSSyg@*MF|Q-JMk`R#CJ<^t6zy*ppGT6Y4?#Bbre*AKat80K1cB~3lL z!(9E9#T?FMNoPi`Yxx;ezW$C3UkjF2iD3k%+rApQnb|~UbXi~;U1hoxfKmt)|EWFV z%O2;~;^_Rd(tFJx-MuIBvnW*s`2JsZ6Zn)GKJl>afb+4H9RgUXLu>6PxbMr}2Qfzb zxq)MtNq=;+0t{mETRko-Uzu_x=;f+LJDpi^eZsBbI*y|!3wy^|H{^F1&~!n&%VdnE zt)5lh2S!*#=<`7j_96ZnOrnrYant7oLapXOi$$z$vq_%cm|@U7p;I|w+jgkndj4fS znMmQ%@X%6rn03Pl$8jz@crC`KW%q%!;a#BE1m}7OmE;E9lLbY7@`<9$BNVB;f&MKQ z`0%n;x#r+Y)7NoK3!P71x_GAj$$6gd497{_y}Vcobj_xpL?yBKy;C;-Rc4n?v#T9~ ztFEh`9nEhwB`cOq4fhtYp{GYrf<lRQE?)*O9CW>bc(+Vm@eydAC7#amy5td0SQ)O1 zl`aQ#)_e~NoUlA@D<99x%E5SW`Q#a_*I2|MWYMqC1o6Hz5>6%MJM2@~nfXE74h<@u zckvQ?0UjP-6#ZI7t$29X2pceBbo#q4Z-TbXY6KN8LxFtWQb*~fOJ-!RFUPUMH<-Ko z*`afGEc*pVp^VilmjH9?rNNsx-v<HPgY&*zaQ$+Bta9r`VC#3xnovE~6V1X^=dfvE zyd>5>bn_fmO>#NnEMMrGe3iN=l1l7imCDzC1C2R^?daOPhRaOMq=!515{PuS(%qYj zSahobpAR&CU)UhDpI`MCQjGS;QtEqa{W%R^?^Pr8iRap{4r+IB7y4i=$xB7E%5~`P zl3G8=JA7HEru)vgM07JV4sec}&BDZ=TNqyU*1I*gE^PUkE|B``7A}1}17uY>_*!DM zRVVPBG3i;l@4S1#z7|WJhn;iywGLmkhlt5&lGkqU>B_>*&r(meS}7(T>cDe!!bXe7 zv##EZN^kM81m9qgS-L!g!F?CNR8C7Xyd#>nxr~Tr8*XVWXY)_}SIS_oEZsK{rI&vO zTI~-u?`*g<pDk4nX07+B-6o)`PYw3(-)m9TL&X*vV$Uf%;=cn*c>G!ke}8aD*W-$v zLK8gc`3CO?+r9Rw<CD39<#`f(zlnaU88PkH(O=*G{<~s)Q~kJ~eXP({rYeMV4jSoN zvQj1yw;<msDya7pKW!+_;3+s5s}=S{khHxi$(=m1o`9lHJc@B3+p|ep5{@z0+>Ck& zjSMAXxBNL%lXsDAvG%cq<dQ|RnjmX@b|E)|<R(C+u)nl=X4|dxteM9w&lI;}lw`)X zr%2OTnz~|ifoLf}VCQ#4iE$wH{XBzhu`lh0r2NtQlW>Y`$QL0dOT09vYQgCQ+I#bt zt5|95=a~mFqIOa4<YR2x-a``<c{<M0F+_f%%fAh?60oLk=$!E%;NYloT<Z?i;x!k{ z*Eve2hZv#Y))46L{E-%xbA)Wk)GY|)zJ&3v@fCr~^LIM!4Z&>Ptvz(d*ms_~VLq=J zppmu~6v<?1L*o(8J0inZx)X{JvM3u7$E9`+y59aQ&dy~J!ONCkdWWh#Vsu&6{7^iL zK~bYbZd~A^w0|$1^Xc_R+d{my-I?HX&)wY<kb*jdniGML?ex0p3yy8MgqJ*2CAF(` zt7QJ;{0kA<$V26v&D$9SV)mOeItTYHqg{VpSuCZ|e@;q)eBpQ@yU@`Z*tI@HUpH8n zWq7VuI(qDGO8V2KiL%wBWFS2iGD@v#zR-~}wA~Pv=>RAgCY1YKHM`kXK*zA&`Fl&5 zAMD{vPcW(<M*Tw@>3B4^0!%7?o`~f@U|cWv#IP=_h*0mo7Q<&-(H*BZD~*2YHE!)- z6q+#0u+jt!2+##VH+EIT*iYY)SS~R<4uox+p}!6-RSmGPw4K}u(h|BtEIgA5Ne3@s zqm7)*qDFTIMP=(vA21GF=yAQvYvMwu94B@4K2f0aJ6rX``p?`Y2?=#4&pJqmCHIXe z^IMb2jh$G9n@m<?CJv4jVBTcB0)P=xPJjSE`~O@uXxLk5{c3Hgf7S;ph4q*mL1Ggs z&}!^3<HgkzP)ZP`j2C-`dF6ti0bFz$lgAFbyp;M`n1BfV_O9Rby~aH*&dW(@G@X!N zj`c?&_jW($Vk+=rd@C1h8|L+LM?TUR0)qrMK3b2C-#hX3XcWr#9XT7QoM^@31$o8J zJq$G7jP8L2`A-jeqYTittZdvXVoie@IDMlVQiYTN?H=tnwkF!q@y|9IBB(hIoU<9w z%euaKm_+?>;hJ}tmJlpZZfJS!3ca^u09gSpKsC{|ZTsFJd94H;D6S0wH^=qku4Ksp zOE{_o*YAI`1}ax^a3*eEzhA9?y#%}@h5xPszij|6|KFt)^8Ywvn(F`mL;nX!aAzH4 z5>)^515gz?+^T>ZoUzDY)0~ao9J~jR{XLlq1oGwrp|TuEU)J>UPnlr^1Fm_aoNL^` z8K(_Q`08(!X^Pgy^>=h=s3xS+e{^7Z;;%F8i^{!b+diIRDlp@mIQW~O%y59m!|S#8 zNlK}ZeFruKztsI1gWEPRDE{@bWM9#++Wp&ZYT^I>odBW7Wz@^~eElv?3Lz9PnBG0? z|Nfi(v;&R0(=?y4Z+DV3gUo$H|Gi`it5B`^**sAV#bd6TkE#(F$F;R3Hqs>ZzdtnI za&aS6Z5f5#y1v(9?I^^LMhn>5CM1jsU9~`w`Ix7r@K@^`#{S{}YGJ6y6&)j=!ZDb8 zO}_U@Y*Nkz1+~lmHLmH@%Y<sNtgLCfVq&~JOMd2?j@^K@=H?ln`m(jboX-<^5IV<p zeF;roK1QM1y+2lbMrtv!M~yRA?yqed$hxAA>6(t??s^BS#vBK@A96g?4V)Aqa3}u| znHb&UU1j*_iG*;+y<8g5rIROJC2p*4!JEe8?@;WZnfqBX#0AMToALMSrTJKdco067 zzeceYGE+oVPU+#7A}h8SRBAp?skkoPPR>3Ze_0LU#Mx>HiF)Ny0RI3HE#V~d0Isx( z>ZWC*`;AN7x*A9Bp0HaZ;&q|A)s?@(EqpabaQ*+mx_sUD3>+j7t$UrnwA0tQk)QLJ zNm!A8W#;`jo0+q@Klp{}RaLfyBH*Z<e0q3~%jkD&+c`(0hMl=eRi)|-sUb9ARkLa9 zc*ePb>AoHnfU<r_iGO$do=H#$g!D~4T!uJ#99<Jj6p-t^I?A3YUZdlA7F{<S$DQ1{ zd*}KYSu@G5t3f^zij0yHB4??8NuU#9d+iC6P(1BYryBS36vkkEZ=D4e0*WWCD?Ts* zhmhe^g`&cvv&1=CHh`oT@$Y`Dg9aHWJy_M9Zr3|Y*rL&I8cnSiv`>{sg(nX6n=k+F z53sePv$@h&e~UjyekFVvcD8XYf`l&)@j>GzUtN!L*NkN>unz1!3K#>4-qY6aY1%SN zvRA*Wu(m2oBGbaZVjK0WvdH##rdIpEkZ0a`b2!kf?o?}T?znBPay;K>h%=~FRpz)$ z_(bx{=Pw0yZB-g*P~yh!O9Loq`>Ma4fP6`IrhPX;-=qwcwO`$UN(<vB2S<QZ?Pb*B z9oy5Kk}WtF7C0A}lYQ{c|9I|Jx|O^f-vr$hru+SIK<zfPXjL1XHM}b$&D78}C~kZ( zy{fxtOKuTjeEe`=_fKu@VNp;9zw^QAZq%`Wv3o|g#HR&)63mCShhFQh&;1L}kBV<B z%3w*gn)vu^=LT9Vmt${7eBN!vPKQ7QM9Fu5M-JQjmCD~|cM#cl@uFqK(p5LWwPBI} z1H&>$Galg;=C3#^^YIJSI%>;Yg$jY){Yo_Y5kI=(4w;yYOXJS=bpOQOe77`;<QUd7 zH}5;iiY{FG(YvxTE4#fKOfT^h(MK2e_6BFR?KU0t_Dd6T{@_tz)+tq%7SiXhU0l3f zq764p+&;;qIW;sLmo0;(19sj|aw!;!?<>6dhPg=HR}Epo9gG6Jeqqqp=4!5%;npTO zP>z5be8lo*+0$3o`*X~c+HfQuI1S+_fuaK?x4f_dyxhV<7spS)46o(&ZJ(fYHKVe= zMcb~9D$hW}r%W>KW=WpW3JG+`YGr$BtAIsjczIOg+k3R4OMyPS{?=v}0$GnxJQ$Rt z>u&ZU<!%l$#=y!(Sc6*Wwver*derOJTbH!U-Uc&2jlQfIo^Ce(e#$Ut{a0lt0lTN5 zbgt%sm0Z0}xSXkWS<qB|$<kY3BZW>-Y=#BGu`_|a7bJ7>DNwvq_}pQdlc?CbkDh_} z=<w{D#*?>(d4o=lKd!cp|G1VyAn%&2W~pD+PQ}pxL~LcJof^LSEW<Zd{7bZXDQ>^l zTUR#+o^)Boyr9u*yGiwdJ|w}%<a_*A&vekv`kcTXA{k$BzSx3#@Ds_fN#-_ea!0K} zFOz7e<}GT^<M`D(XGWw+>RZq3M(&nNS|RuRU$K2f0Cz)S+MtgDuZ{B;lo)F*53wHU zEF{VK&O(67JNhEzYM)FiEIK_kpk+fVr;=91oyTsk(R}Z$!eX(`F_R_c+2wj@i%xqi z_a>pQl}pR+9|8=^GF!dlgp&SgwnO6mcF;e@?HNF+N5bypakcH!i(DGIFD?}`A-Jze ziv>BS#`~;qO6Pmq#CXlXnj9l1CG?ysq1?{}MwY@?rY~3A;<KBKZxe8zNq&f=Pvv%X z_Zy|E*J%%ecP`I^-AAjVB}`dzND<h#qV@LkXP^y<$hSZ%FTMPhILBnGHupx}?KQ5e z)Wa4>&XT7*U8ia<y6+l@8|1?F?L5fU37E)gXm*H-N$RB0!;fI#qs7+;RblK)<)}x$ zNs`a^+GQ_dU%u-XFCirk5Gh2j$1x{LCE`*{<uWa348-l0FW81x*Pv^2q*Pc}sZAPl zlTzcM5H{28>A$Bv#xsSXczm{94ww;Q#UZr$p1pTA0Il~uv%TNm^z#aji&W?2T*IDd z;zyFV`mvH&1I%8|RXgCPcL*-UN(a_;QM~Ljiy1HNSqq59pIvwJEc$INU#eCR{xJDH z{m+@+T7lx`1r{~%P;|~?;@r)Bbm}NL{3_^ApC7C8!#f)wttO$`-62?2h<gT@u1{w% z<eKQ{>1-nVUxhp@Aas4gn^$h*8hY6hUqJ8fvglcmV`XF(nXnd27U>I*iJgrSzj~>d zEPH;+KXz0Y*;qB3*!{6CO!nNz1(u78t(Xf}Od4rNC^$N1xLmuAl6`}{C!oI;3&ct5 zQIXTGS}G_+deQW<M3<^zg`4Lk?=NHIEM)Sd<b5{*Gd%c-U$LjlzOZ$9u*<QKo`(2- zQsgD|(5~Q<RJjS|@~aUKr#ssBtkk%#iY`PIf=dN2)bfQcFe5R47M_|qJl1{ya4-yB zYGI)kPXmGp3?K5k`8{nQz#mfkrlIw%*4m|I8T;c44QTH*bfMzUaI4ioBaQQJ^DYY= zNPal0CoavY0!>YlRom*?RyF1#Sa4GLyv>hMb%}RvIfrKs-}(!i@5rR=2`2xv=|QWE zC+6DYkVFoSHgY#jooHB!snZSeV?1-urz3v?Wi8=2ytSK>TNzuip8k%I>W}fCKs0^M ze}q7@x=+m0p7ln`=HBj$TQMUF>IbUq^hZ)H)wsKgR2|Z>1=jOl_NjRjMgr#<p?7-N zq8~sbHOY&VNEaawi2~d+UJN<e)`50Bb5$ya2h4b(*H7qJo(k<2WU2k-8WEHMrp<6X zV$gVQ1lwxZ6^A7=zxlG;t=yQ`JFK={PmLWvzn40}@3@Z`)e$hS5WTjPILbERo1iE9 zf1C$CE!S-*Y)XtvF*_CP^jgX}PbCsyIrh7@Ku11-TRD#(vrh*h#P1`F@_cM8&2I~s zxqR8URm%3^lUY|EP;|oadjGkSS1~_X`vN0|`q!WsadJo<OGc2E)ZJ3}F?hss;0^%^ zSoIyHx{A|`lUuz`qNq^fAw!(zk6kq<AO1sUg5-(JZ?3ky<qbbIo8Wvb-ctEcJSS|Y zlZC)XD?^goTz?Ygjs+~mC>}(G4d{N837M7*rhX$R_-7<4!%HccC&WS=Ba6Gl<_E1U zIac<%S{cr&Y~+q62?9>t0g+OQat36(Y;OP8{B9W%KOFoz;=E>2bCHTrDF>2ZFo#;9 zjXW0_R4vu9($LeRoi|;W7Zm~Lt5mq_B|=6Q4#ZsiKZ$-T#A<rVEOaqkabgBIFw^(Y zo7s<$PENLtyDxq_|7i)_4j>P>T(d48WPiEXZ;#N*6ntUTcD^|#gK>BaY2h@j@J{!b ztFG5;9UB`P6&3FwACxGkCuhjUh+fE!q_UqGOk@-&4yvsOePnu2>*ukdU~}2I?pSP{ z*x=F8s&Hbfvb?Q%dS^~0*|2g25$a=DO7qZoXjAOdmTz#U<;oGNs-1zK2QlH*nh&jV z_Wsj?l^U0r&YKhc>XhE&6vbg%4mST%C}ry7=k~7XRBO8pZ!RFvj{@t)J;z#dvOGUa zx%;PaWoNUCS&YbSOD`Aq1c>&5Kwvb+fnWj;#%Eq;1<@6~JbiHzubiW4Zz;3b!#;Dn z{KMxyHO0y|S8h99H*zY3c>c%CF5SMj<GJqVuH&Lpd*{~4UXhm1t+jt0t#*b<=XT)= z+YB!UHG><)zZQHBJMrUAi;Ka1$J{>w%j|VN|2<GCzRV>+vo!kPl@33H`%9Xl{Wh8B zUubiBCnmF82e{bpG4oo}sXyf(akw73cg0$n&42&$*|iU)udc0~d3ed{kJDE>MX&jA zr{&0|wd_$<dj4|2RyQyEb^Xf=v+HhN$mN@C{Co30(IedQCO4ULYDyM-zS6jLrs(;o zE8b`2*W8mUR$|HB<hQNq<&jC-`R4C4G1>X}w^e`r3%Tk{<sWw7un6ER68^kR_Vv|O zVGEB{zdj^-T2l7rNkJtu;7W;)r=RnsXMH`gg=2F%Nb!OcuZgoKL~OMAbj9so#mzhY z2HC*<W?dZjmI+G8XIM|zsopxnZeca3YGm+Q?y{5f5Py;I%A}juPOWnOZGYp{76~t( z#RlQvjH)47B&^C)Bz#1N1J<bnZdy8|VD5OP2}ucy;}b4~yrY22I&vg|d7|P&;Pzck z0!QBTKUiZ9b;8V$ot^A*bw;a?0VTEy7QLGd?J4@Kx^v`pept<K#=N<}{-`FnKWh2? zY$(WQ3|?xXc}_ZY?^Nw=1+PSG(lTIiJhO@8T%qOtr)$ig+k=!$3A%NsrQ+{dF1dF= z{fbX~p7#MqCm0y!&tL+LHGx2IA8aB>{`~L%*1soLt1XZQ&I&Lvc)I$ztaD0e0sy{j BnC<`o literal 0 HcmV?d00001 diff --git a/docs/img/startpoint.png b/docs/img/startpoint.png index 455d1bf1f6b1663ea4b1d58e273c2fc91a5d12a9..8cf932580a8c75161e8eb17744c91b320b79ec03 100644 GIT binary patch literal 15434 zcmeIZbyOW~za@AG?wa6ENN{%xa0u@11a}JrKR|G|;K3odI|O%!puyeUoi5(*_Visd z-D`a_v%3GftVN+!_0(f~|MuP$q97-ZibQ|}0)bE^CBRA`5Yzzh>4yLZ{N~f+fd}vf z=BtRL3Ig!qiC`QI0+E3v!NMx8KaZANG?ZsI;7$`ifrN2z{$_q8%gpY_=<yYUs<mC1 zw<OlDo$;;KvRbNDb*OcoE>+!M{^)FVP!y(R<87&0f`s(30O5`A;tFXD4izpISxEfN z1-~2BPP)fv;|_)0v4kNR!gmk_1qH20_6ZaQCT2?^UMv_4ruct*oI)B%daB%=-+*R6 zy$Xu51Kp$E!puHDO6Np2wa#LTQi>;7M!)S@&5F5w43oSkfwMroVVdxk4<T=KoF)jz z6L^=N?#yB~Gn>TfM#0L;diosH;_!5jsvEADcf{wCRTspSF63QS&+;Rn=nNk2HmA}q z$ME2XxX`>p`qSg=O=;5X4HIU|UAR<Hh2sdXf31z5CY#yEA>ME1QJk2>6{in98m&$- zYVaB{D7!1_E287Y^-tB;bobBi@0n=NB$TM*vI1+JvskgQvBQZ4u%00i$nhsa7-7L^ zX{(y$<el@*-D{NMVK&XV_jGEdpNCxLJF6j-H79eh@DM=+kU7yD&c+8%M3DI=ssDsg zU$M0iB_+20Sc>0vsmR)NJMIymb5Dn;IMTGmJO#|kaAc=hhPQ7ZM0T9Jf`(c)Ig%*3 zWXg!CP`2_6m;Zff(P;355$0UU`%TBjs&Z%{Qm_rWoleWOSq#fNF8PIThv3v;v;ysN za;?_McSGuBjGVcD^nbT+7P5^~HM}Rdz0WZ#7rforuQhy7bb0<D^D}(e>jfU&j+Fh} zPRaH`EzYK2eG$T7@f4d-+_b6i2cocZQw^Mg$6=~dxgZD5qxxa+=+6|;v@F=U&9LDA z^C!`SJD<x5rp{7}KR%loqIgsq#^)$vrUtheT-&84288cqPJ3s*%*M9}wFl+eZNdf0 z_35Wi>v^3_ZRuF15H@Xl=Nqg@Vj-HvCTDGp8sp^E{p0sKO++841U(BJWkds`Fj8vG z84l;G)ww;6xxVxcYkp5P^IDtF@TNI{;jnw((By%rc<~N_>*ZN{uF9raVWCS~qaGq! zSYMmV+0(0UAE`3U<9_J>dflH7N538EjRYTb5D-z-dE_b~oHom}uUAku8^(EU1^uIK zj6%Mxz?b94fb0c+$4fJjPm}LD%LF_Ea{A;D1O#s-fRUui<%iJEM^Rr09Tk@c0K<R- zd3lm*Jkpk}6Ha^5`g8xD!TagOhxb7^ZDovR(iCBZNsqQ^39RD&KG68{=RoG|>M>Y# z7p4v_GKnN+hgkcwKU*Ts=jZ4CncJoQSzY3^L%;x!@24?;IiJG+PKNUgt*GRcEJF>$ zZbR;QbyXtrbV+y`GH%!Y;X4^ZXB{!$>($o&R-0uT33+Xo*nfDo&0@{y_3cEbQ=`d% z2fE3Vm%d6NtxUijsq1sN+TUNi3q^9NMZGWgq!Y6T{l=^vOclw@CMnq&i;Ft{G^>79 zdxFQcB?1`YfBt4U+#qtb&GaZ|e`86Oo10r;-3Od<I`Xq|a0eX=%U{py9vPQW4{Is? zTC|J4;lKWcujKC8M2ncqK1g13shCreFDO_PLNIMI5JyB-AGS7(*YPW8t0@K`-z zs;aA@K=rmO!b(c4om~qQTwJ(~jg9?7L!t_CpLANjl}e<(pKfzG5hM|Ugl~6@AeC}4 zS-vxsNh`TltZLIYA`)`I()IB4Y5&DAUg1FYXL9oFa&J=P>Sx+dB!T*>qR<cW=>^ux zOE%NFvd;MU_*tS42;C(7D2+OiVTp_zdy{6a^`aiN3k?nzcDcXuvXuK=kmFtUrZ9n4 zaC@(14_<vwfidih)V*~OWyiw8UfW&ui8z?W;n~ttu-MTj-mfb?<}9ezmrj9}-Ij=Z z%8XcfPoWewe-h_ZtPGFc8`Z<qhi(L!vL@njCqiyjUaX0GA^kR$<Zya=tteP$yW%S@ zDJeEjTL^KKLISnV^!^%mpDtGQtFFHHR_Kd-c{2pj@D*(FAb0Q5I$UW+R#Qu`ETs$9 z$(VG~p0-fN*5!5S+~|vPSX+M&+yUj-*0$hat?c^#j@-~nJ4c~0qSUZ#5-ehR{L^l{ zUf!-m^M+E(zec!^amnHEcEIp~cIYuNm)!=p9(Dh4Hg@|{91ragq+gw+O&Y9HWq4xS z0(pW1S{Wh?{m`{MiUuN!kr=O){_yCz%N$866vEW&4adgD25Jwth+CV?6wczz{Vdk} zv9L8H1QA3=!-KD<m!3CYu``xo^x~@_lfjFx+w7#2Kq!SGJ*_7wTVMP8j?*$Yg^`gP z<ADuwcg5c1a*#c7pO6qrCMhT9Tc4O%#m_^74>B+*<Ta;NE%NXGB8tIdjj+CPV%W3K zfp@v5aJX29kLpE$Q&?Vl$0WVbW8=sBP@Bs$ZX7AqOd2dvA1V;b&d%E1M9M`*z5OZ1 zgoY;Si+O>@Qgs<TZEEVqXj=2Bg@XQF!QOf}ud^ktW_|8GBjadAnI5s3H=n+FOGsS4 zp~mLNo_16mudtTv(UBoKrR%X44_CF`n`MipQbQ>MZwF^y=R+R=oi;K&Zcc53z7bq0 z&vp?5gEd#*b}G13%>?)P^Jj$98>T<KEe|)CSOk&E`D1TDI=WV0?te&PzzDnDY#%)R zFnO-6w3D6>jJ>v!JSb)phmAKC!iYJ3>#@6Wyd8+{(Hd27hm83$CWK&10Mn?`?wjG= zd!k;pnp*w~TH*J5D#u%e;m8ztN=nfh%fD|53oSHGk8Tjqt-=sD`rcWpr`?MR68qbk zj)_gvs;*9E3Xc912x8E#H~PDN0s?*eRtNHlFP>dbn;{ol&ea_mL<0KNU}8Ownf(Wu zdP3M1ow_J>961|X^%VB6y}D2ui^rbny+4iE?-(=#@2`F<7MsdOJm9lg!cfbn`4*`b zWs6-H0BaakI)R}t6Y5DZC(t>D^CuCpVyPB~ObRP1r8tTxs+HAY7|-c`RAYv@P+pq1 z&EZ09T~_WB?{oD;Pg(gW(Oar`DUM}yL*SZF+S-IDr1ypM2N*H#Qv5>PU+-0J+0A`M zwCfCS(!H2jSbT$;3DxMe!#T4~J|3VFjFZNXj8s}4@s>O|P!_3|2QsGd8eaBG#2+Q7 zwCQI=#l*))WN_Ma+=L}&%cae0oIlkgSS`T$tW$@e9W8vBPH}eq@gtYj_?>q>M%*vC zKCbGW&MHgQa6CaAv(Yrs?V-fHl#)NT#kBk3`X!N8r70D4b)UsKZ08iGKbNC>h|tCx z_7ri<-A+=^&CeMO7hvMCx<(IjQeh#gG3tN+t9Zd|cI=s(-{#Y-O-!%fgqQ9t0Dho3 zdbBcHDXK>8IZ}6?VY0Y8U|&KvJnrt>Fj4yp$q$j>fcA9(J?;RI8Fb@*-B}nXzGh%o zezJyv*-~5MosSrw8WcscHnqp5(PRxfFYeDq77|<&t{;CzdcKq4{pHV(J$w6#J}$QW z0}pO6*iInb_B{m!RtKdd!2U2%{*N3#zgKmQy~g3YA!+yP7MGCqC<<d~i7(RB>>TJo zTjH%1cczo>e!8n~4FZEzvhbxN6b7bX<gPiH6N(~5p@lJED&f*|1$ur4NKcg6Slv$D zhyW*)qF&qFP#w`gn(gsF$fb4d<OHqj86tTeG#+?pfWdFoBI$AE|D=;|4Jf-dO{?Jl z=n32mbr$MqiKNr2H!qs@RilDOBklqk1dwk72`tPOC=zO+j-e9ksc#M+t4ijqV(X6= z#iHBFXW-N@IS|dm{ez+|1yCp`-1C}LReui;sx_9(MSCX42S~-s)Up<Y7B$7cFFyh< zBpjaixj$yBNT;`1J0v(5%uMy~9)H|I?c_P%4XP47Y@v|6&u<68*_UpGM`GHn9%@_~ zc}sW|b6WSt7kd}#%p5$GA)Mdz3|<L!3=gBUEFZi9CDoh5(lZnrto8{w^GrEj++Y8w zL&J>uRf82PE}!0e`~*KiKaQSNnnKC<0p4s(zq2#1nC06o8Tb5xMa}|J*I*Ux^2xnz zjN=D*50H=ckruGXFm+!Rd$_@NO92IY*eeb4DoPx6v-RR>ykPK_FdzBdkj3rPMQ4xz zFWt~10Z03A<H|;RmJ#064W*3}GN}LM_cv&0=+dh!J8Ej`f)iDBC%1!lBQ^7FWjh*a zM-$ha*or;5@zKLWBck!N@yPL#5#gt{;E(C~Z68%2$DJlbJPt@v%993~J#R)*;V5cU zE6&kRcP34<#1ufw5#~8MW_v}XF&`2s&*LB<A4#^I&gL?{*V$6a=fYy!ZNSYlx6vP> z%<X*5pPtv|6XEO(u0ixImlrVMODxyv8WWcz+d9M60CtPWqxsJK^nA`=;QUa&mixOJ z&HiD4*y9OZ5#B!BXPyKJfN+FJ4Zl7%#m=8vO@WwLSskv%4w$3yGArf1oK6-=J_iP7 z8__ig>`y70(Q9h{ox}D(@YZ<{GTzy2|2qMtyMh`N7H8yk1V`bHY`)b?oN=$m?efez z`m@dd_iug^Hy=Au|2h;kL7|HUF|geNs(chL(2t@p_Z*$eb6vqat|}XXV|ooJ9@>PL zCs%?++L~*ddtc`WJ@AB~BF-e+q7-IZ&}OU`zYCSGz<_ibJYlVJ>a)u{h*1tN$bS+O zSGaeXQoR>q{B!Lq+K0gd2_5VMzL8=Py=ODsCHqZCQgrJ!N9JTp3iqky&ebbYKVOcp z55nVDq)N|hI`_$G4<mB2O}BgRD{d%pD(}Xu6TSAg<F0tCmmtQIz?>KH6H&%Qqk%!v zm}d&n4W9Se^@(bcR4WIIByMhQb2VP**F@a@fmbb<n<ruOwK_ju330{A4&~|1m2lK3 zF$i?UFF=M1LnQc2C-U9T;ESSWNf-se%#BFY=n)jiv5^Qq>gjv*ws5dH_8ZXYxxJ{8 zBNBw?iSYM9lhK&3sQFYo;SyghG|1JXiSl__;3vOVS^rh*^%nr`45NO2R9P;Q4R%as zMEp+l_b*StAPVYxW>#7^m-%^(9Ls515Qs08pg?5+=Q~*e2Py1M!*0@)U5;{dUFfro zjs13gSOc*)dg*sRl}OpNvqV$+*_YM;>gQI3QyT=3eMNmwZ)tP%`7I(nZE7NS6j+7D z{5@4fM8rhCnTvnRBvzYlcvs#^`TF6Vw7JF#vX_uMx)LQNm7r8-Shx%@y>PU+G95&T z_}#JU*H1cU^IPY=)XJ|<Vq^#7R9+z?zgatrm-OZ^@bHj`UrMf{dS}mkuAR`aQKxaS zrH<}cKtkc~^MP<-xets_?q=Vu_4%-fNr&v?M72l0Qf>aRC(h4}bIY#9VH74k96?xp zwf*oOU?+q$<H6HOO9Ly|Ki))jYtMrs+f&N}86nd(Z>7--kGIw;3^}o!%zeT3P{<WW zm)9R48xFdKmT$vE4mO3x^z{hFGV+V9o2wdmUg_2Lkt?YEKBLa)Nq#}~x?HM5VM_he zo6wWo#|E<-5tE*XW~#e<JdU)eb4yVLmrP3~Gx`>x-9V!c@*CZSY;&z<LO+R)&TKV4 z?z_4DxG)diZ7W$6WnEjN{0VIGz_!(OK5fAQY$vZPBHqe-ZS18vgps)Oi>)3a==AXp zIkR2+Lq-cy!{ZhfG<3vEu$tRd(COa`CvILGujY`DN*2)SQ`t%Oudi!_94PMtd+JKZ z?1w*aaDFD9P1%~!)7;MCU--xbbd3hB7&sLJ*eQe^2eF9++>nN5#f%P5<wHwE!Ee<Y zR~n2y#;kT1er>pXn5Gy4HY*=+_U@mK(RbUXrVUPc_AOx!-k&I9G9#@RKt5tygRb|7 zjgF0E2x7<4Ub+$c(*}xviMZ@mXjED)`t(YcEAY{->zFxMfV&wraP!cT&P*3~%=9+l zXg{q`xH<1sobGRlyA6xGjqDv5(aEO8_MYEL68sv|3?}qmfdkD=6-3@NIr)$wG`Q$r z?R}#tN*a8U_%k{K2h4y<u50F4QXyg8`gsf(C<kwyt|brj)3xFQ)4;$$S1x`W?QchZ zn(vie-5b`H{lKqNFst;t;?}e*pYzhe>Qp1L{Wqsi)3omz?C+4UNCdwJY1>S&NKj$D zPU~hvw9XQx_duK1w~zR^J)W`PuJ;fNV=yV^0}aNWMWZFCPOmT9!*KC|-3upzz%^`{ z<*u$@s8h)OoPFP8I>1VHhjk2iuEL^93$6UzN+-+NcdsnYZAY)h?g5RSR=qcmPW>&@ zsAb{`CNJjGjm1{VCj1g__OEJ6xtDL4xQzO~Q~e0n-#Bk`SH#U%pH3byQn^rlvSP?1 z)42omM}LX~O@Dn%8|`|984J=G0wz6UgO{wF(8;<8!mRW}c;l)?!@hA^ZUk0MMu>n1 z$sUs&P?-@xyL*E&-1R^{;|U$W&~#Ml%K?-0Yej)|q)#vE#2PAhT9M7Mv(7}r7q3^e zP8ak*n@t(rVkO<02rR0M|0U;O#KO$nzWUr!;qgL#$YYPdq;J|Ws&@9UXJA%*tr4<& zWJb2>?HP&`vypG0IEA7cnJ*GdBn10%@WAp9jrj-$!;l@1wW&VKZrA$&DqYAcPx<$b zA33RHWo1v#O%lp_mB{%eJ&@>ziU9o$kosaNhXN{9uHeVt62>0a>N-5mvT5O~h+QoN z4B0zY%-%2u2k*vzuowea7<jA7P_)Wp=b9U`Pj84$+80-ouZ6E8b_Niy*B{T6%_dsD zdU&A+1s8M<#cZuBO3}t<@CU@TL=5uwK)%ss-fpxSjY08Ccm~(xkJYe_hqePG<0sMK z>uD<WRp7-8?*k7BfUl)gP9en0$gUdOQMxzPc1I5n3<#T=Qqwaq)UrxYP-LIKBP4_l zqgAt<EjKlRwX-{+*y>5Q9T^ztczU?Oj|PJ;)jaOb^9IiiMbDp~9t!kYn$+L`N%Qg- z-L-V$<m9Acu^Iz0YC!O_v~d**l~B0ow;APrV|?B{Wm=A)kiz%YhhF6IDF?aoMRTF3 z0{|f75fJQK(t|Ha$>U5`k4ycchfH`+)TxI)nSN%qYz$!gD0y%j!UxW++zfKyMeqN< z>4+ao+PhckUBnH@sJWHH;l^I*P=7T&PdF_|MPq~6ukRH%?~uJasv+_vEB2W>4>V=E zy1MZ1pSbbS!6ncorf;TAX(596<qr-x9<s5)!4k6x8SsI}(3`N!J>IA9>~A?MYABhx z6<mzgVyJ+TWGTxB#ju3>uqVFBxTPc6Rua=R4$qD(0|;lqVj8a(Y+6%9kbd0r?xZ)| z`UZCV5E?O0)HQKmrh|bHAQ&OhM7^DTH(Rn46wTQM2$H0MpGU>C=D&KOW?Y(2i+!So z52tDm@ohh64DAc?4P{N%Q507P9!;eT3rh)*{B-(_8*f)z6m;6o(BaV2pp)rw&s<0i zFX!yO7#fBj>x$a%U%vGeup%D)*%DfCH&LKp&MA2O*4L<y>B~gy(fu;cAHO!eCG2e@ z<XgUH?c<Yzk8~R1xPwlzN{oq=mdhg63zg6Sk1{9zgH&tTWYAZ(#Qku9XwvcoZ&+zQ zz`EG-fUcvX!)$x_vBm})31kjPti*gZ;+9$jXrw%FqN0fN;$VZp%@F1UscB2U;ANr* zqp?raLp|z~a2+dS$iOa3VF_VhhqQ$ZIdDZMe(38)^uk;{ft8j<rlS7UK2%Np%_ajC z7ne_km7_N>q7u-JNGLk}E?anVjhMc^eNkg!XrgbUZ;NF7u_xgO6n`3(mK?mT3s4u? zrdcWRZy_3$MG9%U9@i9(QyMT_R)Kk8ZQ@Vv%XkDlNcDCriZhzEro`4Z))ijT?9|~e zD5-VUJ-=kN*<ag=5=9~a1p>gJ)xH1kUp3A2A3u;l_D&^GAUw`ozSie`WtB4PKrfd3 z@eRKa^LbAUJ<}~RF7+U9#1Qb0dkI!1CiLRj6469CViue8M3B$7wJ#E~(p`B&iBOxQ z7L1>oPnl(&9p8X5oh77oA|HqkxWGoeH3J}@(+W;Ju5aw1_N5Wj)Ozc_0O`aDKuoG# zAj{_ROG{h7NXN!fHZW5sM#ob6vBk+5YG)!LBjfAW!g1Y~4k&xHR9Mg@nz(+F*bh0X zVV`%;I>0Rv8J8PjqV3-&Kgp%9--Wog8^rE6eOQNzD{N0PFi=bS)~C8pIUpVtdrHOe z7IV!8Ii7EBfyTSl`2j69HWrg)`Q58dI5Hxpr$+)vbnE-IR)g-Na&iIl75`HG%%|Wm zTkv^ntl$c#5aNE7eVY0mar@;?u7P`@vpxo%qVqdh4Bl$$-vbu2V>p?gH7E`aT&ItX z>jF_+FRekS6GD_vV$_@GhHX7j%dD`_O2j;Fq0Tj>Q{u5vq(X3@sRBjO8ac>#1OXdb zPH#9}&G3xcRsE-(p_i1Qsv2Q%)6T92^w7H~(Wyss>t%PCtKYgTM*CzEd7tf_o!h@R zQl2fXm(Eokef*w!XRyBs^{TNP-=qeI@W2WQ$xjs?1?O(6c-bNCMN>m*COEUJ?nl>@ zeL-Da!BFl2iaQXq(Y!IBeJGeGPf4_t4dtLx(CTA_)QsmJ!@#+2+}Dl_?u_^mX1m#o z#vgq4hcEn1ZgxaFy)%PUryU(LB@;)E9WPa=+zV)WGcz;XuD1yD{;fIm-qF#SkAMG% zG`9OR5j1#iHkO{HlqY3*rA%Ujp?Js2R^JhJ=^smH8B<tzzrri8qLqgx83O(;41I4j z^RuzQP!SgD8N%(gO%D-t)o>%2>h6Y#=?XIZHpP#JkDskN^iD!nw(GlHo4BinwhW$7 zT{mR#p9kQ)ZtWkIm|5WRm7r3Zn|s*Lvn$dVbZT|{^wR2jeVDw?K&V|uk*kXA1SqtL z8xZvweD+KsfM*&_&pT_}Y<yNJ*F)9ib?)AciLt!-S8HRWMihq_hz8I%qT}NObu@p; z-E+jIbWBZ!>Nm;o8j)?Tkmq#fNhhxE?0jf)1n?zSi6$3z`EsTC<i)_+I-G;f`{POs z7UqQZka5vA*E$~Io4=E)OkoibzG82$<OkGQIaHHfOn76%Q`#_Q%br5?NUy=QmTKIN zm)x)V8tH5qqjWVOV|0Wg&K%m1^#;C9BN_47y}i9#$eB|2vnN8Kg~h48i|A$rIf7Sy zts0y(7@Qk<&Kpaw{EF@^A%k>OcMN3zU);EV-@OaJ6aZ1&+r<vBMn5v6{neBQFm5+j zzHo|&`d30l<xPN!Wm%kHp`nokR!lE|my0dV7><oHJ5Phg_`sljW~jG^dv8H3Ul08G z74-PYkYk5TBp`VC_0NUt08NSMWo3&+77+4YV{)B23ArLf`(Y*2Q=6K0RipEe%{4UO zN@hrGz=2)BseE=Z;JOs$m#-ZnVRX+QI-Fm8keTZ-GzKkt1Le53Qsr0g(^c=AN9^0- z+e9dxEXoQvY%5Hfp-&G+G3U1|hewCwrB-I1_XD5s0Ez&j23)Vw1s9wJx#4u;)9drj z@&1?wFFq1@^h1V&ae&(hZM!33;O8Jne5DyL&dTP$M~Ws_rnlNca-A6;aUH~o<>BGk zU8)y4UJMa`fq1R%Yax3-tvJ&^eSrm_;yW-!e0+VO?yvSD>TH1Zh8ji`Fg`=RJ5w4~ zHT?H)BfThjHdlY)q&fzN5CI}0O~KAl=$<lM=kzob$bPrq>W&lwV3p%)p1MHRT!6 zQbXHtWZvtR<=%|nJKZ;v`s(y5yu*DN=}(X<E>toRb1dis+?(gf&~ss^Pm^1rCdG_z zF6Q@4`Av`p-WJcS4w9-@T0OjDzq9~>b{EfdZ|^ue^SeG9?34-YE|((n3mkM#R+l*n zh>D6fG;mYaI7=kM$%F0E{rz!J@C9+@<Tzg;+<L{0$S-KL<GJPHjEo#Mrw@XR?t<%d zLhxNy8*Sr2^WYQ`r2rm@`kXordfl$J=v<5d2oFX;|8uh)9r<*%?^qvo)CPt45prD# z%P90%4`3n<RsG3afQweW5}a{sMV*ZTppx@_JNkU{Mm!9BdA&gD0S9pI))Y>JXNVr4 z!M|0!$icjMkkyH7_WjMzLoK%(2J&Xo(9$AfVS&|4=K!A5x}jk%E4Gk@(>lB-BJ~C@ z_U-tPPEVVvOc>)3(@=R1avs{i<)zbNvp1<glZ$HO@2n_vLv#|_t9GE6+?&Yx00Mmw zCj|LaSC>}t)6l#Ht?m{yWU^aJxPW|Q62iQSZ`N-Ih9tbsQJAV7qf?8!+Wf&3QpB-i z=>qVex%v459a}3aKj04iTaFS`p81H1VqX9#1Vu+Dz2R%#ca4tDrmwH8d;@yr4;{+{ z0O245Zi5v9HB%DSksI<fQ6xrrd25ip+$(>7)<bU4VL|pm{_GLVZ@?_+yo7z`GoWH1 zgV0gX2LcgZy=DQJndxMjH~v_<<KyAAx3_;v)y0?~{3Y6K8Z8yUY_X379$5$`O*run zt7h;dbR(mnM*wctn%qM2b=$VRTXF~k*9CekgKl}$;o`(&4&#aKkG`>p-s!Wq`@vfj z3FpmCnwg0@r6A+!B2^GbQnIK#lluMpuE9UC<dP~K+`KdGRXrPI@dRHkW++cj?K{r% zGDK-Pz84omzZ)hFNz~-|PpEd=pbnD)H!UtROw+w03r?Gll#r5}zWEi6W`PxLqA9MN zC%9z!<qH(9nVC*g$$d`NbA$U^RDvm{e@2Irxt(yf+(u2%j${!7K(nF}LQIm}^T40A z#VQ%vbaRX`W$}AXR#C^g4(Eybz&wc;*%FV+Xul%lnrNXrv3~DPC`qLRFz(MvY+mTT zv_7mYu$ytdFI^KGAI9rnK3$&7!q-|gulGizzJiB;>m&j3y!elzrQu<jpO0I!6k8Eq zgdLro+4Q2+*^UOLwtl#Ki0;IGg@y5Y5BZ^4GUOHjKtvqOtUkP#t~A=Q1x#X;uV2}W zO-#rOBn=A7#i^;NvtQb?GwLdh4ybQAmAsIGf}Q$$mvNKv2izY})I-2XgdX}Wm$Gle ze8~{9>!Wp>oDd-p2mwb@Vqy?JTU$rquIz2YY*3P*vtu&6B(O>!nRG`7r9{i<l|Oh9 zNRAj-TJ|vMLXeYXrXN2O8Htj4H0_&IR<cwSWIz86l=}6H_M&XD4YqrH9Ah$HE-*Ef z5C!$_St7eWUd0kkJaHQ+09)So!dP8%Vi<|`@Xr6LEg!rGZa8n55*)nDTHRUm(gDir z5Eb}8VGex0CjntTaSa&b1Go`%Sdt$-!0PlTA80AIvNXU4L})o?B{NhiS*QSDVAX^> zUgkw;)cJJ*F{wf^Hl@l*(B}4wt%>{xHvqtQB8i3_*kT1LyGiXA6$hXOk}v`~{+{Gb zRdxEl2Z9RJZ%p#!#Ke3>9?ZSj1M!$0rbpPZdx1(wm#^bde#19sXW}218^-(?m1q?y zh$^Xtw|B<BkNdJ_qkp>}$vf>XqLM5NCcWh-?{)-CfCmO4^xxHR+^)#3DX_UFG!Tec zgkdsc{9bQbRt)9YMMoD11V~j=1z#ef6BsagJQ0Y9iIAp=`Ps1&RErHqOOin#VGL%& zDUBq6(OiX^0G_0h^<C=bm5rkK?2UWp^5{EhT(5jbw~j{7rH0BJ7UR=QrHCt8g_Jvr z?9jbe41?~6ZP!7%v@G}-)%wP`A7@Cb@l8616I(j#%F@1pUDVzrwP^GZu%SZ{de4W; z>3Xc@qaG;EcIj#|F}DM5*-H!d(OQo9?as0Q{j)8Uh*m9qrH+2x$zs46c5C+u?pT&o zJS`~HR@!YKV`#Q<x={DnYcIBLJ8W4eUrt{bAiGplxtZzpbid^B5!BUtkatAIM>iHu zI5!lPXx~8pKAXOjSLm9@vYI*WikcAGxVu1s;V29$H$$1ZP>U8UX+r4V^ofDtX2Cdh zQTc(61WI94r`LAIOq!MB+MxL=k&>DU09Nq%-Ge|=j#X4Tp1?Pv>ysr|pkG1lKF?mr zr8kFrY@ko^w5rpzv;JfVpv=SO-z}{STU%F+Q=B$q%7Qi{xGl;5QLb|H{9X0C5vlar zaX=yAg@3pi?ep`;2`71A;9t}oZ?Qt)wBZRaH!B5V3nG{Rc-x3TE9BQvCX_Emh)LH` zQt(Txq>A!h&lY=hdRo7rN_;x2j$*LCTWfQ6%33U!Oi51uGS$D<0NJ1()o&=EKe^YF zM~NUp1SPed^1V(U(0Kj}XzKd3_hM&EZ0O?X{}D5aA4;i1=<pATn*iwO>e`XtOEW~b z)VVd8IABch<qhgn3Q)N#17<2Q4{MJsVgz)mA&}OA0!2LfF}ok$QY^dy;o~RYy3Y`? z+r339hif%oDWpRq;Z=gfA*})yVZqT_1W=9A4kgfQqj8PhHvsb*^vPiI-RmhRK*<b| zP05P!#`xuR#bI3KZCCYigg>v%)ptPIEK|~68i;s_kLh`x_Dx$^GI@Kof(#ZS)6B6a zpqvjlz(6v}@NRH=aD0^1%;6z$S?7P$+Fu^cTF&+|85>-L5FOf9x;sR7{-fAF+roWf zHn!(VN=@$kSG66%Qyuulc=Lg|*!Vjk*U6rTvIM%`Htln%p_Y>-L=!@+J3bh}=L_`= z@>wZ=%yM*F5p1b6o~Q@;0J$$RPE&MR^)h-bG*I*Pq1a|YC4%h?iZrfw6ku4hush<| zuC(S@yBu5-+q<}Q-K>lT#pUE^9h7KQqt$V8&b7WL!0z=9lm!gt$zOnQYm=JIVmgHY zYQJU>`tsPoLR)XP=+9(Nc1<Qo$cJR5&LBQXEz9h=Y5sUO`(nXv=O`Q*9zHA*RZ>C^ z`gE~sx_fKuF`QP9!KB{`mKrpo*KWn~a=#JryTAHjQ=;1j1w6%E&6#+3I8kWCL~4ck zK$XaoIj?+NzD!?7m-uPV&c^A|_q*44%*qRD=f(&5DXr%w!2VvlV4}`)vuAs(Fve_h z-V1NMz%_jC?3}d<Tj09fcE6OUTuCFc0f9zG>juwrb5%e-IXUa!|5T7Kon5JCWILL$ z0VaF^38@Tta@+5el@7kKk@rzrf=Yxgqd~bviz6v1iHw6ob<6Q!e_C;}2Ol6wy9K|$ z(Wo&d4q<ZGLCpsQeK}9W27yXNwbmUMPc+)d3E1>>`;gJC{0if!Eq{*!+Z7ZDh^Nf` zHsNE`X$o)ka?b%Q_lj!eM|hWFWo<XvbLSSJdyI|VNMFE62l-@D`_8p~#g$7F^mAX< zvm9GET5uU}pKVjnH1HAP6n{YgCGk7F5$WPH*xIjkJtc!ur3XBz%V3eK74LGs`^#qp z(CXT8AfL;zq39(w7>)2vp^8?K8?W;{N|Vb;D3Anr1KOW)?%UCq>0D}lX>W4B!b-%Y ziW^|I>!^RF%`&Nvc~wF{P>58mM5Ily<%^At?s{t$S7KV4Va5llU+tr1yd+e)ABSwL zOF*EI5E{Vq>3yDKlaP`M02}&n92hcN7<$)OP5>FQq=NdhIEbeMf`&aozuVPl8$jzi zsHUCeyP>I-eOWr%OPG%$rHe_W)lV-qH5Z$_;3Xvo5YX+kcc)GM2|`_;SO}PX$Y(8u z2C1p3o`E+JB*KCCll7woTW|NFxQGY^kfe%vUWZK=oIV@@bdbm-QjTVY<bZ&Hb2BR| zt8id?>W_tr$jPB4Fy5E-qq39>p<7J9nMmcNJX;gpO6yD+RR->KI9G`rd3}w5YJ(~c z4{xp0_Df-DJptEgV|xYAibV4xPu|g<{3)b-$MgiX!=wX#_=YLgi}=HKCHmOed=@1v z!MZEAkZ!z5)#z}}jfioy?$l<}mtZCV$oUbzQc&492W$BwLE}|!lnu>vdPFOa4<yG+ z9{!iO$<aeYJ16i@TsZ%ogMO2++;TbqCV6yPT7>0vQM|Oroj0C%1paG$amxr;vp_mS z#r9xxl6~=i9+e`fg#yLP(2=*Vl#h2+mx*Wbo;aTXDxfG3#~>@QF%PlP(xlOA6oQoS z>P#i)H-2pue%(Awm!ixu|G*J9JM~p=e2BLJ0&SU(xM+2C0VgYUm8w5er0LcI#N1j= zDUKYRN_<Vi`h;mYI=4&3SJ&3QZ%GRUsaV3OtHaYL@nHcqLxstLA`I6>$J7AysY5ve zJ8Dr>Qj&6TTWT<GEpg0`l6x7PmNa(6{;HB3no=UkbiuFhK&uM{Um9!7OikfHNh~(3 zo&@Y4Yh)~Q-La*r<t+HUpNSsOyAAKB26pH3;;I%E3^i=MaB4iaEb;I_g@uK{8Y2`u zyn|F;#l^kNZz?G*F4id<<yS3IL5%4NBy*g@=<ZwT37xiL-kr>vYqVh_xM%<9;3k}q zkTB@r=JDh~%gZC_(3}#Vx6Q;TaYKb=ktM%`h;rI{WtAE~mI}`WzA%`6d7<p|Q(3NU z`WC<c)e3fjp<lxC*FbcLRNi6~mA<j@>O+t8E3t5cme+Kfx%y=C_3L8eS6o5VeL7MO z-Jgo$n*#oMn&NLmd<{dpBMlr?J)M??ZjRS9eVZMJq#u{OD=vfH;t4t-JkPc<nU1AJ z^+l257F}%C9<;-w69>k}zb868Qmxbc!@mTScH~)W+|F8Ooqf}_?|#WA!w6%%V$yp? zZ(Ut<7Y$8K!<FYwQnorXeU$L<aEw)b!8W#BUDIt&fD6jVmR<_L6oCdkCE}BlL*m*V zLxEEBx$y>_(|Xb0Y%F69ph!bUPcA@QA(%)Ir#ff5qrV@cRIBcjr6s{T&j*3du6e`G z+sdt~NZLED;}V^gcPBMy!bU5f0}|A$t3*UI;52GnX#jV*KYr^K5u*o;`-g|8%=s>M z&Ygj^TA;h|R{7V6PfHr{{mlWiW+Vzw6ZZnVW9=c}BHr2MXc-w;j4-zkYg5V9b3m9Z zNBlFb-MpKw<OMqrlPXXvB>;lMfiaYUKysPmx`)X1tvSTr(TV=s-2tFx^@bDtgV&bv zMdlOyc<SZ4U9l!ZEasoQ0V-NL@iPVjP-_Y{N=>^J7>XE)FGeTDiLHf(0NeUk`O*P+ zb`^z+(B$L{ES|gh+2V|O9KgvcoLqfHwFec)eG!1QLeS*2A3Q-xIpmx+3(J8B4!S<7 zupHq9WDQ!ZSWv}nb3hWiGjD6M0PZW-?LN)o{(4Nrs^2<gPWajj&@Z#-KvwWoGX(Nm zC`N@iy-GBKFV^&e50A)~yEAVYwAtZ7PDhJ~fJ)x6UwiPy*w`Q9CCGS2c@&!Z0T3VK zhY}3{fpIvQk92R3Y4unQekhSqO^=BI2vE6u&0#AQ;s9~&j@}GTz(<8M`W$g9?|rE! zMj4;-S~dWR6*(OpY9s529!5e!%oNJ6UuutkO#a|QXC?8GGwL?M2(@L4LtmOAS<k-# zLYLj$h#OY|I205SN&l0=i{|d1!s|HVwuqjBqG+xchE7CY_aEg?w)iBDih@F^57_bB zb}HHNV(nrs%)*v0MZw^_zRA-6y&~Uj-Vj)Y7O0$FpO^1|2GH@+E@|RZy1J*Z0P!_i zYQ*`^2UTkz1okIMCc(G49!-QXaqqW&GCed<I2CNY8_lFD-Plv3_@i;&#hnIkEbQ2b z0#sU;GeW9FuV-nPes;{-`M=ju)z#?<R{G$gQztr13z-b@m^-KcsH~U|s7@E4+d-c) zu}{V5GUJPF`#PejD6+W*&oA1?y?k_T>kn5MR!?mVEW{1$Gmm?-6DLc7cL=iUg6hvF zfW$Aaiw8Qu>==~FZCe5xydLCYI3bG|5%VO=0AA5m0V_BJh%fu}$)}s!5C%&u0xH~i z;ezWe$6l1+lNp(ypkm|Uc+7?QiUSG({B>7;S9bKdhQquQAiyD5u%SdiKYTIY)XB{g zn4LY9jQU@=Yr97&xqdAIK&USin1+V;H3J2jldwj8vh7t{bjZ_j1ID+GgY2~nBcr3e z9ezPEKy9D&wB_ODA1sv+9sQlWYexj|px{pe*6$;{nO%2@02?j1?E&Lebi>9rdKKN2 z^UGHO(anDQQ1w-GdvdQm1Hgoc4}u6_?ku3Fko>3GNn=^;jGIM4kvfiUe>ZeluKvH5 zO>ThsbG9x9r&g*NM(zhsGlYtY>hRntX1&sgEYRf4P`T749!XBghRu)yZ!~+{vOBwD zWP_3s3_gq!cs29%WeH)tg_wYF)T?_J{P0B0*thgaFP#Yc!=;!{8!q6@Mkgh`VH!)B ztM%g4(K!ShV?096-u2!QkN>0$rZbajx38S7IC_hV{oM+BnVAS+4KN0(4s%@0z^R&i zZkJ;&V>2_LzCwv>`{{GH0*MmvFd|DFn#guz2Gl`VAX(c}kGmR${lU8<EF49JQ~mc# zVO=pD5iv2d)u@htovp4RAuug`0giNe*MJL$N)ozIf079>PLsbf6o1-t#6yRO<RUpi zATu*<6F0!40<}+6!hsCtqK`o!;7K3UPI}Jb5@YT+@&B>WxYTDw^SRoG)SFvEEhbFv zOqiT+ixsygOD9t6GQ}=T=Wtp`G9vH;USCmBHOGT#BudTk?*86b?QlP=2_8w+H`J~_ zSri6P(B#v0DvL9#Uh8n@VS!suSw>1ipuT*XaC0zo4T5dp;P&=hi;I48T~si;(Z7Vm zf(H9bGIB9ZTO%V_kc4Ngwf7<ZtDm+j3twrfi{kEu7kQ-JD*P6iO(6VdK>=%qtyj5+ z`tKFdGt2Q(Ibz^V3S4<5Wfq%3Dm*;A%(5UpUYA23pz9cF(siOK0qq<V{Y*g&k51BC zw&Vfe!V85LHxCa5z!Qek+Ax-yorMj2+6F7TyNN#8+A>mfcD?!{E?PkbK<E|^i2I_T zpbRz@f^!4Wj#2;{*9O?>VYTWl!-@H#x_bV;YmMN4E%{%$Ay@Tmj--LWW6d3g7N;GI zi;EekeWdMVZMj8U!aD}htwWn|uk_}BC4&A-_@upv$qfh)%i5VP((LH@+o<qSQ%mbz z<K*S_5uf?$K@?o;v-wOmhpDFk^3ww(e5^NI>F-$k%atFH4F+HmEm`KuqvqSuU*wg~ zs9(&Axm&O?Ndo=5!8#4Dh4iTsU;@BW{r}17eiog`k`vS7Mep|yD3|2e@HRV$V<5HB zIypLaKNkE2`A8>jU;t$kZ%vd>R#w*FRh|-!>1a~mjnH8PkidS&^PbTAhE(TngSI!4 zq>x_(72(tmNYn$3rgOiP1e@UEtpYD0aMERPq1y&;cc7}yL?ECmxrvU>s}`XXBGpOT zG0DEEqCYT~va^FKG}b}{>^LBO-t__c1-_ownc3yJzNc*CWESt_W;aqyI$`bE4?ZB_ z2y#U-bcfugOp*l$!y*3d8z)*f2^c6PX6gb8vSTE20kRaH``cD>{^qmiw_-3wM?p-N z!}X#axAVPqrSk{Ct_H$Rw+<Wf0fRS(5wB~{`p!Z$tFMM8E;>CuGN(`8+yOb5_8r?- zLO_%S5Ei(gD##8j@#fWgcJ*-k^4z%|Ma{raY`E@!7EmUw2Sl7bZccJs%F*M+^Y5aT zNw56VN*TT#Eo;jZgL4sIwNnyVsegHeuPKY=q-b^^VKX;D>97@5%<Xh5QR&?5d=#EZ z{Q_}aITm<O$dh^t_OE47QU|hF;x}d74(GVJd1u<t!GnG(mXTVvYX#P81(TEMfMl#v zXTRwp89R!HP`;w5-2N|*Fn{O_15**!m{s+H&><Yv_i(Q$v8T7UJv;P1f0HgbrD(XB zYg+<HYS5OkbcBv8Cst+|65DL3n_yzbERP^fKEp%*fQ$OK<G=rYQ24+8^S^rFzk1+* zcMsqY#sVQpK!BT^)(8d+l8-%s02sjnkrXG6cR(hMORAE5@9;2ubJLjL^A-c}jhhIt zF)=3yJ3e8+WHlfGzi9A&5oBd!!~gLbP%Ba?#QNRR680nUAE*B9+mnC2i~(?9;FXMj cj%P1S&ZIoIiI$zf%fTQ?F*$IVh{5;&2Dxb`xc~qF literal 15514 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 Y{2lL{WnN#OIKQ!yyqa9evo|093r@5pn*aa+ diff --git a/docs/img/template.png b/docs/img/template.png new file mode 100644 index 0000000000000000000000000000000000000000..73ce81e107027d5ac9dd6140e391057ac71a154f GIT binary patch literal 3700 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 E0O<ZDp#T5? literal 0 HcmV?d00001 diff --git a/docs/img/union.png b/docs/img/union.png new file mode 100644 index 0000000000000000000000000000000000000000..4d728bfb9900050a0ecbffc2aa17d43cd04be365 GIT binary patch literal 16347 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 E0LmGCH~;_u literal 0 HcmV?d00001 diff --git a/docs/img/union_duplicated.png b/docs/img/union_duplicated.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbf08097b0ebf743df748d9135aba6a618f8b46 GIT binary patch literal 15609 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 a@gDAJ`Q9wx_;Hr`la!deXr-`W!2bYbZ%%js literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 1ad07ce3..3a0de9a0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,22 +1,34 @@ -AskOmics is a visual SPARQL query interface supporting both intuitive data integration and querying while shielding the user from most of the technical difficulties underlying RDF and SPARQL +AskOmics is a visual SPARQL query interface supporting both intuitive data integration and querying while shielding the user from most of the technical difficulties underlying RDF and SPARQL. + +AskOmics helps loading heterogeneous data (formatted as tabular files, GFF, BED or native RDF files) into an RDF triplestore, to be transparently and interactively queried through a user-friendly interface. + +AskOmics also support federated queries to external SPARQL endpoints. + +![AskOmics](img/askograph.png){: .center} - AskOmics Tutorials - [Overview tutorial](tutorial.md): How to use AskOmics with example data - [Prepare your data](data.md): How to format your own data for AskOmics + - [Building a query](query.md): Learn how the query building interface works + - [Results interface](results.md): In-depth guide of the results interface + - [Template & forms](template.md): An overview of the templates & forms functionalities + - [SPARQL console](console.md): How to interact with the provided SPARQL console + - [Command-line interface](cli.md): A python-based CLI for interacting with AskOmics - [Build an RDF abstraction](abstraction.md): Learn how to build an RDF abstraction for RDF data - [Perform federated queries](federation.md): How to query your own data with external resources - [Use AskOmics with Galaxy](galaxy.md): How to connect AskOmics with your Galaxy history - - [Contribute as a user](issues.md): How to contribute to the development of AskOmics as a user + - [Link your data to ontologies](ontologies.md): How to add ontologies to AskOmics, and connect your own data <br /><br /> - Administration - [Deploy an instance](production-deployment.md): Deploy an AskOmics instance on your server - [Configuration](configure.md): Configure your instance - [Manage](manage.md): Manage your instance + - [Add custom prefixes](prefixes.md): How to add custom prefixes for your users <br /><br /> - Developer documentation - [Deploy a development instance locally](dev-deployment.md) - [Contribute to AskOmics](contribute.md) - - [CI](ci.md): Test code with continuous integration + - [CI](ci.md): Test your code with continuous integration - [Contribute to doc](docs.md): Write documentation diff --git a/docs/issues.md b/docs/issues.md deleted file mode 100644 index 942e038f..00000000 --- a/docs/issues.md +++ /dev/null @@ -1 +0,0 @@ -If you have an idea for a feature to add, or an approach for a bugfix, the best way to communicate with AskOmics developers is [Github issues](https://github.com/askomics/flaskomics/issues). Browse through existing issues to see if one seems related, or open a new one. diff --git a/docs/manage.md b/docs/manage.md index 9bec4562..3751ff61 100644 --- a/docs/manage.md +++ b/docs/manage.md @@ -1,4 +1,4 @@ -# Command line interface +# Make commands Several commands are available to help manage your instance. These commands are available through `make` when launched from the same directory as the *Makefile*. (If you are running Askomics in a docker container, you will need to connect to it to launch these commands) @@ -19,3 +19,46 @@ In the latter case, you will need to run the command twice (once for each namesp - `make clear-cache` This will clear the abstraction cache, making sure your data is synchronized with the new namespaces. + +# Single tenant mode + +Starting from release 4.4, the *Single tenant mode* is available through a configuration option. +In Virtuoso, aggregating multiples graphs (using several FROM clauses) can be very costly for big/numerous graphs. + +Single tenant mode send all queries on all stored graphs, thus speeding up the queries. This means that **all graphs are public, and can be queried by any user**. This affect starting points, abstractions, and query. + +!!! warning + If you are storing sensitive data on AskOmics, make sure to disable anonymous access and account creation when using *Single tenant mode*. + +!!! warning + *Single tenant mode* has no effect on federated queries + +# Administrator panel + +Administrators have access to a specific panel in AskOmics. +This <navbar><i class="fa fa-chess-king"></i> Admin</navbar> tab can be found after clicking on <navbar><i class="fa fa-user"></i> *Your Name ▾*</navbar>. + +## User management + +From the <navbar><i class="fa fa-chess-king"></i> Admin</navbar> tab, administrators are able to: + +- Create a new user account +- Manage existing user accounts + - Blocking an user account + - Setting an user as an administrator + - Updating an user's individual storage quota + - Deleting an user + +They will also be able to check the last time of activity of an user. + +## Files + +A list of all uploaded files is available. Administrators can delete a file at any time. + +## Datasets + +All currently stored datasets are available. Administrators can publish, unpublish, and delete them. + +## Forms / Templates + +A list of **public** forms and templates is available. Administator can unpublish them if need be. diff --git a/docs/ontologies.md b/docs/ontologies.md new file mode 100644 index 00000000..fe06432b --- /dev/null +++ b/docs/ontologies.md @@ -0,0 +1,60 @@ +Starting for the 4.4 release, hierarchical ontologies (such as the NCBITAXON ontology) can be integrated in AskOmics. +This will allow users to query on an entity, or on its ancestors and descendants + +# Registering an ontology (admin-only) + +!!! warning + While not required for basic queries (and subClassOf queries), registering an ontology is required for enabling auto-completion, using non-default labels (ie: *skos:prefLabel*), and enable an integration shortcut for users. + + +First, make sure to have the [abstraction file](/abstraction/#ontologies) ready. Upload it to AskOmics, and integrate it. +Make sure *to set it public*. + +You can then head to <navbar><i class="fa fa-project-diagram"></i> Ontologies</navbar> in the user tab. There, you will be able to create and delete ontologies. + +## Creating an ontology + +Parameters to create an ontology are as follows: + +* Ontology name: the full name of the ontology: will be displayed when as a column type when integrating CSV files. +* Ontology short name: the shortname of the ontology (ex: NCBITAXON). /!\ When using ols autocompleting, this needs to match an existing ols ontology +* Ontology uri: The ontology uri in your abstraction file +* Linked public dataset: The *public* dataset containing your classes (not necessarily your abstraction) +* Label uri: The label predicated your classes are using. Default to rdfs:label +* Autocomplete type: If local, autocomplete will work with a SPARQL query (local or federated). If OLS, it will be sent on the OLS endpoint. + +# Linking your data to an ontology + +This functionality will only work with CSV files. You will need to fill out a column with the terms uris. +If the ontology has been registered, you can directly select the ontology's column type. + +![Ontology selection](img/ontology_integration.png){: .center} + +Else, you will need to set the header as you would for a relation, using the ontology uri as the remote entity. + +Ex: `is organism@http://purl.bioontology.org/ontology/NCBITAXON` + +# Querying data using ontological terms + +If your entity is linked to an ontology, the ontology will appears as a related entity on the graph view. +From there, you will be able to directly print the linked term's attributes (label, or other) + +![Ontology graph](img/ontology_graph.png){: .center} + +If the ontology was registered (and an autocompletion type was selected), the label field will have autocompletion (starting after 3 characters). + +![Ontology autocompletion](img/ontology_autocomplete.png){: .center} + +## Querying on hierarchical relations + +You can also query on a related term, to build queries such as : + +* Give me all entities related to the children of this term +* Give me all entities related any ancestor of this term + +To do so, simply click on the linked ontology circle, fill out the required label (or other attribute), and click on the link between both ontologies to select the type of query (either *children of*, *descendants of*, *parents of*, *ancestors of*) + +![Ontology search](img/ontology_link.png){: .center} + +!!! warning + The relation goes from the second ontology circle to the first. Thus, to get the *children of* a specific term, you will need to select the *children of* relation, and select the label on the **second** circle diff --git a/docs/prefixes.md b/docs/prefixes.md new file mode 100644 index 00000000..acec6b54 --- /dev/null +++ b/docs/prefixes.md @@ -0,0 +1,11 @@ +Starting for the 4.4 release, custom prefixes can be added in the administration UI. +These prefixes can be used by non-admin users when integrating CSV files (for specifying URIs, for instance) + +# Registering a prefix (admin-only) + +You can head to <navbar><i class="fa fa-edit"></i> Prefixes</navbar> in the user tab. There, you will be able to create and delete custom prefixes. + +## Creating a custom prefix + +Simply fill out the desired prefix (ex: *wikibase*), and namespace: (ex: *http://wikiba.se/ontology#*). +Users will be able to fill out data using the wikibase:XXX format. diff --git a/docs/production-deployment.md b/docs/production-deployment.md index adae676d..843e0f30 100644 --- a/docs/production-deployment.md +++ b/docs/production-deployment.md @@ -1,4 +1,4 @@ -In production, AskOmics is deployed with docker and docker-compose. We provide `docker-compose.yml` templates to deploy your instance. +In production, AskOmics is deployed using docker and docker-compose. `docker-compose.yml` templates are provided to deploy your own instance. # Prerequisites @@ -81,11 +81,11 @@ All properties defined in `askomics.ini` can be configured via the environment v !!! warning Change `ASKO_flask_secret_key` and `ASKO_askomics_password_salt` to random string -For more information about AskOmics configuration, see [configuration](configure.md) section. +For more information about AskOmics configuration, see the [configuration](configure.md) section. #### First user -environment variables can also be used to create a user into AskOmics at first start. For this, use `CREATE_USER=true` User information can be configured with the following environment variables: +Environment variables can also be used to create a user into AskOmics at first start. For this, use `CREATE_USER=true` User information can be configured with the following environment variables: - `USER_FIRST_NAME`: User first name (default: Ad) - `USER_LAST_NAME`: User last name (default: Min) @@ -96,4 +96,4 @@ environment variables can also be used to create a user into AskOmics at first s - `GALAXY_API_KEY`: Galaxy URL linked to the user (optional) - `GALAXY_URL`: User Galaxy API Key (optional) -The user will be created only if the users table of the database is empty. \ No newline at end of file +The user will be created only if the users table of the database is empty. diff --git a/docs/query.md b/docs/query.md new file mode 100644 index 00000000..3da6233d --- /dev/null +++ b/docs/query.md @@ -0,0 +1,299 @@ +AskOmics aims to provide a simple interface able to create complex queries on linked entities. +The query interface is customized based on available (both personal and public) integrated data. + + +# Starting point + +Any entity integrated with the *starting entity* type can be used to start a query. Other entities can still be queried through a linked entity. +The starting entity will start with its label already set to 'visible'. + +![Startpoints](img/startpoint.png){: .center} +Once the start entity is chosen, the query builder is displayed. + +On the left-side of the query builder is the entity graph. Nodes (circles) represent *entities* and links represent *relations* between entities. +The currently selected entity is surrounded by a red circle. Dotted links and entities are not yet instantiated. + +![Query builder: Differential Expression is the *selected* entity, GeneLink is a *suggested* entity](img/query_builder.png){: .center} + + +# Filtering on attributes + +The selected entity's attributes are shown as attribute boxes on the right of the graph. + +!!! note "Info" + By default, every instantiated entity (directly or through a relation) has its **label** attribute set to visible (though it can be toggled off). + +Various filters are available to further refine the query, with each attribute type having its own filter: + +- Entity URI, entity label, and String attribute type: exact match or regular expression (equal or not equal) +- Numeric attribute type, FALDO start, FALDO end: comparison operators +- Category attribute type, FALDO reference, FALDO strand: Value selection among a list +- Date attribute type: comparison operators with a date picker +- Boolean attribute type: "True" or "False" selector + +![Attribute boxes for an entity](img/attributes.png){: .center} + +!!! note "Info" + Due to the way SPARQL works, any result row with an empty value for **any** of its column will not be shown. You can force the display of these rows by using the <i class="fa fa-question-circle"></i> button. + +!!! tip + For the Category type, you can Ctrl+Click to either deselect a value, or select multiple values. + +!!! tip + For the Numeric and Date types, you can add filters by clicking on the "+" button. + + +## Additional customization + +In addition to the filter, several customization options are available for each attribute box. Depending on the attribute type, not all options will be available. + +![Additional customization](img/attribute_box.png){: .center} + +From left to right : + +- <i class="fa fa-bookmark"></i>: Mark the attribute as a **form** attribute. More information [here](template.md#forms). +- <i class="fa fa-link"></i>: Link this attribute to another (on a different entity or the same one). + - *This will only show rows where both attributes have the same value*. +- <i class="fa fa-question-circle"></i>: Show all values for this attribute, including empty values. +- <i class="fa fa-ban"></i>: Exclude one or more categories, instead of including. + - *Select where the attribute is not XXX*. +- <i class="fa fa-eye"></i>: Display the attribute value in the results. + +# Filtering on related entities + +To query on a linked entity, simple click on a suggested node. The linked node will be surrounded in a red circle, and the list of attributes on the right-hand side will change to show the new node's attributes. + +!!! note "Info" + Linking entity A (after filtering on parameter A1) to entity B (filtering on parameter B1) in the interface create the following query : + + - *List all entities A who match parameter A1 , AND are linked to any entity B matching parameter B1* + +## Explicit relations + +Explicit relations between entities (defined by the "@" symbol in CSV files, and the *"Parents"/"Derives_from"* relations from GFF files) will appears between related entities. If the relation is a *symetric* relation, it will appear twice between entities. + +## FALDO relations + +All *FALDO* entities will be linked by an implicit *Included_in* relation. This relation is slightly different than *explicit* relations: it relies on the *FALDO* attributes of both entities for the query, instead of a direct link. + + FALDO entities are represented with a green circle and FALDO relations have a green arrow. + +!!! Tip + You can customize the relation by clicking on the *Included in* relation. + + ![Customizing the 'Included in' relation](img/faldo.png){: .center} + +!!! note "Info" + Entity A is *Included_in* Entity B means: + + - **Entity A Start > Entity B Start** *AND* **Entity B End < Entity B End.** + + By default, the inequalities are **Strict**, but it can be changed from the interface. + +!!! Tip + If both entities have a defined *Reference* and/or *Strand* attribute, you will be able to select the **Same reference** and/or **Same strand** options. (Both are selected by default if available) + +!!! Tip + You can **reverse** the relation (Entity B *Included_in* Entity A instead of the opposite) from the interface. + +!!! Warning + *Included_in* queries are **ressource-intensive**, especially if you have a lot of instances for each entity. + +## Filtering displayed relations + +If there are too many related entities displayed, it can be difficult to select the entity you wish to link to. It is possible to filter the displayed relations on either the name of the entity, or the name of the link. + +Simply type out the name you want to filter in either the "Filter links" or the "Filter nodes" fields on the top of the graph. + +![Filtering displayed relations](img/filters.png){: .center} + +!!! Tip + You can stop the *Included_in* relations from being displayed by toggling the *Show FALDO relations* button. + +## Removing instanciated relations + +At any point, you can remove an instanciated node **(and any node linked to it)**, by selecting the node you wish to remove, and using the **Remove Node** button at the top of the interface. + + +# MINUS and UNION subqueries + +**Minus** and **Union** nodes are an additional way of querying on relations. Both nodes are applied to an entity as an additional filter. + +- Minus nodes remove results based on a subquery + - *Show all genes except those that match XXX* +- Union nodes act as a "OR" between multiple subqueries + - *Show all genes that match either XXX or YYY* + +Both type of nodes can be integrated in a bigger query + +- *List genes linked to a mRNA, except mRNA linked to another entity* +- *List genes linked to a mRNA with either attribute A set to XXX, or attribute B set to YYY* + +!!! note "Info" + *Right-click* on any **non-instanciated** node, and select the type of node you wish to use. + + ![Creating a minus or union node](img/custom_nodes.png){: .center} + +!!! note "Info" + The entity affected by the special node is linked with the *Union* or *Minus* relation. + +!!! warning + To avoid displaying empty columns or duplicates in the results, you should disable the *label* display for entities in the sub-queries. + + +## MINUS nodes + +*Minus* nodes **remove** from the results any instance that match a specific subquery. + +- **Display all genes that are not linked to an mRNA** +- **Display all genes that are not linked to an mRNA whose reference is XXX** + +![List all genes, except those linked to a mRNA](img/minus.png){: .center} + + +!!! tip + It's currently the only way to query on the **lack** of relation between entities. + Such as: *List all instances of entity A who are not linked with any instance of entity B* + +!!! note "Info" + To add a minus node on the relation between entities A and B + + - Entity A is currently selected + - Right-clicking on entity B and selecting "MINUS" add a new node to the graph + - Entity B is automatically instanciated and linked to the new minus node + - The query is now: *List all instances of entity A, without instances linked to entity B* + - *Optional*: Disable the display of the label for entity B + +The generated SPARQL query will look like this: + +```turtle +# Listing all genes NOT related to an mRNA by the 'Parent' relation. + +SELECT DISTINCT ?gene1_Label +WHERE { + ?gene1_uri rdf:type <http://askomics.org/data/gene> . + ?gene1_uri rdfs:label ?gene1_Label . + { + MINUS { + ?mRNA31_uri <http://askomics.org/data/Parent> ?gene1_uri . + ?mRNA31_uri rdf:type <http://askomics.org/data/mRNA> . + } + } +} +``` + +!!! tip + You can customize the sub-query further: instead of simply removing any instance linked to a specific entity, you can remove all instances linked to a specific entity whose attribute A is XXX. + + - I want to list all instances of Entity A with the attribute A1 + - But I want to exclude all instances of Entity A that are linked to any instance of Entity B with the attribute B1 + + To create this query: + + 1) Instantiate Entity A with attribute A1 + 2) Right-click on Entity B and select "Convert to MINUS node" + 3) Select entity B + 4) Select attribute B1 for entity B + +!!! note "Info" + You can create multiple *minus* nodes starting from the same entity. Instances that match **any** of the sub-queries will be removed. + + - I want to remove instances that match *condition A* + - I also want to remove instances that match *condition B* + + <i class="fa fa-warning"></i> This is not the same as removing instances that match *condition A* **and** *condition B* <i class="fa fa-warning"></i> + To do so, you will need to add conditions to an existing *minus* node instead of creating a new one. + +!!! Warning + While nested MINUS nodes are possible, the generated query might not be what you would expect. Make sure to check the generated SPARQL query in the results page if the results are not what you expected. + +## UNION node + +UNION nodes implement the conditional **OR**. + +- Display transcripts that are either + - Linked to a 3′-UTR + - Linked to a 5′-UTR + +![List all transcripts linked to either a 3′-UTR or a 5′-UTR](img/union.png){: .center} + +!!! note "Info" + Due to the way UNION nodes works, entities will appear once for each matching sub-query. This can lead to a duplication of results. + This can be solved by setting the label of the entities in the subquery to **Not visible** (<i class="fa fa-eye-slash"></i>) + ![Duplicated results](img/union_duplicated.png){: .center} + +!!! Warning + UNION nodes will only behave as a UNION if there is more than one entity linked to it + +!!! note "Info" + To add an union node on the relations between entities A, B and C + + - Entity A is currently selected + - Right-clicking on entity B and selecting "UNION" add a new node to the graph + - Entity B is instanciated and linked to the new union node + - Click on Entity B and set the label to "Not visible" + - For now, the *union* node has no effect + - Click on the *union* node, and then click on entity C to instanciate it + - Set the label to "Not visible" + - The sparql query is now: *List all instances of entity A that are either linked to entity B or entity C* + + +The generated SPARQL query will look like this: + +```turtle +# List all genes with an ortholog who has either the attribute "organism" set to "Arabidopsis thaliana", or the "reference" attribute set to "Chra01" +# Two sub-queries linked with an UNION + +SELECT DISTINCT ?gene1_Label ?gene3_Label ?gene4_Label +WHERE { + ?gene1_uri rdf:type <http://askomics.org/data/gene> . + ?gene1_uri rdfs:label ?gene1_Label . + { + { + ?gene1_uri <http://askomics.org/data/ortholog_of> ?gene26_uri . + ?gene26_uri rdf:type <http://askomics.org/data/gene> . + ?gene26_uri rdfs:label ?gene3_Label . + ?gene26_uri faldo:location/faldo:begin/faldo:reference ?gene26_chromosomeCategory . + VALUES ?gene26_chromosomeCategory { <http://askomics.org/data/Chra01> } + } + UNION { + ?gene1_uri <http://askomics.org/data/ortholog_of> ?gene64_uri . + ?gene64_uri rdf:type <http://askomics.org/data/gene> . + ?gene64_uri rdfs:label ?gene4_Label . + ?gene64_uri <http://askomics.org/data/organism> ?gene64_organismCategory . + VALUES ?gene64_organismCategory { <http://askomics.org/data/Arabidopsis%20thaliana> } + } + } +} +``` + +!!! tip + You can customize the sub-query further. + I want to list all instances of Entity A that are either: + + - Linked to entity B with attribute B1 + - Linked to entity C, itself linked to entity D + + +!!! note "Info" + Sub-sub-queries (entities linked to the UNION node) can be as complex as you want : + + - *I want instances of entity A either linked to entities B with attribute B1, or linked entities C linked with entity D* + +!!! Warning + Just as MINUS node, nested UNION nodes might not behave as you want. Make sure to check the generated SPARQL query in the results page if the results appear to be strange. + + +## Removing special nodes + +Much like a "normal" node, you can remove special nodes (and any node linked to it) at any time by selecting it, and using the **Remove Node** button. + + +# Launching queries + +Once you are satisfied with your query, you can either: + +- Preview the results (*at most 30 rows*) with <btn><i class="fa fa-table"></i> Run & Preview</btn> +- Send a full query with <btn><i class="fa fa-table"></i> Run & save</btn> + +In the case of a full query, you will be able to access the query results (and more) on the [results page](results.md) diff --git a/docs/requirements.txt b/docs/requirements.txt index 591f7c09..100e7c46 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ -mkdocs==1.0.4 +mkdocs==1.2.3 +markdown-captions==2 diff --git a/docs/results.md b/docs/results.md new file mode 100644 index 00000000..438ce8fe --- /dev/null +++ b/docs/results.md @@ -0,0 +1,79 @@ +On the <navbar><i class="fa fa-tasks"></i> Results</navbar> page, you will be able to see all your saved results (after using the <btn><i class="fa fa-save"></i> Run & save</btn> button). Each row stores both the query and its results. + +# General information + +Result information can be found for each row : + +- Creation data: The creation time of this result +- Exec time: The running time of the linked query +- Status: Current status of the query + - Possible values are 'Success', 'Queued', 'Started', 'Failure' and 'Deleting' +- Rows: Number of rows in the result +- Size: Size of the result file + +## Description + +Each description can be customized by clicking on the field, and entering the desired value. You can use this to identify the query related to this result. + +!!! Warning + Don't forget to save your new description using **Enter** + +!!! note "Info" + The description will be displayed on the main page if you transform this query in a [template or form](template.md). + +# Templates and forms + +You can use the available toggle buttons if you wish to create a [template or form](template.md). + +!!! Warning + Form creation is restricted to administrators. The related query must also be a [form-able query](template.md#Forms). + +# Publication + +The 'Public' toggle is available if you are an administrator. If will automatically create a public form (if the result is form-able), or a template. They will be accessible to **all users** from the main page. + +!!! Tip + Make sure to set a custom description (and [customize your form](template.md#editing-the-form-display), if relevant) to help users understand your template/form. + +# Actions + +Several actions are also available for each result : + +## Preview + +<btn class="white">Preview</btn> directly re-launch the related query, and print a preview of the results. +The preview will be shown under the results table. + +## Download + +Clicking on <btn class="white">Download</btn> will let you download a CSV file containing the results. + +## Form + +Clicking on <btn class="white">Form</btn> will let you customize the related form display. + +!!! Warning + Only available for administator and form-able results. + +## Redo + +Clicking on <btn class="white">Redo</btn> will let you directly replay the query from the query interface. It will be in the exact same state as when you clicked on <btn><i class="fa fa-save"></i> Run & save</btn>. + +!!! Warning + Only available results generated from the query interface. + +## Sparql + +Clicking on <btn class="white">Sparql</btn> will redirect you to the [SPARQL console](console.md). You will be able to browse the SPARQL code generated by your query. + +!!! note "Info" + Depending on your AskOmics configuration, you might be able to directly customize the query and launch it from the console. + +![SPARQL query generated by AskOmics](img/sparql.png){: .center} + +# Deletion + +To delete one or more results, simply select them in the table, and use the "Delete" button at the bottom of the table. + +!!! Warning + This will delete any template or form generated from the result. diff --git a/docs/style.css b/docs/style.css index 686c23c6..7b96bac7 100644 --- a/docs/style.css +++ b/docs/style.css @@ -19,11 +19,15 @@ btn { } btn.white { + border: 2px solid #6c757d; background-color: white; - color: #5a6268; - padding-right: 5px; - padding-left: 5px; - border-radius: 5px; + color: #6c757d; + cursor: pointer; +} + +btn.white:hover { + color:white; + background: #6c757d; } badge { @@ -70,3 +74,14 @@ div.admonition.quote > p.admonition-title { color: #007bff; } +.center { + display: block; + max-width: 100%; + height: auto; + margin: auto; + float: none!important; + text-align: center; + font-style: italic; +} + +.fa { display:inline; } diff --git a/docs/template.md b/docs/template.md new file mode 100644 index 00000000..e9692bcb --- /dev/null +++ b/docs/template.md @@ -0,0 +1,98 @@ +One of the goal of AskOmics is to enable re-use and customization of complex queries shared by other users. +This functionality is available in two different ways. + +# Templates + +Templates are a simple way for yourself or another user to replay your queries. They will access a **copy** of the query graph, and be able to customize all parameters and relations (this includes linking to additional entities). + +Templates will appears on the right-side of the homepage. The description of the template can be customized to include more information regarding the query. + +!!! Warning + By default, your templates are private. To publicize them, you need administrator privileges. + +## Creating a template + +To create a template, first create the query you want, and <btn><i class="fa fa-table"></i> Run & save</btn>. +Then, in the result page, you can toggle the 'template' attribute to create the template. + +## Editing the template description + +You can modify the template description the same way you would edit the result description. Simple click on the value of the 'Description' column, and enter your own description. + +!!! Warning + Don't forget to save with the **Enter** key. + +## Using the template + +On the AskOmics homepage, simply click on the template of interest to access the query interface. From there, you can simply interact with it as you would with a normal query, including saving the results. + +![Template display on the home page](img/template.png){: .center} + +!!! note "Info" + Any change to the query will not affect the template. + +## Removing the template + +To remove the template, you can either toggle the 'template' attribute back to *off*, or delete the result as a whole. + +# Forms + +Whereas templates allow users to completely replay your queries (including modifying the query graphs), forms aim to be a much simpler way to share your queries for users not familiar with the way AskOmics works. + +!!! Warning + Forms are restricted to administrators. + +When using a form, other users will only able to change the values for a set of parameters you will have selected beforehand. + +For instance, if your query is *List all users whose favorite color is red*, users will only be able to change the favorite color, before sending the query. + +![Example of a form: the user can only change the favorite color](img/form_example.png){: .center} + +In addition, you will be able to customize the form before sharing it, such as changing the description (much like templates), but also the name of each entity and attribute. + +Like templates, forms will appear on the right side of the homepage, with the chosen description. + +!!! Warning + Users will only be able to interact with *form attributes*. They will not be able to affect or change visibility for other attributes. + +!!! Warning + A given **Result** can be either a form or a template, but not both. + +## Creating a form + +To create a form, you will first to create a **form-ifiable** query. To do so, start with a regular query, and toggle the template ( <i class="fa fa-bookmark"></i> ) button on all attributes of interest. Selected attributes will be modifiable in the form. + +After saving the query with <btn><i class="fa fa-table"></i> Run & save</btn>, head to the *Results* page. +You will be able to toggle the 'Form' button, creating the form. + +!!! Warning + The form creation option is restricted to form-ifiable (meaning, with at least one selected attribute) queries. + +## Editing the form description + +You can modify the form description the same way you would edit the result (and template) description. Simple click on the value of the 'Description' column, and enter your own description. + +!!! Warning + Don't forget to save with the **Enter** key. + +## Editing the form display + +For each entity with a form attribute, the form will display both the entity name, and each attribute label (in addition to the input field). You can customize this display (for instance, changing the display entity name to something more readable, or changing an attribute label to make your query more explicit) + +To do so, simply click on <btn class="white">Form</btn> to access the *form editing interface*. +You can then simply edit entities and attributes labels, and click on <btn><i class="fa fa-save"></i> Save</btn> to save the new display. + +![Form editing interface](img/form_edit.png){: .center} + +!!! Warning + The query results will not be affected by these changes (the column name will still match the default attribute label). + +## Using the form + +On the AskOmics homepage, simply click on the form of interest to access the interface. + +![Form display on the home page](img/form.png){: .center} + +## Removing the form + +To remove the form, you can either toggle the 'form' attribute back to *off*, or delete the result as a whole. diff --git a/docs/tutorial.md b/docs/tutorial.md index 0f3f5e7c..0059027f 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -1,16 +1,20 @@ AskOmics is a web software for data integration and query using the Semantic Web technologies. It helps users to convert multiple data sources (CSV/TSV files, GFF and BED annotation) into RDF triples, and perform complex queries using a user-friendly interface. -In this tutorial, we will learn the basics of AskOmics by analyses RNA-seq results. The data comes from a differential expression analysis and are provided for you. 4 files will be used in this tutorial: +In this tutorial, we will learn the basics of AskOmics by analysing RNA-seq results. The provided datasets come from a differential expression analysis. + +4 files will be used in this tutorial: - [Differentially expressed results file](https://zenodo.org/record/2529117/files/limma-voom_luminalpregnant-luminallactate): genes in rows, and 4 required columns: identifier (ENTREZID), gene symbol (SYMBOL), log fold change (logFC) and adjusted P values (adj.P.Val) - [Reference genome annotation file](https://zenodo.org/record/3601076/files/Mus_musculus.GRCm38.98.subset.gff3) in GFF format -- [Correspondence file between gene symbol and Ensembl id](https://zenodo.org/record/3601076/files/symbol-ensembl.tsv): TSV of two columns: symbol and the corresponding Ensembl id +- [Correspondence file between gene symbol and Ensembl id](https://zenodo.org/record/3601076/files/symbol-ensembl.tsv): TSV with two columns: symbol and the corresponding Ensembl id - [QTL file](https://zenodo.org/record/3601076/files/MGIBatchReport_Qtl_Subset.txt): QTL in row, with 5 required columns: identifier, chromosome, start, end and name -Throughout the guide, you will find <badge class="hands-on">Hands-on</badge> containing tutorial instruction to perform in order to get started with AskOmics. +Throughout the guide, you will find <badge class="hands-on">Hands-on</badge> sections containing instructions to perform in order to get started with AskOmics. To complete the tutorial, you will need an AskOmics instance. You can [install your own](production-deployment.md) or use this [public instance](https://use.askomics.org). +A Galaxy Training tutorial is also available [here](https://training.galaxyproject.org/training-material/topics/transcriptomics/tutorials/rna-seq-analysis-with-askomics-it/tutorial.html) + # Account creation and management @@ -22,18 +26,18 @@ AskOmics is a multi-user platform. To use it, you will need an account on the in Create your AskOmics account (or login with your existing one) -Once your are logged, you can use all the functionalities of AskOmics. +Once you are logged, you can use all the functionalities of AskOmics. ## Manage your account -To manage your account, use the <navbar><i class="fa fa-cog"></i> Account management</navbar> tab by clicking on <navbar><i class="fa fa-user"></i> Your Name ▾</navbar> on the navigation bar. +To manage your account, use the <navbar><i class="fa fa-cog"></i> Account management</navbar> tab by clicking on <navbar><i class="fa fa-user"></i> *Your Name ▾*</navbar> on the navigation bar. -Uses the forms to change your personal information. +You can use the forms to change your personal information. # Data integration -AskOmics convert project specific data into RDF triples automatically. It can convert CSV/TSV, GFF and BED files. +AskOmics will convert project specific data into RDF triples automatically. It can convert CSV/TSV, GFF and BED files. !!! Hands-on Download the files for the tutorial using the following links:<br /> @@ -55,9 +59,9 @@ You can upload files from your computer, or distant files using an URL. !!! Tip You can also copy files URL and use the <navbar><i class="fa fa-upload"></i> URL</navbar> button. -Uploaded files are displayed into the files table. Filenames can be change by clicking on it. +Uploaded files are displayed into the files table. Filenames can be changed by clicking on it. -![files_table](img/files_table.png "files_table") +![Files table](img/files_table.png "files_table"){: .center} Next step is to convert this files into RDF triples. This step is called *Integration*. Integration will produce a RDF description of your data: the *Abstraction*. @@ -67,18 +71,22 @@ Next step is to convert this files into RDF triples. This step is called *Integr ## Integration +Detailed information regarding the *Integration* step can be found [here](data.md). + The *integration* convert input files into RDF triples, and load them into an RDF triplestore. AskOmics can convert CSV/TSV, GFF3 and BED files. During the step of integration, AskOmics show a preview of each files. We can choose how the file will be integrated at this step. +More information about data integration is available [here](data.md) + ### GFF -GFF files contain genetic coordinate of entities. Each entities contained in the GFF file are displayed on the preview page. We can Select the entities that will be integrated. +GFF files contain genetic coordinate of entities. Each entity contained in the GFF file is displayed on the preview page. We can Select the entities that will be integrated. !!! Hands-on 1. Search for `Mus_musculus.GRCm38.98.subset.gff3 (preview)` 2. Select `gene` and `mRNA` 3. <btn>Integrate (Private dataset)</btn> - ![De results preview](img/gff_preview.png) + ![Integration interface for GFF files](img/gff_preview.png){: .center} ### CSV/TSV @@ -86,7 +94,7 @@ GFF files contain genetic coordinate of entities. Each entities contained in the The TSV preview show an HTML table representing the TSV file. During integration, AskOmics will convert the file using the header. <!-- First col: entity, then, attribute --> -The first column of a TSV file will be the *entity* name. Other columns of the file will be *attributes* of the *entity*. *Labels* of the *entity* and *attributes* will be set by the header. This *labels* can be edited by clicking on it. +The first column of a TSV file will be the *entity* name. Other columns of the file will be *attributes* of the *entity*. *Labels* of the *entity* and *attributes* will be set by the header. The column names can be edited by clicking on it. <!-- Attribute types --> Entity and attributes can have special types. The types are defined with the select below the header. An *entity* can be a *start entity* or an *entity*. A *start entity* mean that the entity may be used to start a query. @@ -95,6 +103,7 @@ Attributes can take the following types: - Numeric: if all the values are numeric - Text: if all the values are strings +- Date: if all the values are dates - Category: if there is a limited number of repeated values If the entity describe a locatable element on a genome: @@ -116,7 +125,7 @@ A columns can also be a relation between the *entity* to another. In this case, - Keep the other column names and set their types to *numeric* 3. <btn>Integrate (Private dataset)</btn> - ![De results preview](img/de_results_preview.png) + ![Integration interface for CSV files](img/de_results_preview.png){: .center} !!! Hands-on 1. Search for `symbol-ensembl.tsv (preview)` @@ -125,7 +134,7 @@ A columns can also be a relation between the *entity* to another. In this case, - change `ensembl` to `linkedTo@gene` and set type to *Directed relation* 3. <btn>Integrate (Private dataset)</btn> - ![Symbol to Ensembl preview](img/symbol_to_ensembl_preview.png) + ![Modifying the name and type of a column](img/symbol_to_ensembl_preview.png){: .center} !!! Hands-on 1. Search for `MGIBatchReport_Qtl_Subset.txt (preview)` @@ -136,7 +145,7 @@ A columns can also be a relation between the *entity* to another. In this case, - set `End` type to *End* 3. <btn>Integrate (Private dataset)</btn> - ![QTL preview](img/qtl_preview.png) + ![Preview of the QTL file](img/qtl_preview.png){: .center} ### Manage integrated datasets @@ -148,11 +157,11 @@ Integration can take some times depending on the file size. The <navbar><i class 1. Go to <navbar><i class="fa fa-database"></i> Datasets</navbar> page 2. Wait for all datasets to be *success* - ![dataset](img/datasets.png "Datasets table") + ![Table of datasets](img/datasets.png "Datasets table"){: .center} -The table show all integrated datasets. The *status* column show if the datasets is fully integrated or in the process of being integrated. +The table show all integrated datasets. The *status* column show if the datasets are fully integrated or in the process of being integrated. @@ -160,13 +169,15 @@ The table show all integrated datasets. The *status* column show if the datasets Once all the data of interest is integrated (converted to RDF graphs), its time to query them. Querying RDF data is done by using the SPARQL language. Fortunately, AskOmics provides a user-friendly interface to build SPARQL queries without having to learn the SPARQL language. +More information about the query building process is available [here](query.md) + ## Query builder overview ### Simple query The first step to build a query is to choose a start point for the query. -![ask](img/startpoint.png) +![List of startpoints](img/startpoint.png){: .center} !!! Hands-on @@ -178,19 +189,19 @@ The first step to build a query is to choose a start point for the query. Once the start entity is chosen, the query builder is displayed. -The query builder is composed of a graph. Nodes represents *entities* and links represents *relations* between entities. The selected entity is surrounded by a red circle. links and other entities are dotted and lighter because there are not instantiated. +The query builder is composed of a graph. Nodes represents *entities* and links represents *relations* between entities. The selected entity is surrounded by a red circle. Links and other entities are dotted and lighter because there are not instantiated. -![query builder](img/query_builder.png "Query builder, Differential Expression is the selected entity, GeneLink is a suggested entity") +![The query builder](img/query_builder.png "Query builder, Differential Expression is the selected entity, GeneLink is a suggested entity"){: .center} On the right, attributes of the selected entity are displayed as attribute boxes. Each boxes have an eye icon. Open eye mean the attribute will be displayed on the results. !!! Hands-on 1. Display `logFC` and `adj.P.val` by clicking on the <i class="fa fa-eye"></i> eye icon - 2. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 2. <btn><i class="fa fa-table"></i> Run & preview</btn> -![preview results](img/preview_results.png "Results preview") +![Preview of results](img/preview_results.png "Results preview"){: .center} -<btn><i class="fa fa-table"></i> Run & Preview</btn> launch the query with a limit of 30 rows returned. We use this button to get an idea of the results returned. +<btn><i class="fa fa-table"></i> Run & preview</btn> launch the query with a limit of 30 rows returned. We use this button to get an idea of the results returned. ### Filter on attributes @@ -200,38 +211,39 @@ Next query will search for all over-expressed genes. Genes are considered over-e !!! Hands-on 1. Filter `logFC` with `>` `2` 2. Filter `adj.P.val` with `≤` `0.05` - 2. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 2. <btn><i class="fa fa-table"></i> Run & preview</btn> Results show only significantly over-expressed genes. ### Filter on relations -Now that we have our genes if interest, we will link these genes to the reference genome to get information about location. +Now that we have our genes if interest, we will link these genes to the reference genome to get information about the location. -To constraint on relation, we have to click on suggested nodes, linked to our entity of interest. +To constraint on a relation, we have to click on any suggested nodes linked to our entity of interest. !!! Hands-on 1. First, hide `Label`, `logFC` and `adj.P.val` of `Differential Expression` 2. Instantiate `GeneLink`, and hide `Label` 3. Instantiate `gene` - 2. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 2. <btn><i class="fa fa-table"></i> Run & preview</btn> -Results now show the Ensembl id of our over-expressed genes. We have now access to all the information about the `gene` entity containing on the GFF file. for example, we can filter on chromosome and display chromosome and strand to get information about gene location. +Results now show the Ensembl id of our over-expressed genes. We have now access to all the information about the `gene` entity containing on the GFF file. For example, we can filter on chromosome and display chromosome and strand to get information about the gene location. !!! Hands-on 1. Show `reference` and `strand` using the eye icon 2. Filter `reference` to select `X` and `Y` chromosomes (use `ctrl`+`click` to multiple selection) - 2. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 2. <btn><i class="fa fa-table"></i> Run & preview</btn> ### Use FALDO ontology to query on the position of elements on the genome. -The [FALDO](https://bioportal.bioontology.org/ontologies/FALDO) ontology describe sequence feature positions and regions. AskOmics use FALDO ontology to represent entity positions. GFF are using FALDO, as well as TSV entities with chromosome, strand, start and end. +The [FALDO](https://bioportal.bioontology.org/ontologies/FALDO) ontology describe sequence features's positions and regions. AskOmics use the FALDO ontology to represent entity positions. +All entities extracted from GFF and BED files use this ontology, in addition to any entity extracted from a CSV/TSV file with a reference, strand, start and end columns. -The FALDO ontology are used in AskOmics to perform special queries between 2 FALDO entities. These queries are: +The FALDO ontology is used in AskOmics to perform special queries between 2 FALDO entities. These queries are: -- Entity included in another entity -- Entity overlapping another one +- Entity is included in another entity +- Entity is overlapping another entity On the query builder interface, FALDO entities are represented with a green circle and FALDO relations have a green arrow. @@ -241,19 +253,19 @@ On the query builder interface, FALDO entities are represented with a green circ 3. Instantiate `QTL` 4. Click on the link between `gene` and `QTL` to edit the relation 5. check that the relation is `gene` `included in` `QTL` `on the same reference` with `strict` ticked - 7. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 7. <btn><i class="fa fa-table"></i> Run & preview</btn> To go further, we can filter on `QTL` to refine the results. !!! Hands-on - 1. got back to the `QTL` node + 1. Go back to the `QTL` node 2. Show the `Name` attribute using the eye icon 3. Filter the name with a `regexp` with `growth` - 4. <btn><i class="fa fa-table"></i> Run & Preview</btn> + 4. <btn><i class="fa fa-table"></i> Run & preview</btn> -From now, our query is "All Genes that are over-expressed (logFC > 2 and FDR ≤ 0.05) and located on a QTL that are related to growth" This is the results that we are looking for. So we can save it. +From now, our query is "All Genes that are over-expressed (logFC > 2 and FDR ≤ 0.05) and located on a QTL that are related to growth" This is the results that we are looking for. We can now save it. !!! Hands-on 1. <btn><i class="fa fa-table"></i> Run & save</btn> @@ -266,21 +278,36 @@ The results page store the saved queries. A table show some useful information a !!! Hands-on 1. Click on the name and enter `Over-expressed genes on a growth QTL` - 2. press `enter` key + 2. Press the `Enter` key - ![results table](img/results_table.png) + ![Table of results](img/results_table.png){: .center} -The **Action** column contain button to perform certain action: +The **Action** column contain buttons to perform certain action: -- Preview: show a results preview on the bottom of the table +- Preview: Show a results preview on the bottom of the table - Download: Download the results (TSV file) - Edit: Edit the query with the query builder -- SPARQL: edit the query with a SPARQL editor for advanced users +- SPARQL: Access the generated SPARQL query for the result + +For more information about the Results page, please head [here](results.md) !!! Hands-on - 1. Download the results file on your computer using <btn class="white">Download</btn> button + 1. Download the results file on your computer using the <btn class="white">Download</btn> button. +The <btn class="white">Edit</btn> button can be used to simply replay the query after changing some parameters. + +!!! Hands-on + 1. Edit the query, and replace "growth" with another term of interest (such as "anxiety"). + 2. Preview the results + + +## Advanced queries + +Advanced queries, including *UNION* and *MINUS* SPARQL queries are also available to further your queries. +Please head [here](query.md#minus-and-union-nodes) for more information. # Conclusion -In this tutorial we have seen how to use AskOmics Interactive Tool to Build a complex SPARQL query to interrogate 4 different datasets and answer a biological question. \ No newline at end of file +In this tutorial we have seen how to use the AskOmics Interactive Tool, building a complex SPARQL query to interrogate 4 different datasets and answer a biological question. + +This tutorial was a brief overview of AskOmics's functionalities. Please check the other categories on the left-side for more information. diff --git a/mkdocs.yml b/mkdocs.yml index 3d88af34..ae5b080b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -3,7 +3,7 @@ repo_url: https://github.com/askomics/flaskomics edit_uri: edit/master/docs/ site_author: Xavier Garnier -theme: +theme: name: readthedocs highlightjs: true hljs_languages: @@ -12,6 +12,8 @@ theme: - javascript markdown_extensions: - admonition + - attr_list + - markdown_captions - toc: permalink: true toc_depth: 1 @@ -21,20 +23,26 @@ nav: - Home: index.md - AskOmics tutorials: - Overview tutorial: tutorial.md - - Prepare data: data.md + - Preparing data: data.md + - Building a query: query.md + - Managing results: results.md + - Templates & forms: template.md + - SPARQL console: console.md + - Command-line interface: cli.md - Build RDF Abstraction: abstraction.md - Federated queries: federation.md - AskOmics and Galaxy: galaxy.md - - Contribute: issues.md - - Admin : + - AskOmics and ontologies: ontologies.md + - Administrator guide: - Deploy AskOmics: production-deployment.md - Configure: configure.md - Manage: manage.md + - Custom prefixes: prefixes.md - Developer guide: - Dev deployment: dev-deployment.md - Contribute: contribute.md - CI: ci.md - - Doc: docs.md + - Documentation: docs.md - Bug Tracker: https://github.com/askomics/flaskomics/issues - Project monitoring: https://github.com/askomics/flaskomics/projects diff --git a/package-lock.json b/package-lock.json index 4da746c6..a8d78062 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "AskOmics", - "version": "4.3.1", + "version": "4.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1416,19 +1416,18 @@ "dev": true }, "@npmcli/git": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.6.tgz", - "integrity": "sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^1.1.0", + "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", - "mkdirp": "^1.0.3", - "npm-pick-manifest": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", - "semver": "^7.3.2", - "unique-filename": "^1.1.1", + "semver": "^7.3.5", "which": "^2.0.2" }, "dependencies": { @@ -2229,11 +2228,11 @@ "dev": true }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz", + "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "babel-code-frame": { @@ -4548,6 +4547,11 @@ "is-symbol": "^1.0.2" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5342,9 +5346,9 @@ } }, "follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" }, "for-in": { "version": "1.0.2", @@ -5514,6 +5518,11 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-input-selection": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/get-input-selection/-/get-input-selection-1.1.4.tgz", + "integrity": "sha512-o3rv95OOpoHznujIEwZljNhUM9efW/gZsIKCQtTrjRU4PkneVpDvxNBmC7kXC4519lZYT95DKcdj0A5f9GZkKg==" + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -7114,9 +7123,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.3", @@ -7468,9 +7477,9 @@ "optional": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "nosleep.js": { @@ -8116,9 +8125,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -8204,9 +8213,9 @@ "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -8327,12 +8336,9 @@ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, "prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "requires": { - "clipboard": "^2.0.0" - } + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" }, "private": { "version": "0.1.8", @@ -8629,6 +8635,18 @@ "object-assign": "^4.1.0" } }, + "react-autosuggest": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-autosuggest/-/react-autosuggest-10.1.0.tgz", + "integrity": "sha512-/azBHmc6z/31s/lBf6irxPf/7eejQdR0IqnZUzjdSibtlS8+Rw/R79pgDAo6Ft5QqCUTyEQ+f0FhL+1olDQ8OA==", + "requires": { + "es6-promise": "^4.2.8", + "prop-types": "^15.7.2", + "react-themeable": "^1.1.0", + "section-iterator": "^2.0.0", + "shallow-equal": "^1.2.1" + } + }, "react-bootstrap-table-next": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz", @@ -8821,6 +8839,37 @@ "refractor": "^3.2.0" } }, + "react-themeable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-themeable/-/react-themeable-1.1.0.tgz", + "integrity": "sha512-kl5tQ8K+r9IdQXZd8WLa+xxYN04lLnJXRVhHfdgwsUJr/SlKJxIejoc9z9obEkx1mdqbTw1ry43fxEUwyD9u7w==", + "requires": { + "object-assign": "^3.0.0" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==" + } + } + }, + "react-tooltip": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", + "integrity": "sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==", + "requires": { + "prop-types": "^15.7.2", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + } + } + }, "react-transition-group": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", @@ -8988,6 +9037,16 @@ "hastscript": "^6.0.0", "parse-entities": "^2.0.0", "prismjs": "~1.23.0" + }, + "dependencies": { + "prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", + "requires": { + "clipboard": "^2.0.0" + } + } } }, "regenerate": { @@ -9330,6 +9389,11 @@ "ajv-keywords": "^3.5.2" } }, + "section-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/section-iterator/-/section-iterator-2.0.0.tgz", + "integrity": "sha512-xvTNwcbeDayXotnV32zLb3duQsP+4XosHpb/F+tu6VzEZFmIjzPdNk6/O+QOOx5XTh08KL2ufdXeCO33p380pQ==" + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -9418,6 +9482,11 @@ "safe-buffer": "^5.0.1" } }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9455,9 +9524,9 @@ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "requires": { "decompress-response": "^3.3.0", "once": "^1.3.1", @@ -10013,9 +10082,9 @@ "dev": true }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -10096,6 +10165,11 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "textarea-caret": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/textarea-caret/-/textarea-caret-3.1.0.tgz", + "integrity": "sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q==" + }, "three": { "version": "0.126.1", "resolved": "https://registry.npmjs.org/three/-/three-0.126.1.tgz", @@ -11080,9 +11154,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" diff --git a/package.json b/package.json index 7f18fcc9..a22d4138 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "ontology" ], "name": "AskOmics", - "version": "4.3.1", + "version": "4.4.0", "description": "Visual SPARQL query builder", "author": "Xavier Garnier", "license": "AGPL-3.0", @@ -39,7 +39,7 @@ "@fortawesome/free-brands-svg-icons": "^5.14.0", "@fortawesome/free-regular-svg-icons": "^5.14.0", "@sentry/browser": "^5.24.2", - "axios": "^0.21.1", + "axios": "^0.21.2", "babel-preset-env": "^1.7.0", "bootstrap": "^4.5.2", "css-loader": "^4.3.0", @@ -50,10 +50,11 @@ "immutability-helper": "^3.1.1", "js-file-download": "^0.4.12", "pretty-time": "^1.1.0", - "prismjs": "^1.23.0", + "prismjs": "^1.27.0", "qs": "^6.9.4", "react": "^16.13.1", "react-ace": "^9.1.3", + "react-autosuggest": "^10.1.0", "react-addons-update": "^15.6.3", "react-bootstrap-table-next": "^4.0.3", "react-bootstrap-table2-editor": "^1.4.0", @@ -67,6 +68,7 @@ "react-router-dom": "^5.2.0", "react-simple-code-editor": "^0.11.0", "react-syntax-highlighter": "^15.4.3", + "react-tooltip": "^4.2.21", "reactstrap": "^8.6.0", "style-loader": "^1.2.1", "url-loader": "^4.1.0" diff --git a/setup.py b/setup.py index 158a2a43..85cf2122 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='askomics', - version='4.3.1', + version='4.4.0', description=''' AskOmics is a visual SPARQL query interface supporting both intuitive data integration and querying while shielding the user from most of the @@ -17,8 +17,8 @@ "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", ], - maintainer='Xavier Garnier', - maintainer_email='xavier.garnier@irisa.fr', + maintainer='Mateo Boudet', + maintainer_email='mateo.boudet@inrae.fr', url='https://github.com/askomics/flaskomics', keyword='rdf sparql query data integration', packages=find_packages(), diff --git a/test-data/agro_min.ttl b/test-data/agro_min.ttl new file mode 100644 index 00000000..4f895879 --- /dev/null +++ b/test-data/agro_min.ttl @@ -0,0 +1,70 @@ +@prefix askomics: <https://test-192-168-100-87.vm.openstack.genouest.org/internal/> . +@prefix owl: <http://www.w3.org/2002/07/owl#> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix xml: <http://www.w3.org/XML/1998/namespace> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix ns1: <http://www.w3.org/ns/prov#> . + + +<http://purl.obolibrary.org/obo/agro.owl> a askomics:ontology ; + a owl:ontology ; + rdfs:label "AGRO". + +[] a owl:ObjectProperty ; + a askomics:AskomicsRelation ; + askomics:uri rdfs:subClassOf ; + rdfs:label "subClassOf" ; + rdfs:domain <http://purl.obolibrary.org/obo/agro.owl> ; + rdfs:range <http://purl.obolibrary.org/obo/agro.owl>. + + +<http://purl.obolibrary.org/obo/AGRO_00000007> a owl:Class ; + rdfs:label "desuckering" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000027> . + +<http://purl.obolibrary.org/obo/AGRO_00000008> a owl:Class ; + rdfs:label "irrigation water source role" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/BFO_0000023> . + +<http://purl.obolibrary.org/obo/AGRO_00000010> a owl:Class ; + rdfs:label "irrigation water quantity" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/PATO_0000122>, + <http://purl.obolibrary.org/obo/PATO_0000918> . + +<http://purl.obolibrary.org/obo/AGRO_00000016> a owl:Class ; + rdfs:label "reduced tillage process" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000002> . + +<http://purl.obolibrary.org/obo/AGRO_00000020> a owl:Class ; + rdfs:label "laser land levelling process" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000004> . + +<http://purl.obolibrary.org/obo/AGRO_00000024> a owl:Class ; + rdfs:label "chemical pest control process" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000023> . + +<http://purl.obolibrary.org/obo/AGRO_00000026> a owl:Class ; + rdfs:label "no-till" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_01000015>, + <http://purl.obolibrary.org/obo/ENVO_02500000> . + +<http://purl.obolibrary.org/obo/AGRO_00000028> a owl:Class ; + rdfs:label "puddling process" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000002> . + +<http://purl.obolibrary.org/obo/AGRO_00000029> a owl:Class ; + rdfs:label "mulch-till" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000017> . + +<http://purl.obolibrary.org/obo/AGRO_00000030> a owl:Class ; + rdfs:label "ridge-till" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000017> . + +<http://purl.obolibrary.org/obo/AGRO_00000031> a owl:Class ; + rdfs:label "strip-till" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000017> . + +<http://purl.obolibrary.org/obo/AGRO_00000037> a owl:Class ; + rdfs:label "aerial application" ; + rdfs:subClassOf <http://purl.obolibrary.org/obo/AGRO_00000036> . diff --git a/test-data/gene.bed b/test-data/gene.bed index ebfc540a..ffd3c788 100644 --- a/test-data/gene.bed +++ b/test-data/gene.bed @@ -8,4 +8,4 @@ track name="TilingArray" description="TilingArray demonstration" visibility=2 us 7 127477031 127478198 Neg2 400 - 127477031 127478198 0,0,255 7 127478198 127479365 Neg3 300 - 127478198 127479365 0,0,255 7 127479365 127480532 Pos5 1000 + 127479365 127480532 255,0,0 -7 127480532 127481699 Neg4 0 - 127480532 127481699 0,0,255 +7 127480532 127481699 Neg4 0 . 127480532 127481699 0,0,255 diff --git a/test-data/gene.gff3 b/test-data/gene.gff3 index e4b799fb..23c36b1c 100644 --- a/test-data/gene.gff3 +++ b/test-data/gene.gff3 @@ -7,6 +7,8 @@ #!genebuild-last-updated 2010-09 1 tair gene 3631 5899 . + . ID=gene:AT1G01010;Name=NAC001;biotype=protein_coding;description=NAC domain-containing protein 1 [Source:UniProtKB/Swiss-Prot%3BAcc:Q0WV96];gene_id=AT1G01010;logic_name=tair 1 tair transcript 3631 5899 . + . ID=transcript:AT1G01010.1;Parent=gene:AT1G01010;Name=ANAC001;biotype=protein_coding;transcript_id=AT1G01010.1 +1 tair transcript 3632 5900 . - . ID=transcript:AT1G01010.2;Parent=gene:AT1G01010;Name=ANAC002;biotype=protein_coding;transcript_id=AT1G01010.2 +1 tair transcript 3633 5901 . . . ID=transcript:AT1G01010.3;Parent=gene:AT1G01010;Name=ANAC003;biotype=protein_coding;transcript_id=AT1G01010.3 1 tair five_prime_UTR 3631 3759 . + . Parent=transcript:AT1G01010.1 1 tair exon 3631 3913 . + . Parent=transcript:AT1G01010.1;Name=AT1G01010.1.exon1;constitutive=1;ensembl_end_phase=1;ensembl_phase=-1;exon_id=AT1G01010.1.exon1;rank=1 1 tair CDS 3760 3913 . + 0 ID=CDS:AT1G01010.1;Parent=transcript:AT1G01010.1;protein_id=AT1G01010.1 diff --git a/test-data/transcripts.tsv b/test-data/transcripts.tsv index 6117b805..f32ec275 100644 --- a/test-data/transcripts.tsv +++ b/test-data/transcripts.tsv @@ -1,11 +1,11 @@ -transcript taxon featureName chromosomeName start end featureType strand biotype description date -AT3G10490 Arabidopsis_thaliana ANAC052 At3 3267835 3270883 gene plus protein_coding NAC_domain_containing_protein_52_[Source:TAIR%3BAcc:AT3G10490] 01/01/2000 -AT3G13660 Arabidopsis_thaliana DIR22 At3 4464908 4465586 gene plus protein_coding Dirigent_protein_22_[Source:UniProtKB/Swiss-Prot%3BAcc:Q66GI2] 02/01/2000 -AT3G51470 Arabidopsis_thaliana na At3 19097787 19099275 gene minus protein_coding Probable_protein_phosphatase_2C_47_[Source:UniProtKB/Swiss-Prot%3BAcc:Q9SD02] 03/01/2000 -AT3G10460 Arabidopsis_thaliana na At3 3255800 3256439 gene plus protein_coding Plant_self-incompatibility_protein_S1_family_[Source:TAIR%3BAcc:AT3G10460] 04/01/2000 -AT3G22640 Arabidopsis_thaliana PAP85 At3 8011724 8013902 gene minus protein_coding cupin_family_protein_[Source:TAIR%3BAcc:AT3G22640] 05/01/2000 -AT1G33615 Arabidopsis_thaliana na At1 12193325 12194374 ncRNA_gene minus ncRNA other_RNA_[Source:TAIR%3BAcc:AT1G33615] 06/01/2000 -AT5G41905 Arabidopsis_thaliana MIR166E At5 16775524 16775658 miRNA_gene minus miRNA MIR166/MIR166E%3B_miRNA_[Source:TAIR%3BAcc:AT5G41905] 07/01/2000 -AT1G57800 Arabidopsis_thaliana ORTH3 At1 21408623 21412283 gene minus protein_coding E3_ubiquitin-protein_ligase_ORTHRUS_3_[Source:UniProtKB/Swiss-Prot%3BAcc:Q9FVS2] 08/01/2000 -AT1G49500 Arabidopsis_thaliana na At1 18321295 18322284 gene minus protein_coding unknown_protein%3B_FUNCTIONS_IN:_molecular_function_unknown%3B_INVOLVED_IN:_biological_process_unknown%3B_LOCATED_IN:_endomembrane_system%3B_EXPRESSED_IN:_19_plant_structures%3B_EXPRESSED_DURING:_10_growth_stages%3B_BEST_Arabidopsis_thaliana_protein_match_is:_u_/.../_protein_(TAIR:AT3G19030.1)%3B_Has_24_Blast_hits_to_24_proteins_in_2_species:_Archae_-_0%3B_Bacteria_-_0%3B_Metazoa_-_0%3B_Fungi_-_0%3B_Plants_-_24%3B_Viruses_-_0%3B_Other_Eukaryotes_-_0_(source:_NCBI_BLink)._[Source:TAIR%3BAcc:AT1G49500] 09/01/2000 -AT5G35334 Arabidopsis_thaliana na At5 13537917 13538984 gene plus transposable_element transposable_element_gene_[Source:TAIR%3BAcc:AT5G35334] 10/01/2000 +transcript label taxon featureName chromosomeName start end featureType strand biotype description date +AT3G10490 label_AT3G10490 Arabidopsis_thaliana ANAC052 At3 3267835 3270883 gene plus protein_coding NAC_domain_containing_protein_52_[Source:TAIR%3BAcc:AT3G10490] 01/01/2000 +AT3G13660 label_AT3G13660 Arabidopsis_thaliana DIR22 At3 4464908 4465586 gene plus protein_coding Dirigent_protein_22_[Source:UniProtKB/Swiss-Prot%3BAcc:Q66GI2] 02/01/2000 +AT3G51470 label_AT3G51470 Arabidopsis_thaliana na At3 19097787 19099275 gene minus protein_coding Probable_protein_phosphatase_2C_47_[Source:UniProtKB/Swiss-Prot%3BAcc:Q9SD02] 03/01/2000 +AT3G10460 label_AT3G10460 Arabidopsis_thaliana na At3 3255800 3256439 gene plus protein_coding Plant_self-incompatibility_protein_S1_family_[Source:TAIR%3BAcc:AT3G10460] 04/01/2000 +AT3G22640 label_AT3G22640 Arabidopsis_thaliana PAP85 At3 8011724 8013902 gene minus protein_coding cupin_family_protein_[Source:TAIR%3BAcc:AT3G22640] 05/01/2000 +AT1G33615 label_AT1G33615 Arabidopsis_thaliana na At1 12193325 12194374 ncRNA_gene minus ncRNA other_RNA_[Source:TAIR%3BAcc:AT1G33615] 06/01/2000 +AT5G41905 label_AT5G41905 Arabidopsis_thaliana MIR166E At5 16775524 16775658 miRNA_gene minus miRNA MIR166/MIR166E%3B_miRNA_[Source:TAIR%3BAcc:AT5G41905] 07/01/2000 +AT1G57800 label_AT1G57800 Arabidopsis_thaliana ORTH3 At1 21408623 21412283 gene minus protein_coding E3_ubiquitin-protein_ligase_ORTHRUS_3_[Source:UniProtKB/Swiss-Prot%3BAcc:Q9FVS2] 08/01/2000 +AT1G49500 label_AT1G49500 Arabidopsis_thaliana na At1 18321295 18322284 gene minus protein_coding unknown_protein%3B_FUNCTIONS_IN:_molecular_function_unknown%3B_INVOLVED_IN:_biological_process_unknown%3B_LOCATED_IN:_endomembrane_system%3B_EXPRESSED_IN:_19_plant_structures%3B_EXPRESSED_DURING:_10_growth_stages%3B_BEST_Arabidopsis_thaliana_protein_match_is:_u_/.../_protein_(TAIR:AT3G19030.1)%3B_Has_24_Blast_hits_to_24_proteins_in_2_species:_Archae_-_0%3B_Bacteria_-_0%3B_Metazoa_-_0%3B_Fungi_-_0%3B_Plants_-_24%3B_Viruses_-_0%3B_Other_Eukaryotes_-_0_(source:_NCBI_BLink)._[Source:TAIR%3BAcc:AT1G49500] 09/01/2000 +AT5G35334 label_AT5G35334 Arabidopsis_thaliana na At5 13537917 13538984 gene transposable_element transposable_element_gene_[Source:TAIR%3BAcc:AT5G35334] 10/01/2000 diff --git a/tests/__init__.py b/tests/__init__.py index 87a99a2f..7a75d2e3 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,4 +8,7 @@ class AskomicsTestCase(): def equal_objects(obj1, obj2): """Compare 2 objects""" ddiff = DeepDiff(obj1, obj2, ignore_order=True, report_repetition=True) + if not ddiff == {}: + print(ddiff) + return True if ddiff == {} else False diff --git a/tests/conftest.py b/tests/conftest.py index 0ddcb52b..999d0248 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,6 +14,8 @@ from askomics.libaskomics.FilesHandler import FilesHandler from askomics.libaskomics.FilesUtils import FilesUtils from askomics.libaskomics.LocalAuth import LocalAuth +from askomics.libaskomics.PrefixManager import PrefixManager +from askomics.libaskomics.OntologyManager import OntologyManager from askomics.libaskomics.SparqlQueryLauncher import SparqlQueryLauncher from askomics.libaskomics.Start import Start from askomics.libaskomics.Result import Result @@ -249,7 +251,8 @@ def upload_file(self, file_path): ".tsv": "text/tab-separated-values", ".csv": "text/tab-separated-values", ".gff3": "null", - ".bed": "null" + ".bed": "null", + ".ttl": "rdf/ttl" } with open(file_path, 'r') as file_content: @@ -273,7 +276,25 @@ def upload_file(self, file_path): "file_date": filedate } - def integrate_file(self, info, public=False): + def upload_file_url(self, file_url): + """Summary + + Parameters + ---------- + file_path : TYPE + Description + + Returns + ------- + TYPE + Description + """ + + files = FilesHandler(self.app, self.session) + files.download_url(file_url, "1") + return files.date + + def integrate_file(self, info, public=False, set_graph=False, endpoint=""): """Summary Parameters @@ -289,6 +310,9 @@ def integrate_file(self, info, public=False): files_handler = FilesHandler(self.app, self.session) files_handler.handle_files([info["id"], ]) + # TODO: Fix this. Why do we need the virtuoso url? + endpoint = endpoint or "http://virtuoso:8890/sparql" + for file in files_handler.files: dataset_info = { @@ -300,7 +324,7 @@ def integrate_file(self, info, public=False): } dataset = Dataset(self.app, self.session, dataset_info) - dataset.save_in_db() + dataset.save_in_db(endpoint, set_graph=set_graph) if file.type == "csv/tsv": file.integrate(dataset.id, info["columns_type"], public=public) @@ -308,7 +332,8 @@ def integrate_file(self, info, public=False): file.integrate(dataset.id, info["entities"], public=public) elif file.type == "bed": file.integrate(dataset.id, info["entity_name"], public=public) - + elif file.type in ('rdf/ttl', 'rdf/xml', 'rdf/nt'): + file.integrate(public=public) # done dataset.update_in_db("success") dataset.set_info_from_db() @@ -316,7 +341,9 @@ def integrate_file(self, info, public=False): return { "timestamp": file.timestamp, "start": dataset.start, - "end": dataset.end + "end": dataset.end, + "graph": dataset.graph_name, + "endpoint": dataset.endpoint } def upload(self): @@ -351,7 +378,7 @@ def upload(self): } } - def upload_and_integrate(self): + def upload_and_integrate(self, set_graph=False): """Summary Returns @@ -369,28 +396,28 @@ def upload_and_integrate(self): # integrate int_transcripts = self.integrate_file({ "id": 1, - "columns_type": ["start_entity", "category", "text", "reference", "start", "end", "category", "strand", "text", "text", "date"] - }) + "columns_type": ["start_entity", "label", "category", "text", "reference", "start", "end", "category", "strand", "text", "text", "date"] + }, set_graph=set_graph) int_de = self.integrate_file({ "id": 2, "columns_type": ["start_entity", "directed", "numeric", "numeric", "numeric", "text", "numeric", "numeric", "numeric", "numeric"] - }) + }, set_graph=set_graph) int_qtl = self.integrate_file({ "id": 3, "columns_type": ["start_entity", "ref", "start", "end"] - }) + }, set_graph=set_graph) int_gff = self.integrate_file({ "id": 4, "entities": ["gene", "transcript"] - }) + }, set_graph=set_graph) int_bed = self.integrate_file({ "id": 5, "entity_name": "gene" - }) + }, set_graph=set_graph) return { "transcripts": { @@ -425,6 +452,31 @@ def upload_and_integrate(self): } } + def upload_and_integrate_ontology(self): + """Summary + + Returns + ------- + TYPE + Description + """ + # upload + up_ontology = self.upload_file("test-data/agro_min.ttl") + + # integrate + int_ontology = self.integrate_file({ + "id": 1, + }, set_graph=True, endpoint="http://localhost:8891/sparql-auth") + + return { + "upload": up_ontology, + "timestamp": int_ontology["timestamp"], + "start": int_ontology["start"], + "end": int_ontology["end"], + "graph": int_ontology["graph"], + "endpoint": int_ontology["endpoint"] + } + def create_result(self, has_form=False): """Create a result entry in db @@ -478,6 +530,13 @@ def create_result(self, has_form=False): "size": file_size } + def publicize_dataset(self, dataset_id, public=True): + """Publicize a result""" + + dataset_info = {"id": dataset_id} + result = Dataset(self.app, self.session, dataset_info) + result.toggle_public(public) + def publicize_result(self, result_id, public=True): """Publicize a result""" @@ -556,6 +615,18 @@ def delete_galaxy_history(self): galaxy = GalaxyInstance(self.gurl, self.gkey) galaxy.histories.delete_history(self.galaxy_history["id"], purge=True) + def create_prefix(self): + """Create custom prefix""" + pm = PrefixManager(self.app, self.session) + pm.add_custom_prefix("OBO", "http://purl.obolibrary.org/obo/") + + def create_ontology(self): + """Create ontology""" + data = self.upload_and_integrate_ontology() + om = OntologyManager(self.app, self.session) + om.add_ontology("AgrO ontology", "http://purl.obolibrary.org/obo/agro.owl", "AGRO", 1, data["graph"], data['endpoint'], type="local") + return data["graph"], data["endpoint"] + @staticmethod def get_random_string(number): """return a random string of n character diff --git a/tests/results/abstraction.json b/tests/results/abstraction.json index e29df978..470c1c59 100644 --- a/tests/results/abstraction.json +++ b/tests/results/abstraction.json @@ -27,14 +27,6 @@ }, { "categories": [ - { - "label": "minus", - "uri": "http://askomics.org/test/data/minus" - }, - { - "label": "plus", - "uri": "http://askomics.org/test/data/plus" - }, { "label": "+", "uri": "http://askomics.org/test/data/%2B" @@ -51,7 +43,6 @@ "entityUri": "http://askomics.org/test/data/gene", "faldo": "http://askomics.org/test/internal/faldoStrand", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], @@ -68,6 +59,10 @@ { "label": "plus", "uri": "http://askomics.org/test/data/plus" + }, + { + "label": "unknown/both", + "uri": "http://askomics.org/test/data/unknown/both" }, { "label": "+", @@ -86,8 +81,7 @@ "faldo": "http://askomics.org/test/internal/faldoStrand", "graphs": [ "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "strand", "type": "http://askomics.org/test/internal/AskomicsCategory", @@ -119,17 +113,12 @@ { "label": "1", "uri": "http://askomics.org/test/data/1" - }, - { - "label": "7", - "uri": "http://askomics.org/test/data/7" } ], "entityUri": "http://askomics.org/test/data/transcript", "faldo": "http://askomics.org/test/internal/faldoReference", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "reference", "type": "http://askomics.org/test/internal/AskomicsCategory", @@ -140,8 +129,6 @@ "entityUri": "http://askomics.org/test/data/gene", "faldo": "http://askomics.org/test/internal/faldoStart", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" ], @@ -154,10 +141,7 @@ "entityUri": "http://askomics.org/test/data/QTL", "faldo": "http://askomics.org/test/internal/faldoStart", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###" ], "label": "start", "type": "http://www.w3.org/2001/XMLSchema#decimal", @@ -169,9 +153,7 @@ "faldo": "http://askomics.org/test/internal/faldoStart", "graphs": [ "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "start", "type": "http://www.w3.org/2001/XMLSchema#decimal", @@ -183,9 +165,7 @@ "faldo": "http://askomics.org/test/internal/faldoEnd", "graphs": [ "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "end", "type": "http://www.w3.org/2001/XMLSchema#decimal", @@ -196,8 +176,6 @@ "entityUri": "http://askomics.org/test/data/gene", "faldo": "http://askomics.org/test/internal/faldoEnd", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" ], @@ -210,10 +188,7 @@ "entityUri": "http://askomics.org/test/data/QTL", "faldo": "http://askomics.org/test/internal/faldoEnd", "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.bed_###BED_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:qtl.tsv_###QTL_TIMESTAMP###" ], "label": "end", "type": "http://www.w3.org/2001/XMLSchema#decimal", @@ -276,7 +251,6 @@ "entityUri": "http://askomics.org/test/data/gene", "faldo": null, "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "biotype", @@ -288,8 +262,7 @@ "entityUri": "http://askomics.org/test/data/transcript", "faldo": null, "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", - "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" + "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###" ], "label": "description", "type": "http://www.w3.org/2001/XMLSchema#string", @@ -300,7 +273,6 @@ "entityUri": "http://askomics.org/test/data/gene", "faldo": null, "graphs": [ - "urn:sparql:askomics_test:1_jdoe:transcripts.tsv_###TRANSCRIPTS_TIMESTAMP###", "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" ], "label": "description", @@ -553,7 +525,7 @@ "entities": [ { "endpoints": [ - "http://localhost:8891/sparql" + "http://localhost:8891/sparql-auth" ], "faldo": true, "graphs": [ @@ -563,11 +535,12 @@ "instancesHaveLabels": true, "label": "transcript", "type": "node", + "ontology": false, "uri": "http://askomics.org/test/data/transcript" }, { "endpoints": [ - "http://localhost:8891/sparql" + "http://localhost:8891/sparql-auth" ], "faldo": true, "graphs": [ @@ -577,11 +550,12 @@ "instancesHaveLabels": true, "label": "gene", "type": "node", + "ontology": false, "uri": "http://askomics.org/test/data/gene" }, { "endpoints": [ - "http://localhost:8891/sparql" + "http://localhost:8891/sparql-auth" ], "faldo": true, "graphs": [ @@ -590,11 +564,12 @@ "instancesHaveLabels": true, "label": "QTL", "type": "node", + "ontology": false, "uri": "http://askomics.org/test/data/QTL" }, { "endpoints": [ - "http://localhost:8891/sparql" + "http://localhost:8891/sparql-auth" ], "faldo": false, "graphs": [ @@ -603,6 +578,7 @@ "instancesHaveLabels": true, "label": "DifferentialExpression", "type": "node", + "ontology": false, "uri": "http://askomics.org/test/data/DifferentialExpression" } ], diff --git a/tests/results/data.json b/tests/results/data.json deleted file mode 100644 index 4d92ef58..00000000 --- a/tests/results/data.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "data": [ - { - "object": "http://askomics.org/test/data/transcript", - "predicat": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" - }, - { - "object": "AT3G10490", - "predicat": "http://www.w3.org/2000/01/rdf-schema#label" - }, - { - "object": "protein_coding", - "predicat": "http://askomics.org/test/data/biotype" - }, - { - "object": "NAC_domain_containing_protein_52_[Source:TAIR%3BAcc:AT3G10490]", - "predicat": "http://askomics.org/test/data/description" - }, - { - "object": "ANAC052", - "predicat": "http://askomics.org/test/data/featureName" - }, - { - "object": "http://askomics.org/test/data/gene", - "predicat": "http://askomics.org/test/data/featureType" - }, - { - "object": "http://askomics.org/test/data/Arabidopsis_thaliana", - "predicat": "http://askomics.org/test/data/taxon" - }, - { - "object": "326", - "predicat": "http://askomics.org/test/internal/includeIn" - }, - { - "object": "327", - "predicat": "http://askomics.org/test/internal/includeIn" - }, - { - "object": "http://askomics.org/test/data/At3_326", - "predicat": "http://askomics.org/test/internal/includeInReference" - }, - { - "object": "http://askomics.org/test/data/At3_327", - "predicat": "http://askomics.org/test/internal/includeInReference" - }, - { - "object": "2000-01-01", - "predicat": "http://askomics.org/test/data/date" - } - ], - "error": false, - "errorMessage": "" -} diff --git a/tests/results/data_full.json b/tests/results/data_full.json new file mode 100644 index 00000000..9b8b8473 --- /dev/null +++ b/tests/results/data_full.json @@ -0,0 +1,62 @@ +{ + "data":[ + { + "object":"3267835", + "predicate":"http://askomics.org/test/data/start" + }, + { + "object":"3270883", + "predicate":"http://askomics.org/test/data/end" + }, + { + "object":"At3", + "predicate":"http://askomics.org/test/data/chromosomeName" + }, + { + "object":"At3", + "predicate":"http://askomics.org/test/data/reference" + }, + { + "object":"plus", + "predicate":"http://askomics.org/test/data/strand" + }, + { + "object":"+", + "predicate":"http://askomics.org/test/data/strand" + }, + { + "object":"protein_coding", + "predicate":"http://askomics.org/test/data/biotype" + }, + { + "object":"http://askomics.org/test/data/gene", + "predicate":"http://askomics.org/test/data/featureType" + }, + { + "object":"label_AT3G10490", + "predicate":"http://www.w3.org/2000/01/rdf-schema#label" + }, + { + "object":"2000-01-01", + "predicate":"http://askomics.org/test/data/date" + }, + { + "object":"http://askomics.org/test/data/transcript", + "predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type" + }, + { + "object":"ANAC052", + "predicate":"http://askomics.org/test/data/featureName" + }, + { + "object":"http://askomics.org/test/data/Arabidopsis_thaliana", + "predicate":"http://askomics.org/test/data/taxon" + }, + { + "object":"NAC_domain_containing_protein_52_[Source:TAIR%3BAcc:AT3G10490]", + "predicate":"http://askomics.org/test/data/description" + } + ], + "error":false, + "errorMessage":"" +} diff --git a/tests/results/data_public.json b/tests/results/data_public.json new file mode 100644 index 00000000..fe294d76 --- /dev/null +++ b/tests/results/data_public.json @@ -0,0 +1,54 @@ +{ + "data":[ + { + "object":"3267835", + "predicate":"http://askomics.org/test/data/start" + }, + { + "object":"3270883", + "predicate":"http://askomics.org/test/data/end" + }, + { + "object":"At3", + "predicate":"http://askomics.org/test/data/chromosomeName" + }, + { + "object":"plus", + "predicate":"http://askomics.org/test/data/strand" + }, + { + "object":"protein_coding", + "predicate":"http://askomics.org/test/data/biotype" + }, + { + "object":"http://askomics.org/test/data/gene", + "predicate":"http://askomics.org/test/data/featureType" + }, + { + "object":"label_AT3G10490", + "predicate":"http://www.w3.org/2000/01/rdf-schema#label" + }, + { + "object":"2000-01-01", + "predicate":"http://askomics.org/test/data/date" + }, + { + "object":"http://askomics.org/test/data/transcript", + "predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type" + }, + { + "object":"ANAC052", + "predicate":"http://askomics.org/test/data/featureName" + }, + { + "object":"http://askomics.org/test/data/Arabidopsis_thaliana", + "predicate":"http://askomics.org/test/data/taxon" + }, + { + "object":"NAC_domain_containing_protein_52_[Source:TAIR%3BAcc:AT3G10490]", + "predicate":"http://askomics.org/test/data/description" + } + ], + "error":false, + "errorMessage":"" +} diff --git a/tests/results/init.json b/tests/results/init.json index d557420b..0f3054bf 100644 --- a/tests/results/init.json +++ b/tests/results/init.json @@ -1,5 +1,5 @@ { - "defaultQuery": "PREFIX : <http://askomics.org/test/data/>\nPREFIX askomics: <http://askomics.org/test/internal/>\nPREFIX dc: <http://purl.org/dc/elements/1.1/>\nPREFIX faldo: <http://biohackathon.org/resource/faldo/>\nPREFIX owl: <http://www.w3.org/2002/07/owl#>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n\nSELECT DISTINCT ?s ?p ?o\nWHERE {\n ?s ?p ?o\n}\n", + "defaultQuery": "PREFIX : <http://askomics.org/test/data/>\nPREFIX askomics: <http://askomics.org/test/internal/>\nPREFIX dc: <http://purl.org/dc/elements/1.1/>\nPREFIX dcat: <http://www.w3.org/ns/dcat#>\nPREFIX faldo: <http://biohackathon.org/resource/faldo/>\nPREFIX owl: <http://www.w3.org/2002/07/owl#>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX skos: <http://www.w3.org/2004/02/skos/core#>\nPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n\nSELECT DISTINCT ?s ?p ?o\nWHERE {\n ?s ?p ?o\n}\n", "diskSpace": ###SIZE###, "console_enabled": true, "endpoints": { diff --git a/tests/results/preview.json b/tests/results/preview.json index a26074f0..8aaa4dc6 100644 --- a/tests/results/preview.json +++ b/tests/results/preview.json @@ -7,37 +7,43 @@ "id": 1, "preview": [ { - "transcript1_Label": "AT1G57800" + "transcript1_Label": "label_AT1G57800" }, { - "transcript1_Label": "AT5G35334" + "transcript1_Label": "label_AT5G35334" }, { - "transcript1_Label": "AT3G10460" + "transcript1_Label": "label_AT3G10460" }, { - "transcript1_Label": "AT1G49500" + "transcript1_Label": "label_AT1G49500" }, { - "transcript1_Label": "AT3G10490" + "transcript1_Label": "label_AT3G10490" }, { - "transcript1_Label": "AT3G51470" + "transcript1_Label": "label_AT3G51470" }, { - "transcript1_Label": "AT5G41905" + "transcript1_Label": "label_AT5G41905" }, { - "transcript1_Label": "AT1G33615" + "transcript1_Label": "label_AT1G33615" }, { - "transcript1_Label": "AT3G22640" + "transcript1_Label": "label_AT3G22640" }, { - "transcript1_Label": "AT3G13660" + "transcript1_Label": "label_AT3G13660" }, { "transcript1_Label": "AT1G01010.1" + }, + { + "transcript1_Label": "AT1G01010.2" + }, + { + "transcript1_Label": "AT1G01010.3" } ] -} \ No newline at end of file +} diff --git a/tests/results/preview_files.json b/tests/results/preview_files.json index e38881d1..6497c378 100644 --- a/tests/results/preview_files.json +++ b/tests/results/preview_files.json @@ -6,6 +6,7 @@ "data": { "columns_type": [ "start_entity", + "label", "text", "text", "reference", @@ -29,7 +30,8 @@ "strand": "plus", "taxon": "Arabidopsis_thaliana", "transcript": "AT3G10490", - "date": "01/01/2000" + "date": "01/01/2000", + "label": "label_AT3G10490" }, { "biotype": "protein_coding", @@ -42,7 +44,8 @@ "strand": "plus", "taxon": "Arabidopsis_thaliana", "transcript": "AT3G13660", - "date": "02/01/2000" + "date": "02/01/2000", + "label": "label_AT3G13660" }, { "biotype": "protein_coding", @@ -55,7 +58,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT3G51470", - "date": "03/01/2000" + "date": "03/01/2000", + "label": "label_AT3G51470" }, { "biotype": "protein_coding", @@ -68,7 +72,8 @@ "strand": "plus", "taxon": "Arabidopsis_thaliana", "transcript": "AT3G10460", - "date": "04/01/2000" + "date": "04/01/2000", + "label": "label_AT3G10460" }, { "biotype": "protein_coding", @@ -81,7 +86,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT3G22640", - "date": "05/01/2000" + "date": "05/01/2000", + "label": "label_AT3G22640" }, { "biotype": "ncRNA", @@ -94,7 +100,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT1G33615", - "date": "06/01/2000" + "date": "06/01/2000", + "label": "label_AT1G33615" }, { "biotype": "miRNA", @@ -107,7 +114,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT5G41905", - "date": "07/01/2000" + "date": "07/01/2000", + "label": "label_AT5G41905" }, { "biotype": "protein_coding", @@ -120,7 +128,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT1G57800", - "date": "08/01/2000" + "date": "08/01/2000", + "label": "label_AT1G57800" }, { "biotype": "protein_coding", @@ -133,7 +142,8 @@ "strand": "minus", "taxon": "Arabidopsis_thaliana", "transcript": "AT1G49500", - "date": "09/01/2000" + "date": "09/01/2000", + "label": "label_AT1G49500" }, { "biotype": "transposable_element", @@ -143,14 +153,16 @@ "featureName": "na", "featureType": "gene", "start": "13537917", - "strand": "plus", + "strand": "", "taxon": "Arabidopsis_thaliana", "transcript": "AT5G35334", - "date": "10/01/2000" + "date": "10/01/2000", + "label": "label_AT5G35334" } ], "header": [ "transcript", + "label", "taxon", "featureName", "chromosomeName", @@ -169,5 +181,5 @@ "error": false, "error_message": "" } - ] +] } diff --git a/tests/results/preview_malformed_files.json b/tests/results/preview_malformed_files.json index 2035e650..44312c87 100644 --- a/tests/results/preview_malformed_files.json +++ b/tests/results/preview_malformed_files.json @@ -22,5 +22,5 @@ "error": true, "error_message": "Malformated CSV/TSV (Empty column in header)" } - ] +] } diff --git a/tests/results/results.json b/tests/results/results.json index 978cd972..e561abd1 100644 --- a/tests/results/results.json +++ b/tests/results/results.json @@ -9,7 +9,7 @@ "execTime": ###EXECTIME###, "graphState": "{\"nodes\": [{\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 18, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#d80002\", \"index\": 1, \"x\": -18.936663966428853, \"y\": 27.854539518654068, \"vx\": 3.0435888926329303e-10, \"vy\": 2.455944547131252e-10}, {\"uri\": \"http://askomics.org/test/data/DifferentialExpression\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, null, \"urn:sparql:askomics_test:1_jdoe:de.tsv_1590570405\"], \"id\": 20, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"DifferentialExpression\", \"faldo\": false, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#c40003\", \"index\": 2, \"x\": -5.504944105164966, \"y\": -30.053414398937772, \"vx\": 1.6289496823647462e-10, \"vy\": 1.9886120976258667e-10}, {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 23, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#b00004\", \"index\": 3, \"x\": 24.169971227492816, \"y\": 27.218300246800673, \"vx\": 3.366634402979017e-10, \"vy\": 1.1297513262220989e-10}, {\"uri\": \"http://askomics.org/test/data/QTL\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, \"urn:sparql:askomics_test:1_jdoe:qtl.tsv_1590570413\", null, null], \"id\": 25, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"QTL\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#9c0005\", \"index\": 4, \"x\": -29.503539254383465, \"y\": -7.095712074145055, \"vx\": 2.1843706072578676e-10, \"vy\": 2.560853024904153e-10}, {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 27, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#880006\", \"index\": 5, \"x\": 27.314123105593524, \"y\": -20.150587318393672, \"vx\": 1.8446839255154e-10, \"vy\": 1.1018030967605363e-10}], \"links\": [{\"uri\": \"http://askomics.org/test/data/Parent\", \"type\": \"link\", \"sameStrand\": true, \"sameRef\": true, \"id\": 19, \"label\": \"Parent\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 18, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#d80002\", \"index\": 1, \"x\": -18.936663966428853, \"y\": 27.854539518654068, \"vx\": 3.0435888926329303e-10, \"vy\": 2.455944547131252e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#740007\", \"__controlPoints\": null, \"index\": 0}, {\"uri\": \"http://askomics.org/test/data/concern\", \"type\": \"link\", \"sameStrand\": false, \"sameRef\": false, \"id\": 22, \"label\": \"concern\", \"source\": {\"uri\": \"http://askomics.org/test/data/DifferentialExpression\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, null, \"urn:sparql:askomics_test:1_jdoe:de.tsv_1590570405\"], \"id\": 20, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"DifferentialExpression\", \"faldo\": false, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#c40003\", \"index\": 2, \"x\": -5.504944105164966, \"y\": -30.053414398937772, \"vx\": 1.6289496823647462e-10, \"vy\": 1.9886120976258667e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#600008\", \"__controlPoints\": null, \"index\": 1}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 24, \"sameStrand\": true, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 23, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#b00004\", \"index\": 3, \"x\": 24.169971227492816, \"y\": 27.218300246800673, \"vx\": 3.366634402979017e-10, \"vy\": 1.1297513262220989e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#4c0009\", \"__controlPoints\": null, \"index\": 2}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 26, \"sameStrand\": false, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/QTL\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, \"urn:sparql:askomics_test:1_jdoe:qtl.tsv_1590570413\", null, null], \"id\": 25, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"QTL\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#9c0005\", \"index\": 4, \"x\": -29.503539254383465, \"y\": -7.095712074145055, \"vx\": 2.1843706072578676e-10, \"vy\": 2.560853024904153e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#38000a\", \"__controlPoints\": null, \"index\": 3}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 28, \"sameStrand\": true, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 27, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#880006\", \"index\": 5, \"x\": 27.314123105593524, \"y\": -20.150587318393672, \"vx\": 1.8446839255154e-10, \"vy\": 1.1018030967605363e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#24000b\", \"__controlPoints\": null, \"index\": 4}], \"attr\": [{\"id\": 2, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"rdf:type\", \"label\": \"Uri\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"uri\", \"faldo\": false, \"filterType\": \"exact\", \"filterValue\": \"\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null}, {\"id\": 3, \"visible\": true, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"rdfs:label\", \"label\": \"Label\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": false, \"filterType\": \"exact\", \"filterValue\": \"\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null}, {\"id\": 4, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/strand\", \"label\": \"strand\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoStrand\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"plus\", \"uri\": \"http://askomics.org/test/data/plus\"}, {\"label\": \"minus\", \"uri\": \"http://askomics.org/test/data/minus\"}, {\"label\": \"-\", \"uri\": \"http://askomics.org/test/data/-\"}, {\"label\": \"+\", \"uri\": \"http://askomics.org/test/data/%2B\"}], \"filterSelectedValues\": []}, {\"id\": 5, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/reference\", \"label\": \"reference\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoReference\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"1\", \"uri\": \"http://askomics.org/test/data/1\"}], \"filterSelectedValues\": []}, {\"id\": 6, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/chromosomeName\", \"label\": \"chromosomeName\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoReference\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"At3\", \"uri\": \"http://askomics.org/test/data/At3\"}, {\"label\": \"At5\", \"uri\": \"http://askomics.org/test/data/At5\"}, {\"label\": \"At1\", \"uri\": \"http://askomics.org/test/data/At1\"}], \"filterSelectedValues\": []}, {\"id\": 7, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/taxon\", \"label\": \"taxon\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"Arabidopsis_thaliana\", \"uri\": \"http://askomics.org/test/data/Arabidopsis_thaliana\"}], \"filterSelectedValues\": []}, {\"id\": 8, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/featureType\", \"label\": \"featureType\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"gene\", \"uri\": \"http://askomics.org/test/data/gene\"}, {\"label\": \"miRNA_gene\", \"uri\": \"http://askomics.org/test/data/miRNA_gene\"}, {\"label\": \"ncRNA_gene\", \"uri\": \"http://askomics.org/test/data/ncRNA_gene\"}], \"filterSelectedValues\": []}, {\"id\": 9, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/biotype\", \"label\": \"biotype\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"miRNA\", \"uri\": \"http://askomics.org/test/data/miRNA\"}, {\"label\": \"ncRNA\", \"uri\": \"http://askomics.org/test/data/ncRNA\"}, {\"label\": \"protein_coding\", \"uri\": \"http://askomics.org/test/data/protein_coding\"}, {\"label\": \"transposable_element\", \"uri\": \"http://askomics.org/test/data/transposable_element\"}], \"filterSelectedValues\": []}, {\"id\": 10, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/start\", \"label\": \"start\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"decimal\", \"faldo\": \"http://askomics.org/internal/faldoStart\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filters\": [{\"filterValue\": \"\", \"filterSign\": \"=\"}]}, {\"id\": 11, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/end\", \"label\": \"end\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"decimal\", \"faldo\": \"http://askomics.org/internal/faldoEnd\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filters\": [{\"filterValue\": \"\", \"filterSign\": \"=\"}]}, {\"id\": 12, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/description\", \"label\": \"description\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 13, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/featureName\", \"label\": \"featureName\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 14, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/ID\", \"label\": \"ID\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 15, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/Name\", \"label\": \"Name\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 16, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/source\", \"label\": \"source\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 17, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/transcript_id\", \"label\": \"transcript_id\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}]}", "id": ###ID###, - "nrows": 11, + "nrows": 13, "path": "###PATH###", "public": ###PUBLIC###, "size": ###SIZE###, diff --git a/tests/results/results_admin.json b/tests/results/results_admin.json index a21b0c64..34cceb45 100644 --- a/tests/results/results_admin.json +++ b/tests/results/results_admin.json @@ -7,7 +7,7 @@ "end": ###END###, "execTime": ###EXECTIME###, "id": ###ID###, - "nrows": 11, + "nrows": 13, "public": ###PUBLIC###, "size": ###SIZE###, "start": ###START###, diff --git a/tests/results/results_form.json b/tests/results/results_form.json index 5c4cb14a..8d9bcc64 100644 --- a/tests/results/results_form.json +++ b/tests/results/results_form.json @@ -11,7 +11,7 @@ "graphState": "{\"nodes\": [{\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 18, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#d80002\", \"index\": 1, \"x\": -18.936663966428853, \"y\": 27.854539518654068, \"vx\": 3.0435888926329303e-10, \"vy\": 2.455944547131252e-10}, {\"uri\": \"http://askomics.org/test/data/DifferentialExpression\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, null, \"urn:sparql:askomics_test:1_jdoe:de.tsv_1590570405\"], \"id\": 20, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"DifferentialExpression\", \"faldo\": false, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#c40003\", \"index\": 2, \"x\": -5.504944105164966, \"y\": -30.053414398937772, \"vx\": 1.6289496823647462e-10, \"vy\": 1.9886120976258667e-10}, {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 23, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#b00004\", \"index\": 3, \"x\": 24.169971227492816, \"y\": 27.218300246800673, \"vx\": 3.366634402979017e-10, \"vy\": 1.1297513262220989e-10}, {\"uri\": \"http://askomics.org/test/data/QTL\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, \"urn:sparql:askomics_test:1_jdoe:qtl.tsv_1590570413\", null, null], \"id\": 25, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"QTL\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#9c0005\", \"index\": 4, \"x\": -29.503539254383465, \"y\": -7.095712074145055, \"vx\": 2.1843706072578676e-10, \"vy\": 2.560853024904153e-10}, {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 27, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#880006\", \"index\": 5, \"x\": 27.314123105593524, \"y\": -20.150587318393672, \"vx\": 1.8446839255154e-10, \"vy\": 1.1018030967605363e-10}], \"links\": [{\"uri\": \"http://askomics.org/test/data/Parent\", \"type\": \"link\", \"sameStrand\": true, \"sameRef\": true, \"id\": 19, \"label\": \"Parent\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 18, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#d80002\", \"index\": 1, \"x\": -18.936663966428853, \"y\": 27.854539518654068, \"vx\": 3.0435888926329303e-10, \"vy\": 2.455944547131252e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#740007\", \"__controlPoints\": null, \"index\": 0}, {\"uri\": \"http://askomics.org/test/data/concern\", \"type\": \"link\", \"sameStrand\": false, \"sameRef\": false, \"id\": 22, \"label\": \"concern\", \"source\": {\"uri\": \"http://askomics.org/test/data/DifferentialExpression\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, null, \"urn:sparql:askomics_test:1_jdoe:de.tsv_1590570405\"], \"id\": 20, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"DifferentialExpression\", \"faldo\": false, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#c40003\", \"index\": 2, \"x\": -5.504944105164966, \"y\": -30.053414398937772, \"vx\": 1.6289496823647462e-10, \"vy\": 1.9886120976258667e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#600008\", \"__controlPoints\": null, \"index\": 1}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 24, \"sameStrand\": true, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 23, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#b00004\", \"index\": 3, \"x\": 24.169971227492816, \"y\": 27.218300246800673, \"vx\": 3.366634402979017e-10, \"vy\": 1.1297513262220989e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#4c0009\", \"__controlPoints\": null, \"index\": 2}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 26, \"sameStrand\": false, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/QTL\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, \"urn:sparql:askomics_test:1_jdoe:qtl.tsv_1590570413\", null, null], \"id\": 25, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"QTL\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#9c0005\", \"index\": 4, \"x\": -29.503539254383465, \"y\": -7.095712074145055, \"vx\": 2.1843706072578676e-10, \"vy\": 2.560853024904153e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#38000a\", \"__controlPoints\": null, \"index\": 3}, {\"uri\": \"included_in\", \"type\": \"posLink\", \"id\": 28, \"sameStrand\": true, \"sameRef\": true, \"strict\": true, \"label\": \"Included in\", \"source\": {\"uri\": \"http://askomics.org/test/data/transcript\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [\"urn:sparql:askomics_test:1_jdoe:transcripts.tsv_1590570429\", \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", null, null, null], \"id\": 1, \"humanId\": 1, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"transcript\", \"faldo\": true, \"selected\": true, \"suggested\": false, \"__indexColor\": \"#ec0001\", \"index\": 0, \"x\": 2.4610529943331394, \"y\": 2.226874027134668, \"vx\": 2.353770443806525e-10, \"vy\": 1.892184783500829e-10}, \"target\": {\"uri\": \"http://askomics.org/test/data/gene\", \"type\": \"node\", \"filterNode\": \"\", \"filterLink\": \"\", \"graphs\": [null, null, \"urn:sparql:askomics_test:1_jdoe:gene.gff3_1590576352\", \"urn:sparql:askomics_test:1_jdoe:gene.bed_1590576352\", null], \"id\": 27, \"humanId\": null, \"specialNodeId\": null, \"specialNodeGroupId\": null, \"specialPreviousIds\": [null, null], \"label\": \"gene\", \"faldo\": true, \"selected\": false, \"suggested\": true, \"__indexColor\": \"#880006\", \"index\": 5, \"x\": 27.314123105593524, \"y\": -20.150587318393672, \"vx\": 1.8446839255154e-10, \"vy\": 1.1018030967605363e-10}, \"selected\": false, \"suggested\": true, \"directed\": true, \"__indexColor\": \"#24000b\", \"__controlPoints\": null, \"index\": 4}], \"attr\": [{\"id\": 2, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"rdf:type\", \"label\": \"Uri\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"uri\", \"faldo\": false, \"filterType\": \"exact\", \"filterValue\": \"\", \"optional\": false, \"negative\": false, \"linked\": false, \"form\": true, \"linkedWith\": null}, {\"id\": 3, \"visible\": true, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"rdfs:label\", \"label\": \"Label\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": false, \"filterType\": \"exact\", \"filterValue\": \"\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null}, {\"id\": 4, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/strand\", \"label\": \"strand\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoStrand\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"plus\", \"uri\": \"http://askomics.org/test/data/plus\"}, {\"label\": \"minus\", \"uri\": \"http://askomics.org/test/data/minus\"}, {\"label\": \"-\", \"uri\": \"http://askomics.org/test/data/-\"}, {\"label\": \"+\", \"uri\": \"http://askomics.org/test/data/%2B\"}], \"filterSelectedValues\": []}, {\"id\": 5, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/reference\", \"label\": \"reference\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoReference\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"1\", \"uri\": \"http://askomics.org/test/data/1\"}], \"filterSelectedValues\": []}, {\"id\": 6, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/chromosomeName\", \"label\": \"chromosomeName\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": \"http://askomics.org/internal/faldoReference\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"At3\", \"uri\": \"http://askomics.org/test/data/At3\"}, {\"label\": \"At5\", \"uri\": \"http://askomics.org/test/data/At5\"}, {\"label\": \"At1\", \"uri\": \"http://askomics.org/test/data/At1\"}], \"filterSelectedValues\": []}, {\"id\": 7, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/taxon\", \"label\": \"taxon\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"Arabidopsis_thaliana\", \"uri\": \"http://askomics.org/test/data/Arabidopsis_thaliana\"}], \"filterSelectedValues\": []}, {\"id\": 8, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/featureType\", \"label\": \"featureType\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"gene\", \"uri\": \"http://askomics.org/test/data/gene\"}, {\"label\": \"miRNA_gene\", \"uri\": \"http://askomics.org/test/data/miRNA_gene\"}, {\"label\": \"ncRNA_gene\", \"uri\": \"http://askomics.org/test/data/ncRNA_gene\"}], \"filterSelectedValues\": []}, {\"id\": 9, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/biotype\", \"label\": \"biotype\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"category\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterValues\": [{\"label\": \"miRNA\", \"uri\": \"http://askomics.org/test/data/miRNA\"}, {\"label\": \"ncRNA\", \"uri\": \"http://askomics.org/test/data/ncRNA\"}, {\"label\": \"protein_coding\", \"uri\": \"http://askomics.org/test/data/protein_coding\"}, {\"label\": \"transposable_element\", \"uri\": \"http://askomics.org/test/data/transposable_element\"}], \"filterSelectedValues\": []}, {\"id\": 10, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/start\", \"label\": \"start\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"decimal\", \"faldo\": \"http://askomics.org/internal/faldoStart\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filters\": [{\"filterValue\": \"\", \"filterSign\": \"=\"}]}, {\"id\": 11, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/end\", \"label\": \"end\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"decimal\", \"faldo\": \"http://askomics.org/internal/faldoEnd\", \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filters\": [{\"filterValue\": \"\", \"filterSign\": \"=\"}]}, {\"id\": 12, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/description\", \"label\": \"description\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 13, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/featureName\", \"label\": \"featureName\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 14, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/ID\", \"label\": \"ID\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 15, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/Name\", \"label\": \"Name\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 16, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/source\", \"label\": \"source\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}, {\"id\": 17, \"visible\": false, \"nodeId\": 1, \"humanNodeId\": 1, \"uri\": \"http://askomics.org/test/data/transcript_id\", \"label\": \"transcript_id\", \"entityLabel\": \"transcript\", \"entityUris\": [\"http://askomics.org/test/data/transcript\"], \"type\": \"text\", \"faldo\": null, \"optional\": false, \"negative\": false, \"linked\": false, \"linkedWith\": null, \"filterType\": \"exact\", \"filterValue\": \"\"}]}", "has_form_attr": ###HAS_FORM_ATTR###, "id": ###ID###, - "nrows": 11, + "nrows": 13, "path": "###PATH###", "public": ###PUBLIC###, "size": ###SIZE###, diff --git a/tests/results/sparql_and_graph.json b/tests/results/sparql_and_graph.json index 34caa773..cc485305 100644 --- a/tests/results/sparql_and_graph.json +++ b/tests/results/sparql_and_graph.json @@ -9,6 +9,7 @@ }, "error": false, "errorMessage": "", + "console_enabled": true, "graphState": { "attr": [ { @@ -435,4 +436,4 @@ } }, "sparqlQuery": null -} \ No newline at end of file +} diff --git a/tests/results/sparql_preview.json b/tests/results/sparql_preview.json index b372209c..e508fa85 100644 --- a/tests/results/sparql_preview.json +++ b/tests/results/sparql_preview.json @@ -1,37 +1,37 @@ { "data": [ { - "transcript1_Label": "AT3G13660" + "transcript1_Label": "label_AT3G13660" }, { - "transcript1_Label": "AT3G10460" + "transcript1_Label": "label_AT3G10460" }, { - "transcript1_Label": "AT3G51470" + "transcript1_Label": "label_AT3G51470" }, { - "transcript1_Label": "AT5G35334" + "transcript1_Label": "label_AT5G35334" }, { - "transcript1_Label": "AT3G10490" + "transcript1_Label": "label_AT3G10490" }, { - "transcript1_Label": "AT3G22640" + "transcript1_Label": "label_AT3G22640" }, { - "transcript1_Label": "AT1G57800" + "transcript1_Label": "label_AT1G57800" }, { - "transcript1_Label": "AT1G49500" + "transcript1_Label": "label_AT1G49500" }, { - "transcript1_Label": "AT1G33615" + "transcript1_Label": "label_AT1G33615" }, { - "transcript1_Label": "AT5G41905" + "transcript1_Label": "label_AT5G41905" } ], "header": [ "transcript1_Label" ] -} \ No newline at end of file +} diff --git a/tests/results/sparql_query.json b/tests/results/sparql_query.json index d815b914..0bfe4a08 100644 --- a/tests/results/sparql_query.json +++ b/tests/results/sparql_query.json @@ -37,5 +37,5 @@ "uri": "urn:sparql:askomics_test:1_jdoe:gene.gff3_###GFF_TIMESTAMP###" } }, - "query": "PREFIX : <http://askomics.org/test/data/>\nPREFIX askomics: <http://askomics.org/test/internal/>\nPREFIX dc: <http://purl.org/dc/elements/1.1/>\nPREFIX faldo: <http://biohackathon.org/resource/faldo/>\nPREFIX owl: <http://www.w3.org/2002/07/owl#>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n\nSELECT DISTINCT ?transcript1_Label\nWHERE {\n ?transcript1_uri rdf:type <http://askomics.org/test/data/transcript> .\n ?transcript1_uri rdfs:label ?transcript1_Label .\n\n\n\n}\n" + "query": "PREFIX : <http://askomics.org/test/data/>\nPREFIX askomics: <http://askomics.org/test/internal/>\nPREFIX dc: <http://purl.org/dc/elements/1.1/>\nPREFIX dcat: <http://www.w3.org/ns/dcat#>\nPREFIX faldo: <http://biohackathon.org/resource/faldo/>\nPREFIX owl: <http://www.w3.org/2002/07/owl#>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX skos: <http://www.w3.org/2004/02/skos/core#>\nPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n\nSELECT DISTINCT ?transcript1_Label\nWHERE {\n ?transcript1_uri rdf:type <http://askomics.org/test/data/transcript> .\n ?transcript1_uri rdfs:label ?transcript1_Label .\n\n\n\n}\n" } diff --git a/tests/results/startpoints.json b/tests/results/startpoints.json index 58475efd..ba87cada 100644 --- a/tests/results/startpoints.json +++ b/tests/results/startpoints.json @@ -8,10 +8,10 @@ [{ "endpoints": [{ "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }, { "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }], "entity": "http://askomics.org/test/data/transcript", @@ -37,10 +37,10 @@ { "endpoints": [{ "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }, { "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }], "entity": "http://askomics.org/test/data/gene", @@ -70,7 +70,7 @@ { "endpoints": [{ "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }], "entity": "http://askomics.org/test/data/DifferentialExpression", @@ -89,7 +89,7 @@ { "endpoints": [{ "name": "local", - "url": "http://localhost:8891/sparql" + "url": "http://localhost:8891/sparql-auth" }], "entity": "http://askomics.org/test/data/QTL", diff --git a/tests/test_api.py b/tests/test_api.py index 7e00b700..81a8bb23 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -42,7 +42,10 @@ def test_start(self, client): "namespaceInternal": client.get_config('triplestore', 'namespace_internal'), "proxyPath": "/", "user": {}, - "logged": False + "logged": False, + "ontologies": [], + "singleTenant": False, + "autocompleteMaxResults": 20 } response = client.client.get('/api/start') assert response.status_code == 200 diff --git a/tests/test_api_admin.py b/tests/test_api_admin.py index efaf3030..30b6cbba 100644 --- a/tests/test_api_admin.py +++ b/tests/test_api_admin.py @@ -68,9 +68,10 @@ def test_get_files(self, client): 'date': info["transcripts"]["upload"]["file_date"], 'id': 1, 'name': 'transcripts.tsv', - 'size': 2102, + 'size': 2264, 'type': 'csv/tsv', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["de"]["upload"]["file_date"], @@ -78,7 +79,8 @@ def test_get_files(self, client): 'name': 'de.tsv', 'size': 819, 'type': 'csv/tsv', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["qtl"]["upload"]["file_date"], @@ -86,15 +88,17 @@ def test_get_files(self, client): 'name': 'qtl.tsv', 'size': 99, 'type': 'csv/tsv', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, + 'size': 2555, 'type': 'gff/gff3', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], @@ -102,7 +106,8 @@ def test_get_files(self, client): 'name': 'gene.bed', 'size': 689, 'type': 'bed', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }] } @@ -134,7 +139,8 @@ def test_get_datasets(self, client): 'traceback': None, 'percent': 100.0, 'exec_time': info["transcripts"]["end"] - info["transcripts"]["start"], - 'user': 'jsmith' + 'user': 'jsmith', + 'ontology': False }, { 'end': info["de"]["end"], 'error_message': '', @@ -147,7 +153,8 @@ def test_get_datasets(self, client): 'traceback': None, 'percent': 100.0, 'exec_time': info["de"]["end"] - info["de"]["start"], - 'user': 'jsmith' + 'user': 'jsmith', + 'ontology': False }, { 'end': info["qtl"]["end"], 'error_message': '', @@ -160,7 +167,8 @@ def test_get_datasets(self, client): 'traceback': None, 'percent': 100.0, 'exec_time': info["qtl"]["end"] - info["qtl"]["start"], - 'user': 'jsmith' + 'user': 'jsmith', + 'ontology': False }, { 'end': info["gff"]["end"], 'error_message': '', @@ -173,7 +181,8 @@ def test_get_datasets(self, client): 'traceback': None, 'percent': 100.0, 'exec_time': info["gff"]["end"] - info["gff"]["start"], - 'user': 'jsmith' + 'user': 'jsmith', + 'ontology': False }, { 'end': info["bed"]["end"], 'error_message': '', @@ -186,7 +195,8 @@ def test_get_datasets(self, client): 'traceback': None, 'percent': 100.0, 'exec_time': info["bed"]["end"] - info["bed"]["start"], - 'user': 'jsmith' + 'user': 'jsmith', + 'ontology': False }], 'error': False, 'errorMessage': '' @@ -437,15 +447,17 @@ def test_delete_files(self, client): 'name': 'qtl.tsv', 'size': 99, 'type': 'csv/tsv', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, + 'size': 2555, 'type': 'gff/gff3', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], @@ -453,7 +465,8 @@ def test_delete_files(self, client): 'name': 'gene.bed', 'size': 689, 'type': 'bed', - 'user': 'jsmith' + 'user': 'jsmith', + 'status': 'available' }] } @@ -483,3 +496,205 @@ def test_delete_datasets(self, client): assert response.json["datasets"][0]["status"] == "queued" assert response.json["datasets"][1]["status"] == "queued" assert response.json["datasets"][2]["status"] == "queued" + + def test_view_custom_prefixes(self, client): + """test /api/admin/getprefixes route""" + client.create_two_users() + client.log_user("jsmith") + + response = client.client.get('/api/admin/getprefixes') + assert response.status_code == 401 + + client.log_user("jdoe") + + expected_empty = { + "error": False, + "errorMessage": "", + "prefixes": [] + } + + response = client.client.get('/api/admin/getprefixes') + assert response.status_code == 200 + assert response.json == expected_empty + + client.create_prefix() + + response = client.client.get('/api/admin/getprefixes') + + expected = { + "error": False, + "errorMessage": "", + "prefixes": [{ + "id": 1, + "namespace": "http://purl.obolibrary.org/obo/", + "prefix": "OBO" + }] + } + + assert response.status_code == 200 + assert response.json == expected + + def test_add_custom_prefix(self, client): + """test /api/admin/addprefix route""" + client.create_two_users() + client.log_user("jsmith") + + data = {"prefix": "OBO", "namespace": "http://purl.obolibrary.org/obo/"} + + response = client.client.post('/api/admin/addprefix', json=data) + assert response.status_code == 401 + + client.log_user("jdoe") + + response = client.client.post('/api/admin/addprefix', json=data) + + expected = { + "error": False, + "errorMessage": "", + "prefixes": [{ + "id": 1, + "namespace": "http://purl.obolibrary.org/obo/", + "prefix": "OBO" + }] + } + + assert response.status_code == 200 + assert response.json == expected + + def test_delete_custom_prefix(self, client): + """test /api/admin/delete_prefixes route""" + client.create_two_users() + client.log_user("jsmith") + + data = {"prefixesIdToDelete": [1]} + + response = client.client.post('/api/admin/delete_prefixes', json=data) + assert response.status_code == 401 + + client.log_user("jdoe") + client.create_prefix() + + response = client.client.post('/api/admin/delete_prefixes', json=data) + + expected = { + "error": False, + "errorMessage": "", + "prefixes": [] + } + + assert response.status_code == 200 + assert response.json == expected + + def test_view_ontologies(self, client): + """test /api/admin/getontologies route""" + client.create_two_users() + client.log_user("jsmith") + + response = client.client.get('/api/admin/getontologies') + assert response.status_code == 401 + + client.log_user("jdoe") + + expected_empty = { + "error": False, + "errorMessage": "", + "ontologies": [] + } + + response = client.client.get('/api/admin/getontologies') + assert response.status_code == 200 + assert response.json == expected_empty + + graph, endpoint = client.create_ontology() + + response = client.client.get('/api/admin/getontologies') + + expected = { + "error": False, + "errorMessage": "", + "ontologies": [{ + "id": 1, + "name": "AgrO ontology", + "uri": "http://purl.obolibrary.org/obo/agro.owl", + "short_name": "AGRO", + "type": "local", + "dataset_id": 1, + "dataset_name": "agro_min.ttl", + "graph": graph, + "endpoint": endpoint, + "remote_graph": None, + "label_uri": "rdfs:label" + }] + } + + assert response.status_code == 200 + assert response.json == expected + + def test_add_ontology(self, client): + """test /api/admin/addontology route""" + client.create_two_users() + client.log_user("jsmith") + + data = {"shortName": "AGRO", "uri": "http://purl.obolibrary.org/obo/agro.owl", "name": "AgrO ontology", "type": "local", "datasetId": 1, "labelUri": "rdfs:label"} + + response = client.client.post('/api/admin/addontology', json=data) + assert response.status_code == 401 + + client.log_user("jdoe") + graph_data = client.upload_and_integrate_ontology() + graph = graph_data["graph"] + endpoint = graph_data["endpoint"] + + response = client.client.post('/api/admin/addontology', json=data) + + # Dataset is not public + assert response.status_code == 400 + assert response.json['errorMessage'] == "Invalid dataset id" + + client.publicize_dataset(1, True) + response = client.client.post('/api/admin/addontology', json=data) + + expected = { + "error": False, + "errorMessage": "", + "ontologies": [{ + "id": 1, + "name": "AgrO ontology", + "uri": "http://purl.obolibrary.org/obo/agro.owl", + "short_name": "AGRO", + "type": "local", + "dataset_id": 1, + "dataset_name": "agro_min.ttl", + "label_uri": "rdfs:label", + "graph": graph, + "endpoint": endpoint, + "remote_graph": None + }] + } + + assert response.status_code == 200 + assert response.json == expected + + def test_delete_ontologies(self, client): + """test /api/admin/delete_ontologies route""" + client.create_two_users() + client.log_user("jsmith") + + data = {"ontologiesIdToDelete": [1]} + + response = client.client.post('/api/admin/delete_ontologies', json=data) + assert response.status_code == 401 + + client.log_user("jdoe") + client.create_ontology() + + response = client.client.post('/api/admin/delete_ontologies', json=data) + + expected = { + "error": False, + "errorMessage": "", + "ontologies": [] + } + + assert response.status_code == 200 + assert response.json == expected diff --git a/tests/test_api_data.py b/tests/test_api_data.py index 9693f11c..f7569042 100644 --- a/tests/test_api_data.py +++ b/tests/test_api_data.py @@ -12,15 +12,12 @@ def test_get_uri(self, client): client.log_user("jdoe") client.upload_and_integrate() - with open("tests/results/data.json", "r") as file: + with open("tests/results/data_full.json", "r") as file: file_content = file.read() expected = json.loads(file_content) response = client.client.get('/api/data/AT3G10490') - # Remove this dict since the node value seems to change (dependant on load order maybe?) - response.json['data'] = [val for val in response.json['data'] if not val['predicat'] == "http://biohackathon.org/resource/faldo/location"] - assert response.status_code == 200 assert self.equal_objects(response.json, expected) @@ -63,18 +60,15 @@ def test_public_access(self, client): client.integrate_file({ "id": 1, - "columns_type": ["start_entity", "category", "text", "reference", "start", "end", "category", "strand", "text", "text", "date"] + "columns_type": ["start_entity", "label", "category", "text", "reference", "start", "end", "category", "strand", "text", "text", "date"] }, public=True) - with open("tests/results/data.json", "r") as file: + with open("tests/results/data_public.json", "r") as file: file_content = file.read() expected = json.loads(file_content) client.logout() response = client.client.get('/api/data/AT3G10490') - # Remove this dict since the node value seems to change (dependant on load order maybe?) - response.json['data'] = [val for val in response.json['data'] if not val['predicat'] == "http://biohackathon.org/resource/faldo/location"] - assert response.status_code == 200 assert self.equal_objects(response.json, expected) diff --git a/tests/test_api_datasets.py b/tests/test_api_datasets.py index 3e35faed..ba5dba74 100644 --- a/tests/test_api_datasets.py +++ b/tests/test_api_datasets.py @@ -24,7 +24,8 @@ def test_get_datasets(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["transcripts"]["end"] - info["transcripts"]["start"] + 'exec_time': info["transcripts"]["end"] - info["transcripts"]["start"], + 'ontology': False }, { 'end': info["de"]["end"], 'error_message': '', @@ -36,7 +37,8 @@ def test_get_datasets(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["de"]["end"] - info["de"]["start"] + 'exec_time': info["de"]["end"] - info["de"]["start"], + 'ontology': False }, { 'end': info["qtl"]["end"], 'error_message': '', @@ -48,7 +50,8 @@ def test_get_datasets(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["qtl"]["end"] - info["qtl"]["start"] + 'exec_time': info["qtl"]["end"] - info["qtl"]["start"], + 'ontology': False }, { 'end': info["gff"]["end"], 'error_message': '', @@ -60,7 +63,8 @@ def test_get_datasets(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["gff"]["end"] - info["gff"]["start"] + 'exec_time': info["gff"]["end"] - info["gff"]["start"], + 'ontology': False }, { 'end': info["bed"]["end"], 'error_message': '', @@ -72,7 +76,8 @@ def test_get_datasets(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["bed"]["end"] - info["bed"]["start"] + 'exec_time': info["bed"]["end"] - info["bed"]["start"], + 'ontology': False }], 'error': False, 'errorMessage': '' @@ -118,7 +123,8 @@ def test_toggle_public(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["transcripts"]["end"] - info["transcripts"]["start"] + 'exec_time': info["transcripts"]["end"] - info["transcripts"]["start"], + 'ontology': False }, { 'end': info["de"]["end"], 'error_message': '', @@ -130,7 +136,8 @@ def test_toggle_public(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["de"]["end"] - info["de"]["start"] + 'exec_time': info["de"]["end"] - info["de"]["start"], + 'ontology': False }, { 'end': info["qtl"]["end"], 'error_message': '', @@ -142,7 +149,8 @@ def test_toggle_public(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["qtl"]["end"] - info["qtl"]["start"] + 'exec_time': info["qtl"]["end"] - info["qtl"]["start"], + 'ontology': False }, { 'end': info["gff"]["end"], 'error_message': '', @@ -154,7 +162,8 @@ def test_toggle_public(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["gff"]["end"] - info["gff"]["start"] + 'exec_time': info["gff"]["end"] - info["gff"]["start"], + 'ontology': False }, { 'end': info["bed"]["end"], 'error_message': '', @@ -166,7 +175,8 @@ def test_toggle_public(self, client): 'status': 'success', 'traceback': None, 'percent': 100.0, - 'exec_time': info["bed"]["end"] - info["bed"]["start"] + 'exec_time': info["bed"]["end"] - info["bed"]["start"], + 'ontology': False }], 'error': False, 'errorMessage': '' diff --git a/tests/test_api_file.py b/tests/test_api_file.py index e27468d8..a3a0f708 100644 --- a/tests/test_api_file.py +++ b/tests/test_api_file.py @@ -25,32 +25,37 @@ def test_get_files(self, client): 'date': info["transcripts"]["upload"]["file_date"], 'id': 1, 'name': 'transcripts.tsv', - 'size': 2102, - 'type': 'csv/tsv' + 'size': 2264, + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["de"]["upload"]["file_date"], 'id': 2, 'name': 'de.tsv', 'size': 819, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["qtl"]["upload"]["file_date"], 'id': 3, 'name': 'qtl.tsv', 'size': 99, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, - 'type': 'gff/gff3' + 'size': 2555, + 'type': 'gff/gff3', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], 'id': 5, 'name': 'gene.bed', 'size': 689, - 'type': 'bed' + 'type': 'bed', + 'status': 'available' }] } @@ -73,8 +78,9 @@ def test_get_files(self, client): 'date': info["transcripts"]["upload"]["file_date"], 'id': 1, 'name': 'transcripts.tsv', - 'size': 2102, - 'type': 'csv/tsv' + 'size': 2264, + 'type': 'csv/tsv', + 'status': 'available' }] } @@ -84,7 +90,30 @@ def test_get_files(self, client): 'diskSpace': client.get_size_occupied_by_user(), 'error': False, 'errorMessage': '', - 'files': [] + 'files': [], + } + + def test_get_files_upload(self, client): + """test the /api/files route after an url upload""" + client.create_two_users() + client.log_user("jdoe") + date = client.upload_file_url("https://raw.githubusercontent.com/askomics/demo-data/master/Example/gene.tsv") + + response = client.client.get('/api/files') + + assert response.status_code == 200 + assert response.json == { + 'diskSpace': client.get_size_occupied_by_user(), + 'error': False, + 'errorMessage': '', + 'files': [{ + 'date': date, + 'id': 1, + 'name': 'gene.tsv', + 'size': 369, + 'type': 'csv/tsv', + 'status': 'available' + }] } def test_edit_file(self, client): @@ -105,32 +134,37 @@ def test_edit_file(self, client): 'date': info["transcripts"]["upload"]["file_date"], 'id': 1, 'name': 'new name.tsv', - 'size': 2102, - 'type': 'csv/tsv' + 'size': 2264, + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["de"]["upload"]["file_date"], 'id': 2, 'name': 'de.tsv', 'size': 819, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["qtl"]["upload"]["file_date"], 'id': 3, 'name': 'qtl.tsv', 'size': 99, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, - 'type': 'gff/gff3' + 'size': 2555, + 'type': 'gff/gff3', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], 'id': 5, 'name': 'gene.bed', 'size': 689, - 'type': 'bed' + 'type': 'bed', + 'status': 'available' }] } @@ -323,7 +357,6 @@ def test_upload_url(self, client): response = client.client.get("/api/files") assert response.status_code == 200 - assert len(response.json["files"]) == 1 def test_get_preview(self, client): """Test /api/files/preview route""" @@ -427,25 +460,29 @@ def test_delete_files(self, client): 'id': 2, 'name': 'de.tsv', 'size': 819, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["qtl"]["upload"]["file_date"], 'id': 3, 'name': 'qtl.tsv', 'size': 99, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, - 'type': 'gff/gff3' + 'size': 2555, + 'type': 'gff/gff3', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], 'id': 5, 'name': 'gene.bed', 'size': 689, - 'type': 'bed' + 'type': 'bed', + 'status': 'available' }] } @@ -459,19 +496,22 @@ def test_delete_files(self, client): 'id': 3, 'name': 'qtl.tsv', 'size': 99, - 'type': 'csv/tsv' + 'type': 'csv/tsv', + 'status': 'available' }, { 'date': info["gene"]["upload"]["file_date"], 'id': 4, 'name': 'gene.gff3', - 'size': 2267, - 'type': 'gff/gff3' + 'size': 2555, + 'type': 'gff/gff3', + 'status': 'available' }, { 'date': info["bed"]["upload"]["file_date"], 'id': 5, 'name': 'gene.bed', 'size': 689, - 'type': 'bed' + 'type': 'bed', + 'status': 'available' }] } @@ -560,5 +600,4 @@ def test_serve_file(self, client): response = client.client.get('/api/files/ttl/1/jdoe/{}'.format(filename)) assert response.status_code == 200 - # print(response.data.decode("utf-8")) assert response.data.decode("utf-8") == content diff --git a/tests/test_api_ontology.py b/tests/test_api_ontology.py new file mode 100644 index 00000000..c22a1821 --- /dev/null +++ b/tests/test_api_ontology.py @@ -0,0 +1,73 @@ +from . import AskomicsTestCase + + +class TestApiOntology(AskomicsTestCase): + """Test AskOmics API /api/ontology/<someting>""" + + def test_local_autocompletion_protected(self, client): + """ Test autocompletion on missing ontology""" + query = "blabla" + client.set_config("askomics", "protect_public", "true") + response = client.client.get('/api/ontology/AGRO/autocomplete?q={}'.format(query)) + + assert response.status_code == 401 + assert len(response.json["results"]) == 0 + + def test_local_autocompletion_missing_ontology(self, client): + """ Test autocompletion on missing ontology""" + query = "blabla" + response = client.client.get('/api/ontology/AGRO/autocomplete?q={}'.format(query)) + + assert response.status_code == 404 + assert len(response.json["results"]) == 0 + + def test_local_autocompletion(self, client): + """test /api/ontology/AGRO/autocomplete route""" + client.create_two_users() + client.log_user("jdoe") + + client.create_ontology() + + query = "blabla" + response = client.client.get('/api/ontology/AGRO/autocomplete?q={}'.format(query)) + + assert response.status_code == 200 + assert len(response.json["results"]) == 0 + assert response.json["results"] == [] + + query = "" + response = client.client.get('/api/ontology/AGRO/autocomplete?q={}'.format(query)) + + expected = [ + "desuckering", + "irrigation water source role", + "irrigation water quantity", + "reduced tillage process", + "laser land levelling process", + "chemical pest control process", + "no-till", + "puddling process", + "mulch-till", + "ridge-till", + "strip-till", + "aerial application" + ] + + assert response.status_code == 200 + assert len(response.json["results"]) == 12 + + # SPARQL order is not reliable, so we make sure to return everything + # If it fails, skip this + assert self.equal_objects(response.json["results"], expected) + + query = "irrigation" + response = client.client.get('/api/ontology/AGRO/autocomplete?q={}'.format(query)) + + expected = [ + "irrigation water source role", + "irrigation water quantity" + ] + + assert response.status_code == 200 + assert len(response.json["results"]) == 2 + assert self.equal_objects(response.json["results"], expected) diff --git a/tests/test_api_query.py b/tests/test_api_query.py index 9a1cdc54..68b9b486 100644 --- a/tests/test_api_query.py +++ b/tests/test_api_query.py @@ -153,7 +153,7 @@ def test_get_preview(self, client): client.log_user("jdoe") response = client.client.post('/api/query/preview', json=data) - expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'AT1G57800'}, {'transcript1_Label': 'AT5G35334'}, {'transcript1_Label': 'AT3G10460'}, {'transcript1_Label': 'AT1G49500'}, {'transcript1_Label': 'AT3G10490'}, {'transcript1_Label': 'AT3G51470'}, {'transcript1_Label': 'AT5G41905'}, {'transcript1_Label': 'AT1G33615'}, {'transcript1_Label': 'AT3G22640'}, {'transcript1_Label': 'AT3G13660'}, {'transcript1_Label': 'AT1G01010.1'}]} + expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'label_AT1G57800'}, {'transcript1_Label': 'label_AT5G35334'}, {'transcript1_Label': 'label_AT3G10460'}, {'transcript1_Label': 'label_AT1G49500'}, {'transcript1_Label': 'label_AT3G10490'}, {'transcript1_Label': 'label_AT3G51470'}, {'transcript1_Label': 'label_AT5G41905'}, {'transcript1_Label': 'label_AT1G33615'}, {'transcript1_Label': 'label_AT3G22640'}, {'transcript1_Label': 'label_AT3G13660'}, {'transcript1_Label': 'AT1G01010.1'}, {'transcript1_Label': 'AT1G01010.2'}, {'transcript1_Label': 'AT1G01010.3'}]} # print(response.json) @@ -171,7 +171,7 @@ def test_get_preview(self, client): "graphState": json_query, } response = client.client.post('/api/query/preview', json=data) - expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'AT3G10490'}]} + expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'label_AT3G10490'}]} assert response.status_code == 200 assert self.equal_objects(response.json, expected) @@ -197,7 +197,7 @@ def test_get_preview(self, client): "graphState": json_query, } response = client.client.post('/api/query/preview', json=data) - expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'AT3G10490'}]} + expected = {'error': False, 'errorMessage': '', 'headerPreview': ['transcript1_Label'], 'resultsPreview': [{'transcript1_Label': 'label_AT3G10490'}]} assert response.status_code == 200 assert self.equal_objects(response.json, expected)