From 59e83551df814f323b70507ff1db8894f57c2e1e Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 11:47:11 -0800 Subject: [PATCH 001/137] Use gettext_lazy instead of ugettext_lazy ugettext_lazy was deprecated in Django 3.0 --- primed/cdsa/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/cdsa/views.py b/primed/cdsa/views.py index 952804a7..c48f5e75 100644 --- a/primed/cdsa/views.py +++ b/primed/cdsa/views.py @@ -15,7 +15,7 @@ from django.forms import inlineformset_factory from django.http import Http404, HttpResponseRedirect from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView, FormView, TemplateView, UpdateView from django_tables2 import MultiTableMixin, SingleTableMixin, SingleTableView From 96261d3607e5ae8bd8cf815e1c05f91f4deb271a Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 12:06:22 -0800 Subject: [PATCH 002/137] Update factories for postgeneration save deprecation v3.3.0 deprecates saving the model after the post_generation method. Follow the factoryboy instructions for handling this warning: https://factoryboy.readthedocs.io/en/stable/changelog.html#id1 --- primed/cdsa/tests/factories.py | 1 + primed/dbgap/tests/factories.py | 2 ++ primed/users/tests/factories.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/primed/cdsa/tests/factories.py b/primed/cdsa/tests/factories.py index bf0459b8..e71482ef 100644 --- a/primed/cdsa/tests/factories.py +++ b/primed/cdsa/tests/factories.py @@ -126,3 +126,4 @@ def authorization_domains(self, create, extracted, **kwargs): class Meta: model = models.CDSAWorkspace + skip_postgeneration_save = True diff --git a/primed/dbgap/tests/factories.py b/primed/dbgap/tests/factories.py index de6f3e98..02f9bbd8 100644 --- a/primed/dbgap/tests/factories.py +++ b/primed/dbgap/tests/factories.py @@ -61,6 +61,7 @@ def studies(self, create, extracted, **kwargs): class Meta: model = models.dbGaPStudyAccession + skip_postgeneration_save = True class dbGaPWorkspaceFactory(TimeStampedModelFactory, DjangoModelFactory): @@ -78,6 +79,7 @@ class dbGaPWorkspaceFactory(TimeStampedModelFactory, DjangoModelFactory): class Meta: model = models.dbGaPWorkspace + skip_postgeneration_save = True @post_generation def authorization_domains(self, create, extracted, **kwargs): diff --git a/primed/users/tests/factories.py b/primed/users/tests/factories.py index 9fc0a2ee..6a0e0384 100644 --- a/primed/users/tests/factories.py +++ b/primed/users/tests/factories.py @@ -27,10 +27,12 @@ def password(self, create: bool, extracted: Sequence[Any], **kwargs): ).evaluate(None, None, extra={"locale": None}) ) self.set_password(password) + self.save() class Meta: model = get_user_model() django_get_or_create = ["username"] + skip_postgeneration_save = True class GroupFactory(DjangoModelFactory): From fcb5d389cd591fc87bf3debd53e73ea1dff05662 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 11:24:29 -0800 Subject: [PATCH 003/137] Update requirements for django 4.2 --- requirements/dev-requirements.txt | 17 ++++++++++++----- requirements/requirements.in | 2 +- requirements/requirements.txt | 11 +++++++---- requirements/test-requirements.txt | 8 +++++--- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index e73792a3..45d09c97 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -2,11 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile dev-requirements.in +# pip-compile requirements/dev-requirements.in # alabaster==0.7.13 # via sphinx -asgiref==3.5.2 +appnope==0.1.3 + # via ipython +asgiref==3.7.2 # via # -c requirements/requirements.txt # django @@ -18,6 +20,10 @@ babel==2.13.1 # via sphinx backcall==0.2.0 # via ipython +backports-zoneinfo==0.2.1 + # via + # -c requirements/requirements.txt + # django black==22.12.0 # via -r requirements/dev-requirements.in certifi==2023.11.17 @@ -47,7 +53,7 @@ dill==0.3.7 # via pylint distlib==0.3.7 # via virtualenv -django==3.2.23 +django==4.2.7 # via # -c requirements/requirements.txt # django-debug-toolbar @@ -171,7 +177,6 @@ pytz==2023.3.post1 # via # -c requirements/requirements.txt # babel - # django pyyaml==6.0.1 # via pre-commit requests==2.31.0 @@ -245,9 +250,11 @@ types-requests==2.31.0.6 # via -r requirements/dev-requirements.in types-urllib3==1.26.25.14 # via types-requests -typing-extensions==4.3.0 +typing-extensions==4.8.0 # via + # -c requirements/requirements.txt # -c requirements/test-requirements.txt + # asgiref # astroid # black # django-stubs diff --git a/requirements/requirements.in b/requirements/requirements.in index 242a102c..c0054497 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -12,7 +12,7 @@ oauthlib # https://github.com/oauthlib/oauthlib # Django # ------------------------------------------------------------------------------ -django>=3.2,<4.0 # pyup: < 3.3 # https://www.djangoproject.com/ +django>=4.2,<5.0 # https://www.djangoproject.com/ django-environ # https://github.com/joke2k/django-environ django-maintenance-mode # https://github.com/fabiocaccamo/django-maintenance-mode django-model-utils # https://github.com/jazzband/django-model-utils diff --git a/requirements/requirements.txt b/requirements/requirements.txt index b2e763e1..fb7ebccf 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -2,18 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile requirements.in +# pip-compile requirements/requirements.in # argon2-cffi==21.3.0 # via -r requirements/requirements.in argon2-cffi-bindings==21.2.0 # via argon2-cffi -asgiref==3.5.2 +asgiref==3.7.2 # via django async-timeout==4.0.2 # via redis attrs==22.1.0 # via jsonschema +backports-zoneinfo==0.2.1 + # via django build==1.0.3 # via pip-tools cachetools==5.2.0 @@ -38,7 +40,7 @@ cryptography==41.0.4 # via pyjwt defusedxml==0.7.1 # via python3-openid -django==3.2.23 +django==4.2.7 # via # -r requirements/requirements.in # crispy-bootstrap5 @@ -164,7 +166,6 @@ python3-openid==3.2.0 pytz==2023.3.post1 # via # -r requirements/requirements.in - # django # django-anvil-consortium-manager # django-dbbackup # pandas @@ -201,6 +202,8 @@ tomli==2.0.1 # build # pip-tools # pyproject-hooks +typing-extensions==4.8.0 + # via asgiref urllib3==2.1.0 # via # -r requirements/requirements.in diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index a66ddca5..5298d627 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile test-requirements.in +# pip-compile requirements/test-requirements.in # attrs==22.1.0 # via @@ -80,8 +80,10 @@ tomli==2.0.1 # via # -c requirements/requirements.txt # pytest -typing-extensions==4.3.0 - # via django-test-migrations +typing-extensions==4.8.0 + # via + # -c requirements/requirements.txt + # django-test-migrations urllib3==2.1.0 # via # -c requirements/requirements.txt From 11193d15c75485704830026f324e92017a0567cd Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 14:46:27 -0800 Subject: [PATCH 004/137] Handle new form rendering warning Django 4.1 introduces a new warning about changes in Django 5.0. Modify form rendering in the template following the Django advice: https://docs.djangoproject.com/en/4.2/releases/4.1/#forms This only appears to affect the CDSA Invalidation form/view, since the other forms use the crispy tag to render them. --- .../cdsa/agreementmajorversion_confirm_invalidate.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/templates/cdsa/agreementmajorversion_confirm_invalidate.html b/primed/templates/cdsa/agreementmajorversion_confirm_invalidate.html index b3a3f7e7..dee98b91 100644 --- a/primed/templates/cdsa/agreementmajorversion_confirm_invalidate.html +++ b/primed/templates/cdsa/agreementmajorversion_confirm_invalidate.html @@ -17,7 +17,7 @@

Invalidate Agreement {{ object }}

This will change the status of all "Active" agreements associated with this version to "Lapsed".

{% csrf_token %} - {{ form }} + {{ form.as_div }} No, cancel From 755058db61a09c816c3e2f00ee6f156118cbdd99 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 14:50:05 -0800 Subject: [PATCH 005/137] Remove deprecating USE_L10N setting https://docs.djangoproject.com/en/4.2/ref/settings/#use-l10n --- config/settings/base.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index fa97cc5a..cefe40bd 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -32,8 +32,6 @@ # https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n USE_I18N = True # https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n -USE_L10N = True -# https://docs.djangoproject.com/en/dev/ref/settings/#use-tz USE_TZ = True # https://docs.djangoproject.com/en/dev/ref/settings/#locale-paths LOCALE_PATHS = [str(ROOT_DIR / "locale")] From b35f1e77662387c16130ce0c6ebb5d12c683413b Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 16:42:50 -0800 Subject: [PATCH 006/137] Add a gitleaks action CI file --- .github/workflows/gitleaks.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/gitleaks.yml diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml new file mode 100644 index 00000000..41e06152 --- /dev/null +++ b/.github/workflows/gitleaks.yml @@ -0,0 +1,19 @@ +name: gitleaks +on: + pull_request: + push: + workflow_dispatch: + schedule: + - cron: "0 4 * * *" # run once a day at 4 AM +jobs: + scan: + name: gitleaks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE}} # Only required for Organizations, not personal accounts. From dfe4d4de464e3ed784922dba49d9bb1e121f7820 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 20 Nov 2023 16:43:54 -0800 Subject: [PATCH 007/137] Add gitleaks to pre-commit hook --- .pre-commit-config.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 40b838ae..842469d1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,6 +27,11 @@ repos: args: ['--config=setup.cfg'] additional_dependencies: [flake8-isort] + - repo: https://github.com/gitleaks/gitleaks + rev: v8.16.1 + hooks: + - id: gitleaks + # sets up .pre-commit-ci.yaml to ensure pre-commit dependencies stay up to date ci: From f743cb5f903507fc0d6574cce42e70c3dcbe29a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 03:30:41 +0000 Subject: [PATCH 008/137] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/combine-prs.yml | 2 +- .github/workflows/gitleaks.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b859332..69f1b66f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout Code Repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4 - name: Set up Python 3.9 uses: actions/setup-python@v4 @@ -67,7 +67,7 @@ jobs: steps: - name: Checkout Code Repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -101,7 +101,7 @@ jobs: steps: - name: Checkout Code Repository - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4 - name: Set up Python 3.8 uses: actions/setup-python@v4 @@ -137,7 +137,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out the repo - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 diff --git a/.github/workflows/combine-prs.yml b/.github/workflows/combine-prs.yml index e7776e42..ef94fe7d 100644 --- a/.github/workflows/combine-prs.yml +++ b/.github/workflows/combine-prs.yml @@ -95,7 +95,7 @@ jobs: console.log('Combined: ' + combined); return combined # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4 with: fetch-depth: 0 # Creates a branch with other PR branches merged together diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index 41e06152..9efde5a6 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -10,7 +10,7 @@ jobs: name: gitleaks runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: gitleaks/gitleaks-action@v2 From 62c50da5ac69e18a9e35e9d015b228504debceb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 03:43:47 +0000 Subject: [PATCH 009/137] Bump responses from 0.21.0 to 0.24.1 Bumps [responses](https://github.com/getsentry/responses) from 0.21.0 to 0.24.1. - [Release notes](https://github.com/getsentry/responses/releases) - [Changelog](https://github.com/getsentry/responses/blob/master/CHANGES) - [Commits](https://github.com/getsentry/responses/compare/0.21.0...0.24.1) --- updated-dependencies: - dependency-name: responses dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 5298d627..9ffc5bdb 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -63,11 +63,13 @@ python-dateutil==2.8.2 # -c requirements/requirements.txt # faker # freezegun +pyyaml==6.0.1 + # via responses requests==2.31.0 # via # -c requirements/requirements.txt # responses -responses==0.21.0 +responses==0.24.1 # via -r requirements/test-requirements.in six==1.16.0 # via From a07c864244f6b877d2fcaeae1dc4a37ba7d34299 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 03:46:38 +0000 Subject: [PATCH 010/137] Bump django-simple-history from 3.1.1 to 3.4.0 Bumps [django-simple-history](https://github.com/jazzband/django-simple-history) from 3.1.1 to 3.4.0. - [Release notes](https://github.com/jazzband/django-simple-history/releases) - [Changelog](https://github.com/jazzband/django-simple-history/blob/master/CHANGES.rst) - [Commits](https://github.com/jazzband/django-simple-history/compare/3.1.1...3.4.0) --- updated-dependencies: - dependency-name: django-simple-history dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index fb7ebccf..8bd24bda 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -81,7 +81,7 @@ django-model-utils==4.2.0 # via -r requirements/requirements.in django-redis==5.2.0 # via -r requirements/requirements.in -django-simple-history==3.1.1 +django-simple-history==3.4.0 # via # -r requirements/requirements.in # django-anvil-consortium-manager From 67b542aefe517d40280f94d22ad17aea5f35cea2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:45:07 +0000 Subject: [PATCH 011/137] Bump whitenoise from 6.0.0 to 6.6.0 Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.0.0 to 6.6.0. - [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst) - [Commits](https://github.com/evansd/whitenoise/compare/6.0.0...6.6.0) --- updated-dependencies: - dependency-name: whitenoise dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index fb7ebccf..8284951b 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -210,7 +210,7 @@ urllib3==2.1.0 # requests wheel==0.41.3 # via pip-tools -whitenoise==6.0.0 +whitenoise==6.6.0 # via -r requirements/requirements.in zipp==3.10.0 # via From 749d4289a0e65c7e52287968320b5012eddbb08b Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 14:29:41 -0800 Subject: [PATCH 012/137] Remove redis-related packages from requirements --- requirements/dev-requirements.txt | 4 +++- requirements/requirements.in | 3 --- requirements/requirements.txt | 11 ----------- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 45d09c97..6540fac1 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -178,7 +178,9 @@ pytz==2023.3.post1 # -c requirements/requirements.txt # babel pyyaml==6.0.1 - # via pre-commit + # via + # -c requirements/test-requirements.txt + # pre-commit requests==2.31.0 # via # -c requirements/requirements.txt diff --git a/requirements/requirements.in b/requirements/requirements.in index c0054497..68ba904c 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -6,8 +6,6 @@ python-slugify # https://github.com/un33k/python-slugify Pillow # https://github.com/python-pillow/Pillow argon2-cffi # https://github.com/hynek/argon2_cffi whitenoise # https://github.com/evansd/whitenoise -redis # https://github.com/andymccurdy/redis-py -hiredis # https://github.com/redis/hiredis-py oauthlib # https://github.com/oauthlib/oauthlib # Django @@ -18,7 +16,6 @@ django-maintenance-mode # https://github.com/fabiocaccamo/django-maintenance-mod django-model-utils # https://github.com/jazzband/django-model-utils django-allauth # https://github.com/pennersr/django-allauth django-crispy-forms # https://github.com/django-crispy-forms/django-crispy-forms -django-redis # https://github.com/jazzband/django-redis django-login-required-middleware # https://github.com/CleitonDeLima/django-login-required-middleware django-dbbackup # https://github.com/jazzband/django-dbbackup # For time stamped models. diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 7cec6320..0b019c59 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -10,8 +10,6 @@ argon2-cffi-bindings==21.2.0 # via argon2-cffi asgiref==3.7.2 # via django -async-timeout==4.0.2 - # via redis attrs==22.1.0 # via jsonschema backports-zoneinfo==0.2.1 @@ -50,7 +48,6 @@ django==4.2.7 # django-extensions # django-filter # django-model-utils - # django-redis # django-tables2 django-allauth==0.54.0 # via -r requirements/requirements.in @@ -79,8 +76,6 @@ django-maintenance-mode==0.16.3 # via -r requirements/requirements.in django-model-utils==4.2.0 # via -r requirements/requirements.in -django-redis==5.2.0 - # via -r requirements/requirements.in django-simple-history==3.4.0 # via # -r requirements/requirements.in @@ -97,8 +92,6 @@ google-auth[requests]==2.14.1 # via # django-anvil-consortium-manager # google-auth -hiredis==2.0.0 - # via -r requirements/requirements.in idna==3.3 # via requests importlib-metadata==5.2.0 @@ -169,10 +162,6 @@ pytz==2023.3.post1 # django-anvil-consortium-manager # django-dbbackup # pandas -redis==4.5.4 - # via - # -r requirements/requirements.in - # django-redis requests==2.31.0 # via # -r requirements/requirements.in From fb9674eb582d155fbbffe3b6c7c4004ac7b2a21c Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 14:42:49 -0800 Subject: [PATCH 013/137] Remove pillow from requirements --- requirements/requirements.in | 1 - requirements/requirements.txt | 2 -- 2 files changed, 3 deletions(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 68ba904c..cb70340b 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -3,7 +3,6 @@ pip-tools pytz # https://github.com/stub42/pytz python-slugify # https://github.com/un33k/python-slugify -Pillow # https://github.com/python-pillow/Pillow argon2-cffi # https://github.com/hynek/argon2_cffi whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 0b019c59..5dd8dcc9 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -118,8 +118,6 @@ packaging==21.3 # via build pandas==1.5.2 # via -r requirements/requirements.in -pillow==10.0.1 - # via -r requirements/requirements.in pip-tools==7.3.0 # via -r requirements/requirements.in pkgutil-resolve-name==1.3.10 From 6653aa5d73497846b77fa2ea8a5baffcaa19a451 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 14:45:31 -0800 Subject: [PATCH 014/137] Remove argon2-cffi --- requirements/requirements.in | 1 - requirements/requirements.txt | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index cb70340b..8d6b3132 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -3,7 +3,6 @@ pip-tools pytz # https://github.com/stub42/pytz python-slugify # https://github.com/un33k/python-slugify -argon2-cffi # https://github.com/hynek/argon2_cffi whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 5dd8dcc9..210dbf14 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,10 +4,6 @@ # # pip-compile requirements/requirements.in # -argon2-cffi==21.3.0 - # via -r requirements/requirements.in -argon2-cffi-bindings==21.2.0 - # via argon2-cffi asgiref==3.7.2 # via django attrs==22.1.0 @@ -23,9 +19,7 @@ certifi==2023.11.17 # -r requirements/requirements.in # requests cffi==1.15.0 - # via - # argon2-cffi-bindings - # cryptography + # via cryptography chardet==5.1.0 # via pronto charset-normalizer==2.0.12 From 1cbfe6653ca333d7d9df137d511ecf04d016bf18 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:02:00 -0800 Subject: [PATCH 015/137] Remvoe pytz --- requirements/requirements.in | 1 - requirements/requirements.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 8d6b3132..6734fc40 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,7 +1,6 @@ # For dependency management pip-tools -pytz # https://github.com/stub42/pytz python-slugify # https://github.com/un33k/python-slugify whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 210dbf14..5e7cb004 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -150,7 +150,6 @@ python3-openid==3.2.0 # via django-allauth pytz==2023.3.post1 # via - # -r requirements/requirements.in # django-anvil-consortium-manager # django-dbbackup # pandas From 419278f722df026535001e3c4da0168bde108d7c Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:05:26 -0800 Subject: [PATCH 016/137] Add comments to requirements.in about each package --- requirements/requirements.in | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/requirements/requirements.in b/requirements/requirements.in index 6734fc40..cc6d89d0 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -2,18 +2,26 @@ pip-tools python-slugify # https://github.com/un33k/python-slugify +# Middleware for whitenoise/static files. whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib # Django # ------------------------------------------------------------------------------ django>=4.2,<5.0 # https://www.djangoproject.com/ +# Read from .env files django-environ # https://github.com/joke2k/django-environ +# Turn on and off maintenance mode. django-maintenance-mode # https://github.com/fabiocaccamo/django-maintenance-mode +# Model utilities django-model-utils # https://github.com/jazzband/django-model-utils +# login/auth using Drupal or other SocialApplications. django-allauth # https://github.com/pennersr/django-allauth +# Nicer forms. django-crispy-forms # https://github.com/django-crispy-forms/django-crispy-forms +# Protect all views behind LoginRequired by default. django-login-required-middleware # https://github.com/CleitonDeLima/django-login-required-middleware +# Back up the database before migrations/updates. django-dbbackup # https://github.com/jazzband/django-dbbackup # For time stamped models. django-extensions # https://github.com/django-extensions/django-extensions From d1fcce1d5675b07ce947aca76726cb379ea13a6e Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:13:23 -0800 Subject: [PATCH 017/137] Remove python-slugify --- requirements/requirements.in | 1 - requirements/requirements.txt | 4 ---- 2 files changed, 5 deletions(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index cc6d89d0..2b3b01fa 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,7 +1,6 @@ # For dependency management pip-tools -python-slugify # https://github.com/un33k/python-slugify # Middleware for whitenoise/static files. whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 5e7cb004..d484b4d3 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -144,8 +144,6 @@ python-dateutil==2.8.2 # pronto python-fsutil==0.6.1 # via django-maintenance-mode -python-slugify==6.1.2 - # via -r requirements/requirements.in python3-openid==3.2.0 # via django-allauth pytz==2023.3.post1 @@ -175,8 +173,6 @@ tablib==3.4.0 # via -r requirements/requirements.in tenacity==8.2.1 # via plotly -text-unidecode==1.3 - # via python-slugify tomli==2.0.1 # via # build From aed7164f7d3666f92633537ea1cf98260890f30e Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:25:00 -0800 Subject: [PATCH 018/137] Add comments to test requirements file --- requirements/test-requirements.in | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/requirements/test-requirements.in b/requirements/test-requirements.in index d80fc0df..df760727 100644 --- a/requirements/test-requirements.in +++ b/requirements/test-requirements.in @@ -1,14 +1,20 @@ -c requirements.txt +# Pytest pytest # https://github.com/pytest-dev/pytest +# Pytest improvements - progress bar, etc. pytest-sugar # https://github.com/Frozenball/pytest-sugar -responses # https://github.com/getsentry/responses - for mocking HTTP responses +# Mock HTTP responses +responses # https://github.com/getsentry/responses +# Factories to create Django objects. factory-boy # https://github.com/FactoryBoy/factory_boy +# Django plugin for pytest. pytest-django # https://github.com/pytest-dev/pytest-django -# For testing migrations +# Test migrations. django-test-migrations -# For freezing time in tests +# Freeze time in tests. freezegun # https://github.com/spulec/freezegun # Coverage of django templates django-coverage-plugin # https://github.com/nedbat/django_coverage_plugin +# Test coverage. coverage From 1704c459a220a8245e620a923521b94c8dad41b3 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:28:32 -0800 Subject: [PATCH 019/137] Remove Werkzeug dependency --- requirements/dev-requirements.in | 2 +- requirements/dev-requirements.txt | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 4367a709..1a2553a3 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -1,7 +1,7 @@ -c requirements.txt -c test-requirements.txt -Werkzeug # https://github.com/pallets/werkzeug +# Interactive debugging. ipdb # https://github.com/gotcha/ipdb # Testing diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6540fac1..51c8228d 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -107,9 +107,7 @@ jinja2==3.1.2 livereload==2.6.3 # via sphinx-autobuild markupsafe==2.1.3 - # via - # jinja2 - # werkzeug + # via jinja2 matplotlib-inline==0.1.6 # via ipython mccabe==0.7.0 @@ -273,8 +271,6 @@ virtualenv==20.24.6 # via pre-commit wcwidth==0.2.10 # via prompt-toolkit -werkzeug==3.0.1 - # via -r requirements/dev-requirements.in zipp==3.10.0 # via # -c requirements/requirements.txt From cf86beca5ed2d16c60b2577678e4de49a6650ab3 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:32:29 -0800 Subject: [PATCH 020/137] Remove setuptools from dev requirements --- requirements/dev-requirements.in | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 1a2553a3..5f68d538 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -4,7 +4,7 @@ # Interactive debugging. ipdb # https://github.com/gotcha/ipdb -# Testing +# Type checking # ------------------------------------------------------------------------------ mypy # https://github.com/python/mypy django-stubs # https://github.com/typeddjango/django-stubs @@ -26,7 +26,6 @@ pre-commit # https://github.com/pre-commit/pre-commit # Security # ------------------------------------------------------------------------------ safety # https://github.com/pyupio/safety -setuptools # https://github.com/pypa/setuptools # Django # ------------------------------------------------------------------------------ From 0b6253f7a9a24b2109cc7517812b8940b75a5907 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:41:09 -0800 Subject: [PATCH 021/137] Remove safety from dev requirements This should be handled by dependabot. --- requirements/dev-requirements.in | 4 ---- requirements/dev-requirements.txt | 13 ------------- 2 files changed, 17 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 5f68d538..da0ae0bb 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -23,10 +23,6 @@ black # https://github.com/psf/black pylint-django # https://github.com/PyCQA/pylint-django pre-commit # https://github.com/pre-commit/pre-commit -# Security -# ------------------------------------------------------------------------------ -safety # https://github.com/pyupio/safety - # Django # ------------------------------------------------------------------------------ django-debug-toolbar # https://github.com/jazzband/django-debug-toolbar diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 51c8228d..a5b44b58 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -42,7 +42,6 @@ click==8.1.3 # via # -c requirements/requirements.txt # black - # safety colorama==0.4.6 # via sphinx-autobuild decorator==5.1.1 @@ -67,8 +66,6 @@ django-stubs-ext==4.2.5 # via django-stubs docutils==0.20.1 # via sphinx -dparse==0.6.3 - # via safety executing==2.0.1 # via stack-data filelock==3.13.1 @@ -126,8 +123,6 @@ packaging==21.3 # via # -c requirements/requirements.txt # -c requirements/test-requirements.txt - # dparse - # safety # sphinx parso==0.8.3 # via jedi @@ -183,14 +178,7 @@ requests==2.31.0 # via # -c requirements/requirements.txt # -c requirements/test-requirements.txt - # safety # sphinx -ruamel-yaml==0.18.5 - # via safety -ruamel-yaml-clib==0.2.8 - # via ruamel-yaml -safety==2.3.5 - # via -r requirements/dev-requirements.in six==1.16.0 # via # -c requirements/requirements.txt @@ -230,7 +218,6 @@ tomli==2.0.1 # -c requirements/test-requirements.txt # black # django-stubs - # dparse # ipdb # mypy # pylint From 1abd0984e858088d597b607a0bd60bba03d1af90 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:52:40 -0800 Subject: [PATCH 022/137] Add link to dbGaP records in navbar --- primed/templates/dbgap/nav_items.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/primed/templates/dbgap/nav_items.html b/primed/templates/dbgap/nav_items.html index b35bf5c1..a1121b21 100644 --- a/primed/templates/dbgap/nav_items.html +++ b/primed/templates/dbgap/nav_items.html @@ -26,5 +26,11 @@ {% endif %} +
  • + +
  • + dbGaP records +
  • + From 97dc0b07641feace170776bd2165a15a3f7c491a Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 21 Nov 2023 15:54:15 -0800 Subject: [PATCH 023/137] Add list of DARs to dbGaP navbar dropdown --- primed/templates/dbgap/nav_items.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/primed/templates/dbgap/nav_items.html b/primed/templates/dbgap/nav_items.html index a1121b21..1a2c8935 100644 --- a/primed/templates/dbgap/nav_items.html +++ b/primed/templates/dbgap/nav_items.html @@ -17,14 +17,17 @@
  • List dbGaP applications
  • - {% if perms.anvil_consortium_manager.anvil_consortium_manager_staff_edit %} +
  • + List all current DARs +
  • + {% if perms.anvil_consortium_manager.anvil_consortium_manager_staff_edit %}
  • Add a new dbGaP application
  • Update DARs for all applications
  • - {% endif %} + {% endif %}
  • From 371d4da51794f2bd7deff3cf503c1be1da66aa55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 03:58:35 +0000 Subject: [PATCH 024/137] Bump tablib from 3.4.0 to 3.5.0 Bumps [tablib](https://github.com/jazzband/tablib) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/jazzband/tablib/releases) - [Changelog](https://github.com/jazzband/tablib/blob/master/HISTORY.md) - [Commits](https://github.com/jazzband/tablib/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: tablib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 7cec6320..e50f4df6 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -191,7 +191,7 @@ sqlparse==0.4.4 # via # -r requirements/requirements.in # django -tablib==3.4.0 +tablib==3.5.0 # via -r requirements/requirements.in tenacity==8.2.1 # via plotly From 4d453a1986db4fa4dafb2586ee70940f1453f624 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 04:02:05 +0000 Subject: [PATCH 025/137] Bump pillow from 10.0.1 to 10.1.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.1 to 10.1.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/10.0.1...10.1.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 7cec6320..fc7c8b04 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -125,7 +125,7 @@ packaging==21.3 # via build pandas==1.5.2 # via -r requirements/requirements.in -pillow==10.0.1 +pillow==10.1.0 # via -r requirements/requirements.in pip-tools==7.3.0 # via -r requirements/requirements.in From 85ec9a87852058bab2a3fe80f3f19fba1a901345 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 04:06:28 +0000 Subject: [PATCH 026/137] Bump coverage from 6.3.2 to 7.3.2 Bumps [coverage](https://github.com/nedbat/coveragepy) from 6.3.2 to 7.3.2. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/6.3.2...7.3.2) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 9ffc5bdb..b9db1332 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -16,7 +16,7 @@ charset-normalizer==2.0.12 # via # -c requirements/requirements.txt # requests -coverage==6.3.2 +coverage==7.3.2 # via # -r requirements/test-requirements.in # django-coverage-plugin From 63a3df2f6511e6870eabce68ea92ba32f86ac8ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 17:34:02 +0000 Subject: [PATCH 027/137] Bump hiredis from 2.0.0 to 2.2.3 Bumps [hiredis](https://github.com/redis/hiredis-py) from 2.0.0 to 2.2.3. - [Release notes](https://github.com/redis/hiredis-py/releases) - [Changelog](https://github.com/redis/hiredis-py/blob/master/CHANGELOG.md) - [Commits](https://github.com/redis/hiredis-py/compare/v2.0.0...v2.2.3) --- updated-dependencies: - dependency-name: hiredis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 74e856f2..43ac5aec 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -97,7 +97,7 @@ google-auth[requests]==2.14.1 # via # django-anvil-consortium-manager # google-auth -hiredis==2.0.0 +hiredis==2.2.3 # via -r requirements/requirements.in idna==3.3 # via requests From 4e165e341576cd1a5cfb2e8d7445f2584bdc0054 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 03:08:09 +0000 Subject: [PATCH 028/137] Bump argon2-cffi from 21.3.0 to 23.1.0 Bumps [argon2-cffi](https://github.com/hynek/argon2-cffi) from 21.3.0 to 23.1.0. - [Release notes](https://github.com/hynek/argon2-cffi/releases) - [Changelog](https://github.com/hynek/argon2-cffi/blob/main/CHANGELOG.md) - [Commits](https://github.com/hynek/argon2-cffi/compare/21.3.0...23.1.0) --- updated-dependencies: - dependency-name: argon2-cffi dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 43ac5aec..a76988ba 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,7 +4,7 @@ # # pip-compile requirements/requirements.in # -argon2-cffi==21.3.0 +argon2-cffi==23.1.0 # via -r requirements/requirements.in argon2-cffi-bindings==21.2.0 # via argon2-cffi From 8d076f62ff9f63f16329a4d3a409fcb83287529b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 03:09:15 +0000 Subject: [PATCH 029/137] Bump pandas from 1.5.2 to 2.0.3 Bumps [pandas](https://github.com/pandas-dev/pandas) from 1.5.2 to 2.0.3. - [Release notes](https://github.com/pandas-dev/pandas/releases) - [Commits](https://github.com/pandas-dev/pandas/compare/v1.5.2...v2.0.3) --- updated-dependencies: - dependency-name: pandas dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 43ac5aec..14077796 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -123,7 +123,7 @@ oauthlib==3.2.2 # requests-oauthlib packaging==21.3 # via build -pandas==1.5.2 +pandas==2.0.3 # via -r requirements/requirements.in pillow==10.1.0 # via -r requirements/requirements.in @@ -204,6 +204,8 @@ tomli==2.0.1 # pyproject-hooks typing-extensions==4.8.0 # via asgiref +tzdata==2023.3 + # via pandas urllib3==2.1.0 # via # -r requirements/requirements.in From ce6603fa38d4c9e34f6d5288dbb3a129df8f62a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 03:10:12 +0000 Subject: [PATCH 030/137] Bump django-tree-queries from 0.13.0 to 0.15.0 Bumps [django-tree-queries](https://github.com/matthiask/django-tree-queries) from 0.13.0 to 0.15.0. - [Changelog](https://github.com/feincms/django-tree-queries/blob/main/CHANGELOG.rst) - [Commits](https://github.com/matthiask/django-tree-queries/compare/0.13...0.15) --- updated-dependencies: - dependency-name: django-tree-queries dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 43ac5aec..bf8581ad 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -87,7 +87,7 @@ django-simple-history==3.4.0 # django-anvil-consortium-manager django-tables2==2.4.1 # via django-anvil-consortium-manager -django-tree-queries==0.13.0 +django-tree-queries==0.15.0 # via -r requirements/requirements.in fastobo==0.12.2 # via pronto From ba9138ecd2e74e592ae4419baa059b6715c60c7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:54:05 +0000 Subject: [PATCH 031/137] Bump pytest from 7.2.0 to 7.4.3 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.0 to 7.4.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.2.0...7.4.3) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index b9db1332..3931f2bc 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -4,10 +4,6 @@ # # pip-compile requirements/test-requirements.in # -attrs==22.1.0 - # via - # -c requirements/requirements.txt - # pytest certifi==2023.11.17 # via # -c requirements/requirements.txt @@ -49,7 +45,7 @@ pyparsing==3.0.9 # via # -c requirements/requirements.txt # packaging -pytest==7.2.0 +pytest==7.4.3 # via # -r requirements/test-requirements.in # pytest-django From c81c7bc8d93302d291ec731c415a603953ef8148 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 00:24:03 +0000 Subject: [PATCH 032/137] Bump cryptography from 41.0.4 to 41.0.6 in /requirements Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.4 to 41.0.6. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.4...41.0.6) --- updated-dependencies: - dependency-name: cryptography dependency-type: indirect ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 64 +++++++++++++++++------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 65957e8f..5bc2bc8c 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -5,7 +5,7 @@ # pip-compile requirements/requirements.in # argon2-cffi==23.1.0 - # via -r requirements/requirements.in + # via -r requirements.in argon2-cffi-bindings==21.2.0 # via argon2-cffi asgiref==3.7.2 @@ -22,7 +22,7 @@ cachetools==5.2.0 # via google-auth certifi==2023.11.17 # via - # -r requirements/requirements.in + # -r requirements.in # requests cffi==1.15.0 # via @@ -36,13 +36,13 @@ click==8.1.3 # via pip-tools crispy-bootstrap5==0.7 # via django-anvil-consortium-manager -cryptography==41.0.4 +cryptography==41.0.6 # via pyjwt defusedxml==0.7.1 # via python3-openid django==4.2.7 # via - # -r requirements/requirements.in + # -r requirements.in # crispy-bootstrap5 # django-allauth # django-anvil-consortium-manager @@ -53,42 +53,42 @@ django==4.2.7 # django-redis # django-tables2 django-allauth==0.54.0 - # via -r requirements/requirements.in + # via -r requirements.in django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-consortium-manager.git@v0.20.1 - # via -r requirements/requirements.in + # via -r requirements.in django-autocomplete-light==3.9.4 # via django-anvil-consortium-manager django-crispy-forms==1.14.0 # via - # -r requirements/requirements.in + # -r requirements.in # crispy-bootstrap5 # django-anvil-consortium-manager django-dbbackup==4.0.1 - # via -r requirements/requirements.in + # via -r requirements.in django-environ==0.8.1 - # via -r requirements/requirements.in + # via -r requirements.in django-extensions==3.2.3 # via - # -r requirements/requirements.in + # -r requirements.in # django-anvil-consortium-manager django-filter==23.3 # via django-anvil-consortium-manager django-login-required-middleware==0.8.0 - # via -r requirements/requirements.in + # via -r requirements.in django-maintenance-mode==0.16.3 - # via -r requirements/requirements.in + # via -r requirements.in django-model-utils==4.2.0 - # via -r requirements/requirements.in + # via -r requirements.in django-redis==5.2.0 - # via -r requirements/requirements.in + # via -r requirements.in django-simple-history==3.4.0 # via - # -r requirements/requirements.in + # -r requirements.in # django-anvil-consortium-manager django-tables2==2.4.1 # via django-anvil-consortium-manager django-tree-queries==0.15.0 - # via -r requirements/requirements.in + # via -r requirements.in fastobo==0.12.2 # via pronto fontawesomefree==6.2.1 @@ -98,7 +98,7 @@ google-auth[requests]==2.14.1 # django-anvil-consortium-manager # google-auth hiredis==2.2.3 - # via -r requirements/requirements.in + # via -r requirements.in idna==3.3 # via requests importlib-metadata==5.2.0 @@ -106,9 +106,9 @@ importlib-metadata==5.2.0 importlib-resources==5.10.0 # via jsonschema jsonschema==4.16.0 - # via -r requirements/requirements.in + # via -r requirements.in mysqlclient==2.1.0 - # via -r requirements/requirements.in + # via -r requirements.in networkx==2.8.8 # via # django-anvil-consortium-manager @@ -119,22 +119,22 @@ numpy==1.24.2 # pandas oauthlib==3.2.2 # via - # -r requirements/requirements.in + # -r requirements.in # requests-oauthlib packaging==21.3 # via build pandas==2.0.3 - # via -r requirements/requirements.in + # via -r requirements.in pillow==10.1.0 - # via -r requirements/requirements.in + # via -r requirements.in pip-tools==7.3.0 - # via -r requirements/requirements.in + # via -r requirements.in pkgutil-resolve-name==1.3.10 # via jsonschema plotly==5.13.0 # via django-anvil-consortium-manager pronto==2.5.2 - # via -r requirements/requirements.in + # via -r requirements.in pyasn1==0.4.8 # via # pyasn1-modules @@ -160,22 +160,22 @@ python-dateutil==2.8.2 python-fsutil==0.6.1 # via django-maintenance-mode python-slugify==6.1.2 - # via -r requirements/requirements.in + # via -r requirements.in python3-openid==3.2.0 # via django-allauth pytz==2023.3.post1 # via - # -r requirements/requirements.in + # -r requirements.in # django-anvil-consortium-manager # django-dbbackup # pandas redis==4.5.4 # via - # -r requirements/requirements.in + # -r requirements.in # django-redis requests==2.31.0 # via - # -r requirements/requirements.in + # -r requirements.in # django-allauth # requests-oauthlib requests-oauthlib==1.3.1 @@ -189,10 +189,10 @@ six==1.16.0 # python-dateutil sqlparse==0.4.4 # via - # -r requirements/requirements.in + # -r requirements.in # django tablib==3.5.0 - # via -r requirements/requirements.in + # via -r requirements.in tenacity==8.2.1 # via plotly text-unidecode==1.3 @@ -208,12 +208,12 @@ tzdata==2023.3 # via pandas urllib3==2.1.0 # via - # -r requirements/requirements.in + # -r requirements.in # requests wheel==0.41.3 # via pip-tools whitenoise==6.6.0 - # via -r requirements/requirements.in + # via -r requirements.in zipp==3.10.0 # via # importlib-metadata From a2ccb8731f5715a6f17be94d07c2e8f4f17e1b5c Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Wed, 29 Nov 2023 09:36:32 -0800 Subject: [PATCH 033/137] Add Werkzeug back to dev requirements --- requirements/dev-requirements.in | 2 ++ requirements/dev-requirements.txt | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index da0ae0bb..54932d32 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -26,3 +26,5 @@ pre-commit # https://github.com/pre-commit/pre-commit # Django # ------------------------------------------------------------------------------ django-debug-toolbar # https://github.com/jazzband/django-debug-toolbar + +Werkzeug # https://github.com/pallets/werkzeug diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index a5b44b58..c91b8612 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -104,7 +104,9 @@ jinja2==3.1.2 livereload==2.6.3 # via sphinx-autobuild markupsafe==2.1.3 - # via jinja2 + # via + # jinja2 + # werkzeug matplotlib-inline==0.1.6 # via ipython mccabe==0.7.0 @@ -258,6 +260,8 @@ virtualenv==20.24.6 # via pre-commit wcwidth==0.2.10 # via prompt-toolkit +werkzeug==3.0.1 + # via -r requirements/dev-requirements.in zipp==3.10.0 # via # -c requirements/requirements.txt From 8861039a966447b101721c4816865786fed6d32b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 17:43:59 +0000 Subject: [PATCH 034/137] Bump pronto from 2.5.2 to 2.5.5 Bumps [pronto](https://github.com/althonos/pronto) from 2.5.2 to 2.5.5. - [Release notes](https://github.com/althonos/pronto/releases) - [Changelog](https://github.com/althonos/pronto/blob/master/CHANGELOG.md) - [Commits](https://github.com/althonos/pronto/compare/v2.5.2...v2.5.5) --- updated-dependencies: - dependency-name: pronto dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 58a782c1..8c61cafb 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -118,7 +118,7 @@ pkgutil-resolve-name==1.3.10 # via jsonschema plotly==5.13.0 # via django-anvil-consortium-manager -pronto==2.5.2 +pronto==2.5.5 # via -r requirements/requirements.in pyasn1==0.4.8 # via From e19d1256be1ff50ea6d6ce3a591c6c038044a43a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 17:44:03 +0000 Subject: [PATCH 035/137] Bump django-environ from 0.8.1 to 0.10.0 Bumps [django-environ](https://github.com/joke2k/django-environ) from 0.8.1 to 0.10.0. - [Release notes](https://github.com/joke2k/django-environ/releases) - [Changelog](https://github.com/joke2k/django-environ/blob/main/CHANGELOG.rst) - [Commits](https://github.com/joke2k/django-environ/compare/v0.8.1...v0.10.0) --- updated-dependencies: - dependency-name: django-environ dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 58a782c1..6179a46e 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -56,7 +56,7 @@ django-crispy-forms==1.14.0 # django-anvil-consortium-manager django-dbbackup==4.0.1 # via -r requirements/requirements.in -django-environ==0.8.1 +django-environ==0.10.0 # via -r requirements/requirements.in django-extensions==3.2.3 # via From f5c5cd7ba31724b6c3db24afbd4308bbe29fe2c5 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Wed, 29 Nov 2023 09:59:23 -0800 Subject: [PATCH 036/137] Pin django-environ to <=0.10 in requirements.in file This is because 0.11+ introduces a bug with reading env variables that have a # character in them. --- requirements/requirements.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 2b3b01fa..9820ad43 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -9,7 +9,8 @@ oauthlib # https://github.com/oauthlib/oauthlib # ------------------------------------------------------------------------------ django>=4.2,<5.0 # https://www.djangoproject.com/ # Read from .env files -django-environ # https://github.com/joke2k/django-environ +# Pin to <= 0.10.0 because 0.11+ introduces a bug with reading environment variables with # characters. +django-environ<=0.10.0 # https://github.com/joke2k/django-environ # Turn on and off maintenance mode. django-maintenance-mode # https://github.com/fabiocaccamo/django-maintenance-mode # Model utilities From 2791921b36415af280ef709658912323dec59284 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:07:38 +0000 Subject: [PATCH 037/137] Bump django-dbbackup from 4.0.1 to 4.0.2 Bumps [django-dbbackup](https://github.com/jazzband/django-dbbackup) from 4.0.1 to 4.0.2. - [Release notes](https://github.com/jazzband/django-dbbackup/releases) - [Changelog](https://github.com/jazzband/django-dbbackup/blob/master/docs/changelog.rst) - [Commits](https://github.com/jazzband/django-dbbackup/commits/4.0.2) --- updated-dependencies: - dependency-name: django-dbbackup dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index d033aa33..1a95db8f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -54,7 +54,7 @@ django-crispy-forms==1.14.0 # -r requirements/requirements.in # crispy-bootstrap5 # django-anvil-consortium-manager -django-dbbackup==4.0.1 +django-dbbackup==4.0.2 # via -r requirements/requirements.in django-environ==0.10.0 # via -r requirements/requirements.in From 9b9e84b3b6ac9bc75b7e72d348f5ab80539fa5b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:27:25 +0000 Subject: [PATCH 038/137] Bump django-login-required-middleware from 0.8.0 to 0.9.0 Bumps [django-login-required-middleware](https://github.com/CleitonDeLima/django-login-required-middleware) from 0.8.0 to 0.9.0. - [Release notes](https://github.com/CleitonDeLima/django-login-required-middleware/releases) - [Changelog](https://github.com/CleitonDeLima/django-login-required-middleware/blob/master/CHANGELOG.md) - [Commits](https://github.com/CleitonDeLima/django-login-required-middleware/compare/0.8.0...0.9.0) --- updated-dependencies: - dependency-name: django-login-required-middleware dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1a95db8f..1e9842f1 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -64,7 +64,7 @@ django-extensions==3.2.3 # django-anvil-consortium-manager django-filter==23.3 # via django-anvil-consortium-manager -django-login-required-middleware==0.8.0 +django-login-required-middleware==0.9.0 # via -r requirements/requirements.in django-maintenance-mode==0.16.3 # via -r requirements/requirements.in From 81991ab16d8ef344c3a715223d643db70d1b5f9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:28:17 +0000 Subject: [PATCH 039/137] Bump pytest-django from 4.5.2 to 4.7.0 Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.5.2 to 4.7.0. - [Release notes](https://github.com/pytest-dev/pytest-django/releases) - [Changelog](https://github.com/pytest-dev/pytest-django/blob/master/docs/changelog.rst) - [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.5.2...v4.7.0) --- updated-dependencies: - dependency-name: pytest-django dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 3931f2bc..8a47e4d4 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -50,7 +50,7 @@ pytest==7.4.3 # -r requirements/test-requirements.in # pytest-django # pytest-sugar -pytest-django==4.5.2 +pytest-django==4.7.0 # via -r requirements/test-requirements.in pytest-sugar==0.9.6 # via -r requirements/test-requirements.in From 8454e07e9bf58b61fab95bf1c5a509850943e13c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:30:40 +0000 Subject: [PATCH 040/137] Bump jsonschema from 4.16.0 to 4.20.0 Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.16.0 to 4.20.0. - [Release notes](https://github.com/python-jsonschema/jsonschema/releases) - [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst) - [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.16.0...v4.20.0) --- updated-dependencies: - dependency-name: jsonschema dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1a95db8f..76390ccd 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -6,8 +6,10 @@ # asgiref==3.7.2 # via django -attrs==22.1.0 - # via jsonschema +attrs==23.1.0 + # via + # jsonschema + # referencing backports-zoneinfo==0.2.1 # via django build==1.0.3 @@ -91,9 +93,13 @@ idna==3.3 importlib-metadata==5.2.0 # via build importlib-resources==5.10.0 - # via jsonschema -jsonschema==4.16.0 + # via + # jsonschema + # jsonschema-specifications +jsonschema==4.20.0 # via -r requirements/requirements.in +jsonschema-specifications==2023.11.1 + # via jsonschema mysqlclient==2.1.0 # via -r requirements/requirements.in networkx==2.8.8 @@ -136,8 +142,6 @@ pyparsing==3.0.9 # via packaging pyproject-hooks==1.0.0 # via build -pyrsistent==0.19.2 - # via jsonschema python-dateutil==2.8.2 # via # pandas @@ -151,6 +155,10 @@ pytz==2023.3.post1 # django-anvil-consortium-manager # django-dbbackup # pandas +referencing==0.31.1 + # via + # jsonschema + # jsonschema-specifications requests==2.31.0 # via # -r requirements/requirements.in @@ -158,6 +166,10 @@ requests==2.31.0 # requests-oauthlib requests-oauthlib==1.3.1 # via django-allauth +rpds-py==0.13.2 + # via + # jsonschema + # referencing rsa==4.9 # via google-auth six==1.16.0 From e3d472a079eb6783afd6ff50172a3581997dfb8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:32:57 +0000 Subject: [PATCH 041/137] Bump django-model-utils from 4.2.0 to 4.3.1 Bumps [django-model-utils](https://github.com/jazzband/django-model-utils) from 4.2.0 to 4.3.1. - [Release notes](https://github.com/jazzband/django-model-utils/releases) - [Changelog](https://github.com/jazzband/django-model-utils/blob/master/CHANGES.rst) - [Commits](https://github.com/jazzband/django-model-utils/compare/4.2.0...4.3.1) --- updated-dependencies: - dependency-name: django-model-utils dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1a95db8f..02b50cd7 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -68,7 +68,7 @@ django-login-required-middleware==0.8.0 # via -r requirements/requirements.in django-maintenance-mode==0.16.3 # via -r requirements/requirements.in -django-model-utils==4.2.0 +django-model-utils==4.3.1 # via -r requirements/requirements.in django-simple-history==3.4.0 # via From 1217cfadc0842b432ca22c2094041d7b137c4a15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:36:00 +0000 Subject: [PATCH 042/137] Bump django-tree-queries from 0.15.0 to 0.16.1 Bumps [django-tree-queries](https://github.com/matthiask/django-tree-queries) from 0.15.0 to 0.16.1. - [Changelog](https://github.com/feincms/django-tree-queries/blob/main/CHANGELOG.rst) - [Commits](https://github.com/matthiask/django-tree-queries/compare/0.15...0.16.1) --- updated-dependencies: - dependency-name: django-tree-queries dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index d9660a72..ef90a12e 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -78,7 +78,7 @@ django-simple-history==3.4.0 # django-anvil-consortium-manager django-tables2==2.4.1 # via django-anvil-consortium-manager -django-tree-queries==0.15.0 +django-tree-queries==0.16.1 # via -r requirements/requirements.in fastobo==0.12.2 # via pronto From e05caacfa3c2e55ae352498ac93b73745c302264 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:36:14 +0000 Subject: [PATCH 043/137] Bump django-coverage-plugin from 2.0.3 to 3.1.0 Bumps [django-coverage-plugin](https://github.com/nedbat/django_coverage_plugin) from 2.0.3 to 3.1.0. - [Release notes](https://github.com/nedbat/django_coverage_plugin/releases) - [Commits](https://github.com/nedbat/django_coverage_plugin/compare/v2.0.3...v3.1.0) --- updated-dependencies: - dependency-name: django-coverage-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 8a47e4d4..7b6a450f 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -16,7 +16,7 @@ coverage==7.3.2 # via # -r requirements/test-requirements.in # django-coverage-plugin -django-coverage-plugin==2.0.3 +django-coverage-plugin==3.1.0 # via -r requirements/test-requirements.in django-test-migrations==1.3.0 # via -r requirements/test-requirements.in @@ -70,7 +70,6 @@ responses==0.24.1 six==1.16.0 # via # -c requirements/requirements.txt - # django-coverage-plugin # python-dateutil termcolor==1.1.0 # via pytest-sugar From 41e56a8a1f3edc80dfbde3b32db7b53d5878efbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:37:36 +0000 Subject: [PATCH 044/137] Bump types-requests from 2.31.0.6 to 2.31.0.10 Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.6 to 2.31.0.10. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-requests dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index c91b8612..573a6948 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -6,8 +6,6 @@ # alabaster==0.7.13 # via sphinx -appnope==0.1.3 - # via ipython asgiref==3.7.2 # via # -c requirements/requirements.txt @@ -235,10 +233,8 @@ types-pytz==2023.3.1.1 # via django-stubs types-pyyaml==6.0.12.12 # via django-stubs -types-requests==2.31.0.6 +types-requests==2.31.0.10 # via -r requirements/dev-requirements.in -types-urllib3==1.26.25.14 - # via types-requests typing-extensions==4.8.0 # via # -c requirements/requirements.txt @@ -256,6 +252,7 @@ urllib3==2.1.0 # -c requirements/requirements.txt # -c requirements/test-requirements.txt # requests + # types-requests virtualenv==20.24.6 # via pre-commit wcwidth==0.2.10 From 57dddcd5b2d400f7919ff08d3a2ae0a3e47e6899 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:39:41 +0000 Subject: [PATCH 045/137] Bump django-crispy-forms from 1.14.0 to 2.1 Bumps [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) from 1.14.0 to 2.1. - [Release notes](https://github.com/django-crispy-forms/django-crispy-forms/releases) - [Changelog](https://github.com/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md) - [Commits](https://github.com/django-crispy-forms/django-crispy-forms/compare/1.14.0...2.1) --- updated-dependencies: - dependency-name: django-crispy-forms dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index d9660a72..04739633 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -40,6 +40,7 @@ django==4.2.7 # crispy-bootstrap5 # django-allauth # django-anvil-consortium-manager + # django-crispy-forms # django-dbbackup # django-extensions # django-filter @@ -51,7 +52,7 @@ django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-con # via -r requirements/requirements.in django-autocomplete-light==3.9.4 # via django-anvil-consortium-manager -django-crispy-forms==1.14.0 +django-crispy-forms==2.1 # via # -r requirements/requirements.in # crispy-bootstrap5 From f9641b04d515de891e8339066a679f02c3340994 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 11:42:33 -0800 Subject: [PATCH 046/137] Add crispy-bootstrap5 to requirements files --- requirements/requirements.in | 2 ++ requirements/requirements.txt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 9820ad43..674a0977 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -19,6 +19,8 @@ django-model-utils # https://github.com/jazzband/django-model-utils django-allauth # https://github.com/pennersr/django-allauth # Nicer forms. django-crispy-forms # https://github.com/django-crispy-forms/django-crispy-forms +# Bootstrap5 templates for crispy-forms +crispy-bootstrap5 # https://github.com/django-crispy-forms/crispy-bootstrap5 # Protect all views behind LoginRequired by default. django-login-required-middleware # https://github.com/CleitonDeLima/django-login-required-middleware # Back up the database before migrations/updates. diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 04739633..99516b3f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -29,7 +29,9 @@ charset-normalizer==2.0.12 click==8.1.3 # via pip-tools crispy-bootstrap5==0.7 - # via django-anvil-consortium-manager + # via + # -r requirements/requirements.in + # django-anvil-consortium-manager cryptography==41.0.6 # via pyjwt defusedxml==0.7.1 From be975e3395c968bf35d57cee777e83e646ceeb69 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 11:44:39 -0800 Subject: [PATCH 047/137] Update settings file to use crispy-bootstrap templates crispy-forms 2.0 removed templates, so we have to use the specific additional cirspy-bootstrap5 to get the templates. --- config/settings/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/settings/base.py b/config/settings/base.py index cefe40bd..8e80aca6 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -212,7 +212,9 @@ FORM_RENDERER = "django.forms.renderers.TemplatesSetting" # http://django-crispy-forms.readthedocs.io/en/latest/install.html#template-packs -CRISPY_TEMPLATE_PACK = "bootstrap4" +# https://github.com/django-crispy-forms/crispy-bootstrap5 +CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" +CRISPY_TEMPLATE_PACK = "bootstrap5" # FIXTURES # ------------------------------------------------------------------------------ From 42ba0a92b5c88c69b81db37d1babfaf604f9515b Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:34:57 -0800 Subject: [PATCH 048/137] Add argon2-cffi back to requirements Necessary for logging in via the admin interface. --- requirements/requirements.in | 3 +++ requirements/requirements.txt | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 674a0977..0684d457 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -5,6 +5,9 @@ pip-tools whitenoise # https://github.com/evansd/whitenoise oauthlib # https://github.com/oauthlib/oauthlib +# Password hashing +argon2-cffi # https://github.com/hynek/argon2_cffi + # Django # ------------------------------------------------------------------------------ django>=4.2,<5.0 # https://www.djangoproject.com/ diff --git a/requirements/requirements.txt b/requirements/requirements.txt index ce5218b5..e4f3c88d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,6 +4,10 @@ # # pip-compile requirements/requirements.in # +argon2-cffi==23.1.0 + # via -r requirements/requirements.in +argon2-cffi-bindings==21.2.0 + # via argon2-cffi asgiref==3.7.2 # via django attrs==23.1.0 @@ -21,7 +25,9 @@ certifi==2023.11.17 # -r requirements/requirements.in # requests cffi==1.15.0 - # via cryptography + # via + # argon2-cffi-bindings + # cryptography chardet==5.1.0 # via pronto charset-normalizer==2.0.12 From a9bce9536330a6854170c4d4437920ff05776e82 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:03:05 -0800 Subject: [PATCH 049/137] Update ACM version to v0.21 in requirements file --- requirements/requirements.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index 0684d457..4b4d5bff 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -32,7 +32,7 @@ django-dbbackup # https://github.com/jazzband/django-dbbackup django-extensions # https://github.com/django-extensions/django-extensions # anvil_consortium_manager -django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-consortium-manager.git@v0.20.1 +django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-consortium-manager.git@v0.21 # Simple history - model history tracking django-simple-history From 74115f696d6cb4943d7bafd4f334f0c3130f2470 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:18:40 -0800 Subject: [PATCH 050/137] Update adapters to have staff_view and _view for list_table_class For now, use the same tables for both the staff_view and regular view permissions. This gets the project up and running with the new adapter requirements, and we can modify the tables seen by regular view users in future commits. --- primed/cdsa/adapters.py | 3 ++- primed/dbgap/adapters.py | 3 ++- primed/miscellaneous_workspaces/adapters.py | 18 ++++++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/primed/cdsa/adapters.py b/primed/cdsa/adapters.py index ea87a984..709c9397 100644 --- a/primed/cdsa/adapters.py +++ b/primed/cdsa/adapters.py @@ -12,7 +12,8 @@ class CDSAWorkspaceAdapter(BaseWorkspaceAdapter): description = ( "Workspaces containing data from the Consortium Data Sharing Agreement." ) - list_table_class = tables.CDSAWorkspaceTable + list_table_class_staff_view = tables.CDSAWorkspaceTable + list_table_class_view = tables.CDSAWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.CDSAWorkspace workspace_data_form_class = forms.CDSAWorkspaceForm diff --git a/primed/dbgap/adapters.py b/primed/dbgap/adapters.py index 532b0cfe..e190b369 100644 --- a/primed/dbgap/adapters.py +++ b/primed/dbgap/adapters.py @@ -10,7 +10,8 @@ class dbGaPWorkspaceAdapter(BaseWorkspaceAdapter): type = "dbgap" name = "dbGaP workspace" description = "Workspaces containing data from released dbGaP accessions" - list_table_class = tables.dbGaPWorkspaceTable + list_table_class_staff_view = tables.dbGaPWorkspaceTable + list_table_class_view = tables.dbGaPWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.dbGaPWorkspace workspace_data_form_class = forms.dbGaPWorkspaceForm diff --git a/primed/miscellaneous_workspaces/adapters.py b/primed/miscellaneous_workspaces/adapters.py index d4c9e8e8..5cc23306 100644 --- a/primed/miscellaneous_workspaces/adapters.py +++ b/primed/miscellaneous_workspaces/adapters.py @@ -14,7 +14,8 @@ class SimulatedDataWorkspaceAdapter(BaseWorkspaceAdapter): type = "simulated_data" name = "Simulated Data workspace" description = "Workspaces containing simulated data" - list_table_class = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceTable + list_table_class_view = DefaultWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.SimulatedDataWorkspace workspace_data_form_class = forms.SimulatedDataWorkspaceForm @@ -29,7 +30,8 @@ class ConsortiumDevelWorkspaceAdapter(BaseWorkspaceAdapter): type = "devel" name = "Consortium development workspace" description = "Workspaces intended for consortium development of methods" - list_table_class = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceTable + list_table_class_view = DefaultWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.ConsortiumDevelWorkspace workspace_data_form_class = forms.ConsortiumDevelWorkspaceForm @@ -42,7 +44,8 @@ class ResourceWorkspaceAdapter(BaseWorkspaceAdapter): type = "resource" name = "Resource workspace" description = "Workspaces containing consortium resources (e.g., examples of using AnVIL, data inventories)" - list_table_class = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceTable + list_table_class_view = DefaultWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.ResourceWorkspace workspace_data_form_class = forms.ResourceWorkspaceForm @@ -55,7 +58,8 @@ class TemplateWorkspaceAdapter(BaseWorkspaceAdapter): type = "template" name = "Template workspace" description = "Template workspaces that can be cloned to create other workspaces" - list_table_class = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceTable + list_table_class_view = DefaultWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.TemplateWorkspace workspace_data_form_class = forms.TemplateWorkspaceForm @@ -68,7 +72,8 @@ class OpenAccessWorkspaceAdapter(BaseWorkspaceAdapter): type = "open_access" name = "Open access workspace" description = "Workspaces containing open access data" - list_table_class = tables.OpenAccessWorkspaceTable + list_table_class_staff_view = tables.OpenAccessWorkspaceTable + list_table_class_view = tables.OpenAccessWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.OpenAccessWorkspace workspace_data_form_class = forms.OpenAccessWorkspaceForm @@ -83,7 +88,8 @@ class DataPrepWorkspaceAdapter(BaseWorkspaceAdapter): type = "data_prep" name = "Data prep workspace" description = "Workspaces used to prepare data." - list_table_class = tables.DataPrepWorkspaceTable + list_table_class_staff_view = tables.DataPrepWorkspaceTable + list_table_class_view = tables.DataPrepWorkspaceTable workspace_form_class = WorkspaceForm workspace_data_model = models.DataPrepWorkspace workspace_data_form_class = forms.DataPrepWorkspaceForm From c0b705257695da9ac80822d36022578b9fb378bf Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:21:42 -0800 Subject: [PATCH 051/137] Rename OpenAccess workspace tables to match Staff/user convention --- primed/miscellaneous_workspaces/adapters.py | 4 ++-- primed/miscellaneous_workspaces/tables.py | 4 ++-- primed/miscellaneous_workspaces/tests/test_tables.py | 12 ++++++------ primed/primed_anvil/tests/test_views.py | 8 ++++---- primed/primed_anvil/views.py | 10 +++++----- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/primed/miscellaneous_workspaces/adapters.py b/primed/miscellaneous_workspaces/adapters.py index 5cc23306..8f480204 100644 --- a/primed/miscellaneous_workspaces/adapters.py +++ b/primed/miscellaneous_workspaces/adapters.py @@ -72,8 +72,8 @@ class OpenAccessWorkspaceAdapter(BaseWorkspaceAdapter): type = "open_access" name = "Open access workspace" description = "Workspaces containing open access data" - list_table_class_staff_view = tables.OpenAccessWorkspaceTable - list_table_class_view = tables.OpenAccessWorkspaceTable + list_table_class_staff_view = tables.OpenAccessWorkspaceStaffTable + list_table_class_view = tables.OpenAccessWorkspaceStaffTable workspace_form_class = WorkspaceForm workspace_data_model = models.OpenAccessWorkspace workspace_data_form_class = forms.OpenAccessWorkspaceForm diff --git a/primed/miscellaneous_workspaces/tables.py b/primed/miscellaneous_workspaces/tables.py index f9763621..1525a249 100644 --- a/primed/miscellaneous_workspaces/tables.py +++ b/primed/miscellaneous_workspaces/tables.py @@ -9,7 +9,7 @@ ) -class OpenAccessWorkspaceTable(tables.Table): +class OpenAccessWorkspaceStaffTable(tables.Table): """Class to render a table of Workspace objects with OpenAccessWorkspace workspace data.""" name = tables.columns.Column(linkify=True) @@ -27,7 +27,7 @@ class Meta: order_by = ("name",) -class OpenAccessWorkspaceLimitedViewTable(tables.Table): +class OpenAccessWorkspaceUserTable(tables.Table): """Class to render a table of Workspace objects with OpenAccessWorkspace workspace data.""" name = tables.columns.Column() diff --git a/primed/miscellaneous_workspaces/tests/test_tables.py b/primed/miscellaneous_workspaces/tests/test_tables.py index 992ffcb3..de536164 100644 --- a/primed/miscellaneous_workspaces/tests/test_tables.py +++ b/primed/miscellaneous_workspaces/tests/test_tables.py @@ -7,11 +7,11 @@ from . import factories -class OpenAccessWorkspaceTableTest(TestCase): - """Tests for the OpenAccessWorkspaceTable table.""" +class OpenAccessWorkspaceStaffTableTest(TestCase): + """Tests for the OpenAccessWorkspaceStaffTable table.""" model_factory = factories.OpenAccessWorkspaceFactory - table_class = tables.OpenAccessWorkspaceTable + table_class = tables.OpenAccessWorkspaceStaffTable def test_row_count_with_no_objects(self): table = self.table_class(Workspace.objects.all()) @@ -28,11 +28,11 @@ def test_row_count_with_two_objects(self): self.assertEqual(len(table.rows), 2) -class OpenAccessWorkspaceLimitedViewTableTest(TestCase): - """Tests for the OpenAccessWorkspaceTable table.""" +class OpenAccessWorkspaceUserTableTest(TestCase): + """Tests for the OpenAccessWorkspaceStaffTable table.""" model_factory = factories.OpenAccessWorkspaceFactory - table_class = tables.OpenAccessWorkspaceLimitedViewTable + table_class = tables.OpenAccessWorkspaceUserTable def test_row_count_with_no_objects(self): table = self.table_class(Workspace.objects.all()) diff --git a/primed/primed_anvil/tests/test_views.py b/primed/primed_anvil/tests/test_views.py index 85d59706..627e4e05 100644 --- a/primed/primed_anvil/tests/test_views.py +++ b/primed/primed_anvil/tests/test_views.py @@ -25,8 +25,8 @@ dbGaPWorkspaceFactory, ) from primed.miscellaneous_workspaces.tables import ( - OpenAccessWorkspaceLimitedViewTable, - OpenAccessWorkspaceTable, + OpenAccessWorkspaceStaffTable, + OpenAccessWorkspaceUserTable, ) from primed.miscellaneous_workspaces.tests.factories import OpenAccessWorkspaceFactory from primed.primed_anvil.tests.factories import AvailableDataFactory, StudyFactory @@ -260,7 +260,7 @@ def test_table_classes_view_permission(self): self.assertIsInstance(response.context_data["tables"][0], dbGaPWorkspaceTable) self.assertIsInstance(response.context_data["tables"][1], CDSAWorkspaceTable) self.assertIsInstance( - response.context_data["tables"][3], OpenAccessWorkspaceTable + response.context_data["tables"][3], OpenAccessWorkspaceStaffTable ) def test_table_classes_limited_view_permission(self): @@ -282,7 +282,7 @@ def test_table_classes_limited_view_permission(self): response.context_data["tables"][1], CDSAWorkspaceLimitedViewTable ) self.assertIsInstance( - response.context_data["tables"][3], OpenAccessWorkspaceLimitedViewTable + response.context_data["tables"][3], OpenAccessWorkspaceUserTable ) def test_dbgap_workspace_table(self): diff --git a/primed/primed_anvil/views.py b/primed/primed_anvil/views.py index b4fdb98b..1ba0ef92 100644 --- a/primed/primed_anvil/views.py +++ b/primed/primed_anvil/views.py @@ -27,8 +27,8 @@ dbGaPWorkspaceTable, ) from primed.miscellaneous_workspaces.tables import ( - OpenAccessWorkspaceLimitedViewTable, - OpenAccessWorkspaceTable, + OpenAccessWorkspaceStaffTable, + OpenAccessWorkspaceUserTable, ) from primed.users.tables import UserTable @@ -45,7 +45,7 @@ class StudyDetail(AnVILConsortiumManagerViewRequired, MultiTableMixin, DetailVie dbGaPWorkspaceTable, CDSAWorkspaceTable, DataAffiliateAgreementTable, - OpenAccessWorkspaceTable, + OpenAccessWorkspaceStaffTable, ] # table_class = dbGaPWorkspaceTable # context_table_name = "dbgap_workspace_table" @@ -67,7 +67,7 @@ def get_tables(self): dbGaPWorkspaceTable(dbgap_qs), CDSAWorkspaceTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), - OpenAccessWorkspaceTable(open_access_qs), + OpenAccessWorkspaceStaffTable(open_access_qs), ) else: # Assume they have limited view due to auth mixin. @@ -75,7 +75,7 @@ def get_tables(self): dbGaPWorkspaceLimitedViewTable(dbgap_qs), CDSAWorkspaceLimitedViewTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), - OpenAccessWorkspaceLimitedViewTable(open_access_qs), + OpenAccessWorkspaceUserTable(open_access_qs), ) From 731918d2f0f31bfa389c549a8a14e6ff810d1fcc Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:55:37 -0800 Subject: [PATCH 052/137] Use the OpenAccessWorkspaceUserTable in the adapter --- primed/miscellaneous_workspaces/adapters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/miscellaneous_workspaces/adapters.py b/primed/miscellaneous_workspaces/adapters.py index 8f480204..d9718e3d 100644 --- a/primed/miscellaneous_workspaces/adapters.py +++ b/primed/miscellaneous_workspaces/adapters.py @@ -73,7 +73,7 @@ class OpenAccessWorkspaceAdapter(BaseWorkspaceAdapter): name = "Open access workspace" description = "Workspaces containing open access data" list_table_class_staff_view = tables.OpenAccessWorkspaceStaffTable - list_table_class_view = tables.OpenAccessWorkspaceStaffTable + list_table_class_view = tables.OpenAccessWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.OpenAccessWorkspace workspace_data_form_class = forms.OpenAccessWorkspaceForm From 252314217ef7f4d74a73eacdce57e68fb5949183 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 15:56:01 -0800 Subject: [PATCH 053/137] Add a link to the workspace in the OpenAccessUserTable Now that users can see the workspace detail page, linkify the workspace column. --- primed/miscellaneous_workspaces/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/miscellaneous_workspaces/tables.py b/primed/miscellaneous_workspaces/tables.py index 1525a249..fd1132df 100644 --- a/primed/miscellaneous_workspaces/tables.py +++ b/primed/miscellaneous_workspaces/tables.py @@ -30,7 +30,7 @@ class Meta: class OpenAccessWorkspaceUserTable(tables.Table): """Class to render a table of Workspace objects with OpenAccessWorkspace workspace data.""" - name = tables.columns.Column() + name = tables.columns.Column(linkify=True) billing_project = tables.Column() is_shared = WorkspaceSharedWithConsortiumColumn() From f3965a6eb4c93dbe1c6ad60909678debb21744b0 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:11:48 -0800 Subject: [PATCH 054/137] Rename CDSAWorkspace tables for Staff/User convention --- primed/cdsa/adapters.py | 4 ++-- primed/cdsa/tables.py | 4 ++-- primed/cdsa/tests/test_tables.py | 12 ++++++------ primed/primed_anvil/tests/test_views.py | 8 +++++--- primed/primed_anvil/views.py | 10 +++++----- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/primed/cdsa/adapters.py b/primed/cdsa/adapters.py index 709c9397..e3cb066d 100644 --- a/primed/cdsa/adapters.py +++ b/primed/cdsa/adapters.py @@ -12,8 +12,8 @@ class CDSAWorkspaceAdapter(BaseWorkspaceAdapter): description = ( "Workspaces containing data from the Consortium Data Sharing Agreement." ) - list_table_class_staff_view = tables.CDSAWorkspaceTable - list_table_class_view = tables.CDSAWorkspaceTable + list_table_class_staff_view = tables.CDSAWorkspaceStaffTable + list_table_class_view = tables.CDSAWorkspaceStaffTable workspace_form_class = WorkspaceForm workspace_data_model = models.CDSAWorkspace workspace_data_form_class = forms.CDSAWorkspaceForm diff --git a/primed/cdsa/tables.py b/primed/cdsa/tables.py index 66b734da..576026c9 100644 --- a/primed/cdsa/tables.py +++ b/primed/cdsa/tables.py @@ -295,7 +295,7 @@ def render_date_shared(self, record): return "—" -class CDSAWorkspaceTable(tables.Table): +class CDSAWorkspaceStaffTable(tables.Table): """A table for the CDSAWorkspace model.""" name = tables.Column(linkify=True) @@ -324,7 +324,7 @@ class Meta: order_by = ("name",) -class CDSAWorkspaceLimitedViewTable(tables.Table): +class CDSAWorkspaceUserTable(tables.Table): """A table for the CDSAWorkspace model.""" name = tables.Column() diff --git a/primed/cdsa/tests/test_tables.py b/primed/cdsa/tests/test_tables.py index 82b7b7dc..c7c8c9de 100644 --- a/primed/cdsa/tests/test_tables.py +++ b/primed/cdsa/tests/test_tables.py @@ -447,12 +447,12 @@ def test_ordering(self): self.assertEqual(table.data[1], instance_1) -class CDSAWorkspaceTableTest(TestCase): - """Tests for the CDSAWorkspaceTable class.""" +class CDSAWorkspaceStaffTableTest(TestCase): + """Tests for the CDSAWorkspaceStaffTable class.""" model = Workspace model_factory = factories.CDSAWorkspaceFactory - table_class = tables.CDSAWorkspaceTable + table_class = tables.CDSAWorkspaceStaffTable def test_row_count_with_no_objects(self): table = self.table_class(self.model.objects.all()) @@ -477,12 +477,12 @@ def test_ordering(self): self.assertEqual(table.data[1], instance_1.workspace) -class CDSAWorkspaceLimitedViewTableTest(TestCase): - """Tests for the CDSAWorkspaceLimitedViewTable class.""" +class CDSAWorkspaceUserTableTest(TestCase): + """Tests for the CDSAWorkspaceUserTable class.""" model = Workspace model_factory = factories.CDSAWorkspaceFactory - table_class = tables.CDSAWorkspaceLimitedViewTable + table_class = tables.CDSAWorkspaceUserTable def test_row_count_with_no_objects(self): table = self.table_class(self.model.objects.all()) diff --git a/primed/primed_anvil/tests/test_views.py b/primed/primed_anvil/tests/test_views.py index 627e4e05..e7004fb9 100644 --- a/primed/primed_anvil/tests/test_views.py +++ b/primed/primed_anvil/tests/test_views.py @@ -12,7 +12,7 @@ from django.test import RequestFactory, TestCase from django.urls import reverse -from primed.cdsa.tables import CDSAWorkspaceLimitedViewTable, CDSAWorkspaceTable +from primed.cdsa.tables import CDSAWorkspaceStaffTable, CDSAWorkspaceUserTable from primed.cdsa.tests.factories import ( CDSAWorkspaceFactory, DataAffiliateAgreementFactory, @@ -258,7 +258,9 @@ def test_table_classes_view_permission(self): response = self.client.get(self.get_url(obj.pk)) self.assertIn("tables", response.context_data) self.assertIsInstance(response.context_data["tables"][0], dbGaPWorkspaceTable) - self.assertIsInstance(response.context_data["tables"][1], CDSAWorkspaceTable) + self.assertIsInstance( + response.context_data["tables"][1], CDSAWorkspaceStaffTable + ) self.assertIsInstance( response.context_data["tables"][3], OpenAccessWorkspaceStaffTable ) @@ -279,7 +281,7 @@ def test_table_classes_limited_view_permission(self): response.context_data["tables"][0], dbGaPWorkspaceLimitedViewTable ) self.assertIsInstance( - response.context_data["tables"][1], CDSAWorkspaceLimitedViewTable + response.context_data["tables"][1], CDSAWorkspaceUserTable ) self.assertIsInstance( response.context_data["tables"][3], OpenAccessWorkspaceUserTable diff --git a/primed/primed_anvil/views.py b/primed/primed_anvil/views.py index 1ba0ef92..397bdbdc 100644 --- a/primed/primed_anvil/views.py +++ b/primed/primed_anvil/views.py @@ -15,8 +15,8 @@ from primed.cdsa.models import DataAffiliateAgreement, MemberAgreement from primed.cdsa.tables import ( - CDSAWorkspaceLimitedViewTable, - CDSAWorkspaceTable, + CDSAWorkspaceStaffTable, + CDSAWorkspaceUserTable, DataAffiliateAgreementTable, MemberAgreementTable, ) @@ -43,7 +43,7 @@ class StudyDetail(AnVILConsortiumManagerViewRequired, MultiTableMixin, DetailVie model = models.Study tables = [ dbGaPWorkspaceTable, - CDSAWorkspaceTable, + CDSAWorkspaceStaffTable, DataAffiliateAgreementTable, OpenAccessWorkspaceStaffTable, ] @@ -65,7 +65,7 @@ def get_tables(self): if self.request.user.has_perm(full_view_perm): return ( dbGaPWorkspaceTable(dbgap_qs), - CDSAWorkspaceTable(cdsa_qs), + CDSAWorkspaceStaffTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), OpenAccessWorkspaceStaffTable(open_access_qs), ) @@ -73,7 +73,7 @@ def get_tables(self): # Assume they have limited view due to auth mixin. return ( dbGaPWorkspaceLimitedViewTable(dbgap_qs), - CDSAWorkspaceLimitedViewTable(cdsa_qs), + CDSAWorkspaceUserTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), OpenAccessWorkspaceUserTable(open_access_qs), ) From 0be0a37c30a04c170aa8130cbd5cf1467733f14c Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:12:24 -0800 Subject: [PATCH 055/137] Show the CDSAWorkspaceUserTable to users with view permission --- primed/cdsa/adapters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/cdsa/adapters.py b/primed/cdsa/adapters.py index e3cb066d..1663b392 100644 --- a/primed/cdsa/adapters.py +++ b/primed/cdsa/adapters.py @@ -13,7 +13,7 @@ class CDSAWorkspaceAdapter(BaseWorkspaceAdapter): "Workspaces containing data from the Consortium Data Sharing Agreement." ) list_table_class_staff_view = tables.CDSAWorkspaceStaffTable - list_table_class_view = tables.CDSAWorkspaceStaffTable + list_table_class_view = tables.CDSAWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.CDSAWorkspace workspace_data_form_class = forms.CDSAWorkspaceForm From 0e6557ebd0a7e7d1d5dffc5b4ee62dea02734967 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:12:50 -0800 Subject: [PATCH 056/137] Add link to workspace in CDSAWorkspaceUserTable Now that people can see the workspace detail page, we can have a link in the CDSAWorkspaceUserTable. --- primed/cdsa/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/cdsa/tables.py b/primed/cdsa/tables.py index 576026c9..3646f915 100644 --- a/primed/cdsa/tables.py +++ b/primed/cdsa/tables.py @@ -327,7 +327,7 @@ class Meta: class CDSAWorkspaceUserTable(tables.Table): """A table for the CDSAWorkspace model.""" - name = tables.Column() + name = tables.Column(linkify=True) billing_project = tables.Column() cdsaworkspace__data_use_permission__abbreviation = tables.Column( verbose_name="DUO permission", From 0635134f2b058274464b7ca7d5251eff4a7a6ae6 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:16:59 -0800 Subject: [PATCH 057/137] Renmae dbGaPWorkspace tables to match Staff/User convention --- primed/dbgap/adapters.py | 4 ++-- primed/dbgap/tables.py | 4 ++-- primed/dbgap/tests/test_tables.py | 8 ++++---- primed/dbgap/tests/test_views.py | 4 ++-- primed/dbgap/views.py | 2 +- primed/primed_anvil/tests/test_views.py | 8 +++++--- primed/primed_anvil/views.py | 14 +++++++------- 7 files changed, 23 insertions(+), 21 deletions(-) diff --git a/primed/dbgap/adapters.py b/primed/dbgap/adapters.py index e190b369..a7f50f50 100644 --- a/primed/dbgap/adapters.py +++ b/primed/dbgap/adapters.py @@ -10,8 +10,8 @@ class dbGaPWorkspaceAdapter(BaseWorkspaceAdapter): type = "dbgap" name = "dbGaP workspace" description = "Workspaces containing data from released dbGaP accessions" - list_table_class_staff_view = tables.dbGaPWorkspaceTable - list_table_class_view = tables.dbGaPWorkspaceTable + list_table_class_staff_view = tables.dbGaPWorkspaceStaffTable + list_table_class_view = tables.dbGaPWorkspaceStaffTable workspace_form_class = WorkspaceForm workspace_data_model = models.dbGaPWorkspace workspace_data_form_class = forms.dbGaPWorkspaceForm diff --git a/primed/dbgap/tables.py b/primed/dbgap/tables.py index 2e075bcd..c888c276 100644 --- a/primed/dbgap/tables.py +++ b/primed/dbgap/tables.py @@ -71,7 +71,7 @@ def render_dbgap_phs(self, value): return "phs{0:06d}".format(value) -class dbGaPWorkspaceTable(tables.Table): +class dbGaPWorkspaceStaffTable(tables.Table): """Class to render a table of Workspace objects with dbGaPWorkspace workspace data.""" name = tables.columns.Column(linkify=True) @@ -116,7 +116,7 @@ def render_number_approved_dars(self, record): return n -class dbGaPWorkspaceLimitedViewTable(tables.Table): +class dbGaPWorkspaceUserTable(tables.Table): """Class to render a table of Workspace objects with dbGaPWorkspace workspace data.""" name = tables.columns.Column() diff --git a/primed/dbgap/tests/test_tables.py b/primed/dbgap/tests/test_tables.py index 6db0ae99..514a27fd 100644 --- a/primed/dbgap/tests/test_tables.py +++ b/primed/dbgap/tests/test_tables.py @@ -116,10 +116,10 @@ def test_ordering(self): self.assertEqual(table.data[1], instance_1) -class dbGaPWorkspaceTableTest(TestCase): +class dbGaPWorkspaceStaffTableTest(TestCase): model = acm_models.Workspace model_factory = factories.dbGaPWorkspaceFactory - table_class = tables.dbGaPWorkspaceTable + table_class = tables.dbGaPWorkspaceStaffTable def test_row_count_with_no_objects(self): table = self.table_class(self.model.objects.all()) @@ -206,10 +206,10 @@ def test_render_number_approved_dars_only_most_recent(self): # self.assertEqual("", table.rows[0].get_cell_value("is_shared")) -class dbGaPWorkspaceLimitedViewTableTest(TestCase): +class dbGaPWorkspaceUserTableTest(TestCase): model = acm_models.Workspace model_factory = factories.dbGaPWorkspaceFactory - table_class = tables.dbGaPWorkspaceTable + table_class = tables.dbGaPWorkspaceStaffTable def test_row_count_with_no_objects(self): table = self.table_class(self.model.objects.all()) diff --git a/primed/dbgap/tests/test_views.py b/primed/dbgap/tests/test_views.py index 1791ca41..3a98876f 100644 --- a/primed/dbgap/tests/test_views.py +++ b/primed/dbgap/tests/test_views.py @@ -267,7 +267,7 @@ def test_workspace_table(self): response = self.get_view()(request, dbgap_phs=self.obj.dbgap_phs) self.assertIn("workspace_table", response.context_data) self.assertIsInstance( - response.context_data["workspace_table"], tables.dbGaPWorkspaceTable + response.context_data["workspace_table"], tables.dbGaPWorkspaceStaffTable ) def test_workspace_table_none(self): @@ -856,7 +856,7 @@ def test_view_has_correct_table_class(self): response = self.get_view()(request, workspace_type=self.workspace_type) self.assertIn("table", response.context_data) self.assertIsInstance( - response.context_data["table"], tables.dbGaPWorkspaceTable + response.context_data["table"], tables.dbGaPWorkspaceStaffTable ) diff --git a/primed/dbgap/views.py b/primed/dbgap/views.py index 545830b4..082f7a7b 100644 --- a/primed/dbgap/views.py +++ b/primed/dbgap/views.py @@ -57,7 +57,7 @@ def get_object(self, queryset=None): return obj def get_table(self): - return tables.dbGaPWorkspaceTable( + return tables.dbGaPWorkspaceStaffTable( Workspace.objects.filter(dbgapworkspace__dbgap_study_accession=self.object), exclude=( "dbgapworkspace__dbgap_study_accession__study", diff --git a/primed/primed_anvil/tests/test_views.py b/primed/primed_anvil/tests/test_views.py index e7004fb9..b84d4c5f 100644 --- a/primed/primed_anvil/tests/test_views.py +++ b/primed/primed_anvil/tests/test_views.py @@ -18,7 +18,7 @@ DataAffiliateAgreementFactory, MemberAgreementFactory, ) -from primed.dbgap.tables import dbGaPWorkspaceLimitedViewTable, dbGaPWorkspaceTable +from primed.dbgap.tables import dbGaPWorkspaceStaffTable, dbGaPWorkspaceUserTable from primed.dbgap.tests.factories import ( dbGaPApplicationFactory, dbGaPStudyAccessionFactory, @@ -257,7 +257,9 @@ def test_table_classes_view_permission(self): self.client.force_login(self.user) response = self.client.get(self.get_url(obj.pk)) self.assertIn("tables", response.context_data) - self.assertIsInstance(response.context_data["tables"][0], dbGaPWorkspaceTable) + self.assertIsInstance( + response.context_data["tables"][0], dbGaPWorkspaceStaffTable + ) self.assertIsInstance( response.context_data["tables"][1], CDSAWorkspaceStaffTable ) @@ -278,7 +280,7 @@ def test_table_classes_limited_view_permission(self): response = self.client.get(self.get_url(obj.pk)) self.assertIn("tables", response.context_data) self.assertIsInstance( - response.context_data["tables"][0], dbGaPWorkspaceLimitedViewTable + response.context_data["tables"][0], dbGaPWorkspaceUserTable ) self.assertIsInstance( response.context_data["tables"][1], CDSAWorkspaceUserTable diff --git a/primed/primed_anvil/views.py b/primed/primed_anvil/views.py index 397bdbdc..09b0d672 100644 --- a/primed/primed_anvil/views.py +++ b/primed/primed_anvil/views.py @@ -23,8 +23,8 @@ from primed.dbgap.models import dbGaPApplication from primed.dbgap.tables import ( dbGaPApplicationTable, - dbGaPWorkspaceLimitedViewTable, - dbGaPWorkspaceTable, + dbGaPWorkspaceStaffTable, + dbGaPWorkspaceUserTable, ) from primed.miscellaneous_workspaces.tables import ( OpenAccessWorkspaceStaffTable, @@ -42,12 +42,12 @@ class StudyDetail(AnVILConsortiumManagerViewRequired, MultiTableMixin, DetailVie model = models.Study tables = [ - dbGaPWorkspaceTable, + dbGaPWorkspaceStaffTable, CDSAWorkspaceStaffTable, DataAffiliateAgreementTable, OpenAccessWorkspaceStaffTable, ] - # table_class = dbGaPWorkspaceTable + # table_class = dbGaPWorkspaceStaffTable # context_table_name = "dbgap_workspace_table" def get_tables(self): @@ -64,7 +64,7 @@ def get_tables(self): full_view_perm = f"{apm_content_type.app_label}.{AnVILProjectManagerAccess.STAFF_VIEW_PERMISSION_CODENAME}" if self.request.user.has_perm(full_view_perm): return ( - dbGaPWorkspaceTable(dbgap_qs), + dbGaPWorkspaceStaffTable(dbgap_qs), CDSAWorkspaceStaffTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), OpenAccessWorkspaceStaffTable(open_access_qs), @@ -72,7 +72,7 @@ def get_tables(self): else: # Assume they have limited view due to auth mixin. return ( - dbGaPWorkspaceLimitedViewTable(dbgap_qs), + dbGaPWorkspaceUserTable(dbgap_qs), CDSAWorkspaceUserTable(cdsa_qs), DataAffiliateAgreementTable(agreement_qs), OpenAccessWorkspaceUserTable(open_access_qs), @@ -168,7 +168,7 @@ class AvailableDataDetail( model = models.AvailableData context_table_name = "dbgap_workspace_table" - table_class = dbGaPWorkspaceTable + table_class = dbGaPWorkspaceStaffTable context_table_name = "dbgap_workspace_table" def get_table_data(self): From 00e7ebd87aa011bd0f38380744500b662eea7b60 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:17:21 -0800 Subject: [PATCH 058/137] Show view users the dbGaPWorkspaceUserTable --- primed/dbgap/adapters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/dbgap/adapters.py b/primed/dbgap/adapters.py index a7f50f50..5c567a5b 100644 --- a/primed/dbgap/adapters.py +++ b/primed/dbgap/adapters.py @@ -11,7 +11,7 @@ class dbGaPWorkspaceAdapter(BaseWorkspaceAdapter): name = "dbGaP workspace" description = "Workspaces containing data from released dbGaP accessions" list_table_class_staff_view = tables.dbGaPWorkspaceStaffTable - list_table_class_view = tables.dbGaPWorkspaceStaffTable + list_table_class_view = tables.dbGaPWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.dbGaPWorkspace workspace_data_form_class = forms.dbGaPWorkspaceForm From 0e3b4d22c1675e36b1afd1bd0c016bf9a19b4d37 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:17:43 -0800 Subject: [PATCH 059/137] Add link to the workspace in dbGaPWorkspaceUserTable Now that the workspace detail page is viewable to these users, the workspace column can be linkified. --- primed/dbgap/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primed/dbgap/tables.py b/primed/dbgap/tables.py index c888c276..3d23b07c 100644 --- a/primed/dbgap/tables.py +++ b/primed/dbgap/tables.py @@ -119,7 +119,7 @@ def render_number_approved_dars(self, record): class dbGaPWorkspaceUserTable(tables.Table): """Class to render a table of Workspace objects with dbGaPWorkspace workspace data.""" - name = tables.columns.Column() + name = tables.columns.Column(linkify=True) billing_project = tables.Column() dbgap_accession = dbGaPAccessionColumn( accessor="dbgapworkspace__get_dbgap_accession", From 37ac9379debe84e6bb92a91f07fae127367a4071 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:23:51 -0800 Subject: [PATCH 060/137] Remove commented-out table definition --- primed/primed_anvil/tables.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/primed/primed_anvil/tables.py b/primed/primed_anvil/tables.py index 05e680bf..0a9ae5db 100644 --- a/primed/primed_anvil/tables.py +++ b/primed/primed_anvil/tables.py @@ -47,30 +47,6 @@ def _get_bool_value(self, record, value, bound_column): return is_shared -# class WorkspaceSharedWithConsortiumTable(tables.Table): -# """Table including a column to indicate if a workspace is shared with PRIMED_ALL.""" - -# is_shared = tables.columns.Column( -# accessor="pk", -# verbose_name="Shared with PRIMED?", -# orderable=False, -# ) - -# def render_is_shared(self, record): -# is_shared = record.workspacegroupsharing_set.filter( -# group__name="PRIMED_ALL" -# ).exists() -# if is_shared: -# icon = "check-circle-fill" -# color = "green" -# value = format_html( -# """""".format(icon, color) -# ) -# else: -# value = "" -# return value - - class DefaultWorkspaceTable(tables.Table): """Class to use for default workspace tables in PRIMED.""" From 2f1e8ca6eb9717b9cd8ce2b32cc250e8f0f33ef0 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 1 Dec 2023 16:26:37 -0800 Subject: [PATCH 061/137] Show view users a different DefaultWorkspaceTable Rename the DefaultWorkspaceTable to DefaultWorkspaceStaffTable, and add a new DefaultWorkspaceUserTable for users with view permission. This matches the naming conventions previously established. In the adapters using the default workspace table, set the table class for view users to DefaultWorkspaceUserTable. --- primed/miscellaneous_workspaces/adapters.py | 21 ++++++++++++--------- primed/primed_anvil/tables.py | 19 ++++++++++++++++++- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/primed/miscellaneous_workspaces/adapters.py b/primed/miscellaneous_workspaces/adapters.py index d9718e3d..0c26c964 100644 --- a/primed/miscellaneous_workspaces/adapters.py +++ b/primed/miscellaneous_workspaces/adapters.py @@ -3,7 +3,10 @@ from anvil_consortium_manager.adapters.workspace import BaseWorkspaceAdapter from anvil_consortium_manager.forms import WorkspaceForm -from primed.primed_anvil.tables import DefaultWorkspaceTable +from primed.primed_anvil.tables import ( + DefaultWorkspaceStaffTable, + DefaultWorkspaceUserTable, +) from . import forms, models, tables @@ -14,8 +17,8 @@ class SimulatedDataWorkspaceAdapter(BaseWorkspaceAdapter): type = "simulated_data" name = "Simulated Data workspace" description = "Workspaces containing simulated data" - list_table_class_staff_view = DefaultWorkspaceTable - list_table_class_view = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceStaffTable + list_table_class_view = DefaultWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.SimulatedDataWorkspace workspace_data_form_class = forms.SimulatedDataWorkspaceForm @@ -30,8 +33,8 @@ class ConsortiumDevelWorkspaceAdapter(BaseWorkspaceAdapter): type = "devel" name = "Consortium development workspace" description = "Workspaces intended for consortium development of methods" - list_table_class_staff_view = DefaultWorkspaceTable - list_table_class_view = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceStaffTable + list_table_class_view = DefaultWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.ConsortiumDevelWorkspace workspace_data_form_class = forms.ConsortiumDevelWorkspaceForm @@ -44,8 +47,8 @@ class ResourceWorkspaceAdapter(BaseWorkspaceAdapter): type = "resource" name = "Resource workspace" description = "Workspaces containing consortium resources (e.g., examples of using AnVIL, data inventories)" - list_table_class_staff_view = DefaultWorkspaceTable - list_table_class_view = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceStaffTable + list_table_class_view = DefaultWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.ResourceWorkspace workspace_data_form_class = forms.ResourceWorkspaceForm @@ -58,8 +61,8 @@ class TemplateWorkspaceAdapter(BaseWorkspaceAdapter): type = "template" name = "Template workspace" description = "Template workspaces that can be cloned to create other workspaces" - list_table_class_staff_view = DefaultWorkspaceTable - list_table_class_view = DefaultWorkspaceTable + list_table_class_staff_view = DefaultWorkspaceStaffTable + list_table_class_view = DefaultWorkspaceUserTable workspace_form_class = WorkspaceForm workspace_data_model = models.TemplateWorkspace workspace_data_form_class = forms.TemplateWorkspaceForm diff --git a/primed/primed_anvil/tables.py b/primed/primed_anvil/tables.py index 0a9ae5db..71fb7fac 100644 --- a/primed/primed_anvil/tables.py +++ b/primed/primed_anvil/tables.py @@ -47,7 +47,7 @@ def _get_bool_value(self, record, value, bound_column): return is_shared -class DefaultWorkspaceTable(tables.Table): +class DefaultWorkspaceStaffTable(tables.Table): """Class to use for default workspace tables in PRIMED.""" name = tables.Column(linkify=True, verbose_name="Workspace") @@ -71,6 +71,23 @@ class Meta: order_by = ("name",) +class DefaultWorkspaceUserTable(tables.Table): + """Class to use for default workspace tables in PRIMED.""" + + name = tables.Column(linkify=True, verbose_name="Workspace") + billing_project = tables.Column() + is_shared = WorkspaceSharedWithConsortiumColumn() + + class Meta: + model = Workspace + fields = ( + "name", + "billing_project", + "is_shared", + ) + order_by = ("name",) + + class StudyTable(tables.Table): """A table for `Study`s.""" From 4255ae01aed3d243cc94f3366be70411e00c62db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 03:18:37 +0000 Subject: [PATCH 062/137] Bump pytest-sugar from 0.9.6 to 0.9.7 Bumps [pytest-sugar](https://github.com/Teemu/pytest-sugar) from 0.9.6 to 0.9.7. - [Release notes](https://github.com/Teemu/pytest-sugar/releases) - [Changelog](https://github.com/Teemu/pytest-sugar/blob/main/CHANGES.rst) - [Commits](https://github.com/Teemu/pytest-sugar/commits/v0.9.7) --- updated-dependencies: - dependency-name: pytest-sugar dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 7b6a450f..9a39ec0b 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -52,7 +52,7 @@ pytest==7.4.3 # pytest-sugar pytest-django==4.7.0 # via -r requirements/test-requirements.in -pytest-sugar==0.9.6 +pytest-sugar==0.9.7 # via -r requirements/test-requirements.in python-dateutil==2.8.2 # via @@ -71,7 +71,7 @@ six==1.16.0 # via # -c requirements/requirements.txt # python-dateutil -termcolor==1.1.0 +termcolor==2.4.0 # via pytest-sugar tomli==2.0.1 # via From 296360e5b80f5905b6f2ed9080f3fda3a0601209 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 03:20:12 +0000 Subject: [PATCH 063/137] Bump crispy-bootstrap5 from 0.7 to 2023.10 Bumps [crispy-bootstrap5](https://github.com/django-crispy-forms/crispy-bootstrap5) from 0.7 to 2023.10. - [Release notes](https://github.com/django-crispy-forms/crispy-bootstrap5/releases) - [Changelog](https://github.com/django-crispy-forms/crispy-bootstrap5/blob/main/CHANGELOG.md) - [Commits](https://github.com/django-crispy-forms/crispy-bootstrap5/compare/0.7...2023.10) --- updated-dependencies: - dependency-name: crispy-bootstrap5 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e4f3c88d..fad4c4e0 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -34,7 +34,7 @@ charset-normalizer==2.0.12 # via requests click==8.1.3 # via pip-tools -crispy-bootstrap5==0.7 +crispy-bootstrap5==2023.10 # via # -r requirements/requirements.in # django-anvil-consortium-manager From ef4c744d504b42aa8c92aa581c3a017ff394c40c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 03:20:37 +0000 Subject: [PATCH 064/137] Bump freezegun from 1.2.2 to 1.3.0 Bumps [freezegun](https://github.com/spulec/freezegun) from 1.2.2 to 1.3.0. - [Release notes](https://github.com/spulec/freezegun/releases) - [Changelog](https://github.com/spulec/freezegun/blob/master/CHANGELOG) - [Commits](https://github.com/spulec/freezegun/commits/1.3.0) --- updated-dependencies: - dependency-name: freezegun dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 7b6a450f..46bbea79 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -26,7 +26,7 @@ factory-boy==3.3.0 # via -r requirements/test-requirements.in faker==13.15.1 # via factory-boy -freezegun==1.2.2 +freezegun==1.3.0 # via -r requirements/test-requirements.in idna==3.3 # via From 1b9c77495656addb36bcd5dfb8df16eb077927d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 03:21:29 +0000 Subject: [PATCH 065/137] Bump mypy from 1.7.0 to 1.7.1 Bumps [mypy](https://github.com/python/mypy) from 1.7.0 to 1.7.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.0...v1.7.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 573a6948..aa736316 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -111,7 +111,7 @@ mccabe==0.7.0 # via # flake8 # pylint -mypy==1.7.0 +mypy==1.7.1 # via -r requirements/dev-requirements.in mypy-extensions==1.0.0 # via From c8fd182c4016309a994f0526b350889740ad936d Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 11:27:38 -0800 Subject: [PATCH 066/137] Make DUO detail views open to people with View permission --- primed/duo/tests/test_views.py | 8 ++++---- primed/duo/views.py | 9 ++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/primed/duo/tests/test_views.py b/primed/duo/tests/test_views.py index 5ebd2bc6..96f2a5af 100644 --- a/primed/duo/tests/test_views.py +++ b/primed/duo/tests/test_views.py @@ -19,7 +19,7 @@ class DataUsePermissionListTest(TestCase): def setUp(self): """Set up test class.""" self.factory = RequestFactory() - # Create a user with both view and edit permission. + # Create a user with staff view permission. self.user = UserFactory.create(username="test", password="test") self.user.user_permissions.add( Permission.objects.get( @@ -122,11 +122,11 @@ class DataUsePermissionDetailTest(TestCase): def setUp(self): """Set up test class.""" self.factory = RequestFactory() - # Create a user with both view and edit permission. + # Create a user with view permission. self.user = UserFactory.create(username="test", password="test") self.user.user_permissions.add( Permission.objects.get( - codename=AnVILProjectManagerAccess.STAFF_VIEW_PERMISSION_CODENAME + codename=AnVILProjectManagerAccess.VIEW_PERMISSION_CODENAME ) ) @@ -282,7 +282,7 @@ def setUp(self): self.user = UserFactory.create(username="test", password="test") self.user.user_permissions.add( Permission.objects.get( - codename=AnVILProjectManagerAccess.STAFF_VIEW_PERMISSION_CODENAME + codename=AnVILProjectManagerAccess.VIEW_PERMISSION_CODENAME ) ) diff --git a/primed/duo/views.py b/primed/duo/views.py index 06c7c749..f27c1e25 100644 --- a/primed/duo/views.py +++ b/primed/duo/views.py @@ -1,4 +1,7 @@ -from anvil_consortium_manager.auth import AnVILConsortiumManagerStaffViewRequired +from anvil_consortium_manager.auth import ( + AnVILConsortiumManagerStaffViewRequired, + AnVILConsortiumManagerViewRequired, +) from django.http import Http404 from django.views.generic import DetailView, ListView @@ -18,7 +21,7 @@ def get_context_data(self, **kwargs): return context -class DataUsePermissionDetail(AnVILConsortiumManagerStaffViewRequired, DetailView): +class DataUsePermissionDetail(AnVILConsortiumManagerViewRequired, DetailView): model = models.DataUsePermission @@ -51,7 +54,7 @@ def get_context_data(self, **kwargs): return context -class DataUseModifierDetail(AnVILConsortiumManagerStaffViewRequired, DetailView): +class DataUseModifierDetail(AnVILConsortiumManagerViewRequired, DetailView): model = models.DataUseModifier From 5767f7b0cdb14d31e064da0dbc91718c6a9d9633 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 11:33:14 -0800 Subject: [PATCH 067/137] Move DUO OLS links to details table Remove the button after the title, and add the link to the details table. --- primed/templates/duo/datausemodifier_detail.html | 13 +++++-------- .../templates/duo/datausepermission_detail.html | 15 ++++++--------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/primed/templates/duo/datausemodifier_detail.html b/primed/templates/duo/datausemodifier_detail.html index ba75312e..beebbc33 100644 --- a/primed/templates/duo/datausemodifier_detail.html +++ b/primed/templates/duo/datausemodifier_detail.html @@ -3,16 +3,13 @@ {% block title %}DUO modifier {{ object }}{% endblock title %} -{% block after_title %} - - - View on OLS - -{% endblock after_title %} - {% block panel %}
    -
    Identifier
    {{ object.identifier }}
    +
    Identifier
    + + {{ object.identifier }} + +
    Term
    {{ object.term }}
    Abbreviation
    {{ object.abbreviation }}
    Definition
    {{ object.definition }}
    diff --git a/primed/templates/duo/datausepermission_detail.html b/primed/templates/duo/datausepermission_detail.html index e8902616..21495715 100644 --- a/primed/templates/duo/datausepermission_detail.html +++ b/primed/templates/duo/datausepermission_detail.html @@ -3,17 +3,14 @@ {% block title %}DUO permission {{ object }}{% endblock title %} -{% block after_title %} - - - View on OLS - -{% endblock after_title %} - {% block panel %}
    -
    Identifier
    {{ object.identifier }}
    -
    Term
    {{ object.term }}
    +
    Identifier
    + + {{ object.identifier }} + +
    +
    Term
    {{ object.term }}
    Abbreviation
    {{ object.abbreviation }}
    Definition
    {{ object.definition }}
    Comment
    {{ object.comment }}
    From f98769961cc197ce6495136201aa5d27ed1da101 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 11:43:57 -0800 Subject: [PATCH 068/137] Move account link instruction into an alert Add the check and message about linking an AnVIL account to the base template such that it displays an alert on all pages for users who have not yet linked their AnVIL account. --- primed/templates/base.html | 9 ++++++++- primed/templates/pages/home.html | 25 +++---------------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/primed/templates/base.html b/primed/templates/base.html index c6b0a9aa..b25b6cd1 100644 --- a/primed/templates/base.html +++ b/primed/templates/base.html @@ -118,8 +118,15 @@ {% endfor %} {% endif %} - {% block content %} + {% if not request.user.account %} + + {% endif %} + + {% block content %} +
    +
    +
    +

    Workspaces

    +
    +
    +

    Browse the current set of PRIMED workspaces on AnVIL.

    +
    + +
    +
    From 0a0dab6eade41e004cce3a89dba77b70df979374 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 12:03:06 -0800 Subject: [PATCH 070/137] Run pip-compile to get updated ACM version in requirements.txt --- requirements/requirements.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e4f3c88d..76881771 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -56,7 +56,7 @@ django==4.2.7 # django-tables2 django-allauth==0.54.0 # via -r requirements/requirements.in -django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-consortium-manager.git@v0.20.1 +django-anvil-consortium-manager @ git+https://github.com/UW-GAC/django-anvil-consortium-manager.git@v0.21 # via -r requirements/requirements.in django-autocomplete-light==3.9.4 # via django-anvil-consortium-manager @@ -93,10 +93,8 @@ fastobo==0.12.2 # via pronto fontawesomefree==6.2.1 # via django-anvil-consortium-manager -google-auth[requests]==2.14.1 - # via - # django-anvil-consortium-manager - # google-auth +google-auth==2.14.1 + # via django-anvil-consortium-manager idna==3.3 # via requests importlib-metadata==5.2.0 @@ -172,6 +170,7 @@ requests==2.31.0 # via # -r requirements/requirements.in # django-allauth + # django-anvil-consortium-manager # requests-oauthlib requests-oauthlib==1.3.1 # via django-allauth From 9729f29cc1451d3daf5e6e1d07d9f10c237ab41d Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 14:15:00 -0800 Subject: [PATCH 071/137] Rearrange workspace adapters and update descriptions for clarity --- config/settings/base.py | 8 ++++---- primed/cdsa/adapters.py | 2 +- primed/miscellaneous_workspaces/adapters.py | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index 8e80aca6..4821ea98 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -370,14 +370,14 @@ ANVIL_API_SERVICE_ACCOUNT_FILE = env("ANVIL_API_SERVICE_ACCOUNT_FILE") # Specify workspace adapters. ANVIL_WORKSPACE_ADAPTERS = [ - "primed.miscellaneous_workspaces.adapters.TemplateWorkspaceAdapter", "primed.dbgap.adapters.dbGaPWorkspaceAdapter", "primed.cdsa.adapters.CDSAWorkspaceAdapter", + "primed.miscellaneous_workspaces.adapters.OpenAccessWorkspaceAdapter", + "primed.miscellaneous_workspaces.adapters.SimulatedDataWorkspaceAdapter", + "primed.miscellaneous_workspaces.adapters.ResourceWorkspaceAdapter", "primed.miscellaneous_workspaces.adapters.ConsortiumDevelWorkspaceAdapter", + "primed.miscellaneous_workspaces.adapters.TemplateWorkspaceAdapter", "primed.miscellaneous_workspaces.adapters.DataPrepWorkspaceAdapter", - "primed.miscellaneous_workspaces.adapters.ResourceWorkspaceAdapter", - "primed.miscellaneous_workspaces.adapters.SimulatedDataWorkspaceAdapter", - "primed.miscellaneous_workspaces.adapters.OpenAccessWorkspaceAdapter", ] ANVIL_ACCOUNT_ADAPTER = "primed.primed_anvil.adapters.AccountAdapter" diff --git a/primed/cdsa/adapters.py b/primed/cdsa/adapters.py index 1663b392..e4409ddd 100644 --- a/primed/cdsa/adapters.py +++ b/primed/cdsa/adapters.py @@ -10,7 +10,7 @@ class CDSAWorkspaceAdapter(BaseWorkspaceAdapter): type = "cdsa" name = "CDSA workspace" description = ( - "Workspaces containing data from the Consortium Data Sharing Agreement." + "Workspaces containing data from the Consortium Data Sharing Agreement" ) list_table_class_staff_view = tables.CDSAWorkspaceStaffTable list_table_class_view = tables.CDSAWorkspaceUserTable diff --git a/primed/miscellaneous_workspaces/adapters.py b/primed/miscellaneous_workspaces/adapters.py index 0c26c964..24262017 100644 --- a/primed/miscellaneous_workspaces/adapters.py +++ b/primed/miscellaneous_workspaces/adapters.py @@ -60,7 +60,9 @@ class TemplateWorkspaceAdapter(BaseWorkspaceAdapter): type = "template" name = "Template workspace" - description = "Template workspaces that can be cloned to create other workspaces" + description = ( + "Template workspaces that will be cloned by the CC to create other workspaces" + ) list_table_class_staff_view = DefaultWorkspaceStaffTable list_table_class_view = DefaultWorkspaceUserTable workspace_form_class = WorkspaceForm @@ -90,7 +92,7 @@ class DataPrepWorkspaceAdapter(BaseWorkspaceAdapter): type = "data_prep" name = "Data prep workspace" - description = "Workspaces used to prepare data." + description = "Workspaces used to prepare data for sharing or update data that is already shared" list_table_class_staff_view = tables.DataPrepWorkspaceTable list_table_class_view = tables.DataPrepWorkspaceTable workspace_form_class = WorkspaceForm From ff8b1db351bc9960e2dd627d10599f2f67a96bd1 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 4 Dec 2023 15:27:43 -0800 Subject: [PATCH 072/137] Add forgotten CDSA migration This migrations adds additional status choices for CDSAs. I must have forgotten to include it before. --- ...storicalsignedagreement_status_and_more.py | 44 +++++++++++++++++++ primed/cdsa/tests/test_models.py | 15 +++++++ 2 files changed, 59 insertions(+) create mode 100644 primed/cdsa/migrations/0010_alter_historicalsignedagreement_status_and_more.py diff --git a/primed/cdsa/migrations/0010_alter_historicalsignedagreement_status_and_more.py b/primed/cdsa/migrations/0010_alter_historicalsignedagreement_status_and_more.py new file mode 100644 index 00000000..c6d18372 --- /dev/null +++ b/primed/cdsa/migrations/0010_alter_historicalsignedagreement_status_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.7 on 2023-12-04 23:27 + +from django.db import migrations +import model_utils.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ("cdsa", "0009_signedagreement_add_field_status"), + ] + + operations = [ + migrations.AlterField( + model_name="historicalsignedagreement", + name="status", + field=model_utils.fields.StatusField( + choices=[ + ("active", "Active"), + ("withdrawn", "Withdrawn"), + ("lapsed", "Lapsed"), + ], + default="active", + max_length=100, + no_check_for_status=True, + verbose_name="status", + ), + ), + migrations.AlterField( + model_name="signedagreement", + name="status", + field=model_utils.fields.StatusField( + choices=[ + ("active", "Active"), + ("withdrawn", "Withdrawn"), + ("lapsed", "Lapsed"), + ], + default="active", + max_length=100, + no_check_for_status=True, + verbose_name="status", + ), + ), + ] diff --git a/primed/cdsa/tests/test_models.py b/primed/cdsa/tests/test_models.py index 32b35cd2..1165c684 100644 --- a/primed/cdsa/tests/test_models.py +++ b/primed/cdsa/tests/test_models.py @@ -209,6 +209,21 @@ def test_get_absolute_url(self): instance.signed_agreement.get_absolute_url(), instance.get_absolute_url() ) + def test_statuses(self): + """All allowed statuses.""" + instance = factories.SignedAgreementFactory.create( + status=models.SignedAgreement.StatusChoices.ACTIVE + ) + instance.full_clean() + instance = factories.SignedAgreementFactory.create( + status=models.SignedAgreement.StatusChoices.WITHDRAWN + ) + instance.full_clean() + instance = factories.SignedAgreementFactory.create( + status=models.SignedAgreement.StatusChoices.LAPSED + ) + instance.full_clean() + def test_member_choices(self): """Can create instances with all of the member choices.""" instance = factories.SignedAgreementFactory.create( From af3fde34e404bcac58f9992ef7f29b2d3d37b771 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 04:00:24 +0000 Subject: [PATCH 073/137] Bump freezegun from 1.3.0 to 1.3.1 Bumps [freezegun](https://github.com/spulec/freezegun) from 1.3.0 to 1.3.1. - [Release notes](https://github.com/spulec/freezegun/releases) - [Changelog](https://github.com/spulec/freezegun/blob/master/CHANGELOG) - [Commits](https://github.com/spulec/freezegun/compare/1.3.0...1.3.1) --- updated-dependencies: - dependency-name: freezegun dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index d92c5de9..921bb559 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -26,7 +26,7 @@ factory-boy==3.3.0 # via -r requirements/test-requirements.in faker==13.15.1 # via factory-boy -freezegun==1.3.0 +freezegun==1.3.1 # via -r requirements/test-requirements.in idna==3.3 # via From c1b350afe567e37ac52dc1e7fa493950ad50a185 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 04:01:17 +0000 Subject: [PATCH 074/137] Bump django-maintenance-mode from 0.16.3 to 0.19.0 Bumps [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) from 0.16.3 to 0.19.0. - [Release notes](https://github.com/fabiocaccamo/django-maintenance-mode/releases) - [Changelog](https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md) - [Commits](https://github.com/fabiocaccamo/django-maintenance-mode/compare/0.16.3...0.19.0) --- updated-dependencies: - dependency-name: django-maintenance-mode dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index a850de52..45c55bbe 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -77,7 +77,7 @@ django-filter==23.3 # via django-anvil-consortium-manager django-login-required-middleware==0.9.0 # via -r requirements/requirements.in -django-maintenance-mode==0.16.3 +django-maintenance-mode==0.19.0 # via -r requirements/requirements.in django-model-utils==4.3.1 # via -r requirements/requirements.in @@ -153,7 +153,7 @@ python-dateutil==2.8.2 # via # pandas # pronto -python-fsutil==0.6.1 +python-fsutil==0.11.0 # via django-maintenance-mode python3-openid==3.2.0 # via django-allauth From 08cd90dd1981471ef150ad66a4d1ee31dbebc384 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:18:23 +0000 Subject: [PATCH 075/137] Bump django from 4.2.7 to 4.2.8 Bumps [django](https://github.com/django/django) from 4.2.7 to 4.2.8. - [Commits](https://github.com/django/django/compare/4.2.7...4.2.8) --- updated-dependencies: - dependency-name: django dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- requirements/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index aa736316..b2c4aff5 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -50,7 +50,7 @@ dill==0.3.7 # via pylint distlib==0.3.7 # via virtualenv -django==4.2.7 +django==4.2.8 # via # -c requirements/requirements.txt # django-debug-toolbar diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 45c55bbe..23957084 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -42,7 +42,7 @@ cryptography==41.0.6 # via pyjwt defusedxml==0.7.1 # via python3-openid -django==4.2.7 +django==4.2.8 # via # -r requirements/requirements.in # crispy-bootstrap5 From 5f01e723798257414a0f5e106e566019e2177305 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 03:38:52 +0000 Subject: [PATCH 076/137] Bump django-stubs from 4.2.6 to 4.2.7 Bumps [django-stubs](https://github.com/typeddjango/django-stubs) from 4.2.6 to 4.2.7. - [Release notes](https://github.com/typeddjango/django-stubs/releases) - [Commits](https://github.com/typeddjango/django-stubs/compare/4.2.6...4.2.7) --- updated-dependencies: - dependency-name: django-stubs dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b2c4aff5..b559a5e9 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -58,9 +58,9 @@ django==4.2.8 # django-stubs-ext django-debug-toolbar==4.2.0 # via -r requirements/dev-requirements.in -django-stubs==4.2.6 +django-stubs==4.2.7 # via -r requirements/dev-requirements.in -django-stubs-ext==4.2.5 +django-stubs-ext==4.2.7 # via django-stubs docutils==0.20.1 # via sphinx From 6919b7f596368c3be7afa6bf137f7ace9bda791f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 03:43:20 +0000 Subject: [PATCH 077/137] Bump django-maintenance-mode from 0.19.0 to 0.20.0 Bumps [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) from 0.19.0 to 0.20.0. - [Release notes](https://github.com/fabiocaccamo/django-maintenance-mode/releases) - [Changelog](https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md) - [Commits](https://github.com/fabiocaccamo/django-maintenance-mode/compare/0.19.0...0.20.0) --- updated-dependencies: - dependency-name: django-maintenance-mode dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 23957084..9302fc25 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -77,7 +77,7 @@ django-filter==23.3 # via django-anvil-consortium-manager django-login-required-middleware==0.9.0 # via -r requirements/requirements.in -django-maintenance-mode==0.19.0 +django-maintenance-mode==0.20.0 # via -r requirements/requirements.in django-model-utils==4.3.1 # via -r requirements/requirements.in From 22cb76fbb4fa6a26f7982f896d149e3e2fee318b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 03:06:08 +0000 Subject: [PATCH 078/137] Bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69f1b66f..a1272e5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python 3.9 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.9 cache: pip @@ -70,7 +70,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: pip @@ -104,7 +104,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python 3.8 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.8 cache: pip @@ -140,7 +140,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.10' From 918ef3a10c6ec73fd77ad1077ccaaf8008a8402d Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 8 Dec 2023 15:00:14 -0800 Subject: [PATCH 079/137] Add a gitleaksignore file with old unused secrets fingerprints These secrets are currently unused, but keep getting detected by periodic gitleaks scans. As a temporary workaround until we can remove them from the repo history, create this file so gitleaks detect stops flagging these every time it runs. --- .gitleaksignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .gitleaksignore diff --git a/.gitleaksignore b/.gitleaksignore new file mode 100644 index 00000000..4756f210 --- /dev/null +++ b/.gitleaksignore @@ -0,0 +1,4 @@ +2f8573f44abd55cd30367f673bbbcb4ebc4861bd:test.secrets:generic-api-key:1 +2f8573f44abd55cd30367f673bbbcb4ebc4861bd:test.secrets:generic-api-key:2 +faa490c4de15c23401525ebf6ad532e2bd724e5e:config/settings/base.py:generic-api-key:83 +faa490c4de15c23401525ebf6ad532e2bd724e5e:config/settings/base.py:generic-api-key:84 From e201f9efbb9081dde87c90cc42b583162109a591 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 03:58:25 +0000 Subject: [PATCH 080/137] Bump django-maintenance-mode from 0.20.0 to 0.21.0 Bumps [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) from 0.20.0 to 0.21.0. - [Release notes](https://github.com/fabiocaccamo/django-maintenance-mode/releases) - [Changelog](https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md) - [Commits](https://github.com/fabiocaccamo/django-maintenance-mode/compare/0.20.0...0.21.0) --- updated-dependencies: - dependency-name: django-maintenance-mode dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 9302fc25..e0e1eb12 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -77,7 +77,7 @@ django-filter==23.3 # via django-anvil-consortium-manager django-login-required-middleware==0.9.0 # via -r requirements/requirements.in -django-maintenance-mode==0.20.0 +django-maintenance-mode==0.21.0 # via -r requirements/requirements.in django-model-utils==4.3.1 # via -r requirements/requirements.in @@ -153,7 +153,7 @@ python-dateutil==2.8.2 # via # pandas # pronto -python-fsutil==0.11.0 +python-fsutil==0.12.0 # via django-maintenance-mode python3-openid==3.2.0 # via django-allauth From 4e556ef6b628f3e7d2fbb015a8063e19f4d68dda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 03:16:56 +0000 Subject: [PATCH 081/137] Bump coverage from 7.3.2 to 7.3.3 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.2 to 7.3.3. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.3.2...7.3.3) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 921bb559..c3f0f7a6 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -12,7 +12,7 @@ charset-normalizer==2.0.12 # via # -c requirements/requirements.txt # requests -coverage==7.3.2 +coverage==7.3.3 # via # -r requirements/test-requirements.in # django-coverage-plugin From 4f8bc54f47455f836b5516ed69e1fb98b9360b3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 03:31:30 +0000 Subject: [PATCH 082/137] Bump actions/upload-artifact from 3 to 4 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a1272e5e..6d8fc6ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,7 +91,7 @@ jobs: ANVIL_API_SERVICE_ACCOUNT_FILE: foo - name: Upload coverage data - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-data path: .coverage.* @@ -125,7 +125,7 @@ jobs: ANVIL_API_SERVICE_ACCOUNT_FILE: foo - name: Upload coverage data - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-data path: .coverage.* From c1c3d009d2c4a56781ae8e6f96e36fb98c9145ac Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 11:04:49 -0800 Subject: [PATCH 083/137] Upload coverage files with different names upload-artifact v4 requires you to upload files with different names. --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d8fc6ab..488ab3a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: coverage-data + name: coverage-data-mysql-${{ strategy.job-index }} path: .coverage.* pytest-sqlite: @@ -127,7 +127,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: coverage-data + name: coverage-data-sqlite-${{ strategy.job-index }} path: .coverage.* coverage: @@ -151,7 +151,7 @@ jobs: - name: Download coverage data uses: actions/download-artifact@v3 with: - name: coverage-data + name: coverage-data-* - name: Combine coverage data run: | From 824f50da86a4c95cd96bc095053eac3e80b7ebab Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 14:04:09 -0800 Subject: [PATCH 084/137] Switch to download-artifact v4 (from v3) Seems like upload and downlaod should be paired, and possibly this is the reason that the download is failing. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 488ab3a6..edab2c24 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -149,7 +149,7 @@ jobs: python -m pip install --upgrade pip pip install --upgrade coverage "django<4" django-coverage-plugin - name: Download coverage data - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: coverage-data-* From 803fda2736df624541c97e6d8a0cf04c0c98d8ce Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 14:25:38 -0800 Subject: [PATCH 085/137] Try downloading all files instead of a specific name Looks like you can no longer use wildcards? --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index edab2c24..0f00ed07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,8 +150,9 @@ jobs: pip install --upgrade coverage "django<4" django-coverage-plugin - name: Download coverage data uses: actions/download-artifact@v4 - with: - name: coverage-data-* + + - name: List downloaded files + run: ls -l - name: Combine coverage data run: | From 69575a050c51850ceb84b2667911464ca9b95b74 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 14:31:04 -0800 Subject: [PATCH 086/137] Recursively list files as a test --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f00ed07..120c9224 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -152,7 +152,7 @@ jobs: uses: actions/download-artifact@v4 - name: List downloaded files - run: ls -l + run: ls -R - name: Combine coverage data run: | From e6cbbb7a2d8e629619b40bd3d289f395c61e794f Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 14:58:21 -0800 Subject: [PATCH 087/137] Download artifacts to a specific directory --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 120c9224..12417c8d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,9 +150,11 @@ jobs: pip install --upgrade coverage "django<4" django-coverage-plugin - name: Download coverage data uses: actions/download-artifact@v4 + with: + path: ./artifacts/ - name: List downloaded files - run: ls -R + run: ls -R ./artifacts - name: Combine coverage data run: | From 0563eed63d332079a43d2ea5776e59ddeaf7d358 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 15:17:25 -0800 Subject: [PATCH 088/137] Specify location of coverage files to combine --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 12417c8d..58285c0b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,7 +158,7 @@ jobs: - name: Combine coverage data run: | - python -m coverage combine + python -m coverage combine --data-file=./artifacts/coverage* python -m coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 From 80577efa88be09281fce7d46d03a85c06bd01815 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 15:27:55 -0800 Subject: [PATCH 089/137] Add debugging ls step --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 58285c0b..bb332d81 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,6 +159,8 @@ jobs: - name: Combine coverage data run: | python -m coverage combine --data-file=./artifacts/coverage* + ls -la + ls -R ./artifacts python -m coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 From 13b59cef8649fb41ad8f10c271a560c3399bb727 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 15 Dec 2023 15:35:33 -0800 Subject: [PATCH 090/137] Add another debugging ls statement --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb332d81..8d721a3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,9 +158,10 @@ jobs: - name: Combine coverage data run: | + ls -l ./artifacts/coverage* python -m coverage combine --data-file=./artifacts/coverage* - ls -la ls -R ./artifacts + ls -la python -m coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 From 5de874f79ac217093c9d5e1c9b6b62fa2ae9656a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 03:24:29 +0000 Subject: [PATCH 091/137] Bump mysqlclient from 2.1.0 to 2.2.1 Bumps [mysqlclient](https://github.com/PyMySQL/mysqlclient) from 2.1.0 to 2.2.1. - [Release notes](https://github.com/PyMySQL/mysqlclient/releases) - [Changelog](https://github.com/PyMySQL/mysqlclient/blob/main/HISTORY.rst) - [Commits](https://github.com/PyMySQL/mysqlclient/compare/v2.1.0...v2.2.1) --- updated-dependencies: - dependency-name: mysqlclient dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e0e1eb12..9c74da66 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -107,7 +107,7 @@ jsonschema==4.20.0 # via -r requirements/requirements.in jsonschema-specifications==2023.11.1 # via jsonschema -mysqlclient==2.1.0 +mysqlclient==2.2.1 # via -r requirements/requirements.in networkx==2.8.8 # via From 8a8dc139f187691bdabb8bff8d7336007da3607f Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 11:24:42 -0800 Subject: [PATCH 092/137] Update dependabot to run weekly on Sundays --- .github/dependabot.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index aa99d491..406063a1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,7 +4,8 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" + interval: "weekly" + day: "sunday" # Enable version updates for Python/Pip - Production - package-ecosystem: "pip" @@ -13,4 +14,5 @@ updates: directory: "/" # Check for updates to GitHub Actions every weekday schedule: - interval: "daily" + interval: "weekly" + day: "sunday" From 0b0a0506838cb77c699d97cd12ae420373c8c0a2 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 11:25:09 -0800 Subject: [PATCH 093/137] Allow both direct and indirect updates for packages I'm not sure if this matters now that we're using pip-sync. --- .github/dependabot.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 406063a1..4b0f88f3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,3 +16,6 @@ updates: schedule: interval: "weekly" day: "sunday" + allow: + # Allow both direct and indirect updates for all packages + - dependency-type: "all" From 82a80d6781542abafc8de173356b6218b60403a5 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 11:25:34 -0800 Subject: [PATCH 094/137] Allow 10 open pull requests Now that we'll be running dependabot weekly, we may get more than the default max number of pull requests. --- .github/dependabot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4b0f88f3..750edb2f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,3 +19,5 @@ updates: allow: # Allow both direct and indirect updates for all packages - dependency-type: "all" + # Allow up to 10 dependencies for pip dependencies + open-pull-requests-limit: 10 From cc04c448a6fa9f50c04f22ef8091b9dfc912bcca Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 11:46:56 -0800 Subject: [PATCH 095/137] Change path to download all artifacts? --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d721a3b..af4a8c2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -151,7 +151,7 @@ jobs: - name: Download coverage data uses: actions/download-artifact@v4 with: - path: ./artifacts/ + path: all - name: List downloaded files run: ls -R ./artifacts From a79c67e025d9b9f39ae7facdff2997561e8a2df5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:48:26 +0000 Subject: [PATCH 096/137] Bump babel from 2.13.1 to 2.14.0 Bumps [babel](https://github.com/python-babel/babel) from 2.13.1 to 2.14.0. - [Release notes](https://github.com/python-babel/babel/releases) - [Changelog](https://github.com/python-babel/babel/blob/master/CHANGES.rst) - [Commits](https://github.com/python-babel/babel/compare/v2.13.1...v2.14.0) --- updated-dependencies: - dependency-name: babel dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b559a5e9..9c8d07a8 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -14,7 +14,7 @@ astroid==3.0.1 # via pylint asttokens==2.4.1 # via stack-data -babel==2.13.1 +babel==2.14.0 # via sphinx backcall==0.2.0 # via ipython From 1a91ede0097f5e09299d520548a3d73c4c6a647a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:53:37 +0000 Subject: [PATCH 097/137] Bump cffi from 1.15.0 to 1.16.0 Bumps [cffi](https://github.com/python-cffi/cffi) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/python-cffi/cffi/releases) - [Commits](https://github.com/python-cffi/cffi/compare/v1.15.0...v1.16.0) --- updated-dependencies: - dependency-name: cffi dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e0e1eb12..fb37b22a 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -24,7 +24,7 @@ certifi==2023.11.17 # via # -r requirements/requirements.in # requests -cffi==1.15.0 +cffi==1.16.0 # via # argon2-cffi-bindings # cryptography From 9e6063d0fa46e0a4cca7a9d8fa426e2bb17895fc Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 11:59:42 -0800 Subject: [PATCH 098/137] Revert "Change path to download all artifacts?" This reverts commit cc04c448a6fa9f50c04f22ef8091b9dfc912bcca. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af4a8c2e..8d721a3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -151,7 +151,7 @@ jobs: - name: Download coverage data uses: actions/download-artifact@v4 with: - path: all + path: ./artifacts/ - name: List downloaded files run: ls -R ./artifacts From 722ad3e24aa34336d5ab21a5896f377c1f8b47be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:02:14 +0000 Subject: [PATCH 099/137] Bump tornado from 6.3.3 to 6.4 Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.3.3 to 6.4. - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](https://github.com/tornadoweb/tornado/compare/v6.3.3...v6.4.0) --- updated-dependencies: - dependency-name: tornado dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b559a5e9..cdcb028a 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -223,7 +223,7 @@ tomli==2.0.1 # pylint tomlkit==0.12.3 # via pylint -tornado==6.3.3 +tornado==6.4 # via livereload traitlets==5.13.0 # via From 86e04e71c44cf6d6397fd70e46aa5f056f6119da Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 12:05:36 -0800 Subject: [PATCH 100/137] Add another debugging print statement --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d721a3b..4df4abb5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,6 +90,8 @@ jobs: # We can set this to an empty string, since we'll never make an API call. ANVIL_API_SERVICE_ACCOUNT_FILE: foo + - name: list files + run: ls -la - name: Upload coverage data uses: actions/upload-artifact@v4 with: From e0b22ada634d2b972af9cdcd48e64cf9d6d04808 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:07:52 +0000 Subject: [PATCH 101/137] Bump zipp from 3.10.0 to 3.17.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.10.0 to 3.17.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.10.0...v3.17.0) --- updated-dependencies: - dependency-name: zipp dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- requirements/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b559a5e9..3a955b85 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -259,7 +259,7 @@ wcwidth==0.2.10 # via prompt-toolkit werkzeug==3.0.1 # via -r requirements/dev-requirements.in -zipp==3.10.0 +zipp==3.17.0 # via # -c requirements/requirements.txt # importlib-metadata diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e0e1eb12..4dcd7c1f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -210,7 +210,7 @@ wheel==0.41.3 # via pip-tools whitenoise==6.6.0 # via -r requirements/requirements.in -zipp==3.10.0 +zipp==3.17.0 # via # importlib-metadata # importlib-resources From 6ddb8d0ca8127b90059022f45292241b41f43277 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:11:51 +0000 Subject: [PATCH 102/137] Bump importlib-metadata from 5.2.0 to 7.0.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 5.2.0 to 7.0.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v5.2.0...v7.0.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: indirect update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- requirements/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b559a5e9..46055a4a 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -83,7 +83,7 @@ idna==3.3 # requests imagesize==1.4.1 # via sphinx -importlib-metadata==5.2.0 +importlib-metadata==7.0.0 # via # -c requirements/requirements.txt # sphinx diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e0e1eb12..940d48a4 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -97,7 +97,7 @@ google-auth==2.14.1 # via django-anvil-consortium-manager idna==3.3 # via requests -importlib-metadata==5.2.0 +importlib-metadata==7.0.0 # via build importlib-resources==5.10.0 # via From 2ef2d6b9a01ea722d18b4460d2428438d307b755 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 12:14:06 -0800 Subject: [PATCH 103/137] Try adding . before coverage artifact name --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4df4abb5..0e12b6d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: coverage-data-mysql-${{ strategy.job-index }} + name: .coverage-data-mysql-${{ strategy.job-index }} path: .coverage.* pytest-sqlite: @@ -129,7 +129,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: coverage-data-sqlite-${{ strategy.job-index }} + name: .coverage-data-sqlite-${{ strategy.job-index }} path: .coverage.* coverage: @@ -160,8 +160,8 @@ jobs: - name: Combine coverage data run: | - ls -l ./artifacts/coverage* - python -m coverage combine --data-file=./artifacts/coverage* + ls -l ./artifacts/.coverage* + python -m coverage combine --data-file=./artifacts/.coverage* ls -R ./artifacts ls -la python -m coverage xml From 79bb88e91a36ece879235c79b21977266b90d0dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:17:15 +0000 Subject: [PATCH 104/137] Bump numpy from 1.24.2 to 1.24.4 Bumps [numpy](https://github.com/numpy/numpy) from 1.24.2 to 1.24.4. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v1.24.2...v1.24.4) --- updated-dependencies: - dependency-name: numpy dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e0e1eb12..c18414ca 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -113,7 +113,7 @@ networkx==2.8.8 # via # django-anvil-consortium-manager # pronto -numpy==1.24.2 +numpy==1.24.4 # via # django-anvil-consortium-manager # pandas From 37294f163e038e1ae9b8871a8daf1996b35a9ffa Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 14:02:02 -0800 Subject: [PATCH 105/137] List with -a option to show dot files --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e12b6d3..5727336d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,19 +150,20 @@ jobs: run: | python -m pip install --upgrade pip pip install --upgrade coverage "django<4" django-coverage-plugin + - name: Download coverage data uses: actions/download-artifact@v4 with: path: ./artifacts/ - name: List downloaded files - run: ls -R ./artifacts + run: ls -Ral ./artifacts - name: Combine coverage data run: | - ls -l ./artifacts/.coverage* + ls -la ./artifacts/.coverage* python -m coverage combine --data-file=./artifacts/.coverage* - ls -R ./artifacts + ls -Ral ./artifacts ls -la python -m coverage xml - name: Upload coverage to Codecov From 8cdc11ab7718d9e8ecdb110c0b4a6794327972cc Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 14:16:18 -0800 Subject: [PATCH 106/137] Copy coverage files to working directory --- .github/workflows/ci.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5727336d..a69dba2a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,12 +159,16 @@ jobs: - name: List downloaded files run: ls -Ral ./artifacts + - name: Merge coverage files + run: | + ls -Rla ./artifacts + mv ./artifacts/.coverage.* . + ls -la .coverage* + ls -Rla ./artifacts + - name: Combine coverage data run: | - ls -la ./artifacts/.coverage* - python -m coverage combine --data-file=./artifacts/.coverage* - ls -Ral ./artifacts - ls -la + python -m coverage combine python -m coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 From 37b456d7c88a894f7ca93160866bb13278404478 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 14:27:19 -0800 Subject: [PATCH 107/137] Use coverage-data instead of .coverage-data for artifacts --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a69dba2a..40dd30a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: .coverage-data-mysql-${{ strategy.job-index }} + name: coverage-data-mysql-${{ strategy.job-index }} path: .coverage.* pytest-sqlite: @@ -129,7 +129,7 @@ jobs: - name: Upload coverage data uses: actions/upload-artifact@v4 with: - name: .coverage-data-sqlite-${{ strategy.job-index }} + name: coverage-data-sqlite-${{ strategy.job-index }} path: .coverage.* coverage: @@ -162,7 +162,7 @@ jobs: - name: Merge coverage files run: | ls -Rla ./artifacts - mv ./artifacts/.coverage.* . + mv ./artifacts/coverage-data*/.coverage* . ls -la .coverage* ls -Rla ./artifacts From 1f6a6dda15fd062ca9588bc1bd727c887056191d Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 14:41:27 -0800 Subject: [PATCH 108/137] Add list files statement to test jobs --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40dd30a7..3b5a56ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,7 +91,8 @@ jobs: ANVIL_API_SERVICE_ACCOUNT_FILE: foo - name: list files - run: ls -la + run: ls -la .coverage.* + - name: Upload coverage data uses: actions/upload-artifact@v4 with: @@ -126,6 +127,9 @@ jobs: # We can set this to an empty string, since we'll never make an API call. ANVIL_API_SERVICE_ACCOUNT_FILE: foo + - name: list files + run: ls -la .coverage.* + - name: Upload coverage data uses: actions/upload-artifact@v4 with: From 53b160b2aaa227ff78d7c4b162b8fad3c728486d Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Mon, 18 Dec 2023 14:47:45 -0800 Subject: [PATCH 109/137] Remove debugging ls statements --- .github/workflows/ci.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3b5a56ce..dfd9c76e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,9 +90,6 @@ jobs: # We can set this to an empty string, since we'll never make an API call. ANVIL_API_SERVICE_ACCOUNT_FILE: foo - - name: list files - run: ls -la .coverage.* - - name: Upload coverage data uses: actions/upload-artifact@v4 with: @@ -127,9 +124,6 @@ jobs: # We can set this to an empty string, since we'll never make an API call. ANVIL_API_SERVICE_ACCOUNT_FILE: foo - - name: list files - run: ls -la .coverage.* - - name: Upload coverage data uses: actions/upload-artifact@v4 with: @@ -160,15 +154,10 @@ jobs: with: path: ./artifacts/ - - name: List downloaded files - run: ls -Ral ./artifacts - - name: Merge coverage files run: | - ls -Rla ./artifacts mv ./artifacts/coverage-data*/.coverage* . ls -la .coverage* - ls -Rla ./artifacts - name: Combine coverage data run: | From 3481645105d601696299b8ea430a5f12e9682f90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:06:22 +0000 Subject: [PATCH 110/137] Bump prompt-toolkit from 3.0.41 to 3.0.43 Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.41 to 3.0.43. - [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases) - [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG) - [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/compare/3.0.41...3.0.43) --- updated-dependencies: - dependency-name: prompt-toolkit dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 3f9c7042..fb764bfe 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -139,7 +139,7 @@ platformdirs==3.11.0 # virtualenv pre-commit==3.5.0 # via -r requirements/dev-requirements.in -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via ipython ptyprocess==0.7.0 # via pexpect From 24da6303794ee1bd9aa89c497ed68854f5d33b01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:08:59 +0000 Subject: [PATCH 111/137] Bump google-auth from 2.14.1 to 2.25.2 Bumps [google-auth](https://github.com/googleapis/google-auth-library-python) from 2.14.1 to 2.25.2. - [Release notes](https://github.com/googleapis/google-auth-library-python/releases) - [Changelog](https://github.com/googleapis/google-auth-library-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/google-auth-library-python/compare/v2.14.1...v2.25.2) --- updated-dependencies: - dependency-name: google-auth dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 737a3a4d..d1e0d8ae 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -93,7 +93,7 @@ fastobo==0.12.2 # via pronto fontawesomefree==6.2.1 # via django-anvil-consortium-manager -google-auth==2.14.1 +google-auth==2.25.2 # via django-anvil-consortium-manager idna==3.3 # via requests @@ -183,7 +183,6 @@ rsa==4.9 six==1.16.0 # via # django-autocomplete-light - # google-auth # python-dateutil sqlparse==0.4.4 # via From 4d62bc502d967f8a6348f161c8a907862280e081 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 19 Dec 2023 11:30:42 -0800 Subject: [PATCH 112/137] Add an admin group by default to CDSA groups Add a setting indicating the name of the PRIMED_CC_ADMINS group (by default PRIMED_CC_ADMINS in prod). When creating CDSA groups automatically in the app, add this group to those groups as an admin. --- config/settings/base.py | 1 - config/settings/local.py | 3 + config/settings/production.py | 2 + config/settings/test.py | 1 + primed/cdsa/tests/test_views.py | 350 ++++++++++++++++++++++++++++++-- primed/cdsa/views.py | 31 ++- 6 files changed, 372 insertions(+), 16 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index 4821ea98..7299a4e9 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -386,4 +386,3 @@ # Specify the subject for AnVIL account verification emails. ANVIL_ACCOUNT_LINK_EMAIL_SUBJECT = "Verify your AnVIL account email" ANVIL_ACCOUNT_VERIFY_NOTIFICATION_EMAIL = "primedconsortium@uw.edu" -ANVIL_CDSA_GROUP_NAME = "PRIMED_CDSA" diff --git a/config/settings/local.py b/config/settings/local.py index b6b17daa..789b1f6d 100644 --- a/config/settings/local.py +++ b/config/settings/local.py @@ -77,3 +77,6 @@ "ANVIL_DATA_ACCESS_GROUP_PREFIX", default="DEV_PRIMED" ) ANVIL_CDSA_GROUP_NAME = env("ANVIL_CDSA_GROUP_NAME", default="DEV_PRIMED_CDSA") +ANVIL_CC_ADMINS_GROUP_NAME = env( + "ANVIL_CC_ADMINS_GROUP_NAME", default="DEV_PRIMED_CC_ADMINS" +) diff --git a/config/settings/production.py b/config/settings/production.py index 3fd30c10..311aa3e8 100644 --- a/config/settings/production.py +++ b/config/settings/production.py @@ -168,3 +168,5 @@ # ANVIL_DBGAP_APPLICATION_GROUP_PREFIX = "PRIMED_DBGAP_ACCESS" # ANVIL_CDSA_GROUP_PREFIX = "PRIMED_CDSA_ACCESS" ANVIL_DATA_ACCESS_GROUP_PREFIX = "PRIMED" +ANVIL_CC_ADMINS_GROUP_NAME = "PRIMED_CC_ADMINS" +ANVIL_CDSA_GROUP_NAME = "PRIMED_CDSA" diff --git a/config/settings/test.py b/config/settings/test.py index 4e47bddf..190e71d7 100644 --- a/config/settings/test.py +++ b/config/settings/test.py @@ -30,6 +30,7 @@ ANVIL_API_SERVICE_ACCOUNT_FILE = "foo" ANVIL_DATA_ACCESS_GROUP_PREFIX = "TEST_PRIMED" ANVIL_CDSA_GROUP_NAME = "TEST_PRIMED_CDSA" +ANVIL_CC_ADMINS_GROUP_NAME = "TEST_PRIMED_CC_ADMINS" # template tests require debug to be set # get the last templates entry and set debug option diff --git a/primed/cdsa/tests/test_views.py b/primed/cdsa/tests/test_views.py index 86deb9d8..0c238552 100644 --- a/primed/cdsa/tests/test_views.py +++ b/primed/cdsa/tests/test_views.py @@ -5,6 +5,7 @@ import responses from anvil_consortium_manager.models import ( AnVILProjectManagerAccess, + GroupGroupMembership, ManagedGroup, Workspace, ) @@ -1383,6 +1384,8 @@ def setUp(self): codename=AnVILProjectManagerAccess.STAFF_EDIT_PERMISSION_CODENAME ) ) + # Create the admins group. + self.cc_admins_group = ManagedGroupFactory.create(name="TEST_PRIMED_CC_ADMINS") def get_url(self, *args): """Get the url for the view being tested.""" @@ -1462,6 +1465,13 @@ def test_can_create_object(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -1519,6 +1529,13 @@ def test_redirect_url(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -1553,6 +1570,13 @@ def test_success_message(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -2063,6 +2087,13 @@ def test_creates_anvil_access_group(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -2082,15 +2113,20 @@ def test_creates_anvil_access_group(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) + self.assertEqual(ManagedGroup.objects.count(), 2) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "TEST_PRIMED_CDSA_ACCESS_2345") self.assertTrue(new_group.is_managed_by_app) + # A group-group membership was created with PRIMED_CC_ADMINS as an admin of the access group. + new_membership = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, child_group=self.cc_admins_group + ) + self.assertEqual(new_membership.role, GroupGroupMembership.ADMIN) @override_settings(ANVIL_DATA_ACCESS_GROUP_PREFIX="foo") - def test_creates_anvil_groups_different_setting(self): + def test_creates_anvil_groups_different_setting_access_group_prefix(self): """View creates a managed group upon when form is valid.""" self.client.force_login(self.user) representative = UserFactory.create() @@ -2102,6 +2138,13 @@ def test_creates_anvil_groups_different_setting(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/foo_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -2121,13 +2164,60 @@ def test_creates_anvil_groups_different_setting(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) + self.assertEqual(ManagedGroup.objects.count(), 2) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "foo_CDSA_ACCESS_2345") self.assertTrue(new_group.is_managed_by_app) + @override_settings(ANVIL_CC_ADMINS_GROUP_NAME="foo") + def test_creates_anvil_groups_different_setting_cc_admins_group_name(self): + """View creates a managed group upon when form is valid.""" + admin_group = ManagedGroupFactory.create(name="foo", email="foo@firecloud.org") + self.client.force_login(self.user) + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + study_site = StudySiteFactory.create() + api_url = ( + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345" + ) + self.anvil_response_mock.add( + responses.POST, api_url, status=201, json={"message": "mock message"} + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/foo@firecloud.org", + status=204, + ) + response = self.client.post( + self.get_url(), + { + "cc_id": 2345, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-study_site": study_site.pk, + }, + ) + self.assertEqual(response.status_code, 302) + new_object = models.SignedAgreement.objects.latest("pk") + membership = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, + child_group=admin_group, + ) + self.assertEqual(membership.role, GroupGroupMembership.ADMIN) + def test_manage_group_create_api_error(self): """Nothing is created when the form is valid but there is an API error when creating the group.""" self.client.force_login(self.user) @@ -2171,7 +2261,7 @@ def test_manage_group_create_api_error(self): # No objects were created. self.assertEqual(models.SignedAgreement.objects.count(), 0) self.assertEqual(models.MemberAgreement.objects.count(), 0) - self.assertEqual(ManagedGroup.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admins group. def test_managed_group_already_exists_in_app(self): """No objects are created if the managed group already exists in the app.""" @@ -2450,6 +2540,8 @@ def setUp(self): codename=AnVILProjectManagerAccess.STAFF_EDIT_PERMISSION_CODENAME ) ) + # Create the admins group. + self.cc_admins_group = ManagedGroupFactory.create(name="TEST_PRIMED_CC_ADMINS") def get_url(self, *args): """Get the url for the view being tested.""" @@ -2535,6 +2627,19 @@ def test_can_create_object(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -2565,7 +2670,6 @@ def test_can_create_object(self): # Type was set correctly. self.assertEqual(new_agreement.type, new_agreement.DATA_AFFILIATE) # AnVIL group was set correctly. - self.assertEqual(ManagedGroup.objects.count(), 2) self.assertIsInstance(new_agreement.anvil_access_group, ManagedGroup) self.assertEqual( new_agreement.anvil_access_group.name, "TEST_PRIMED_CDSA_ACCESS_1234" @@ -2604,6 +2708,19 @@ def test_redirect_url(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -2645,6 +2762,19 @@ def test_success_message(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -3164,6 +3294,18 @@ def test_creates_anvil_groups(self): status=201, json={"message": "mock message"}, ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -3183,8 +3325,6 @@ def test_creates_anvil_groups(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - # An upload group and an access group - self.assertEqual(ManagedGroup.objects.count(), 2) # An access group was created. self.assertEqual( new_object.anvil_access_group.name, "TEST_PRIMED_CDSA_ACCESS_2345" @@ -3198,6 +3338,16 @@ def test_creates_anvil_groups(self): self.assertTrue( new_object.dataaffiliateagreement.anvil_upload_group.is_managed_by_app ) + # Group-group memberships was created with PRIMED_CC_ADMINS as an admin of the access/uploader group. + new_membership_1 = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, child_group=self.cc_admins_group + ) + self.assertEqual(new_membership_1.role, GroupGroupMembership.ADMIN) + new_membership_2 = GroupGroupMembership.objects.get( + parent_group=new_object.dataaffiliateagreement.anvil_upload_group, + child_group=self.cc_admins_group, + ) + self.assertEqual(new_membership_2.role, GroupGroupMembership.ADMIN) @override_settings(ANVIL_DATA_ACCESS_GROUP_PREFIX="foo") def test_creates_anvil_access_group_different_setting(self): @@ -3218,6 +3368,19 @@ def test_creates_anvil_access_group_different_setting(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/foo_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/foo_CDSA_UPLOAD_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -3237,7 +3400,7 @@ def test_creates_anvil_access_group_different_setting(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 2) + self.assertEqual(ManagedGroup.objects.count(), 3) # A new group was created. self.assertEqual(new_object.anvil_access_group.name, "foo_CDSA_ACCESS_2345") self.assertTrue(new_object.anvil_access_group.is_managed_by_app) @@ -3250,6 +3413,71 @@ def test_creates_anvil_access_group_different_setting(self): new_object.dataaffiliateagreement.anvil_upload_group.is_managed_by_app ) + @override_settings(ANVIL_CC_ADMINS_GROUP_NAME="foo") + def test_creates_anvil_groups_different_setting_cc_admins_group_name(self): + """View creates a managed group upon when form is valid.""" + admin_group = ManagedGroup.objects.create(name="foo", email="foo@firecloud.org") + self.client.force_login(self.user) + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + study = StudyFactory.create() + self.anvil_response_mock.add( + responses.POST, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345", + status=201, + json={"message": "mock message"}, + ) + self.anvil_response_mock.add( + responses.POST, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_2345", + status=201, + json={"message": "mock message"}, + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/foo@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_2345/admin/foo@firecloud.org", + status=204, + ) + response = self.client.post( + self.get_url(), + { + "cc_id": 2345, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-study": study.pk, + }, + ) + self.assertEqual(response.status_code, 302) + new_object = models.SignedAgreement.objects.latest("pk") + membership_1 = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, + child_group=admin_group, + ) + self.assertEqual(membership_1.role, GroupGroupMembership.ADMIN) + membership_2 = GroupGroupMembership.objects.get( + parent_group=new_object.dataaffiliateagreement.anvil_upload_group, + child_group=admin_group, + ) + self.assertEqual(membership_2.role, GroupGroupMembership.ADMIN) + def test_access_group_create_api_error(self): """Nothing is created when the form is valid but there is an API error when creating the group.""" self.client.force_login(self.user) @@ -3294,7 +3522,7 @@ def test_access_group_create_api_error(self): # No objects were created. self.assertEqual(models.SignedAgreement.objects.count(), 0) self.assertEqual(models.DataAffiliateAgreement.objects.count(), 0) - self.assertEqual(ManagedGroup.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admins group. def test_upload_group_create_api_error(self): """Nothing is created when the form is valid but there is an API error when creating the group.""" @@ -3310,6 +3538,13 @@ def test_upload_group_create_api_error(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) self.anvil_response_mock.add( responses.POST, self.api_client.sam_entry_point @@ -3347,7 +3582,7 @@ def test_upload_group_create_api_error(self): # No objects were created. self.assertEqual(models.SignedAgreement.objects.count(), 0) self.assertEqual(models.DataAffiliateAgreement.objects.count(), 0) - self.assertEqual(ManagedGroup.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admins group. def test_access_group_already_exists_in_app(self): """No objects are created if the managed group already exists in the app.""" @@ -3668,6 +3903,8 @@ def setUp(self): codename=AnVILProjectManagerAccess.STAFF_EDIT_PERMISSION_CODENAME ) ) + # Create the admins group. + self.cc_admins_group = ManagedGroupFactory.create(name="TEST_PRIMED_CC_ADMINS") def get_url(self, *args): """Get the url for the view being tested.""" @@ -3746,6 +3983,13 @@ def test_can_create_object(self): status=201, json={"message": "mock message"}, ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -3776,7 +4020,6 @@ def test_can_create_object(self): # Type was set correctly. self.assertEqual(new_agreement.type, new_agreement.NON_DATA_AFFILIATE) # AnVIL group was set correctly. - self.assertEqual(ManagedGroup.objects.count(), 1) self.assertIsInstance(new_agreement.anvil_access_group, ManagedGroup) self.assertEqual( new_agreement.anvil_access_group.name, "TEST_PRIMED_CDSA_ACCESS_1234" @@ -3803,6 +4046,13 @@ def test_redirect_url(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -3836,6 +4086,13 @@ def test_success_message(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -4335,6 +4592,13 @@ def test_creates_anvil_access_group(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -4354,12 +4618,17 @@ def test_creates_anvil_access_group(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) + self.assertEqual(ManagedGroup.objects.count(), 2) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "TEST_PRIMED_CDSA_ACCESS_2345") self.assertTrue(new_group.is_managed_by_app) + # A group-group membership was created with PRIMED_CC_ADMINS as an admin of the access group. + new_membership = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, child_group=self.cc_admins_group + ) + self.assertEqual(new_membership.role, GroupGroupMembership.ADMIN) @override_settings(ANVIL_DATA_ACCESS_GROUP_PREFIX="foo") def test_creates_anvil_groups_different_setting(self): @@ -4373,6 +4642,13 @@ def test_creates_anvil_groups_different_setting(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/foo_CDSA_ACCESS_2345/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), { @@ -4392,13 +4668,59 @@ def test_creates_anvil_groups_different_setting(self): ) self.assertEqual(response.status_code, 302) new_object = models.SignedAgreement.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) + self.assertEqual(ManagedGroup.objects.count(), 2) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "foo_CDSA_ACCESS_2345") self.assertTrue(new_group.is_managed_by_app) + @override_settings(ANVIL_CC_ADMINS_GROUP_NAME="foo") + def test_creates_anvil_groups_different_setting_cc_admins_group_name(self): + """View creates a managed group upon when form is valid.""" + admin_group = ManagedGroupFactory.create(name="foo", email="foo@firecloud.org") + self.client.force_login(self.user) + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + api_url = ( + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345" + ) + self.anvil_response_mock.add( + responses.POST, api_url, status=201, json={"message": "mock message"} + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345/admin/foo@firecloud.org", + status=204, + ) + response = self.client.post( + self.get_url(), + { + "cc_id": 2345, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-affiliation": "Foo Bar", + }, + ) + self.assertEqual(response.status_code, 302) + new_object = models.SignedAgreement.objects.latest("pk") + membership = GroupGroupMembership.objects.get( + parent_group=new_object.anvil_access_group, + child_group=admin_group, + ) + self.assertEqual(membership.role, GroupGroupMembership.ADMIN) + def test_manage_group_create_api_error(self): """Nothing is created when the form is valid but there is an API error when creating the group.""" self.client.force_login(self.user) @@ -4441,7 +4763,7 @@ def test_manage_group_create_api_error(self): # No objects were created. self.assertEqual(models.SignedAgreement.objects.count(), 0) self.assertEqual(models.NonDataAffiliateAgreement.objects.count(), 0) - self.assertEqual(ManagedGroup.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admins group. def test_managed_group_already_exists_in_app(self): """No objects are created if the managed group already exists in the app.""" diff --git a/primed/cdsa/views.py b/primed/cdsa/views.py index c48f5e75..b391b20c 100644 --- a/primed/cdsa/views.py +++ b/primed/cdsa/views.py @@ -6,7 +6,11 @@ AnVILConsortiumManagerStaffViewRequired, AnVILProjectManagerAccess, ) -from anvil_consortium_manager.models import GroupAccountMembership, ManagedGroup +from anvil_consortium_manager.models import ( + GroupAccountMembership, + GroupGroupMembership, + ManagedGroup, +) from django.conf import settings from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin @@ -238,6 +242,18 @@ def get_agreement(self, form, formset): # Make sure the group doesn't exist already. access_group.full_clean() access_group.save() + # Add the cc admins group as a member. + cc_admins_group = ManagedGroup.objects.get( + name=settings.ANVIL_CC_ADMINS_GROUP_NAME + ) + self.admin_access_membership = GroupGroupMembership( + parent_group=access_group, + child_group=cc_admins_group, + role=GroupGroupMembership.ADMIN, + ) + self.admin_access_membership.full_clean() + self.admin_access_membership.save() + # Now finally save the agreement. agreement = form.save(commit=False) agreement.anvil_access_group = access_group agreement.type = self.agreement_type_model.AGREEMENT_TYPE @@ -254,6 +270,7 @@ def anvil_create(self): """Create resources on ANVIL.""" # Create AnVIL groups. self.object.anvil_access_group.anvil_create() + self.admin_access_membership.anvil_create() def form_valid(self, form): formset = self.get_formset() @@ -330,6 +347,7 @@ def anvil_create(self): """Create resources on ANVIL.""" super().anvil_create() self.object.dataaffiliateagreement.anvil_upload_group.anvil_create() + self.admin_upload_membership.anvil_create() def get_agreement_type(self, form, formset): agreement_type = super().get_agreement_type(form, formset) @@ -344,6 +362,17 @@ def get_agreement_type(self, form, formset): # Make sure the group doesn't exist already. upload_group.full_clean() upload_group.save() + # Add the cc admins group as a member. + cc_admins_group = ManagedGroup.objects.get( + name=settings.ANVIL_CC_ADMINS_GROUP_NAME + ) + self.admin_upload_membership = GroupGroupMembership( + parent_group=upload_group, + child_group=cc_admins_group, + role=GroupGroupMembership.ADMIN, + ) + self.admin_upload_membership.full_clean() + self.admin_upload_membership.save() agreement_type.anvil_upload_group = upload_group return agreement_type From c9c9f0c6bfac15b165917bc9dc3085d138c7c0ef Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 19 Dec 2023 12:41:30 -0800 Subject: [PATCH 113/137] Automatically create admin membership for dbGaP access groups Like for the CDSA group, automatically create an admin membership for the dbGaP application access groups. --- primed/dbgap/tests/test_views.py | 125 ++++++++++++++++++++++++++++++- primed/dbgap/views.py | 25 ++++++- 2 files changed, 144 insertions(+), 6 deletions(-) diff --git a/primed/dbgap/tests/test_views.py b/primed/dbgap/tests/test_views.py index 3a98876f..295c8981 100644 --- a/primed/dbgap/tests/test_views.py +++ b/primed/dbgap/tests/test_views.py @@ -7,6 +7,7 @@ from anvil_consortium_manager import views as acm_views from anvil_consortium_manager.models import ( AnVILProjectManagerAccess, + GroupGroupMembership, ManagedGroup, Workspace, ) @@ -1587,6 +1588,8 @@ def setUp(self): codename=AnVILProjectManagerAccess.STAFF_EDIT_PERMISSION_CODENAME ) ) + # Create the admin group. + self.cc_admin_group = ManagedGroupFactory.create(name="TEST_PRIMED_CC_ADMINS") def get_url(self, *args): """Get the url for the view being tested.""" @@ -1662,6 +1665,13 @@ def test_can_create_object(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_DBGAP_ACCESS_1/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 1} ) @@ -1684,6 +1694,12 @@ def test_redirect_url(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 1} ) @@ -1702,6 +1718,12 @@ def test_success_message(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 1}, @@ -1817,20 +1839,33 @@ def test_creates_anvil_access_group(self): self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) response = self.client.post( self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 12498} ) self.assertEqual(response.status_code, 302) new_object = models.dbGaPApplication.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "TEST_PRIMED_DBGAP_ACCESS_12498") self.assertTrue(new_group.is_managed_by_app) + # Also creates the CC admins group membership + membership = GroupGroupMembership.objects.get( + parent_group=new_group, + child_group=self.cc_admin_group, + ) + self.assertEqual(membership.role, GroupGroupMembership.ADMIN) @override_settings(ANVIL_DATA_ACCESS_GROUP_PREFIX="foo") - def test_creates_anvil_access_group_different_setting(self): + def test_creates_anvil_access_group_different_setting_data_access_group_prefix( + self, + ): """View creates a managed group upon when form is valid.""" self.client.force_login(self.user) pi = UserFactory.create() @@ -1838,6 +1873,12 @@ def test_creates_anvil_access_group_different_setting(self): api_url = ( self.api_client.sam_entry_point + "/api/groups/v1/foo_DBGAP_ACCESS_12498" ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) self.anvil_response_mock.add( responses.POST, api_url, status=201, json={"message": "mock message"} ) @@ -1846,12 +1887,54 @@ def test_creates_anvil_access_group_different_setting(self): ) self.assertEqual(response.status_code, 302) new_object = models.dbGaPApplication.objects.latest("pk") - self.assertEqual(ManagedGroup.objects.count(), 1) # A new group was created. new_group = ManagedGroup.objects.latest("pk") self.assertEqual(new_object.anvil_access_group, new_group) self.assertEqual(new_group.name, "foo_DBGAP_ACCESS_12498") self.assertTrue(new_group.is_managed_by_app) + # Also creates the CC admins group membership + membership = GroupGroupMembership.objects.get( + parent_group=new_group, + child_group=self.cc_admin_group, + ) + self.assertEqual(membership.role, GroupGroupMembership.ADMIN) + + @override_settings(ANVIL_CC_ADMINS_GROUP_NAME="foo") + def test_creates_anvil_access_group_different_setting_cc_admin_group(self): + """View creates a managed group upon when form is valid.""" + admin_group = ManagedGroupFactory.create(name="foo", email="foo@firecloud.org") + self.client.force_login(self.user) + pi = UserFactory.create() + # API response to create the associated anvil_access_group. + api_url = ( + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_DBGAP_ACCESS_12498" + ) + self.anvil_response_mock.add( + responses.POST, api_url, status=201, json={"message": "mock message"} + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/foo@firecloud.org", + status=204, + ) + response = self.client.post( + self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 12498} + ) + self.assertEqual(response.status_code, 302) + new_object = models.dbGaPApplication.objects.latest("pk") + # A new group was created. + new_group = ManagedGroup.objects.latest("pk") + self.assertEqual(new_object.anvil_access_group, new_group) + self.assertEqual(new_group.name, "TEST_PRIMED_DBGAP_ACCESS_12498") + self.assertTrue(new_group.is_managed_by_app) + # Also creates the CC admins group membership + membership = GroupGroupMembership.objects.get( + parent_group=new_group, + child_group=admin_group, + ) + self.assertEqual(membership.role, GroupGroupMembership.ADMIN) def test_manage_group_create_api_error(self): """Nothing is created when the form is valid but there is an API error when creating the group.""" @@ -1878,7 +1961,7 @@ def test_manage_group_create_api_error(self): self.assertEqual("AnVIL API Error: other error", str(messages[0])) # No objects were created. self.assertEqual(models.dbGaPApplication.objects.count(), 0) - self.assertEqual(ManagedGroup.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admin group. def test_managed_group_already_exists_in_app(self): """No objects are created if the managed group already exists in the app.""" @@ -1902,6 +1985,40 @@ def test_managed_group_already_exists_in_app(self): # No dbGaPApplication was created. self.assertEqual(models.dbGaPApplication.objects.count(), 0) + def test_admin_group_membership_api_error(self): + """Nothing is created when the form is valid but there is an API error when creating admin group membership.""" + self.client.force_login(self.user) + pi = UserFactory.create() + # API response to create the associated anvil_access_group. + api_url = ( + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_DBGAP_ACCESS_1" + ) + self.anvil_response_mock.add( + responses.POST, api_url, status=201, json={"message": "other error"} + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=404, + json={"message": "other error"}, + ) + response = self.client.post( + self.get_url(), {"principal_investigator": pi.pk, "dbgap_project_id": 1} + ) + self.assertEqual(response.status_code, 200) + # The form is valid... + form = response.context["form"] + self.assertTrue(form.is_valid()) + # ...but there was some error from the API. + messages = list(response.context["messages"]) + self.assertEqual(len(messages), 1) + self.assertEqual("AnVIL API Error: other error", str(messages[0])) + # No objects were created. + self.assertEqual(models.dbGaPApplication.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admin group. + class dbGaPDataAccessSnapshotCreateTest(dbGaPResponseTestMixin, TestCase): """Tests for the dbGaPDataAccessRequestCreateFromJson view.""" diff --git a/primed/dbgap/views.py b/primed/dbgap/views.py index 082f7a7b..be06d329 100644 --- a/primed/dbgap/views.py +++ b/primed/dbgap/views.py @@ -8,6 +8,7 @@ ) from anvil_consortium_manager.models import ( AnVILProjectManagerAccess, + GroupGroupMembership, ManagedGroup, Workspace, ) @@ -205,7 +206,6 @@ class dbGaPApplicationCreate( anvil_access_group_pattern = "PRIMED_DBGAP_ACCESS_{project_id}" ERROR_CREATING_GROUP = "Error creating Managed Group in app." - # @transaction.atomic def form_valid(self, form): """Create a managed group in the app on AnVIL and link it to this application.""" project_id = form.cleaned_data["dbgap_project_id"] @@ -229,7 +229,28 @@ def form_valid(self, form): self.request, messages.ERROR, "AnVIL API Error: " + str(e) ) return self.render_to_response(self.get_context_data(form=form)) - managed_group.save() + # Need to wrap this entire block in a transaction because we are creating multiple objects, and don't want + # any of them to be saved if the API call fails. + try: + with transaction.atomic(): + managed_group.save() + # Create the dbgap access group. + cc_admins_group = ManagedGroup.objects.get( + name=settings.ANVIL_CC_ADMINS_GROUP_NAME + ) + membership = GroupGroupMembership.objects.create( + parent_group=managed_group, + child_group=cc_admins_group, + role=GroupGroupMembership.ADMIN, + ) + membership.full_clean() + membership.anvil_create() + membership.save() + except AnVILAPIError as e: + messages.add_message( + self.request, messages.ERROR, "AnVIL API Error: " + str(e) + ) + return self.render_to_response(self.get_context_data(form=form)) form.instance.anvil_access_group = managed_group return super().form_valid(form) From 1244bef835ef93851392dcb65aad74d6458d5205 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Tue, 19 Dec 2023 12:59:20 -0800 Subject: [PATCH 114/137] Add test for API error handling Add tests that check behavior when creating CDSA group-admin memberships. --- primed/cdsa/tests/test_views.py | 183 ++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/primed/cdsa/tests/test_views.py b/primed/cdsa/tests/test_views.py index 0c238552..3fb7b4fe 100644 --- a/primed/cdsa/tests/test_views.py +++ b/primed/cdsa/tests/test_views.py @@ -2301,6 +2301,57 @@ def test_managed_group_already_exists_in_app(self): # No dbGaPApplication was created. self.assertEqual(models.SignedAgreement.objects.count(), 0) + def test_admin_group_membership_api_error(self): + """Nothing is created when the form is valid but there is an API error when creating admin group membership.""" + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + study_site = StudySiteFactory.create() + api_url = ( + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_2345" + ) + self.anvil_response_mock.add( + responses.POST, api_url, status=201, json={"message": "mock message"} + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + api_url + "/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=400, + json={"message": "other error"}, + ) + self.client.force_login(self.user) + response = self.client.post( + self.get_url(), + { + "cc_id": 2345, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-study_site": study_site.pk, + }, + ) + self.assertEqual(response.status_code, 200) + # The form is valid... + form = response.context["form"] + self.assertTrue(form.is_valid()) + formset = response.context["formset"] + self.assertTrue(formset.is_valid()) + # ...but there was some error from the API. + messages = list(response.context["messages"]) + self.assertEqual(len(messages), 1) + self.assertEqual("AnVIL API Error: other error", str(messages[0])) + # No objects were created. + self.assertEqual(models.MemberAgreement.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admin group. + class MemberAgreementDetailTest(TestCase): """Tests for the MemberAgreementDetail view.""" @@ -3658,6 +3709,138 @@ def test_upload_group_already_exists_in_app(self): ) self.assertEqual(models.SignedAgreement.objects.count(), 0) + def test_admin_group_membership_access_api_error(self): + """Nothing is created when the form is valid but there is an API error when creating admin group membership.""" + self.client.force_login(self.user) + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + study = StudyFactory.create() + # API response to create the associated anvil_access_group. + self.anvil_response_mock.add( + responses.POST, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234", + status=201, + json={"message": "mock message"}, + ) + # self.anvil_response_mock.add( + # responses.POST, + # self.api_client.sam_entry_point + # + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234", + # status=201, + # json={"message": "mock message"}, + # ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=400, + ) + # self.anvil_response_mock.add( + # responses.PUT, + # self.api_client.sam_entry_point + # + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + # status=204, + # ) + self.client.force_login(self.user) + response = self.client.post( + self.get_url(), + { + "cc_id": 1234, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-study": study.pk, + }, + ) + self.assertEqual(response.status_code, 200) + # The form is valid... + form = response.context["form"] + self.assertTrue(form.is_valid()) + formset = response.context["formset"] + self.assertTrue(formset.is_valid()) + # ...but there was some error from the API. + messages = list(response.context["messages"]) + self.assertEqual(len(messages), 1) + self.assertEqual("AnVIL API Error: other error", str(messages[0])) + # No objects were created. + self.assertEqual(models.DataAffiliateAgreement.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admin group. + + def test_admin_group_membership_upload_api_error(self): + """Nothing is created when the form is valid but there is an API error when creating admin group membership.""" + self.client.force_login(self.user) + representative = UserFactory.create() + agreement_version = factories.AgreementVersionFactory.create() + study = StudyFactory.create() + # API response to create the associated anvil_access_group. + self.anvil_response_mock.add( + responses.POST, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234", + status=201, + json={"message": "mock message"}, + ) + self.anvil_response_mock.add( + responses.POST, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234", + status=201, + json={"message": "mock message"}, + ) + # CC admins group membership. + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_ACCESS_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=204, + ) + self.anvil_response_mock.add( + responses.PUT, + self.api_client.sam_entry_point + + "/api/groups/v1/TEST_PRIMED_CDSA_UPLOAD_1234/admin/TEST_PRIMED_CC_ADMINS@firecloud.org", + status=404, + ) + self.client.force_login(self.user) + response = self.client.post( + self.get_url(), + { + "cc_id": 1234, + "representative": representative.pk, + "representative_role": "Test role", + "signing_institution": "Test institution", + "version": agreement_version.pk, + "date_signed": "2023-01-01", + "is_primary": True, + "agreementtype-TOTAL_FORMS": 1, + "agreementtype-INITIAL_FORMS": 0, + "agreementtype-MIN_NUM_FORMS": 1, + "agreementtype-MAX_NUM_FORMS": 1, + "agreementtype-0-study": study.pk, + }, + ) + self.assertEqual(response.status_code, 200) + # The form is valid... + form = response.context["form"] + self.assertTrue(form.is_valid()) + formset = response.context["formset"] + self.assertTrue(formset.is_valid()) + # ...but there was some error from the API. + messages = list(response.context["messages"]) + self.assertEqual(len(messages), 1) + self.assertEqual("AnVIL API Error: other error", str(messages[0])) + # No objects were created. + self.assertEqual(models.DataAffiliateAgreement.objects.count(), 0) + self.assertEqual(ManagedGroup.objects.count(), 1) # Just the admin group. + class DataAffiliateAgreementDetailTest(TestCase): """Tests for the DataAffiliateAgreement view.""" From b39039145614cb33c0157bbfeecc185d44500298 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 03:08:55 +0000 Subject: [PATCH 115/137] Bump cryptography from 41.0.6 to 41.0.7 Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.6 to 41.0.7. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.6...41.0.7) --- updated-dependencies: - dependency-name: cryptography dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 0f6123ca..a1148d3a 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -38,7 +38,7 @@ crispy-bootstrap5==2023.10 # via # -r requirements/requirements.in # django-anvil-consortium-manager -cryptography==41.0.6 +cryptography==41.0.7 # via pyjwt defusedxml==0.7.1 # via python3-openid From e641d7d87a7315e56a1e886ebdab3c3c8c0c4146 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 03:13:06 +0000 Subject: [PATCH 116/137] Bump pluggy from 1.0.0 to 1.3.0 Bumps [pluggy](https://github.com/pytest-dev/pluggy) from 1.0.0 to 1.3.0. - [Changelog](https://github.com/pytest-dev/pluggy/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pluggy/compare/1.0.0...1.3.0) --- updated-dependencies: - dependency-name: pluggy dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index c3f0f7a6..d970eb50 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -39,7 +39,7 @@ packaging==21.3 # -c requirements/requirements.txt # pytest # pytest-sugar -pluggy==1.0.0 +pluggy==1.3.0 # via pytest pyparsing==3.0.9 # via From d7e29ffd13e9b4d9df4f43897ffdb6cd4b7b0865 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 03:15:44 +0000 Subject: [PATCH 117/137] Bump pathspec from 0.11.2 to 0.12.1 Bumps [pathspec](https://github.com/cpburnz/python-pathspec) from 0.11.2 to 0.12.1. - [Release notes](https://github.com/cpburnz/python-pathspec/releases) - [Changelog](https://github.com/cpburnz/python-pathspec/blob/master/CHANGES.rst) - [Commits](https://github.com/cpburnz/python-pathspec/compare/v0.11.2...v0.12.1) --- updated-dependencies: - dependency-name: pathspec dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 4d99322b..cda1c074 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -126,7 +126,7 @@ packaging==21.3 # sphinx parso==0.8.3 # via jedi -pathspec==0.11.2 +pathspec==0.12.1 # via black pexpect==4.8.0 # via ipython From 8f48bfe057d44d3a224bcd9b0db1a4eec49d607d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 03:17:13 +0000 Subject: [PATCH 118/137] Bump wheel from 0.41.3 to 0.42.0 Bumps [wheel](https://github.com/pypa/wheel) from 0.41.3 to 0.42.0. - [Release notes](https://github.com/pypa/wheel/releases) - [Changelog](https://github.com/pypa/wheel/blob/main/docs/news.rst) - [Commits](https://github.com/pypa/wheel/compare/0.41.3...0.42.0) --- updated-dependencies: - dependency-name: wheel dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 0f6123ca..dd0a6835 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -205,7 +205,7 @@ urllib3==2.1.0 # via # -r requirements/requirements.in # requests -wheel==0.41.3 +wheel==0.42.0 # via pip-tools whitenoise==6.6.0 # via -r requirements/requirements.in From 53f52163932af1e218790f3c4b43b0c35a858015 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 03:21:03 +0000 Subject: [PATCH 119/137] Bump fontawesomefree from 6.2.1 to 6.5.1 Bumps [fontawesomefree](https://github.com/FortAwesome/Font-Awesome) from 6.2.1 to 6.5.1. - [Release notes](https://github.com/FortAwesome/Font-Awesome/releases) - [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.2.1...6.5.1) --- updated-dependencies: - dependency-name: fontawesomefree dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 0f6123ca..4b847783 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -91,7 +91,7 @@ django-tree-queries==0.16.1 # via -r requirements/requirements.in fastobo==0.12.2 # via pronto -fontawesomefree==6.2.1 +fontawesomefree==6.5.1 # via django-anvil-consortium-manager google-auth==2.25.2 # via django-anvil-consortium-manager From 571c60c70d6e346ddc7a44e702bc8328ffde78f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 31 Dec 2023 03:33:31 +0000 Subject: [PATCH 120/137] Bump jsonschema-specifications from 2023.11.1 to 2023.12.1 Bumps [jsonschema-specifications](https://github.com/python-jsonschema/jsonschema-specifications) from 2023.11.1 to 2023.12.1. - [Release notes](https://github.com/python-jsonschema/jsonschema-specifications/releases) - [Commits](https://github.com/python-jsonschema/jsonschema-specifications/compare/v2023.11.1...v2023.12.1) --- updated-dependencies: - dependency-name: jsonschema-specifications dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 0f6123ca..bab646db 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -105,7 +105,7 @@ importlib-resources==5.10.0 # jsonschema-specifications jsonschema==4.20.0 # via -r requirements/requirements.in -jsonschema-specifications==2023.11.1 +jsonschema-specifications==2023.12.1 # via jsonschema mysqlclient==2.2.1 # via -r requirements/requirements.in From 49f91be6f2f4c0792c09ce4a33ff2e6f471d3888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 21:52:20 +0000 Subject: [PATCH 121/137] Bump jinja2 from 3.1.2 to 3.1.3 in /requirements Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.2...3.1.3) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 86 +++++++++++++++---------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 4d99322b..785e0645 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -8,7 +8,7 @@ alabaster==0.7.13 # via sphinx asgiref==3.7.2 # via - # -c requirements/requirements.txt + # -c requirements.txt # django astroid==3.0.1 # via pylint @@ -20,25 +20,25 @@ backcall==0.2.0 # via ipython backports-zoneinfo==0.2.1 # via - # -c requirements/requirements.txt + # -c requirements.txt # django black==22.12.0 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in certifi==2023.11.17 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # requests cfgv==3.4.0 # via pre-commit charset-normalizer==2.0.12 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # requests click==8.1.3 # via - # -c requirements/requirements.txt + # -c requirements.txt # black colorama==0.4.6 # via sphinx-autobuild @@ -52,14 +52,14 @@ distlib==0.3.7 # via virtualenv django==4.2.8 # via - # -c requirements/requirements.txt + # -c requirements.txt # django-debug-toolbar # django-stubs # django-stubs-ext django-debug-toolbar==4.2.0 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in django-stubs==4.2.7 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in django-stubs-ext==4.2.7 # via django-stubs docutils==0.20.1 @@ -70,25 +70,25 @@ filelock==3.13.1 # via virtualenv flake8==6.1.0 # via - # -r requirements/dev-requirements.in + # -r dev-requirements.in # flake8-isort flake8-isort==6.1.1 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in identify==2.5.31 # via pre-commit idna==3.3 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # requests imagesize==1.4.1 # via sphinx importlib-metadata==7.0.0 # via - # -c requirements/requirements.txt + # -c requirements.txt # sphinx ipdb==0.13.13 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in ipython==8.12.3 # via ipdb isort==5.12.0 @@ -97,7 +97,7 @@ isort==5.12.0 # pylint jedi==0.19.1 # via ipython -jinja2==3.1.2 +jinja2==3.1.3 # via sphinx livereload==2.6.3 # via sphinx-autobuild @@ -112,7 +112,7 @@ mccabe==0.7.0 # flake8 # pylint mypy==1.7.1 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in mypy-extensions==1.0.0 # via # black @@ -121,8 +121,8 @@ nodeenv==1.8.0 # via pre-commit packaging==21.3 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # sphinx parso==0.8.3 # via jedi @@ -138,7 +138,7 @@ platformdirs==3.11.0 # pylint # virtualenv pre-commit==3.5.0 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in prompt-toolkit==3.0.43 # via ipython ptyprocess==0.7.0 @@ -158,41 +158,41 @@ pylint==3.0.2 # pylint-django # pylint-plugin-utils pylint-django==2.5.5 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in pylint-plugin-utils==0.8.2 # via pylint-django pyparsing==3.0.9 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # packaging pytz==2023.3.post1 # via - # -c requirements/requirements.txt + # -c requirements.txt # babel pyyaml==6.0.1 # via - # -c requirements/test-requirements.txt + # -c test-requirements.txt # pre-commit requests==2.31.0 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # sphinx six==1.16.0 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # asttokens # livereload snowballstemmer==2.2.0 # via sphinx sphinx==7.1.2 # via - # -r requirements/dev-requirements.in + # -r dev-requirements.in # sphinx-autobuild sphinx-autobuild==2021.3.14 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx sphinxcontrib-devhelp==1.0.2 @@ -207,15 +207,15 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx sqlparse==0.4.4 # via - # -c requirements/requirements.txt + # -c requirements.txt # django # django-debug-toolbar stack-data==0.6.3 # via ipython tomli==2.0.1 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # black # django-stubs # ipdb @@ -234,11 +234,11 @@ types-pytz==2023.3.1.1 types-pyyaml==6.0.12.12 # via django-stubs types-requests==2.31.0.10 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in typing-extensions==4.8.0 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # asgiref # astroid # black @@ -249,8 +249,8 @@ typing-extensions==4.8.0 # pylint urllib3==2.1.0 # via - # -c requirements/requirements.txt - # -c requirements/test-requirements.txt + # -c requirements.txt + # -c test-requirements.txt # requests # types-requests virtualenv==20.24.6 @@ -258,10 +258,10 @@ virtualenv==20.24.6 wcwidth==0.2.10 # via prompt-toolkit werkzeug==3.0.1 - # via -r requirements/dev-requirements.in + # via -r dev-requirements.in zipp==3.17.0 # via - # -c requirements/requirements.txt + # -c requirements.txt # importlib-metadata # The following packages are considered to be unsafe in a requirements file: From 59d7527e7e0f483d97fede1b6d62de0d796ba95e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 00:46:45 +0000 Subject: [PATCH 122/137] Bump mypy from 1.7.1 to 1.8.0 Bumps [mypy](https://github.com/python/mypy) from 1.7.1 to 1.8.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.1...v1.8.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 86 +++++++++++++++---------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 785e0645..70ff34bb 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -8,7 +8,7 @@ alabaster==0.7.13 # via sphinx asgiref==3.7.2 # via - # -c requirements.txt + # -c requirements/requirements.txt # django astroid==3.0.1 # via pylint @@ -20,25 +20,25 @@ backcall==0.2.0 # via ipython backports-zoneinfo==0.2.1 # via - # -c requirements.txt + # -c requirements/requirements.txt # django black==22.12.0 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in certifi==2023.11.17 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # requests cfgv==3.4.0 # via pre-commit charset-normalizer==2.0.12 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # requests click==8.1.3 # via - # -c requirements.txt + # -c requirements/requirements.txt # black colorama==0.4.6 # via sphinx-autobuild @@ -52,14 +52,14 @@ distlib==0.3.7 # via virtualenv django==4.2.8 # via - # -c requirements.txt + # -c requirements/requirements.txt # django-debug-toolbar # django-stubs # django-stubs-ext django-debug-toolbar==4.2.0 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in django-stubs==4.2.7 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in django-stubs-ext==4.2.7 # via django-stubs docutils==0.20.1 @@ -70,25 +70,25 @@ filelock==3.13.1 # via virtualenv flake8==6.1.0 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # flake8-isort flake8-isort==6.1.1 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in identify==2.5.31 # via pre-commit idna==3.3 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # requests imagesize==1.4.1 # via sphinx importlib-metadata==7.0.0 # via - # -c requirements.txt + # -c requirements/requirements.txt # sphinx ipdb==0.13.13 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in ipython==8.12.3 # via ipdb isort==5.12.0 @@ -111,8 +111,8 @@ mccabe==0.7.0 # via # flake8 # pylint -mypy==1.7.1 - # via -r dev-requirements.in +mypy==1.8.0 + # via -r requirements/dev-requirements.in mypy-extensions==1.0.0 # via # black @@ -121,8 +121,8 @@ nodeenv==1.8.0 # via pre-commit packaging==21.3 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # sphinx parso==0.8.3 # via jedi @@ -138,7 +138,7 @@ platformdirs==3.11.0 # pylint # virtualenv pre-commit==3.5.0 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in prompt-toolkit==3.0.43 # via ipython ptyprocess==0.7.0 @@ -158,41 +158,41 @@ pylint==3.0.2 # pylint-django # pylint-plugin-utils pylint-django==2.5.5 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pylint-plugin-utils==0.8.2 # via pylint-django pyparsing==3.0.9 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # packaging pytz==2023.3.post1 # via - # -c requirements.txt + # -c requirements/requirements.txt # babel pyyaml==6.0.1 # via - # -c test-requirements.txt + # -c requirements/test-requirements.txt # pre-commit requests==2.31.0 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # sphinx six==1.16.0 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # asttokens # livereload snowballstemmer==2.2.0 # via sphinx sphinx==7.1.2 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # sphinx-autobuild sphinx-autobuild==2021.3.14 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx sphinxcontrib-devhelp==1.0.2 @@ -207,15 +207,15 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx sqlparse==0.4.4 # via - # -c requirements.txt + # -c requirements/requirements.txt # django # django-debug-toolbar stack-data==0.6.3 # via ipython tomli==2.0.1 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # black # django-stubs # ipdb @@ -234,11 +234,11 @@ types-pytz==2023.3.1.1 types-pyyaml==6.0.12.12 # via django-stubs types-requests==2.31.0.10 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in typing-extensions==4.8.0 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # asgiref # astroid # black @@ -249,8 +249,8 @@ typing-extensions==4.8.0 # pylint urllib3==2.1.0 # via - # -c requirements.txt - # -c test-requirements.txt + # -c requirements/requirements.txt + # -c requirements/test-requirements.txt # requests # types-requests virtualenv==20.24.6 @@ -258,10 +258,10 @@ virtualenv==20.24.6 wcwidth==0.2.10 # via prompt-toolkit werkzeug==3.0.1 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in zipp==3.17.0 # via - # -c requirements.txt + # -c requirements/requirements.txt # importlib-metadata # The following packages are considered to be unsafe in a requirements file: From 80de4c95e49f0d5e35bf31b6bd44ec30b2102119 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 00:54:08 +0000 Subject: [PATCH 123/137] Bump pylint from 3.0.2 to 3.0.3 Bumps [pylint](https://github.com/pylint-dev/pylint) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.0.2...v3.0.3) --- updated-dependencies: - dependency-name: pylint dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 2044ad9f..bcc2fac7 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -153,7 +153,7 @@ pygments==2.16.1 # via # ipython # sphinx -pylint==3.0.2 +pylint==3.0.3 # via # pylint-django # pylint-plugin-utils From 91ff7236b81510e4fc95ad05b10488492121843d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 00:55:10 +0000 Subject: [PATCH 124/137] Bump pexpect from 4.8.0 to 4.9.0 Bumps [pexpect](https://github.com/pexpect/pexpect) from 4.8.0 to 4.9.0. - [Release notes](https://github.com/pexpect/pexpect/releases) - [Changelog](https://github.com/pexpect/pexpect/blob/master/doc/history.rst) - [Commits](https://github.com/pexpect/pexpect/compare/4.8.0...4.9) --- updated-dependencies: - dependency-name: pexpect dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 2044ad9f..fb5a4d83 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -128,7 +128,7 @@ parso==0.8.3 # via jedi pathspec==0.12.1 # via black -pexpect==4.8.0 +pexpect==4.9.0 # via ipython pickleshare==0.7.5 # via ipython From 13e31d78fbec6179696e972f1ceefdbcbcd741d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 03:40:21 +0000 Subject: [PATCH 125/137] Bump freezegun from 1.3.1 to 1.4.0 Bumps [freezegun](https://github.com/spulec/freezegun) from 1.3.1 to 1.4.0. - [Release notes](https://github.com/spulec/freezegun/releases) - [Changelog](https://github.com/spulec/freezegun/blob/master/CHANGELOG) - [Commits](https://github.com/spulec/freezegun/compare/1.3.1...1.4.0) --- updated-dependencies: - dependency-name: freezegun dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index d970eb50..4c2a2931 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -26,7 +26,7 @@ factory-boy==3.3.0 # via -r requirements/test-requirements.in faker==13.15.1 # via factory-boy -freezegun==1.3.1 +freezegun==1.4.0 # via -r requirements/test-requirements.in idna==3.3 # via From 26b0b00c7a83bdb6e25627bf286170aa02312286 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 03:44:50 +0000 Subject: [PATCH 126/137] Bump faker from 13.15.1 to 22.2.0 Bumps [faker](https://github.com/joke2k/faker) from 13.15.1 to 22.2.0. - [Release notes](https://github.com/joke2k/faker/releases) - [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/joke2k/faker/compare/v13.15.1...v22.2.0) --- updated-dependencies: - dependency-name: faker dependency-type: indirect update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/test-requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index d970eb50..34bfde5c 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -24,7 +24,7 @@ exceptiongroup==1.0.4 # via pytest factory-boy==3.3.0 # via -r requirements/test-requirements.in -faker==13.15.1 +faker==22.2.0 # via factory-boy freezegun==1.3.1 # via -r requirements/test-requirements.in @@ -81,6 +81,7 @@ typing-extensions==4.8.0 # via # -c requirements/requirements.txt # django-test-migrations + # faker urllib3==2.1.0 # via # -c requirements/requirements.txt From 890f04e80607081ae164449176293584c7e50b9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 03:50:02 +0000 Subject: [PATCH 127/137] Bump chardet from 5.1.0 to 5.2.0 Bumps [chardet](https://github.com/chardet/chardet) from 5.1.0 to 5.2.0. - [Release notes](https://github.com/chardet/chardet/releases) - [Commits](https://github.com/chardet/chardet/compare/5.1.0...5.2.0) --- updated-dependencies: - dependency-name: chardet dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 4f72976e..5a45556f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -28,7 +28,7 @@ cffi==1.16.0 # via # argon2-cffi-bindings # cryptography -chardet==5.1.0 +chardet==5.2.0 # via pronto charset-normalizer==2.0.12 # via requests From 940e961e0eec98ceec92ca70315780ece1cf8618 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 04:02:53 +0000 Subject: [PATCH 128/137] Bump pyasn1-modules from 0.2.8 to 0.3.0 Bumps [pyasn1-modules](https://github.com/pyasn1/pyasn1-modules) from 0.2.8 to 0.3.0. - [Release notes](https://github.com/pyasn1/pyasn1-modules/releases) - [Changelog](https://github.com/pyasn1/pyasn1-modules/blob/main/CHANGES.txt) - [Commits](https://github.com/pyasn1/pyasn1-modules/compare/v0.2.8...v0.3.0) --- updated-dependencies: - dependency-name: pyasn1-modules dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 4f72976e..4bc307d8 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -137,7 +137,7 @@ pyasn1==0.4.8 # via # pyasn1-modules # rsa -pyasn1-modules==0.2.8 +pyasn1-modules==0.3.0 # via google-auth pycparser==2.21 # via cffi From d4277fa3db6012ed31ea68faa239caaa3eebf02f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 04:04:21 +0000 Subject: [PATCH 129/137] Bump virtualenv from 20.24.6 to 20.25.0 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.24.6 to 20.25.0. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.24.6...20.25.0) --- updated-dependencies: - dependency-name: virtualenv dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6049598e..fad8ab4d 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -253,7 +253,7 @@ urllib3==2.1.0 # -c requirements/test-requirements.txt # requests # types-requests -virtualenv==20.24.6 +virtualenv==20.25.0 # via pre-commit wcwidth==0.2.10 # via prompt-toolkit From 01127fbbe8872091e667a4ea93d24877d1582543 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 04:07:11 +0000 Subject: [PATCH 130/137] Bump importlib-resources from 5.10.0 to 6.1.1 Bumps [importlib-resources](https://github.com/python/importlib_resources) from 5.10.0 to 6.1.1. - [Release notes](https://github.com/python/importlib_resources/releases) - [Changelog](https://github.com/python/importlib_resources/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_resources/compare/v5.10.0...v6.1.1) --- updated-dependencies: - dependency-name: importlib-resources dependency-type: indirect update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 4f72976e..7a611f91 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -99,7 +99,7 @@ idna==3.3 # via requests importlib-metadata==7.0.0 # via build -importlib-resources==5.10.0 +importlib-resources==6.1.1 # via # jsonschema # jsonschema-specifications From cd08849f369cd351bef3b1ecc59162ed3dac3967 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jan 2024 04:11:46 +0000 Subject: [PATCH 131/137] Bump identify from 2.5.31 to 2.5.33 Bumps [identify](https://github.com/pre-commit/identify) from 2.5.31 to 2.5.33. - [Commits](https://github.com/pre-commit/identify/compare/v2.5.31...v2.5.33) --- updated-dependencies: - dependency-name: identify dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6049598e..854b8b1a 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -74,7 +74,7 @@ flake8==6.1.0 # flake8-isort flake8-isort==6.1.1 # via -r requirements/dev-requirements.in -identify==2.5.31 +identify==2.5.33 # via pre-commit idna==3.3 # via From 5ee7f291afae4b427253765e01c1a6d24f2b9ec6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:42:07 +0000 Subject: [PATCH 132/137] Bump flake8 from 6.1.0 to 7.0.0 Bumps [flake8](https://github.com/pycqa/flake8) from 6.1.0 to 7.0.0. - [Commits](https://github.com/pycqa/flake8/compare/6.1.0...7.0.0) --- updated-dependencies: - dependency-name: flake8 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 854b8b1a..01724d5d 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -68,7 +68,7 @@ executing==2.0.1 # via stack-data filelock==3.13.1 # via virtualenv -flake8==6.1.0 +flake8==7.0.0 # via # -r requirements/dev-requirements.in # flake8-isort @@ -147,7 +147,7 @@ pure-eval==0.2.2 # via stack-data pycodestyle==2.11.1 # via flake8 -pyflakes==3.1.0 +pyflakes==3.2.0 # via flake8 pygments==2.16.1 # via From 4396a9a49e56c6086978fdafad51d8533220dc43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:11:18 +0000 Subject: [PATCH 133/137] Bump types-requests from 2.31.0.10 to 2.31.0.20240106 Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.10 to 2.31.0.20240106. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-requests dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements/dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index ac6d5300..fed48bb0 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -233,7 +233,7 @@ types-pytz==2023.3.1.1 # via django-stubs types-pyyaml==6.0.12.12 # via django-stubs -types-requests==2.31.0.10 +types-requests==2.31.0.20240106 # via -r requirements/dev-requirements.in typing-extensions==4.8.0 # via From 948b3fd5ab37d9d8b83e383b928a657e41e96f5c Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Thu, 18 Jan 2024 15:51:15 -0800 Subject: [PATCH 134/137] Add new REPLACED status for SignedAgreements This status indicates CDSAs that were replaced by newer agreements. We do not maintain a link to the CDSA that it is replacing in django; that is handled in outside pre-tracking. --- ...011_signedagreement_add_replaced_status.py | 46 +++++++++++++++++++ primed/cdsa/models.py | 3 ++ primed/cdsa/tests/test_models.py | 20 ++------ 3 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 primed/cdsa/migrations/0011_signedagreement_add_replaced_status.py diff --git a/primed/cdsa/migrations/0011_signedagreement_add_replaced_status.py b/primed/cdsa/migrations/0011_signedagreement_add_replaced_status.py new file mode 100644 index 00000000..f1c1bb06 --- /dev/null +++ b/primed/cdsa/migrations/0011_signedagreement_add_replaced_status.py @@ -0,0 +1,46 @@ +# Generated by Django 4.2.8 on 2024-01-18 23:49 + +from django.db import migrations +import model_utils.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ("cdsa", "0010_alter_historicalsignedagreement_status_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="historicalsignedagreement", + name="status", + field=model_utils.fields.StatusField( + choices=[ + ("active", "Active"), + ("withdrawn", "Withdrawn"), + ("lapsed", "Lapsed"), + ("replaced", "Replaced"), + ], + default="active", + max_length=100, + no_check_for_status=True, + verbose_name="status", + ), + ), + migrations.AlterField( + model_name="signedagreement", + name="status", + field=model_utils.fields.StatusField( + choices=[ + ("active", "Active"), + ("withdrawn", "Withdrawn"), + ("lapsed", "Lapsed"), + ("replaced", "Replaced"), + ], + default="active", + max_length=100, + no_check_for_status=True, + verbose_name="status", + ), + ), + ] diff --git a/primed/cdsa/models.py b/primed/cdsa/models.py index 5dd8a053..a055eef8 100644 --- a/primed/cdsa/models.py +++ b/primed/cdsa/models.py @@ -108,6 +108,9 @@ class StatusChoices(models.TextChoices): LAPSED = "lapsed", "Lapsed" """SignedAgreements from a AgreementMajorVersion that is no longer valid.""" + REPLACED = "replaced", "Replaced" + """SignedAgreements that have been replaced by a newer version.""" + STATUS = StatusChoices.choices diff --git a/primed/cdsa/tests/test_models.py b/primed/cdsa/tests/test_models.py index 1165c684..f39ba093 100644 --- a/primed/cdsa/tests/test_models.py +++ b/primed/cdsa/tests/test_models.py @@ -209,21 +209,6 @@ def test_get_absolute_url(self): instance.signed_agreement.get_absolute_url(), instance.get_absolute_url() ) - def test_statuses(self): - """All allowed statuses.""" - instance = factories.SignedAgreementFactory.create( - status=models.SignedAgreement.StatusChoices.ACTIVE - ) - instance.full_clean() - instance = factories.SignedAgreementFactory.create( - status=models.SignedAgreement.StatusChoices.WITHDRAWN - ) - instance.full_clean() - instance = factories.SignedAgreementFactory.create( - status=models.SignedAgreement.StatusChoices.LAPSED - ) - instance.full_clean() - def test_member_choices(self): """Can create instances with all of the member choices.""" instance = factories.SignedAgreementFactory.create( @@ -319,6 +304,11 @@ def test_status_field(self): ) self.assertEqual(instance.status, instance.StatusChoices.LAPSED) instance.full_clean() + instance = factories.SignedAgreementFactory.create( + status=models.SignedAgreement.StatusChoices.REPLACED + ) + self.assertEqual(instance.status, instance.StatusChoices.REPLACED) + instance.full_clean() # not allowed instance = factories.SignedAgreementFactory.create(status="foo") From f0e44844954087ccc7a360b2c830442008167aee Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Thu, 18 Jan 2024 16:14:01 -0800 Subject: [PATCH 135/137] Update view tests for new REPLACED status --- primed/cdsa/tests/test_views.py | 29 ++++++++++ primed/collaborative_analysis/urls.py | 21 ++++++++ .../collaborativeanalysisworkspace_audit.html | 53 +++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 primed/collaborative_analysis/urls.py create mode 100644 primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html diff --git a/primed/cdsa/tests/test_views.py b/primed/cdsa/tests/test_views.py index 3fb7b4fe..2302edb8 100644 --- a/primed/cdsa/tests/test_views.py +++ b/primed/cdsa/tests/test_views.py @@ -548,6 +548,10 @@ def test_only_sets_active_signed_agreements_to_lapsed(self): version__major_version=instance, status=models.SignedAgreement.StatusChoices.LAPSED, ) + replaced_agreement = factories.SignedAgreementFactory.create( + version__major_version=instance, + status=models.SignedAgreement.StatusChoices.REPLACED, + ) self.client.force_login(self.user) response = self.client.post(self.get_url(instance.version), {}) self.assertEqual(response.status_code, 302) @@ -559,6 +563,10 @@ def test_only_sets_active_signed_agreements_to_lapsed(self): self.assertEqual( withdrawn_agreement.status, models.SignedAgreement.StatusChoices.WITHDRAWN ) + replaced_agreement.refresh_from_db() + self.assertEqual( + replaced_agreement.status, models.SignedAgreement.StatusChoices.REPLACED + ) def test_only_sets_associated_signed_agreements_to_lapsed(self): """Does not set SignedAgreements associated with a different version to LAPSED.""" @@ -5293,6 +5301,9 @@ def test_only_includes_active_agreements(self): withdrawn_agreement = factories.MemberAgreementFactory.create( signed_agreement__status=models.SignedAgreement.StatusChoices.WITHDRAWN ) + replaced_agreement = factories.MemberAgreementFactory.create( + signed_agreement__status=models.SignedAgreement.StatusChoices.REPLACED + ) self.client.force_login(self.user) response = self.client.get(self.get_url()) self.assertIn("table", response.context_data) @@ -5301,6 +5312,7 @@ def test_only_includes_active_agreements(self): self.assertIn(active_agreement.signed_agreement, table.data) self.assertNotIn(lapsed_agreement.signed_agreement, table.data) self.assertNotIn(withdrawn_agreement.signed_agreement, table.data) + self.assertNotIn(replaced_agreement.signed_agreement, table.data) class SignedAgreementAuditTest(TestCase): @@ -5758,6 +5770,9 @@ def test_only_includes_active_agreements(self): withdrawn_agreement = factories.DataAffiliateAgreementFactory.create( signed_agreement__status=models.SignedAgreement.StatusChoices.WITHDRAWN ) + replaced_agreement = factories.DataAffiliateAgreementFactory.create( + signed_agreement__status=models.SignedAgreement.StatusChoices.REPLACED + ) self.client.force_login(self.user) response = self.client.get(self.get_url()) self.assertIn("table", response.context_data) @@ -5766,6 +5781,7 @@ def test_only_includes_active_agreements(self): self.assertIn(active_agreement, table.data) self.assertNotIn(lapsed_agreement, table.data) self.assertNotIn(withdrawn_agreement, table.data) + self.assertNotIn(replaced_agreement, table.data) class UserAccessRecordsList(TestCase): @@ -5943,6 +5959,12 @@ def test_only_includes_active_agreements(self): withdrawn_member = GroupAccountMembershipFactory.create( group=withdrawn_agreement.signed_agreement.anvil_access_group ) + replaced_agreement = factories.MemberAgreementFactory.create( + signed_agreement__status=models.SignedAgreement.StatusChoices.REPLACED + ) + replaced_member = GroupAccountMembershipFactory.create( + group=replaced_agreement.signed_agreement.anvil_access_group + ) self.client.force_login(self.user) response = self.client.get(self.get_url()) self.assertIn("table", response.context_data) @@ -5951,6 +5973,7 @@ def test_only_includes_active_agreements(self): self.assertIn(active_member, table.data) self.assertNotIn(lapsed_member, table.data) self.assertNotIn(withdrawn_member, table.data) + self.assertNotIn(replaced_member, table.data) class CDSAWorkspaceRecordsList(TestCase): @@ -6021,6 +6044,11 @@ def test_only_includes_workspaces_with_active_agreements(self): study=withdrawn_workspace.study, signed_agreement__status=models.SignedAgreement.StatusChoices.WITHDRAWN, ) + replaced_workspace = factories.CDSAWorkspaceFactory.create() + factories.DataAffiliateAgreementFactory.create( + study=replaced_workspace.study, + signed_agreement__status=models.SignedAgreement.StatusChoices.REPLACED, + ) self.client.force_login(self.user) response = self.client.get(self.get_url()) self.assertIn("table", response.context_data) @@ -6029,6 +6057,7 @@ def test_only_includes_workspaces_with_active_agreements(self): self.assertIn(active_workspace, table.data) self.assertNotIn(lapsed_workspace, table.data) self.assertNotIn(withdrawn_workspace, table.data) + self.assertNotIn(replaced_workspace, table.data) class CDSAWorkspaceDetailTest(TestCase): diff --git a/primed/collaborative_analysis/urls.py b/primed/collaborative_analysis/urls.py new file mode 100644 index 00000000..31735ff0 --- /dev/null +++ b/primed/collaborative_analysis/urls.py @@ -0,0 +1,21 @@ +from django.urls import include, path + +from . import views + +app_name = "collaborative_analysis" + + +collaborative_analysis_workspace_patterns = ( + [ + path( + "//audit/", + views.WorkspaceAudit.as_view(), + name="audit", + ), + ], + "workspaces", +) + +urlpatterns = [ + path("workspaces/", include(collaborative_analysis_workspace_patterns)), +] diff --git a/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html b/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html new file mode 100644 index 00000000..394609db --- /dev/null +++ b/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html @@ -0,0 +1,53 @@ +{% extends "anvil_consortium_manager/base.html" %} + +{% block title %}dbGaP workspace audit{% endblock %} + + +{% block content %} + +

    Collaborative analysis workspace audit

    + +
    + +
    + +

    Audit results

    + +
    +

    + To have access to a Collaborative Analysis Workspace, an account must meet both of the following criteria: + +

      +
    • Be in the analyst group associated with the workspace
    • +
    • Be in the auth domain for all source workspaces
    • +
    +

    +

    The audit result categories are explained below. +

      + +
    • Verified includes the following:
    • +
        +
      • An account in the analyst group is in the auth domain for this workspace and is in all auth domains for all source workspaces.
      • +
      • An account in the analyst group is not in the auth domain for this workspace and is not in all auth domains for all source workspaces.
      • +
      + +
    • Needs action includes the following:
    • +
        +
      • An account in the analyst group is not in the auth domain for this workspace and is in all auth domains for all source workspaces.
      • +
      • An account in the analyst group is in the auth domain for this workspace and is not in all auth domains for all source workspaces.
      • +
      + +
    • Errors
    • +
        +
      • A group is unexpectedly in the auth domain.
      • +
      +
    +

    +

    Any errors should be reported!

    +
    + +{% include "__audit_tables.html" with verified_table=verified_table needs_action_table=needs_action_table errors_table=errors_table %} + +{% endblock content %} From a938b2691995057d803fea64368b28a22c1ed1df Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 19 Jan 2024 15:51:04 -0800 Subject: [PATCH 136/137] Add no cover to specific docstring lines These lines are not code, just documentation of a variable, so they shouldn't count against our coverage metric. --- primed/cdsa/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/primed/cdsa/models.py b/primed/cdsa/models.py index a055eef8..a2b1e0dc 100644 --- a/primed/cdsa/models.py +++ b/primed/cdsa/models.py @@ -99,17 +99,17 @@ class SignedAgreementStatusMixin: class StatusChoices(models.TextChoices): ACTIVE = "active", "Active" - """SignedAgreements that are currently active.""" + """SignedAgreements that are currently active.""" # pragma: no cover WITHDRAWN = "withdrawn", "Withdrawn" """SignedAgreements that have been withdrawn for some reason (e.g., PI changed institution, study no longer wanted to participate.)""" LAPSED = "lapsed", "Lapsed" - """SignedAgreements from a AgreementMajorVersion that is no longer valid.""" + """SignedAgreements from a AgreementMajorVersion that is no longer valid.""" # pragma: no cover REPLACED = "replaced", "Replaced" - """SignedAgreements that have been replaced by a newer version.""" + """SignedAgreements that have been replaced by a newer version.""" # pragma: no cover STATUS = StatusChoices.choices From 6b8d3efde0daf87109cda030e491e8a830e60871 Mon Sep 17 00:00:00 2001 From: Adrienne Stilp Date: Fri, 19 Jan 2024 16:15:22 -0800 Subject: [PATCH 137/137] Remove accidentally committed files --- primed/collaborative_analysis/urls.py | 21 -------- .../collaborativeanalysisworkspace_audit.html | 53 ------------------- 2 files changed, 74 deletions(-) delete mode 100644 primed/collaborative_analysis/urls.py delete mode 100644 primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html diff --git a/primed/collaborative_analysis/urls.py b/primed/collaborative_analysis/urls.py deleted file mode 100644 index 31735ff0..00000000 --- a/primed/collaborative_analysis/urls.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.urls import include, path - -from . import views - -app_name = "collaborative_analysis" - - -collaborative_analysis_workspace_patterns = ( - [ - path( - "//audit/", - views.WorkspaceAudit.as_view(), - name="audit", - ), - ], - "workspaces", -) - -urlpatterns = [ - path("workspaces/", include(collaborative_analysis_workspace_patterns)), -] diff --git a/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html b/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html deleted file mode 100644 index 394609db..00000000 --- a/primed/templates/collaborative_analysis/collaborativeanalysisworkspace_audit.html +++ /dev/null @@ -1,53 +0,0 @@ -{% extends "anvil_consortium_manager/base.html" %} - -{% block title %}dbGaP workspace audit{% endblock %} - - -{% block content %} - -

    Collaborative analysis workspace audit

    - -
    - -
    - -

    Audit results

    - -
    -

    - To have access to a Collaborative Analysis Workspace, an account must meet both of the following criteria: - -

      -
    • Be in the analyst group associated with the workspace
    • -
    • Be in the auth domain for all source workspaces
    • -
    -

    -

    The audit result categories are explained below. -

      - -
    • Verified includes the following:
    • -
        -
      • An account in the analyst group is in the auth domain for this workspace and is in all auth domains for all source workspaces.
      • -
      • An account in the analyst group is not in the auth domain for this workspace and is not in all auth domains for all source workspaces.
      • -
      - -
    • Needs action includes the following:
    • -
        -
      • An account in the analyst group is not in the auth domain for this workspace and is in all auth domains for all source workspaces.
      • -
      • An account in the analyst group is in the auth domain for this workspace and is not in all auth domains for all source workspaces.
      • -
      - -
    • Errors
    • -
        -
      • A group is unexpectedly in the auth domain.
      • -
      -
    -

    -

    Any errors should be reported!

    -
    - -{% include "__audit_tables.html" with verified_table=verified_table needs_action_table=needs_action_table errors_table=errors_table %} - -{% endblock content %}