This is an automated email from the ASF dual-hosted git repository. yasith pushed a commit to branch py310 in repository https://gitbox.apache.org/repos/asf/airavata-portals.git
commit c3ddc0403b31d5618d125b0ce37743c93933dc35 Author: yasithdev <[email protected]> AuthorDate: Thu Jul 17 00:22:27 2025 -0500 consolidate django-portal projects into one --- airavata-django-portal-commons/.gitignore | 7 - airavata-django-portal-commons/MANIFEST.in | 0 airavata-django-portal-commons/README.md | 111 ---------- airavata-django-portal-commons/pyproject.toml | 6 - airavata-django-portal-commons/setup.cfg | 14 -- airavata-django-portal-commons/setup.py | 3 - airavata-django-portal-sdk/.asf.yaml | 40 ---- airavata-django-portal-sdk/.gitignore | 8 - airavata-django-portal-sdk/.readthedocs.yaml | 20 -- airavata-django-portal-sdk/LICENSE | 201 ----------------- airavata-django-portal-sdk/README.md | 123 ----------- airavata-django-portal-sdk/mkdocs.yml | 6 - airavata-django-portal-sdk/pytest.ini | 2 - airavata-django-portal-sdk/requirements-dev.txt | 13 -- airavata-django-portal-sdk/requirements.txt | 24 --- airavata-django-portal-sdk/setup.cfg | 17 -- airavata-django-portal-sdk/setup.py | 43 ---- airavata-django-portal-sdk/tox.ini | 18 -- airavata-django-portal/README.md | 238 +++++++++++++++++++++ .../airavata_django_portal_commons/__init__.py | 0 .../dynamic_apps/__init__.py | 0 .../dynamic_apps/context_processors.py | 0 .../dynamic_apps/urls.py | 0 .../airavata_django_portal_sdk/__init__.py | 0 .../airavata_django_portal_sdk/apps.py | 0 .../airavata_django_portal_sdk/decorators.py | 0 .../experiment_util/__init__.py | 0 .../experiment_util/api.py | 0 .../experiment_util/intermediate_output.py | 0 .../migrations/0001_initial.py | 0 .../migrations/0002_userfiles_file_resource_id.py | 0 .../migrations/0003_auto_20220225_1510.py | 0 .../migrations/__init__.py | 0 .../airavata_django_portal_sdk/models.py | 0 .../queue_settings_calculators.py | 0 .../airavata_django_portal_sdk/remoteapi.py | 0 .../airavata_django_portal_sdk/serializers.py | 0 .../airavata_django_portal_sdk/tests/__init__.py | 0 .../tests/test_queue_settings_calculator.py | 0 .../tests/test_settings.py | 0 .../tests/test_user_storage.py | 0 .../airavata_django_portal_sdk/tests/test_util.py | 0 .../airavata_django_portal_sdk/tests/test_views.py | 0 .../airavata_django_portal_sdk/urls.py | 0 .../user_storage/__init__.py | 0 .../airavata_django_portal_sdk/user_storage/api.py | 0 .../user_storage/backends/CredCommon_pb2.py | 0 .../user_storage/backends/CredCommon_pb2_grpc.py | 0 .../user_storage/backends/MFTApi_pb2.py | 0 .../user_storage/backends/MFTApi_pb2_grpc.py | 0 .../user_storage/backends/__init__.py | 0 .../user_storage/backends/base.py | 0 .../backends/django_filesystem_provider.py | 0 .../user_storage/backends/mft_provider.py | 0 .../airavata_django_portal_sdk/util.py | 0 .../airavata_django_portal_sdk/views.py | 0 .../index.md => airavata-django-portal/docs/sdk.md | 0 airavata-django-portal/pyproject.toml | 26 ++- 58 files changed, 255 insertions(+), 665 deletions(-) diff --git a/airavata-django-portal-commons/.gitignore b/airavata-django-portal-commons/.gitignore deleted file mode 100644 index 4f6cd5fa1..000000000 --- a/airavata-django-portal-commons/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -venv -*.egg-info -*.pyc -.vscode -build -dist -*.egg diff --git a/airavata-django-portal-commons/MANIFEST.in b/airavata-django-portal-commons/MANIFEST.in deleted file mode 100644 index e69de29bb..000000000 diff --git a/airavata-django-portal-commons/README.md b/airavata-django-portal-commons/README.md deleted file mode 100644 index 282c1129a..000000000 --- a/airavata-django-portal-commons/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# Airavata Django Portal Commons - -Utilities for working with dynamically loaded Django apps. - -## Getting Started - -Install this package with pip - -``` -pip install airavata-django-portal-commons -``` - -### Dynamically loaded Django apps - -1. At the end of your Django server's settings.py file add - -```python -import sys -from airavata_django_portal_commons import dynamic_apps - -# Add any dynamic apps installed in the virtual environment -dynamic_apps.load(INSTALLED_APPS) - -# (Optional) merge WEBPACK_LOADER settings from custom Django apps -settings_module = sys.modules[__name__] -dynamic_apps.merge_settings(settings_module) -``` - -- Note: if the dynamic Django app uses WEBPACK_LOADER, keep in mind that it is - important that the version of - [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) - and the version of webpack-bundle-tracker be compatible. If you're using - django-webpack-loader prior to version 1.0 then a known good pair of versions - is django-webpack-loader==0.6.0 and webpack-bundle-tracker==0.4.3. - -2. Also add - `'airavata_django_portal_commons.dynamic_apps.context_processors.custom_app_registry'` - to the context_processors list: - -```python -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': ... - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - ... - 'airavata_django_portal_commons.dynamic_apps.context_processors.custom_app_registry', - ], - }, - }, -] -``` - -3. In your urls.py file add the following to the urlpatterns - -```python -urlpatterns = [ - # ... - path('', include('airavata_django_portal_commons.dynamic_apps.urls')), -] -``` - -## Creating a dynamically loaded Django app - -See -https://apache-airavata-django-portal.readthedocs.io/en/latest/dev/custom_django_app/ -for the latest information. - -Note that by default the -[cookiecutter template](https://github.com/machristie/cookiecutter-airavata-django-app) -registers Django apps under the entry_point group name of `airavata.djangoapp`, -but you can change this. Just make sure that when you call `dynamic_apps.load` -that you pass as the second argument the name of the entry_point group. - -## Developing - -### Making a new release - -1. Update the version in setup.cfg. -2. Commit the update to setup.cfg. -3. Tag the repo with the same version, with the format `v${version_number}`. For - example, if the version number in setup.cfg is "1.2" then tag the repo with - "v1.2". - - ``` - VERSION=... - git tag -m $VERSION $VERSION - git push --follow-tags - ``` - -4. In a clean checkout - - ``` - cd /tmp/ - git clone /path/to/airavata-django-portal-commons/ -b $VERSION - cd airavata-django-portal-commons - python3 -m venv venv - source venv/bin/activate - python3 -m pip install --upgrade pip build - python3 -m build - ``` - -5. Push to pypi.org. Optionally can push to test.pypi.org. See - <https://packaging.python.org/tutorials/packaging-projects/> for more info. - - ``` - python3 -m pip install --upgrade twine - python3 -m twine upload dist/* - ``` diff --git a/airavata-django-portal-commons/pyproject.toml b/airavata-django-portal-commons/pyproject.toml deleted file mode 100644 index 374b58cbf..000000000 --- a/airavata-django-portal-commons/pyproject.toml +++ /dev/null @@ -1,6 +0,0 @@ -[build-system] -requires = [ - "setuptools>=42", - "wheel" -] -build-backend = "setuptools.build_meta" diff --git a/airavata-django-portal-commons/setup.cfg b/airavata-django-portal-commons/setup.cfg deleted file mode 100644 index 4e82a46e5..000000000 --- a/airavata-django-portal-commons/setup.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[metadata] -name = airavata-django-portal-commons -version = 1.0.3 -description = Utilities for working with dynamically loaded Django apps. -long_description = file: README.md -long_description_content_type = text/markdown - -[options] -packages = find: -# Include data files as specified in MANIFEST.in -include_package_data = True -install_requires = - django - importlib_metadata diff --git a/airavata-django-portal-commons/setup.py b/airavata-django-portal-commons/setup.py deleted file mode 100644 index b908cbe55..000000000 --- a/airavata-django-portal-commons/setup.py +++ /dev/null @@ -1,3 +0,0 @@ -import setuptools - -setuptools.setup() diff --git a/airavata-django-portal-sdk/.asf.yaml b/airavata-django-portal-sdk/.asf.yaml deleted file mode 100644 index 4435134bd..000000000 --- a/airavata-django-portal-sdk/.asf.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -notifications: - commits: [email protected] - # Send all issue emails (new, closed, comments) to issues@ - issues: [email protected] - # Send new/closed PR notifications to issues@ - pullrequests_status: [email protected] - # Send individual PR comments/reviews to issues@ - pullrequests_comment: [email protected] - -github: - description: "Apache Airavata Django Portal SDK" - homepage: https://airavata.apache.org/ - labels: - - airavata - - sciencegateways - - gateways - - cloudnative - - microservices - - java - - workfloworchestrator - - workflow - - bigdata diff --git a/airavata-django-portal-sdk/.gitignore b/airavata-django-portal-sdk/.gitignore deleted file mode 100644 index ac71a3253..000000000 --- a/airavata-django-portal-sdk/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -venv/ -airavata_django_portal_sdk.egg-info -*.pyc -__pycache__ -.vscode -db.sqlite3 -dist -.tox diff --git a/airavata-django-portal-sdk/.readthedocs.yaml b/airavata-django-portal-sdk/.readthedocs.yaml deleted file mode 100644 index 344483393..000000000 --- a/airavata-django-portal-sdk/.readthedocs.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# .readthedocs.yaml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Set the version of Python and other tools you might need -build: - os: ubuntu-22.04 - tools: - python: "3.10" - -mkdocs: - configuration: mkdocs.yml - -# Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: requirements-dev.txt diff --git a/airavata-django-portal-sdk/LICENSE b/airavata-django-portal-sdk/LICENSE deleted file mode 100644 index f49a4e16e..000000000 --- a/airavata-django-portal-sdk/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/airavata-django-portal-sdk/README.md b/airavata-django-portal-sdk/README.md deleted file mode 100644 index 897361731..000000000 --- a/airavata-django-portal-sdk/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# Airavata Django Portal SDK - -[](https://travis-ci.com/apache/airavata-django-portal-sdk) - -The Airavata Django Portal SDK provides libraries that assist in developing -custom Django app extensions to the -[Airavata Django Portal](https://github.com/apache/airavata-django-portal). - -See the documentation at https://airavata-django-portal-sdk.readthedocs.io/ for -more details. - -## Getting Started - -To integrate the SDK with an Airavata Django Portal custom app, add - -``` -airavata-django-portal-sdk -``` - -to the `install_requires` list in your setup.cfg or setup.py file. Then -reinstall the Django app with - -``` -pip install -e . -``` - -(see your Airavata Django custom app's README for details) - -You can also just install the library with: - -``` -pip install airavata-django-portal-sdk -``` - -## Migrations - -``` -django-admin makemigrations --settings=airavata_django_portal_sdk.tests.test_settings airavata_django_portal_sdk -``` - -## Developing - -### Setting up dev environment - -To generate the documentation, -[create a virtual environment](https://docs.python.org/3/tutorial/venv.html) and -then: - -``` -source venv/bin/activate -pip install --upgrade pip setuptools wheel -pip install -r requirements-dev.txt -``` - -### Documentation - -``` -mkdocs serve -``` - -### Running tests - -``` -pytest -``` - -or - -``` -django-admin test --settings airavata_django_portal_sdk.tests.test_settings -``` - -or use tox to run the tests in all supported Python environments - -``` -tox -``` - -### Running flake8 - -``` -flake8 . -``` - -### Automatically formatting Python code - -``` -autopep8 -i -aaa -r . -isort . -``` - -### Making a new release - -1. Update the version in setup.py -2. Tag the repo with the same version, with the format `v${version_number}`. For - example, if the version number in setup.py is "1.2" then tag the repo with - "v1.2". - - ``` - VERSION=... - git tag -m $VERSION $VERSION - git push --follow-tags - ``` - -3. In a clean checkout - - ``` - cd /tmp/ - git clone /path/to/airavata-django-portal-sdk/ -b $VERSION - cd airavata-django-portal-sdk - python3 -m venv venv - source venv/bin/activate - python3 -m pip install --upgrade build - python3 -m build - ``` - -4. Push to pypi.org. Optionally can push to test.pypi.org. See - <https://packaging.python.org/tutorials/packaging-projects/> for more info. - - ``` - python3 -m pip install --upgrade twine - python3 -m twine upload dist/* - ``` diff --git a/airavata-django-portal-sdk/mkdocs.yml b/airavata-django-portal-sdk/mkdocs.yml deleted file mode 100644 index f92ad01f5..000000000 --- a/airavata-django-portal-sdk/mkdocs.yml +++ /dev/null @@ -1,6 +0,0 @@ -site_name: Airavata Django Portal SDK - -theme: readthedocs - -markdown_extensions: - - mkautodoc diff --git a/airavata-django-portal-sdk/pytest.ini b/airavata-django-portal-sdk/pytest.ini deleted file mode 100644 index 2d475e66b..000000000 --- a/airavata-django-portal-sdk/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -DJANGO_SETTINGS_MODULE = airavata_django_portal_sdk.tests.test_settings diff --git a/airavata-django-portal-sdk/requirements-dev.txt b/airavata-django-portal-sdk/requirements-dev.txt deleted file mode 100644 index 1cb2d1cc9..000000000 --- a/airavata-django-portal-sdk/requirements-dev.txt +++ /dev/null @@ -1,13 +0,0 @@ --r requirements.txt --e . -autopep8==1.5.4 -flake8==3.8.4 -flake8-isort==4.0.0 -Markdown==3.3.4 ; python_version < "3.7" -mkdocs==1.3.0 -mkautodoc==0.2.0 -pycodestyle==2.6.0 -Jinja2==3.0.3 -pytest==7.0.1 -pytest-django==4.5.2 -tox==3.27.1 diff --git a/airavata-django-portal-sdk/requirements.txt b/airavata-django-portal-sdk/requirements.txt deleted file mode 100644 index 796cec691..000000000 --- a/airavata-django-portal-sdk/requirements.txt +++ /dev/null @@ -1,24 +0,0 @@ -airavata-python-sdk==2.1.5 -bcrypt==3.1.7 -cffi==1.15.1 -cryptography==38.0.4 -Django==3.2.16 -djangorestframework==3.11.2 -google-api-python-client==1.12.8 -grpcio-tools==1.48.2 ; python_version < "3.7" -grpcio-tools==1.51.1 ; python_version >= "3.7" -grpcio==1.48.2 ; python_version < "3.7" -grpcio==1.51.1 ; python_version >= "3.7" -oauthlib==3.1.0 -paramiko==2.10.1 -pycparser==2.21 -PyNaCl==1.4.0 -pysftp==0.2.9 -pytz==2020.1 -requests-oauthlib==0.7.0 -requests==2.20.0 -scp==0.13.2 -six==1.15.0 -thrift-connector==0.24 -thrift==0.22.0 -zipstream-new==1.1.8 diff --git a/airavata-django-portal-sdk/setup.cfg b/airavata-django-portal-sdk/setup.cfg deleted file mode 100644 index 4e3a7a7de..000000000 --- a/airavata-django-portal-sdk/setup.cfg +++ /dev/null @@ -1,17 +0,0 @@ -[flake8] -# Exclude grpc autogenerated files -exclude = venv, *_pb2_grpc.py, *_pb2.py, .tox, .git, __pycache__ -ignore = E501, W504 - -[isort] -# Set multi_line_output to option 3 - Vertical Hanging Indent - -# from third_party import ( -# lib1, -# lib2, -# lib3, -# lib4, -# ) -multi_line_output = 3 -skip_gitignore = true -skip_glob = *_pb2_grpc.py, *_pb2.py diff --git a/airavata-django-portal-sdk/setup.py b/airavata-django-portal-sdk/setup.py deleted file mode 100644 index 14790e312..000000000 --- a/airavata-django-portal-sdk/setup.py +++ /dev/null @@ -1,43 +0,0 @@ -import os - -from setuptools import find_packages, setup - - -def read(fname): - with open(os.path.join(os.path.dirname(__file__), fname)) as f: - return f.read() - - -setup( - name="airavata-django-portal-sdk", - version="1.8.4", - url="https://github.com/apache/airavata-django-portal-sdk", - author="Apache Software Foundation", - author_email="[email protected]", - description=( - "The Airavata Django Portal SDK is a library that makes " - "it easier to develop Airavata Django Portal customizations." - ), - long_description=read("README.md"), - long_description_content_type='text/markdown', - license="Apache License 2.0", - packages=find_packages(), - install_requires=[ - "django", - "djangorestframework", - "airavata-python-sdk", - "requests < 3", - "zipstream-new", - ], - classifiers=[ - "Development Status :: 4 - Beta", - "Environment :: Web Environment", - "Framework :: Django", - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Natural Language :: English", - "Programming Language :: Python :: 3.6", - "Topic :: Internet :: WWW/HTTP", - "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", - ] -) diff --git a/airavata-django-portal-sdk/tox.ini b/airavata-django-portal-sdk/tox.ini deleted file mode 100644 index 45e503d36..000000000 --- a/airavata-django-portal-sdk/tox.ini +++ /dev/null @@ -1,18 +0,0 @@ -# tox (https://tox.readthedocs.io/) is a tool for running tests -# in multiple virtualenvs. This configuration file will run the -# test suite on all supported python versions. To use it, "pip install tox" -# and then run "tox" from this directory. - -[tox] -envlist = py36, py37, py38, py39, py310, py311 - -[testenv] -deps = - py{3,36,37,38,39,310,311}: -rrequirements-dev.txt - -commands = - pytest airavata_django_portal_sdk/ - -# see https://github.com/pytest-dev/pytest/issues/2042 -setenv = - PY_IGNORE_IMPORTMISMATCH = 1 diff --git a/airavata-django-portal/README.md b/airavata-django-portal/README.md index 491543ad5..15915658f 100644 --- a/airavata-django-portal/README.md +++ b/airavata-django-portal/README.md @@ -197,3 +197,241 @@ Run `./runtests.py` to run the Django unit tests. The Apache Airavata Django Portal is licensed under the Apache 2.0 license. For more information see the [LICENSE](LICENSE) file. + + +# Airavata Django Portal Commons + +Utilities for working with dynamically loaded Django apps. + +## Getting Started + +Install this package with pip + +``` +pip install airavata-django-portal-commons +``` + +### Dynamically loaded Django apps + +1. At the end of your Django server's settings.py file add + +```python +import sys +from airavata_django_portal_commons import dynamic_apps + +# Add any dynamic apps installed in the virtual environment +dynamic_apps.load(INSTALLED_APPS) + +# (Optional) merge WEBPACK_LOADER settings from custom Django apps +settings_module = sys.modules[__name__] +dynamic_apps.merge_settings(settings_module) +``` + +- Note: if the dynamic Django app uses WEBPACK_LOADER, keep in mind that it is + important that the version of + [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) + and the version of webpack-bundle-tracker be compatible. If you're using + django-webpack-loader prior to version 1.0 then a known good pair of versions + is django-webpack-loader==0.6.0 and webpack-bundle-tracker==0.4.3. + +2. Also add + `'airavata_django_portal_commons.dynamic_apps.context_processors.custom_app_registry'` + to the context_processors list: + +```python +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': ... + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + ... + 'airavata_django_portal_commons.dynamic_apps.context_processors.custom_app_registry', + ], + }, + }, +] +``` + +3. In your urls.py file add the following to the urlpatterns + +```python +urlpatterns = [ + # ... + path('', include('airavata_django_portal_commons.dynamic_apps.urls')), +] +``` + +## Creating a dynamically loaded Django app + +See +https://apache-airavata-django-portal.readthedocs.io/en/latest/dev/custom_django_app/ +for the latest information. + +Note that by default the +[cookiecutter template](https://github.com/machristie/cookiecutter-airavata-django-app) +registers Django apps under the entry_point group name of `airavata.djangoapp`, +but you can change this. Just make sure that when you call `dynamic_apps.load` +that you pass as the second argument the name of the entry_point group. + +## Developing + +### Making a new release + +1. Update the version in setup.cfg. +2. Commit the update to setup.cfg. +3. Tag the repo with the same version, with the format `v${version_number}`. For + example, if the version number in setup.cfg is "1.2" then tag the repo with + "v1.2". + + ``` + VERSION=... + git tag -m $VERSION $VERSION + git push --follow-tags + ``` + +4. In a clean checkout + + ``` + cd /tmp/ + git clone /path/to/airavata-django-portal-commons/ -b $VERSION + cd airavata-django-portal-commons + python3 -m venv venv + source venv/bin/activate + python3 -m pip install --upgrade pip build + python3 -m build + ``` + +5. Push to pypi.org. Optionally can push to test.pypi.org. See + <https://packaging.python.org/tutorials/packaging-projects/> for more info. + + ``` + python3 -m pip install --upgrade twine + python3 -m twine upload dist/* + ``` + +# Airavata Django Portal SDK + +[](https://travis-ci.com/apache/airavata-django-portal-sdk) + +The Airavata Django Portal SDK provides libraries that assist in developing +custom Django app extensions to the +[Airavata Django Portal](https://github.com/apache/airavata-django-portal). + +See the documentation at https://airavata-django-portal-sdk.readthedocs.io/ for +more details. + +## Getting Started + +To integrate the SDK with an Airavata Django Portal custom app, add + +``` +airavata-django-portal-sdk +``` + +to the `install_requires` list in your setup.cfg or setup.py file. Then +reinstall the Django app with + +``` +pip install -e . +``` + +(see your Airavata Django custom app's README for details) + +You can also just install the library with: + +``` +pip install airavata-django-portal-sdk +``` + +## Migrations + +``` +django-admin makemigrations --settings=airavata_django_portal_sdk.tests.test_settings airavata_django_portal_sdk +``` + +## Developing + +### Setting up dev environment + +To generate the documentation, +[create a virtual environment](https://docs.python.org/3/tutorial/venv.html) and +then: + +``` +source venv/bin/activate +pip install --upgrade pip setuptools wheel +pip install -r requirements-dev.txt +``` + +### Documentation + +``` +mkdocs serve +``` + +### Running tests + +``` +pytest +``` + +or + +``` +django-admin test --settings airavata_django_portal_sdk.tests.test_settings +``` + +or use tox to run the tests in all supported Python environments + +``` +tox +``` + +### Running flake8 + +``` +flake8 . +``` + +### Automatically formatting Python code + +``` +autopep8 -i -aaa -r . +isort . +``` + +### Making a new release + +1. Update the version in setup.py +2. Tag the repo with the same version, with the format `v${version_number}`. For + example, if the version number in setup.py is "1.2" then tag the repo with + "v1.2". + + ``` + VERSION=... + git tag -m $VERSION $VERSION + git push --follow-tags + ``` + +3. In a clean checkout + + ``` + cd /tmp/ + git clone /path/to/airavata-django-portal-sdk/ -b $VERSION + cd airavata-django-portal-sdk + python3 -m venv venv + source venv/bin/activate + python3 -m pip install --upgrade build + python3 -m build + ``` + +4. Push to pypi.org. Optionally can push to test.pypi.org. See + <https://packaging.python.org/tutorials/packaging-projects/> for more info. + + ``` + python3 -m pip install --upgrade twine + python3 -m twine upload dist/* + ``` + diff --git a/airavata-django-portal-commons/airavata_django_portal_commons/__init__.py b/airavata-django-portal/airavata_django_portal_commons/__init__.py similarity index 100% rename from airavata-django-portal-commons/airavata_django_portal_commons/__init__.py rename to airavata-django-portal/airavata_django_portal_commons/__init__.py diff --git a/airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/__init__.py b/airavata-django-portal/airavata_django_portal_commons/dynamic_apps/__init__.py similarity index 100% rename from airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/__init__.py rename to airavata-django-portal/airavata_django_portal_commons/dynamic_apps/__init__.py diff --git a/airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/context_processors.py b/airavata-django-portal/airavata_django_portal_commons/dynamic_apps/context_processors.py similarity index 100% rename from airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/context_processors.py rename to airavata-django-portal/airavata_django_portal_commons/dynamic_apps/context_processors.py diff --git a/airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/urls.py b/airavata-django-portal/airavata_django_portal_commons/dynamic_apps/urls.py similarity index 100% rename from airavata-django-portal-commons/airavata_django_portal_commons/dynamic_apps/urls.py rename to airavata-django-portal/airavata_django_portal_commons/dynamic_apps/urls.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/apps.py b/airavata-django-portal/airavata_django_portal_sdk/apps.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/apps.py rename to airavata-django-portal/airavata_django_portal_sdk/apps.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/decorators.py b/airavata-django-portal/airavata_django_portal_sdk/decorators.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/decorators.py rename to airavata-django-portal/airavata_django_portal_sdk/decorators.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/experiment_util/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/experiment_util/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py b/airavata-django-portal/airavata_django_portal_sdk/experiment_util/api.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py rename to airavata-django-portal/airavata_django_portal_sdk/experiment_util/api.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/intermediate_output.py b/airavata-django-portal/airavata_django_portal_sdk/experiment_util/intermediate_output.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/intermediate_output.py rename to airavata-django-portal/airavata_django_portal_sdk/experiment_util/intermediate_output.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0001_initial.py b/airavata-django-portal/airavata_django_portal_sdk/migrations/0001_initial.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0001_initial.py rename to airavata-django-portal/airavata_django_portal_sdk/migrations/0001_initial.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0002_userfiles_file_resource_id.py b/airavata-django-portal/airavata_django_portal_sdk/migrations/0002_userfiles_file_resource_id.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0002_userfiles_file_resource_id.py rename to airavata-django-portal/airavata_django_portal_sdk/migrations/0002_userfiles_file_resource_id.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0003_auto_20220225_1510.py b/airavata-django-portal/airavata_django_portal_sdk/migrations/0003_auto_20220225_1510.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/0003_auto_20220225_1510.py rename to airavata-django-portal/airavata_django_portal_sdk/migrations/0003_auto_20220225_1510.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/migrations/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/migrations/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/migrations/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/models.py b/airavata-django-portal/airavata_django_portal_sdk/models.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/models.py rename to airavata-django-portal/airavata_django_portal_sdk/models.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/queue_settings_calculators.py b/airavata-django-portal/airavata_django_portal_sdk/queue_settings_calculators.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/queue_settings_calculators.py rename to airavata-django-portal/airavata_django_portal_sdk/queue_settings_calculators.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/remoteapi.py b/airavata-django-portal/airavata_django_portal_sdk/remoteapi.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/remoteapi.py rename to airavata-django-portal/airavata_django_portal_sdk/remoteapi.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/serializers.py b/airavata-django-portal/airavata_django_portal_sdk/serializers.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/serializers.py rename to airavata-django-portal/airavata_django_portal_sdk/serializers.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/tests/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_queue_settings_calculator.py b/airavata-django-portal/airavata_django_portal_sdk/tests/test_queue_settings_calculator.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_queue_settings_calculator.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/test_queue_settings_calculator.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_settings.py b/airavata-django-portal/airavata_django_portal_sdk/tests/test_settings.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_settings.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/test_settings.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_user_storage.py b/airavata-django-portal/airavata_django_portal_sdk/tests/test_user_storage.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_user_storage.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/test_user_storage.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_util.py b/airavata-django-portal/airavata_django_portal_sdk/tests/test_util.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_util.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/test_util.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_views.py b/airavata-django-portal/airavata_django_portal_sdk/tests/test_views.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/tests/test_views.py rename to airavata-django-portal/airavata_django_portal_sdk/tests/test_views.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/urls.py b/airavata-django-portal/airavata_django_portal_sdk/urls.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/urls.py rename to airavata-django-portal/airavata_django_portal_sdk/urls.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/api.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/api.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2_grpc.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2_grpc.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2_grpc.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/CredCommon_pb2_grpc.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2_grpc.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2_grpc.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2_grpc.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/MFTApi_pb2_grpc.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/__init__.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/__init__.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/__init__.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/__init__.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/base.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/base.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/base.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/base.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/mft_provider.py b/airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/mft_provider.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/backends/mft_provider.py rename to airavata-django-portal/airavata_django_portal_sdk/user_storage/backends/mft_provider.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/util.py b/airavata-django-portal/airavata_django_portal_sdk/util.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/util.py rename to airavata-django-portal/airavata_django_portal_sdk/util.py diff --git a/airavata-django-portal-sdk/airavata_django_portal_sdk/views.py b/airavata-django-portal/airavata_django_portal_sdk/views.py similarity index 100% rename from airavata-django-portal-sdk/airavata_django_portal_sdk/views.py rename to airavata-django-portal/airavata_django_portal_sdk/views.py diff --git a/airavata-django-portal-sdk/docs/index.md b/airavata-django-portal/docs/sdk.md similarity index 100% rename from airavata-django-portal-sdk/docs/index.md rename to airavata-django-portal/docs/sdk.md diff --git a/airavata-django-portal/pyproject.toml b/airavata-django-portal/pyproject.toml index f9cf061ab..85888f50a 100644 --- a/airavata-django-portal/pyproject.toml +++ b/airavata-django-portal/pyproject.toml @@ -1,13 +1,13 @@ [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "airavata-django-portal" -version = "0.1" +version = "1.0.0" description = "The Airavata Django Portal is a web interface to the Apache Airavata API implemented using the Django web framework." readme = "README.md" -requires-python = ">=3.6" +requires-python = ">=3.10" license = {text = "Apache License 2.0"} authors = [ {name = "Apache Software Foundation", email = "[email protected]"} @@ -26,7 +26,7 @@ dependencies = [ "wagtailfontawesome", "jupyter", "papermill", - "airavata-django-portal-sdk" + "airavata-python-sdk < 3" ] classifiers = [ "Development Status :: 4 - Beta", @@ -35,7 +35,7 @@ classifiers = [ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", - "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.10", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application" ] @@ -43,7 +43,16 @@ classifiers = [ [project.optional-dependencies] dev = [ "flake8", - "flake8-isort" + "flake8-isort", + "autopep8", + "Markdown", + "mkdocs", + "mkautodoc", + "pycodestyle", + "Jinja2", + "pytest", + "pytest-django", + "tox" ] mysql = [ "mysqlclient" @@ -66,6 +75,5 @@ skip = ["migrations", ".git"] skip_gitignore = true known_third_party = ["airavata", "airavata_django_portal_sdk"] -[tool.tox] -# Tox does not natively read from pyproject.toml, but this is for documentation/reference -envlist = ["py36", "py37", "py38", "py39", "py310"] \ No newline at end of file +[tool.setuptools.packages.find] +where = ["airavata_django_portal_commons", "airavata_django_portal_sdk", "django_airavata"] \ No newline at end of file
