diff --git a/designsafe/LoginTest.py b/designsafe/LoginTest.py index 1d754efe0..05f648a31 100644 --- a/designsafe/LoginTest.py +++ b/designsafe/LoginTest.py @@ -1,7 +1,7 @@ #python manage.py test designsafe.LoginTest --settings=designsafe.settings.test_settings from django.test import TestCase, RequestFactory from django.contrib.auth import get_user_model -from django.core.urlresolvers import reverse +from django.urls import reverse import mock from designsafe.apps.auth.models import AgaveOAuthToken from designsafe.apps.auth.tasks import check_or_create_agave_home_dir diff --git a/designsafe/apps/accounts/forms.py b/designsafe/apps/accounts/forms.py index d2f81cb6f..85feca7a7 100644 --- a/designsafe/apps/accounts/forms.py +++ b/designsafe/apps/accounts/forms.py @@ -2,7 +2,7 @@ import logging from django import forms from django.contrib.auth import get_user_model -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe from django.utils.html import escape diff --git a/designsafe/apps/accounts/migrations/0001_initial.py b/designsafe/apps/accounts/migrations/0001_initial.py index 78ba51bd4..ba2fabb33 100644 --- a/designsafe/apps/accounts/migrations/0001_initial.py +++ b/designsafe/apps/accounts/migrations/0001_initial.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('ethnicity', models.CharField(max_length=255)), ('gender', models.CharField(max_length=255)), - ('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/accounts/migrations/0002_notificationpreferences.py b/designsafe/apps/accounts/migrations/0002_notificationpreferences.py index 1323ef6e5..34ee98590 100644 --- a/designsafe/apps/accounts/migrations/0002_notificationpreferences.py +++ b/designsafe/apps/accounts/migrations/0002_notificationpreferences.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('announcements', models.BooleanField(default=True, help_text='Receive occasional announcements from DesignSafe')), - ('user', models.OneToOneField(related_name='notification_preferences', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='notification_preferences', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/accounts/models.py b/designsafe/apps/accounts/models.py index edae4a6dc..aedc88990 100644 --- a/designsafe/apps/accounts/models.py +++ b/designsafe/apps/accounts/models.py @@ -61,7 +61,7 @@ def __str__(self): class DesignSafeProfile(models.Model): - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE) ethnicity = models.CharField(max_length=255) gender = models.CharField(max_length=255) agree_to_account_limit = models.DateTimeField(auto_now_add=True, null=True) @@ -69,7 +69,7 @@ class DesignSafeProfile(models.Model): website = models.CharField(max_length=256, default=None, null=True, blank=True) orcid_id = models.CharField(max_length=256, default=None, null=True, blank=True) nh_interests = models.ManyToManyField(DesignSafeProfileNHInterests) - nh_interests_primary = models.ForeignKey(DesignSafeProfileNHInterests, related_name='nh_interests_primary', null=True) + nh_interests_primary = models.ForeignKey(DesignSafeProfileNHInterests, related_name='nh_interests_primary', null=True, on_delete=models.CASCADE) nh_technical_domains = models.ManyToManyField(DesignSafeProfileNHTechnicalDomains) professional_level = models.CharField(max_length=256, default=None, null=True) research_activities = models.ManyToManyField(DesignSafeProfileResearchActivities) @@ -86,7 +86,7 @@ def send_mail(self, subject, body=None): class NotificationPreferences(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, - related_name='notification_preferences') + related_name='notification_preferences', on_delete=models.CASCADE) announcements = models.BooleanField( default=True, verbose_name=_('Announcements: to communicate EF Workshops, NHERI Newsletter, Student Opportunities, etc.')) diff --git a/designsafe/apps/accounts/tests.py b/designsafe/apps/accounts/tests.py index f529c87f8..be9084fee 100644 --- a/designsafe/apps/accounts/tests.py +++ b/designsafe/apps/accounts/tests.py @@ -1,7 +1,7 @@ from django.test import TestCase from django.contrib.auth import get_user_model, signals from django.contrib.auth.models import Permission -from django.core.urlresolvers import reverse +from django.urls import reverse from unittest import skip from mock import patch import pytest diff --git a/designsafe/apps/accounts/urls.py b/designsafe/apps/accounts/urls.py index 79ccab49b..70e0caf3a 100644 --- a/designsafe/apps/accounts/urls.py +++ b/designsafe/apps/accounts/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.accounts import views diff --git a/designsafe/apps/accounts/views.py b/designsafe/apps/accounts/views.py index 6da9e5606..2385c8ff0 100644 --- a/designsafe/apps/accounts/views.py +++ b/designsafe/apps/accounts/views.py @@ -3,10 +3,9 @@ from django.contrib.auth import get_user_model, logout from django.contrib.auth.decorators import login_required, permission_required from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render_to_response from django.utils.translation import ugettext_lazy as _ from designsafe.apps.accounts import forms, integrations from designsafe.apps.accounts.models import (NEESUser, DesignSafeProfile, diff --git a/designsafe/apps/api/datafiles/handlers.py b/designsafe/apps/api/datafiles/handlers.py index 921174df3..31a98a8c0 100644 --- a/designsafe/apps/api/datafiles/handlers.py +++ b/designsafe/apps/api/datafiles/handlers.py @@ -7,7 +7,7 @@ from designsafe.apps.api.datafiles.operations import shared_operations from designsafe.apps.api.exceptions import ApiException from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import reverse +from django.urls import reverse logger = logging.getLogger(__name__) diff --git a/designsafe/apps/api/decorators.py b/designsafe/apps/api/decorators.py index f0db5df71..8681b5b45 100644 --- a/designsafe/apps/api/decorators.py +++ b/designsafe/apps/api/decorators.py @@ -4,7 +4,6 @@ import logging from functools import wraps from base64 import b64decode -from django.utils.six import text_type from django.conf import settings from django.contrib.auth import get_user_model from django.contrib.auth import login @@ -52,7 +51,7 @@ def _get_jwt_payload(request): :rtype: str """ payload = request.META.get(settings.AGAVE_JWT_HEADER) - if payload and isinstance(payload, text_type): + if payload and isinstance(payload, str): # Header encoding (see RFC5987) payload = payload.encode('iso-8859-1') diff --git a/designsafe/apps/api/notifications/tests.py b/designsafe/apps/api/notifications/tests.py index 2a01bf638..cf93dfc8f 100644 --- a/designsafe/apps/api/notifications/tests.py +++ b/designsafe/apps/api/notifications/tests.py @@ -10,7 +10,7 @@ from urllib.parse import urlencode from unittest import skip from django.dispatch import receiver -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.api.notifications.models import Notification from .receivers import send_notification_ws diff --git a/designsafe/apps/api/notifications/views/api.py b/designsafe/apps/api/notifications/views/api.py index 2e96abc9a..85546e0bf 100644 --- a/designsafe/apps/api/notifications/views/api.py +++ b/designsafe/apps/api/notifications/views/api.py @@ -1,7 +1,7 @@ import logging from django.http.response import HttpResponseBadRequest from django.http import HttpResponse -from django.core.urlresolvers import reverse +from django.urls import reverse from django.shortcuts import render from designsafe.apps.api.notifications.models import Notification diff --git a/designsafe/apps/api/notifications/views/webhooks.py b/designsafe/apps/api/notifications/views/webhooks.py index 65fe8142d..3dd947075 100644 --- a/designsafe/apps/api/notifications/views/webhooks.py +++ b/designsafe/apps/api/notifications/views/webhooks.py @@ -1,7 +1,7 @@ from django.http.response import HttpResponseBadRequest from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth import get_user_model -from django.core.urlresolvers import reverse +from django.urls import reverse from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator from django.shortcuts import render diff --git a/designsafe/apps/api/projects/tests.py b/designsafe/apps/api/projects/tests.py index 9895ffc94..c2c63069e 100644 --- a/designsafe/apps/api/projects/tests.py +++ b/designsafe/apps/api/projects/tests.py @@ -1,5 +1,7 @@ from designsafe.apps.api.projects.fixtures import exp_instance_meta, exp_instance_resp, exp_entity_meta, exp_entity_json +import pytest +@pytest.mark.django_db def test_project_instance_get(client, mock_agave_client, authenticated_user): mock_agave_client.meta.getMetadata.return_value = exp_instance_meta resp = client.get('/api/projects/1052668239654088215-242ac119-0001-012/') @@ -7,6 +9,7 @@ def test_project_instance_get(client, mock_agave_client, authenticated_user): expected = exp_instance_resp assert actual == expected +@pytest.mark.django_db def test_project_meta_all(client, mock_agave_client, authenticated_user): mock_agave_client.meta.getMetadata.return_value = exp_instance_meta mock_agave_client.meta.listMetadata.return_value = exp_entity_meta diff --git a/designsafe/apps/api/projects/views.py b/designsafe/apps/api/projects/views.py index a2827eda5..8ace83d5e 100644 --- a/designsafe/apps/api/projects/views.py +++ b/designsafe/apps/api/projects/views.py @@ -3,7 +3,7 @@ import logging import json from celery import group, chain -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings from django.http.response import HttpResponseForbidden from django.http import JsonResponse, HttpResponseBadRequest diff --git a/designsafe/apps/api/search/tests.py b/designsafe/apps/api/search/tests.py index 06a41e669..44062c47a 100644 --- a/designsafe/apps/api/search/tests.py +++ b/designsafe/apps/api/search/tests.py @@ -2,7 +2,7 @@ from django.test import TestCase from django.contrib.auth import get_user_model from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.api.search.views import SearchView import json diff --git a/designsafe/apps/api/tasks.py b/designsafe/apps/api/tasks.py index 7df8fa2bc..1a3064956 100644 --- a/designsafe/apps/api/tasks.py +++ b/designsafe/apps/api/tasks.py @@ -7,7 +7,7 @@ import urllib.request, urllib.parse, urllib.error from datetime import datetime from celery import shared_task -from django.core.urlresolvers import reverse +from django.urls import reverse from django.contrib.auth import get_user_model from pytas.models import User as TASUser from django.conf import settings diff --git a/designsafe/apps/api/urls.py b/designsafe/apps/api/urls.py index 64e5a7a54..409a8ecd8 100644 --- a/designsafe/apps/api/urls.py +++ b/designsafe/apps/api/urls.py @@ -4,7 +4,7 @@ from django.http import JsonResponse urlpatterns = [ - url(r'^projects/', include('designsafe.apps.api.projects.urls', + url(r'^projects/', include(('designsafe.apps.api.projects.urls', 'designsafe.apps.api.projects'), namespace='ds_projects_api')), url(r'^datafiles/', include('designsafe.apps.api.datafiles.urls')), @@ -13,6 +13,6 @@ url(r'^logger/$', LoggerApi.as_view(), name='logger'), url(r'^notifications/', include('designsafe.apps.api.notifications.urls')), url(r'^users/', include('designsafe.apps.api.users.urls')), - url(r'^search/', include('designsafe.apps.api.search.urls', namespace="ds_search_api")), + url(r'^search/', include(('designsafe.apps.api.search.urls', 'designsafe.apps.api.search'), namespace="ds_search_api")), url(r'^licenses/', include('designsafe.apps.api.licenses.urls')) ] diff --git a/designsafe/apps/applications/urls.py b/designsafe/apps/applications/urls.py index 4e69a3616..0d41a3d12 100644 --- a/designsafe/apps/applications/urls.py +++ b/designsafe/apps/applications/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.applications import views diff --git a/designsafe/apps/applications/views.py b/designsafe/apps/applications/views.py index fad5a2c4b..c82237bf6 100644 --- a/designsafe/apps/applications/views.py +++ b/designsafe/apps/applications/views.py @@ -47,7 +47,7 @@ def call_api(request, service): :param request: http request from angular service :returns: JSON response for agave call """ - if request.user.is_authenticated(): + if request.user.is_authenticated: try: token = request.user.agave_oauth agave = Agave(api_server=settings.AGAVE_TENANT_BASEURL, diff --git a/designsafe/apps/auth/middleware.py b/designsafe/apps/auth/middleware.py index 8310a70eb..acfc8174a 100644 --- a/designsafe/apps/auth/middleware.py +++ b/designsafe/apps/auth/middleware.py @@ -2,11 +2,12 @@ from django.core.exceptions import ObjectDoesNotExist from requests.exceptions import RequestException, HTTPError import logging +from django.utils.deprecation import MiddlewareMixin logger = logging.getLogger(__name__) -class AgaveTokenRefreshMiddleware(object): +class AgaveTokenRefreshMiddleware(MiddlewareMixin): def process_request(self, request): if request.path != '/logout/' and request.user.is_authenticated: diff --git a/designsafe/apps/auth/migrations/0001_initial.py b/designsafe/apps/auth/migrations/0001_initial.py index 505d5f075..0742af39a 100644 --- a/designsafe/apps/auth/migrations/0001_initial.py +++ b/designsafe/apps/auth/migrations/0001_initial.py @@ -20,7 +20,7 @@ class Migration(migrations.Migration): ('refresh_token', models.CharField(max_length=255)), ('expires_in', models.BigIntegerField()), ('created', models.BigIntegerField()), - ('user', models.OneToOneField(related_name='agave_oauth', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='agave_oauth', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/auth/models.py b/designsafe/apps/auth/models.py index 3aa45b0dc..9f57bc9fb 100644 --- a/designsafe/apps/auth/models.py +++ b/designsafe/apps/auth/models.py @@ -18,7 +18,7 @@ AGAVE_RESOURCES = agave.load_resource(getattr(settings, 'AGAVE_TENANT_BASEURL')) class AgaveOAuthToken(models.Model): - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='agave_oauth') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='agave_oauth', on_delete=models.CASCADE) token_type = models.CharField(max_length=255) scope = models.CharField(max_length=255) access_token = models.CharField(max_length=255) diff --git a/designsafe/apps/auth/urls.py b/designsafe/apps/auth/urls.py index 9c34a2c06..c36604c5c 100644 --- a/designsafe/apps/auth/urls.py +++ b/designsafe/apps/auth/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.auth import views diff --git a/designsafe/apps/auth/views.py b/designsafe/apps/auth/views.py index 8785de42c..92e0813d5 100644 --- a/designsafe/apps/auth/views.py +++ b/designsafe/apps/auth/views.py @@ -1,7 +1,7 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import authenticate, login -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponseRedirect, HttpResponseBadRequest from django.shortcuts import render diff --git a/designsafe/apps/box_integration/integrations.py b/designsafe/apps/box_integration/integrations.py index eae3e5dc3..1875a3dbc 100644 --- a/designsafe/apps/box_integration/integrations.py +++ b/designsafe/apps/box_integration/integrations.py @@ -1,4 +1,4 @@ -from django.core.urlresolvers import reverse +from django.urls import reverse def provide_integrations(): diff --git a/designsafe/apps/box_integration/migrations/0001_initial.py b/designsafe/apps/box_integration/migrations/0001_initial.py index 2dc618d2a..841e835f1 100644 --- a/designsafe/apps/box_integration/migrations/0001_initial.py +++ b/designsafe/apps/box_integration/migrations/0001_initial.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('access_token', models.CharField(max_length=255)), ('refresh_token', models.CharField(max_length=255)), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/box_integration/migrations/0003_auto_20160328_2215.py b/designsafe/apps/box_integration/migrations/0003_auto_20160328_2215.py index bb4de9771..01f4963c6 100644 --- a/designsafe/apps/box_integration/migrations/0003_auto_20160328_2215.py +++ b/designsafe/apps/box_integration/migrations/0003_auto_20160328_2215.py @@ -16,6 +16,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='boxusertoken', name='user', - field=models.OneToOneField(related_name='box_user_token', to=settings.AUTH_USER_MODEL), + field=models.OneToOneField(related_name='box_user_token', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE), ), ] diff --git a/designsafe/apps/box_integration/models.py b/designsafe/apps/box_integration/models.py index e56461d18..4b4d2360b 100644 --- a/designsafe/apps/box_integration/models.py +++ b/designsafe/apps/box_integration/models.py @@ -8,7 +8,7 @@ class BoxUserToken(models.Model): """ Represents an OAuth Token for a Box.com user """ - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='box_user_token') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='box_user_token', on_delete=models.CASCADE) box_user_id = models.CharField(max_length=48) access_token = models.CharField(max_length=255) refresh_token = models.CharField(max_length=255) diff --git a/designsafe/apps/box_integration/tests/test_views.py b/designsafe/apps/box_integration/tests/test_views.py index 15ebaaa08..eac35a7de 100644 --- a/designsafe/apps/box_integration/tests/test_views.py +++ b/designsafe/apps/box_integration/tests/test_views.py @@ -1,6 +1,6 @@ from django.test import TestCase from django.contrib.auth import get_user_model, signals -from django.core.urlresolvers import reverse +from django.urls import reverse from boxsdk.object.user import User from designsafe.apps.box_integration.models import BoxUserToken from designsafe.apps.auth.signals import on_user_logged_in diff --git a/designsafe/apps/box_integration/views.py b/designsafe/apps/box_integration/views.py index 0a1478687..259257bda 100644 --- a/designsafe/apps/box_integration/views.py +++ b/designsafe/apps/box_integration/views.py @@ -3,7 +3,7 @@ from django.conf import settings from django.contrib.auth.decorators import login_required from django.contrib import messages -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import (HttpResponseRedirect, HttpResponseBadRequest) from django.shortcuts import render from designsafe.apps.box_integration.models import BoxUserToken diff --git a/designsafe/apps/cms_plugins/migrations/0001_initial.py b/designsafe/apps/cms_plugins/migrations/0001_initial.py index 8d59904f1..eee22a75d 100644 --- a/designsafe/apps/cms_plugins/migrations/0001_initial.py +++ b/designsafe/apps/cms_plugins/migrations/0001_initial.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ResponsiveEmbedPlugin', fields=[ - ('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE)), ('url', models.CharField(max_length=255)), ('aspect', models.CharField(max_length=255, choices=[(b'16by9', b'16by9'), (b'4by3', b'4by3'), (b'podcast', b'podcast')])), ], diff --git a/designsafe/apps/dashboard/tests.py b/designsafe/apps/dashboard/tests.py index 91dbf5a14..8bfab4afd 100644 --- a/designsafe/apps/dashboard/tests.py +++ b/designsafe/apps/dashboard/tests.py @@ -5,7 +5,7 @@ from django.test import TestCase from django.contrib.auth import get_user_model, signals from django.contrib.auth.models import Permission -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.data.models.elasticsearch import IndexedFile logger = logging.getLogger(__name__) diff --git a/designsafe/apps/dashboard/urls.py b/designsafe/apps/dashboard/urls.py index 27d0521d5..e60aaf92c 100644 --- a/designsafe/apps/dashboard/urls.py +++ b/designsafe/apps/dashboard/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.dashboard import views diff --git a/designsafe/apps/data/management/commands/tests.py b/designsafe/apps/data/management/commands/tests.py index 4b4d7cfeb..69e37b5a0 100644 --- a/designsafe/apps/data/management/commands/tests.py +++ b/designsafe/apps/data/management/commands/tests.py @@ -23,6 +23,7 @@ def setUp(self): @patch('designsafe.apps.data.management.commands.swap_reindex.Command.handle') def test_working(self, mock_handle): + mock_handle.return_value='OK' opts = {'index': 'files'} call_command('swap_reindex', **opts) self.assertEqual(mock_handle.call_count, 1) diff --git a/designsafe/apps/data/urls.py b/designsafe/apps/data/urls.py index c9a203f6a..c3448fa34 100644 --- a/designsafe/apps/data/urls.py +++ b/designsafe/apps/data/urls.py @@ -5,7 +5,7 @@ DataDepotPublishedView, DataDepotLegacyPublishedView ) -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ urlpatterns = [ diff --git a/designsafe/apps/data/views/base.py b/designsafe/apps/data/views/base.py index 5299c46d6..69c66e5cf 100644 --- a/designsafe/apps/data/views/base.py +++ b/designsafe/apps/data/views/base.py @@ -5,7 +5,7 @@ from designsafe.apps.notifications.views import get_number_unread_notifications from django.conf import settings from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import Http404, HttpResponse from django.shortcuts import resolve_url from django.utils.decorators import method_decorator diff --git a/designsafe/apps/djangoRT/tests.py b/designsafe/apps/djangoRT/tests.py index 4ad07f0cc..000162171 100755 --- a/designsafe/apps/djangoRT/tests.py +++ b/designsafe/apps/djangoRT/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.contrib.auth import get_user_model, signals from unittest import skip import mock diff --git a/designsafe/apps/djangoRT/views.py b/designsafe/apps/djangoRT/views.py index c419cd05a..9ecbe785c 100755 --- a/designsafe/apps/djangoRT/views.py +++ b/designsafe/apps/djangoRT/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseBadRequest from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.djangoRT import rtUtil, forms, rtModels from django.contrib.auth.decorators import login_required from django.contrib import messages diff --git a/designsafe/apps/dropbox_integration/integrations.py b/designsafe/apps/dropbox_integration/integrations.py index eae14b938..4c0b2cc0d 100644 --- a/designsafe/apps/dropbox_integration/integrations.py +++ b/designsafe/apps/dropbox_integration/integrations.py @@ -1,4 +1,4 @@ -from django.core.urlresolvers import reverse +from django.urls import reverse def provide_integrations(): diff --git a/designsafe/apps/dropbox_integration/migrations/0001_initial.py b/designsafe/apps/dropbox_integration/migrations/0001_initial.py index 71b45594e..edccf1fc6 100644 --- a/designsafe/apps/dropbox_integration/migrations/0001_initial.py +++ b/designsafe/apps/dropbox_integration/migrations/0001_initial.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): ('dropbox_user_id', models.CharField(max_length=48)), ('access_token', models.CharField(max_length=255)), ('refresh_token', models.CharField(max_length=255)), - ('user', models.OneToOneField(related_name='dropbox_user_token', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='dropbox_user_token', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/dropbox_integration/models.py b/designsafe/apps/dropbox_integration/models.py index 5d2e04c76..11dca2eb5 100644 --- a/designsafe/apps/dropbox_integration/models.py +++ b/designsafe/apps/dropbox_integration/models.py @@ -1,6 +1,6 @@ from dropbox import DropboxOAuth2Flow, Dropbox from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db import models import json @@ -9,7 +9,7 @@ class DropboxUserToken(models.Model): """ Represents an OAuth Token for a dropbox.com user """ - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='dropbox_user_token') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='dropbox_user_token', on_delete=models.CASCADE) dropbox_user_id = models.CharField(max_length=48) access_token = models.CharField(max_length=255) account_id = models.CharField(max_length=255) diff --git a/designsafe/apps/dropbox_integration/views.py b/designsafe/apps/dropbox_integration/views.py index 65c516d53..403cd36db 100644 --- a/designsafe/apps/dropbox_integration/views.py +++ b/designsafe/apps/dropbox_integration/views.py @@ -6,7 +6,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.contrib import messages -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import (HttpResponse, HttpResponseRedirect, HttpResponseBadRequest, Http404) from django.views.decorators.csrf import csrf_exempt diff --git a/designsafe/apps/geo/urls.py b/designsafe/apps/geo/urls.py index 051ca6c61..0a36890c5 100644 --- a/designsafe/apps/geo/urls.py +++ b/designsafe/apps/geo/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.geo import views urlpatterns = [ diff --git a/designsafe/apps/googledrive_integration/integrations.py b/designsafe/apps/googledrive_integration/integrations.py index c13b258f8..692b6abdc 100644 --- a/designsafe/apps/googledrive_integration/integrations.py +++ b/designsafe/apps/googledrive_integration/integrations.py @@ -1,4 +1,4 @@ -from django.core.urlresolvers import reverse +from django.urls import reverse def provide_integrations(): diff --git a/designsafe/apps/googledrive_integration/migrations/0001_initial.py b/designsafe/apps/googledrive_integration/migrations/0001_initial.py index de5175d57..a0affd84c 100644 --- a/designsafe/apps/googledrive_integration/migrations/0001_initial.py +++ b/designsafe/apps/googledrive_integration/migrations/0001_initial.py @@ -20,7 +20,7 @@ class Migration(migrations.Migration): ('refresh_token', models.CharField(max_length=255)), ('token_uri', models.CharField(max_length=255)), ('scopes', models.CharField(max_length=255)), - ('user', models.OneToOneField(related_name='googledrive_user_token', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='googledrive_user_token', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/googledrive_integration/migrations/0002_auto_20180215_2239.py b/designsafe/apps/googledrive_integration/migrations/0002_auto_20180215_2239.py index dcddeb725..5599ea525 100644 --- a/designsafe/apps/googledrive_integration/migrations/0002_auto_20180215_2239.py +++ b/designsafe/apps/googledrive_integration/migrations/0002_auto_20180215_2239.py @@ -5,7 +5,7 @@ from django.db import migrations from django.conf import settings from google.oauth2.credentials import Credentials -from oauth2client.contrib.django_util.models import CredentialsField +from designsafe.apps.googledrive_integration.models import CredentialsField import os import json diff --git a/designsafe/apps/googledrive_integration/migrations/0003_auto_20230211_2158.py b/designsafe/apps/googledrive_integration/migrations/0003_auto_20230211_2158.py new file mode 100644 index 000000000..ec0d7565e --- /dev/null +++ b/designsafe/apps/googledrive_integration/migrations/0003_auto_20230211_2158.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2023-02-11 21:58 +from __future__ import unicode_literals + +import designsafe.apps.googledrive_integration.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('googledrive_integration', '0002_auto_20180215_2239'), + ] + + operations = [ + migrations.AlterField( + model_name='googledriveusertoken', + name='credential', + field=designsafe.apps.googledrive_integration.models.CredentialsField(null=True), + ), + ] diff --git a/designsafe/apps/googledrive_integration/models.py b/designsafe/apps/googledrive_integration/models.py index 802fc71bf..4dc48e436 100644 --- a/designsafe/apps/googledrive_integration/models.py +++ b/designsafe/apps/googledrive_integration/models.py @@ -1,20 +1,83 @@ -from oauth2client.contrib.django_util.models import CredentialsField from google.auth.transport.requests import Request from googleapiclient import discovery +import google.oauth2.credentials from django.conf import settings from django.db import models import logging import os +import base64 +import pickle + +from django.utils import encoding +import jsonpickle + logger = logging.getLogger(__name__) CLIENT_SECRETS_FILE = os.path.join(settings.SITE_DIR, 'client_secrets.json') +class CredentialsField(models.Field): + """Django ORM field for storing OAuth2 Credentials.""" + + def __init__(self, *args, **kwargs): + if 'null' not in kwargs: + kwargs['null'] = True + super(CredentialsField, self).__init__(*args, **kwargs) + + def get_internal_type(self): + return 'BinaryField' + + def from_db_value(self, value, expression, connection): + """Overrides ``models.Field`` method. This converts the value + returned from the database to an instance of this class. + """ + return self.to_python(value) + + def to_python(self, value): + """Overrides ``models.Field`` method. This is used to convert + bytes (from serialization etc) to an instance of this class""" + if value is None: + return None + elif isinstance(value, google.oauth2.credentials.Credentials): + return value + else: + try: + return jsonpickle.decode( + base64.b64decode(encoding.smart_bytes(value)).decode()) + except ValueError: + return pickle.loads( + base64.b64decode(encoding.smart_bytes(value))) + + def get_prep_value(self, value): + """Overrides ``models.Field`` method. This is used to convert + the value from an instance of this class to bytes that can be + inserted into the database. + """ + if value is None: + return None + else: + return encoding.smart_text( + base64.b64encode(jsonpickle.encode(value).encode())) + + def value_to_string(self, obj): + """Convert the field value from the provided model to a string. + + Used during model serialization. + + Args: + obj: db.Model, model object + + Returns: + string, the serialized field value + """ + value = self.value_from_object(obj) + return self.get_prep_value(value) + class GoogleDriveUserToken(models.Model): """ Represents an OAuth Token for a Google Drive user """ - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='googledrive_user_token') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='googledrive_user_token', on_delete=models.CASCADE) credential = CredentialsField() diff --git a/designsafe/apps/googledrive_integration/views.py b/designsafe/apps/googledrive_integration/views.py index 671db4125..266b3ddd1 100644 --- a/designsafe/apps/googledrive_integration/views.py +++ b/designsafe/apps/googledrive_integration/views.py @@ -6,7 +6,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.contrib import messages -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import (HttpResponse, HttpResponseRedirect, HttpResponseBadRequest, Http404) from django.views.decorators.csrf import csrf_exempt diff --git a/designsafe/apps/licenses/migrations/0001_initial.py b/designsafe/apps/licenses/migrations/0001_initial.py index 7955eebc8..900887826 100644 --- a/designsafe/apps/licenses/migrations/0001_initial.py +++ b/designsafe/apps/licenses/migrations/0001_initial.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('license_type', models.CharField(max_length=255, choices=[(b'MATLAB', b'Matlab')])), ('license_file_content', models.TextField(help_text=b"This should be entire contents ofthe user's MATLAB license file. Please ensure you paste the license exactly as it is in the license file.")), - ('user', models.ForeignKey(related_name='licenses', to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(related_name='licenses', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], options={ 'abstract': False, diff --git a/designsafe/apps/licenses/models.py b/designsafe/apps/licenses/models.py index d0ed033c3..a9eb23099 100644 --- a/designsafe/apps/licenses/models.py +++ b/designsafe/apps/licenses/models.py @@ -26,7 +26,7 @@ def get_license_info(): class BaseLicense(models.Model): - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='%(class)s') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='%(class)s', on_delete=models.CASCADE) class Meta: abstract = True diff --git a/designsafe/apps/nco/apps.py b/designsafe/apps/nco/apps.py index 9b195213f..8946a0ecd 100644 --- a/designsafe/apps/nco/apps.py +++ b/designsafe/apps/nco/apps.py @@ -4,4 +4,4 @@ class ProjectsConfig(AppConfig): - name = 'nco' + name = 'designsafe.apps.nco' diff --git a/designsafe/apps/notifications/urls.py b/designsafe/apps/notifications/urls.py index 827cdf072..f03525b22 100644 --- a/designsafe/apps/notifications/urls.py +++ b/designsafe/apps/notifications/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.notifications import views diff --git a/designsafe/apps/projects/apps.py b/designsafe/apps/projects/apps.py index 2cad6ea1f..9f3967060 100644 --- a/designsafe/apps/projects/apps.py +++ b/designsafe/apps/projects/apps.py @@ -4,4 +4,4 @@ class ProjectsConfig(AppConfig): - name = 'projects' + name = 'designsafe.apps.projects' diff --git a/designsafe/apps/rapid/tests.py b/designsafe/apps/rapid/tests.py index 42b549b62..e64aab9c3 100644 --- a/designsafe/apps/rapid/tests.py +++ b/designsafe/apps/rapid/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.contrib.auth import get_user_model, models, signals from designsafe.apps.rapid.models import RapidNHEvent from unittest import skip diff --git a/designsafe/apps/rapid/urls.py b/designsafe/apps/rapid/urls.py index 5299ac2dd..777407c61 100644 --- a/designsafe/apps/rapid/urls.py +++ b/designsafe/apps/rapid/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.rapid import views urlpatterns = [ diff --git a/designsafe/apps/rapid/views.py b/designsafe/apps/rapid/views.py index 00dabb9ea..faf5638c1 100644 --- a/designsafe/apps/rapid/views.py +++ b/designsafe/apps/rapid/views.py @@ -5,7 +5,7 @@ from datetime import datetime from PIL import Image from elasticsearch import TransportError, ConnectionTimeout -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import JsonResponse, HttpResponseRedirect, HttpResponseNotFound, HttpResponseBadRequest from django.shortcuts import render from django.contrib.auth.decorators import login_required, user_passes_test diff --git a/designsafe/apps/search/urls.py b/designsafe/apps/search/urls.py index 57b103d06..61c22d407 100644 --- a/designsafe/apps/search/urls.py +++ b/designsafe/apps/search/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import include, url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.search import views diff --git a/designsafe/apps/token_access/middleware.py b/designsafe/apps/token_access/middleware.py index 4441160db..afb738c68 100644 --- a/designsafe/apps/token_access/middleware.py +++ b/designsafe/apps/token_access/middleware.py @@ -1,8 +1,9 @@ from django.http import HttpResponseForbidden from .models import Token +from django.utils.deprecation import MiddlewareMixin -class TokenAuthenticationMiddleware(object): +class TokenAuthenticationMiddleware(MiddlewareMixin): """ Middleware that checks the HTTP Authorization Header for Token authorization. If the Authorization header exists and the authorization type is 'Token', looks up the token diff --git a/designsafe/apps/token_access/migrations/0001_initial.py b/designsafe/apps/token_access/migrations/0001_initial.py index 66c2b93b0..c4c641ec5 100644 --- a/designsafe/apps/token_access/migrations/0001_initial.py +++ b/designsafe/apps/token_access/migrations/0001_initial.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('token', models.CharField(max_length=40, serialize=False, primary_key=True)), ('nickname', models.CharField(max_length=255)), ('created', models.DateTimeField(auto_now_add=True)), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), ] diff --git a/designsafe/apps/token_access/models.py b/designsafe/apps/token_access/models.py index 84437703a..68534af29 100644 --- a/designsafe/apps/token_access/models.py +++ b/designsafe/apps/token_access/models.py @@ -11,7 +11,7 @@ class Token(models.Model): """ token = models.CharField(max_length=40, primary_key=True) nickname = models.CharField(max_length=255) - user = models.ForeignKey(settings.AUTH_USER_MODEL) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): diff --git a/designsafe/apps/workspace/tasks.py b/designsafe/apps/workspace/tasks.py index 9fbbf47b2..29cfa9f88 100644 --- a/designsafe/apps/workspace/tasks.py +++ b/designsafe/apps/workspace/tasks.py @@ -5,7 +5,7 @@ from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse +from django.urls import reverse from designsafe.apps.api.agave import impersonate_service_account from designsafe.apps.api.notifications.models import Notification from django.db import transaction diff --git a/designsafe/apps/workspace/tests.py b/designsafe/apps/workspace/tests.py index a558fc13e..fd700895b 100644 --- a/designsafe/apps/workspace/tests.py +++ b/designsafe/apps/workspace/tests.py @@ -3,7 +3,7 @@ from mock import patch from django.test import TestCase from .models.app_descriptions import AppDescription -from django.core.urlresolvers import reverse +from django.urls import reverse from django.contrib.auth import get_user_model diff --git a/designsafe/apps/workspace/urls.py b/designsafe/apps/workspace/urls.py index 2270f3dfd..091c286fa 100644 --- a/designsafe/apps/workspace/urls.py +++ b/designsafe/apps/workspace/urls.py @@ -1,5 +1,5 @@ from django.conf.urls import url -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from designsafe.apps.workspace import views diff --git a/designsafe/apps/workspace/views.py b/designsafe/apps/workspace/views.py index 030dfe3c3..86bf3cae4 100644 --- a/designsafe/apps/workspace/views.py +++ b/designsafe/apps/workspace/views.py @@ -3,7 +3,7 @@ from django.conf import settings from django.contrib.auth.decorators import login_required from django.core.serializers.json import DjangoJSONEncoder -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponse from designsafe.apps.api.notifications.models import Notification diff --git a/designsafe/conftest.py b/designsafe/conftest.py index b103ae488..22fbd2ec3 100644 --- a/designsafe/conftest.py +++ b/designsafe/conftest.py @@ -14,6 +14,11 @@ def regular_user(django_user_model, django_db_reset_sequences, mock_agave_client first_name="Firstname", last_name="Lastname", email="user@user.com") + django_user_model.objects.create_user(username="username2", + password="password2", + first_name="Firstname2", + last_name="Lastname2", + email="user@user.com2") user = django_user_model.objects.get(username="username") token = AgaveOAuthToken.objects.create( user=user, diff --git a/designsafe/middleware.py b/designsafe/middleware.py index 33fdd2f13..d9deca554 100644 --- a/designsafe/middleware.py +++ b/designsafe/middleware.py @@ -13,12 +13,14 @@ from termsandconditions.middleware import (TermsAndConditionsRedirectMiddleware, is_path_protected) from termsandconditions.models import TermsAndConditions -from django.shortcuts import redirect, reverse +from django.shortcuts import redirect +from django.urls import reverse +from django.utils.deprecation import MiddlewareMixin from designsafe.apps.notifications.models import SiteMessage logger = logging.getLogger(__name__) -class DesignsafeProfileUpdateMiddleware: +class DesignsafeProfileUpdateMiddleware(MiddlewareMixin): """ Middleware to check if a user's profile has the update_required flag set to @@ -64,14 +66,14 @@ def process_request(self, request): return None -class SiteMessageMiddleware: +class SiteMessageMiddleware(MiddlewareMixin): def process_request(self, request): for message in SiteMessage.objects.filter(display=True): if settings.SITE_ID == 1: messages.warning(request, message.message) -class RequestProfilingMiddleware(object): +class RequestProfilingMiddleware(MiddlewareMixin): """Middleware to run cProfiler on each request""" def __init__(self, get_response=None): diff --git a/designsafe/settings/common_settings.py b/designsafe/settings/common_settings.py index 825ffd826..583048f10 100644 --- a/designsafe/settings/common_settings.py +++ b/designsafe/settings/common_settings.py @@ -14,6 +14,8 @@ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os import json +from django.urls import reverse_lazy +from django.utils.text import format_lazy gettext = lambda s: s @@ -38,11 +40,9 @@ # Application definition INSTALLED_APPS = ( - 'djangocms_admin_style', - 'djangocms_text_ckeditor', - 'cmsplugin_cascade', - 'cmsplugin_cascade.extra_fields', + # + 'djangocms_admin_style', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -52,6 +52,12 @@ 'django.contrib.sites', 'django.contrib.sitemaps', 'django.contrib.staticfiles', + + 'cmsplugin_cascade', + 'cmsplugin_cascade.extra_fields', + + 'djangocms_text_ckeditor', + 'django_select2', 'cms', 'treebeard', @@ -70,8 +76,8 @@ 'bootstrap3', 'termsandconditions', 'impersonate', + 'captcha', - 'oauth2client.contrib.django_util', #websockets 'ws4redis', @@ -124,13 +130,12 @@ }, } -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'designsafe.middleware.RequestProfilingMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'designsafe.apps.token_access.middleware.TokenAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'designsafe.apps.auth.middleware.AgaveTokenRefreshMiddleware', @@ -158,6 +163,7 @@ 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ + 'django.contrib.messages.context_processors.messages', 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.request', @@ -311,6 +317,7 @@ 'easy_thumbnails.processors.filters', ) + CKEDITOR_SETTINGS = { 'allowedContent': True } @@ -330,6 +337,7 @@ DJANGOCMS_FORMS_TEMPLATES = ( ('djangocms_forms/form_template/default.html', 'Default'), ) +DJANGOCMS_FORMS_FORMAT_CHOICES = () DJANGOCMS_FORMS_USE_HTML5_REQUIRED = False DJANGOCMS_FORMS_WIDGET_CSS_CLASSES = { 'text': ('form-control', ), diff --git a/designsafe/settings/test_settings.py b/designsafe/settings/test_settings.py index ed9b1c109..be29059f0 100644 --- a/designsafe/settings/test_settings.py +++ b/designsafe/settings/test_settings.py @@ -14,6 +14,8 @@ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os import json +from django.urls import reverse_lazy +from django.utils.text import format_lazy gettext = lambda s: s @@ -39,10 +41,7 @@ # Application definition INSTALLED_APPS = ( - 'djangocms_admin_style', - 'djangocms_text_ckeditor', - 'cmsplugin_cascade', - 'cmsplugin_cascade.extra_fields', + 'django.contrib.admin', 'django.contrib.auth', @@ -53,6 +52,11 @@ 'django.contrib.sites', 'django.contrib.sitemaps', 'django.contrib.staticfiles', + 'djangocms_admin_style', + 'djangocms_text_ckeditor', + 'django_select2', + 'cmsplugin_cascade', + 'cmsplugin_cascade.extra_fields', 'cms', 'treebeard', @@ -74,8 +78,6 @@ 'termsandconditions', 'impersonate', - 'oauth2client.contrib.django_util', - #websockets 'ws4redis', @@ -108,7 +110,7 @@ 'designsafe.apps.rapid', #haystack integration - 'haystack' + # 'haystack' ) AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) @@ -121,13 +123,12 @@ }, } -MIDDLEWARE_CLASSES = ( - 'designsafe.middleware.RequestProfilingMiddleware', +MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', 'designsafe.apps.token_access.middleware.TokenAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'designsafe.apps.auth.middleware.AgaveTokenRefreshMiddleware', @@ -260,7 +261,7 @@ ) } CMSPLUGIN_CASCADE_PLUGINS = ( - 'cmsplugin_cascade.bootstrap3', + # 'cmsplugin_cascade.bootstrap3', 'cmsplugin_cascade.link', ) CMSPLUGIN_CASCADE_ALIEN_PLUGINS = ( @@ -285,7 +286,10 @@ ) CKEDITOR_SETTINGS = { - 'allowedContent': True +'language': '{{ language }}', +'skin': 'moono-lisa', +'toolbar': 'CMS', +'stylesSet': format_lazy('default:{}', reverse_lazy('admin:cascade_texteditor_config')), } MIGRATION_MODULES = { @@ -319,6 +323,8 @@ } DJANGOCMS_FORMS_DATETIME_FORMAT = '%d-%b-%Y %H:%M' +DJANGOCMS_FORMS_FORMAT_CHOICES = () + ##### # # Bootstrap3 Settings @@ -483,8 +489,8 @@ # RECAPTCHA SETTINGS FOR LESS SPAMMO DJANGOCMS_FORMS_RECAPTCHA_PUBLIC_KEY = os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_PUBLIC_KEY') DJANGOCMS_FORMS_RECAPTCHA_SECRET_KEY = os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_SECRET_KEY') -RECAPTCHA_PUBLIC_KEY = os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_PUBLIC_KEY') -RECAPTCHA_PRIVATE_KEY= os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_SECRET_KEY') +RECAPTCHA_PUBLIC_KEY = os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_PUBLIC_KEY', '') +RECAPTCHA_PRIVATE_KEY= os.environ.get('DJANGOCMS_FORMS_RECAPTCHA_SECRET_KEY', '') NOCAPTCHA = True #FOR RAPID UPLOADS @@ -529,7 +535,7 @@ BROKER_BACKEND = 'memory' # No token refreshes during testing -MIDDLEWARE_CLASSES = [c for c in MIDDLEWARE_CLASSES if c != +MIDDLEWARE= [c for c in MIDDLEWARE if c != 'designsafe.apps.auth.middleware.AgaveTokenRefreshMiddleware'] STATIC_ROOT = os.path.join(BASE_DIR, 'static') diff --git a/designsafe/storage.py b/designsafe/storage.py index 5b633dbe3..3b3af7266 100644 --- a/designsafe/storage.py +++ b/designsafe/storage.py @@ -1,7 +1,7 @@ -from django.contrib.staticfiles.storage import CachedStaticFilesStorage, StaticFilesStorage +from django.contrib.staticfiles.storage import StaticFilesStorage from django.core.files.storage import FileSystemStorage -class CustomPipelineCachedStorage(CachedStaticFilesStorage): +class CustomPipelineCachedStorage(StaticFilesStorage): def url(self, name, force=False): """ Return the non-hashed URL when detecting cms paths in order to work @@ -10,4 +10,4 @@ def url(self, name, force=False): if name.startswith('cms/'): return FileSystemStorage.url(self, name) - return super(CustomPipelineCachedStorage, self).url(name, force) + return super(CustomPipelineCachedStorage, self).url(name) diff --git a/designsafe/urls.py b/designsafe/urls.py index 11c22052c..47fdba676 100644 --- a/designsafe/urls.py +++ b/designsafe/urls.py @@ -27,10 +27,10 @@ from django.conf.urls.static import static from django.contrib import admin from django.views.generic import RedirectView, TemplateView -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import HttpResponse, HttpResponseRedirect from designsafe.apps.auth.views import login_options as des_login_options -from django.contrib.auth.views import logout as des_logout +from django.contrib.auth.views import LogoutView as des_logout from designsafe.views import project_version as des_version, redirect_old_nees # sitemap - classes must be imported and added to sitemap dictionary @@ -49,7 +49,7 @@ urlpatterns = [ # admin - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), url(r'^admin/impersonate/', include('impersonate.urls')), # sitemap @@ -62,37 +62,37 @@ url(r'{}.html$'.format(settings.RAMP_VERIFICATION_ID), TemplateView.as_view(template_name='ramp_verification.html')), # api urls, just for the samples. - url(r'^applications/', include('designsafe.apps.applications.urls', + url(r'^applications/', include(('designsafe.apps.applications.urls', 'desigsnafe.apps.applications'), namespace='designsafe_applications')), - url(r'^data/', include('designsafe.apps.data.urls', namespace='designsafe_data')), - url(r'^rw/workspace/', include('designsafe.apps.workspace.urls', + url(r'^data/', include(('designsafe.apps.data.urls', 'designsafe.apps.data'), namespace='designsafe_data')), + url(r'^rw/workspace/', include(('designsafe.apps.workspace.urls', 'designsafe.apps.workspace'), namespace='designsafe_workspace')), - url(r'^notifications/', include('designsafe.apps.notifications.urls', + url(r'^notifications/', include(('designsafe.apps.notifications.urls', 'designsafe.apps.notifications'), namespace='designsafe_notifications')), - url(r'^search/', include('designsafe.apps.search.urls', + url(r'^search/', include(('designsafe.apps.search.urls', 'designsafe.apps.search'), namespace='designsafe_search')), - url(r'^geo/', include('designsafe.apps.geo.urls', + url(r'^geo/', include(('designsafe.apps.geo.urls', 'designsafe.apps.geo'), namespace='designsafe_geo')), - url(r'^recon-portal/', include('designsafe.apps.rapid.urls', + url(r'^recon-portal/', include(('designsafe.apps.rapid.urls', 'designsafe.apps.rapid'), namespace='designsafe_rapid')), - url(r'^nco/api/', include('designsafe.apps.nco.api_urls', namespace='nco_api')), + url(r'^nco/api/', include(('designsafe.apps.nco.api_urls', 'designsafe.apps.nco'), namespace='nco_api')), - url(r'^nco/', include('designsafe.apps.nco.urls', + url(r'^nco/', include(('designsafe.apps.nco.urls', 'designsafe.apps.nco'), namespace='nco')), - url(r'^api/', include('designsafe.apps.api.urls', namespace='designsafe_api')), + url(r'^api/', include(('designsafe.apps.api.urls', 'designsafe.apps.api'), namespace='designsafe_api')), # auth - url(r'^account/', include('designsafe.apps.accounts.urls', + url(r'^account/', include(('designsafe.apps.accounts.urls', 'designsafe.apps.accounts'), namespace='designsafe_accounts')), url(r'^register/$', RedirectView.as_view( pattern_name='designsafe_accounts:register', permanent=True), name='register'), # dashboard - url(r'^dashboard/', include('designsafe.apps.dashboard.urls', + url(r'^dashboard/', include(('designsafe.apps.dashboard.urls', 'designsafe.apps.dashboard'), namespace='designsafe_dashboard')), # need a fancier redirect here to pass the code param along @@ -108,29 +108,29 @@ )), # box - url(r'^account/applications/box/', include('designsafe.apps.box_integration.urls', + url(r'^account/applications/box/', include(('designsafe.apps.box_integration.urls', 'designsafe.apps.box_integration'), namespace='box_integration')), # dropbox - url(r'^account/applications/dropbox/', include('designsafe.apps.dropbox_integration.urls', + url(r'^account/applications/dropbox/', include(('designsafe.apps.dropbox_integration.urls', 'designsafe.apps.dropbox_integration'), namespace='dropbox_integration')), # googledrive - url(r'^account/applications/googledrive/', include('designsafe.apps.googledrive_integration.urls', + url(r'^account/applications/googledrive/', include(('designsafe.apps.googledrive_integration.urls', 'designsafe.apps.googledrive_integration'), namespace='googledrive_integration')), # google site verification url(r'{}.html$'.format(settings.GOOGLE_SITE_VERIFICATION_ID), TemplateView.as_view(template_name='google_verification.html')), # auth - url(r'^auth/', include('designsafe.apps.auth.urls', namespace='designsafe_auth')), + url(r'^auth/', include(('designsafe.apps.auth.urls', 'designsafe.apps.auth'), namespace='designsafe_auth')), url(r'^login/$', des_login_options, name='login'), url(r'^logout/$', des_logout, {'next_page': '/auth/logged-out/'}, name='logout'), # help - url(r'^help/', include('designsafe.apps.djangoRT.urls', namespace='djangoRT')), + url(r'^help/', include(('designsafe.apps.djangoRT.urls', 'designsafe.apps.djangoRT'), namespace='djangoRT')), # webhooks url(r'^webhooks/', include('designsafe.webhooks')), diff --git a/poetry.lock b/poetry.lock index e44224bf8..54ce95234 100644 --- a/poetry.lock +++ b/poetry.lock @@ -91,14 +91,14 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "2.15.5" +version = "2.15.6" description = "An abstract syntax tree for Python with inference support." category = "main" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.5-py3-none-any.whl", hash = "sha256:078e5212f9885fa85fbb0cf0101978a336190aadea6e13305409d099f71b2324"}, - {file = "astroid-2.15.5.tar.gz", hash = "sha256:1039262575027b441137ab4a62a793a9b43defb42c32d5670f38686207cd780f"}, + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, ] [package.dependencies] @@ -112,14 +112,14 @@ wrapt = [ [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [package.dependencies] @@ -335,14 +335,14 @@ zstd = ["zstandard"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -424,99 +424,99 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -738,14 +738,14 @@ files = [ [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.7" +description = "serialize all of Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, ] [package.extras] @@ -753,18 +753,19 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "django" -version = "1.11.29" +version = "2.2.28" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "Django-1.11.29-py2.py3-none-any.whl", hash = "sha256:014e3392058d94f40569206a24523ce254d55ad2f9f46c6550b0fe2e4f94cf3f"}, - {file = "Django-1.11.29.tar.gz", hash = "sha256:4200aefb6678019a0acf0005cd14cfce3a5e6b9b90d06145fcdd2e474ad4329c"}, + {file = "Django-2.2.28-py3-none-any.whl", hash = "sha256:365429d07c1336eb42ba15aa79f45e1c13a0b04d5c21569e7d596696418a6a45"}, + {file = "Django-2.2.28.tar.gz", hash = "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413"}, ] [package.dependencies] pytz = "*" +sqlparse = ">=0.2.2" [package.extras] argon2 = ["argon2-cffi (>=16.1.0)"] @@ -798,18 +799,18 @@ files = [ [[package]] name = "django-classy-tags" -version = "1.0.0" +version = "3.0.1" description = "Class based template tags for Django" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "django-classy-tags-1.0.0.tar.gz", hash = "sha256:ad6a25fc2b58a098f00d86bd5e5dad47922f5ca4e744bc3cccb7b4be5bc35eb1"}, + {file = "django-classy-tags-3.0.1.tar.gz", hash = "sha256:d222b45502ac99e550a566667839efaef954b9c7366a6493f143862aabeac878"}, + {file = "django_classy_tags-3.0.1-py3-none-any.whl", hash = "sha256:0e4a03462b29bd94c8da8160d514cb93e4b4c858752437c082a3efeca94b9f51"}, ] [package.dependencies] -django = ">=1.11" -six = "*" +django = ">=2.2" [[package]] name = "django-cms" @@ -904,16 +905,22 @@ files = [ [[package]] name = "django-js-asset" -version = "1.2.3" +version = "2.0.0" description = "script tag with additional attributes for django.forms.Media" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "django-js-asset-1.2.3.tar.gz", hash = "sha256:25811cd67428ebdc5298661a2223a66b39c11696746a06f87f0896b93e1c5423"}, - {file = "django_js_asset-1.2.3-py2.py3-none-any.whl", hash = "sha256:4675015a390fd1f3937e79f7f516d58ab77572b0339c6873807555d6443fa9f8"}, + {file = "django_js_asset-2.0.0-py3-none-any.whl", hash = "sha256:86f9f300d682537ddaf0487dc2ab356581b8f50c069bdba91d334a46e449f923"}, + {file = "django_js_asset-2.0.0.tar.gz", hash = "sha256:adc1ee1efa853fad42054b540c02205344bb406c9bddf87c9e5377a41b7db90f"}, ] +[package.dependencies] +Django = ">=2.2" + +[package.extras] +tests = ["coverage"] + [[package]] name = "django-mptt" version = "0.14.0" @@ -947,6 +954,21 @@ files = [ [package.dependencies] Django = ">=1.11" +[[package]] +name = "django-recaptcha" +version = "3.0.0" +description = "Django recaptcha form field/widget app." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "django-recaptcha-3.0.0.tar.gz", hash = "sha256:253197051288923cae675d7eff91b619e3775311292a5dbaf27a8a55ffebc670"}, + {file = "django_recaptcha-3.0.0-py3-none-any.whl", hash = "sha256:1aed69fd6ac8fd9e99e52665392ae6748f8b6339ace656fad779fe0c6c915a52"}, +] + +[package.dependencies] +django = "*" + [[package]] name = "django-recaptcha2" version = "1.4.1" @@ -1047,14 +1069,14 @@ wsaccel = ["wsaccel (>=0.6.2)"] [[package]] name = "djangocms-admin-style" -version = "3.2.4" +version = "3.2.5" description = "Adds pretty CSS styles for the django CMS admin interface." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "djangocms-admin-style-3.2.4.tar.gz", hash = "sha256:0d981ccedf4252113acfd812a48d3284eb38d6b610d83c92e85f6bb681bd8bca"}, - {file = "djangocms_admin_style-3.2.4-py3-none-any.whl", hash = "sha256:f540d32026108c22f4b9f69347780fe04c63b9d699902f41d763f44780bb9cbb"}, + {file = "djangocms-admin-style-3.2.5.tar.gz", hash = "sha256:abbe89d369c0779f7e5f839887a77bdb21660b547e83605d6a4a6df958ace7a5"}, + {file = "djangocms_admin_style-3.2.5-py3-none-any.whl", hash = "sha256:fc51677f12dbec6996590c430c90c9fe8efa32ceadfee383a576ed092be07526"}, ] [[package]] @@ -1079,9 +1101,8 @@ description = "Collection of extendible plugins for django-CMS to create and edi category = "main" optional = false python-versions = "*" -files = [ - {file = "djangocms-cascade-0.16.3.tar.gz", hash = "sha256:c0fa072243b5b711ff363566dc15b750377b5dd4a267b7972ac7b607031ec1db"}, -] +files = [] +develop = false [package.dependencies] django-classy-tags = ">=0.8" @@ -1089,6 +1110,12 @@ django-cms = ">=3.4,<4" djangocms-text-ckeditor = ">=3.4" jsonfield = "*" +[package.source] +type = "git" +url = "https://github.com/DesignSafe-CI/djangocms-cascade" +reference = "04d52dca46312b24ded3aa1d4cf3955a88ebc147" +resolved_reference = "04d52dca46312b24ded3aa1d4cf3955a88ebc147" + [[package]] name = "djangocms-file" version = "2.4.0" @@ -1106,26 +1133,32 @@ django-filer = ">=1.2.4" djangocms-attributes-field = ">=0.4.0" [[package]] -name = "djangocms-forms" -version = "0.2.5" +name = "djangocms-forms-maintained" +version = "202206141440" description = "The easiest and most flexible Django CMS Form builder w/ ReCaptcha v2 support!" category = "main" optional = false python-versions = "*" -files = [ - {file = "djangocms-forms-0.2.5.tar.gz", hash = "sha256:83719b7bec66f935fc30698d81541d52cf35a45bef27089cd8899fa9d4d19d36"}, -] +files = [] +develop = false [package.dependencies] django-appconf = "*" django-cms = ">=3.0" django-ipware = "*" +django-recaptcha = "*" hashids = "*" jsonfield = "*" requests = "*" -tablib = "*" +tablib = {version = "*", extras = ["xlsx", "yaml"]} unidecode = "*" +[package.source] +type = "git" +url = "https://github.com/avryhof/djangocms-forms" +reference = "d8a69efd2f447ee2f940c7b6f5b8b088c9cb79ed" +resolved_reference = "d8a69efd2f447ee2f940c7b6f5b8b088c9cb79ed" + [[package]] name = "djangocms-googlemap" version = "1.4.0" @@ -1238,38 +1271,41 @@ six = ">=1.12.0" [[package]] name = "easy-thumbnails" -version = "2.7.2" +version = "2.8.5" description = "Easy thumbnails for Django" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "easy-thumbnails-2.7.2.tar.gz", hash = "sha256:a7dd9cf97efaf70ba5d76484a962f08ba65b31f1681bc417257743650e9e8a8a"}, - {file = "easy_thumbnails-2.7.2-py3-none-any.whl", hash = "sha256:9d7ed56a9b57aba7a8d0e03dc3b8507ca51aab5e0ed0bc705c3261ff1f659192"}, + {file = "easy-thumbnails-2.8.5.tar.gz", hash = "sha256:7e4e912609fc9b60b3a1fef6557ec15ddf9c4f946267a92e6920dfd4dd765e35"}, + {file = "easy_thumbnails-2.8.5-py3-none-any.whl", hash = "sha256:97f5a5278d8b6c1f5b1b7473f3737d29b18f5c1159cbdf0ab28674fdac2f8c87"}, ] [package.dependencies] -django = ">=1.11,<4.0" +django = ">=2.2" pillow = "*" +[package.extras] +svg = ["reportlab", "svglib"] + [[package]] name = "elasticsearch" -version = "7.9.1" +version = "7.17.9" description = "Python client for Elasticsearch" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" files = [ - {file = "elasticsearch-7.9.1-py2.py3-none-any.whl", hash = "sha256:8c7e2374f53ee1b891ff2804116e0c7fb517585d6d5788ba668686bbc9d82e2d"}, - {file = "elasticsearch-7.9.1.tar.gz", hash = "sha256:5e08776fbb30c6e92408c7fa8c37d939210d291475ae2f364f0497975918b6fe"}, + {file = "elasticsearch-7.17.9-py2.py3-none-any.whl", hash = "sha256:0e2454645dc00517dee4c6de3863411a9c5f1955d013c5fefa29123dadc92f98"}, + {file = "elasticsearch-7.17.9.tar.gz", hash = "sha256:66c4ece2adfe7cc120e2b6a6798a1fd5c777aecf82eec39bb95cef7cfc7ea2b3"}, ] [package.dependencies] certifi = "*" -urllib3 = ">=1.21.1" +urllib3 = ">=1.21.1,<2" [package.extras] -async = ["aiohttp (>=3,<4)", "yarl"] +async = ["aiohttp (>=3,<4)"] develop = ["black", "coverage", "jinja2", "mock", "pytest", "pytest-cov", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx (<1.7)", "sphinx-rtd-theme"] docs = ["sphinx (<1.7)", "sphinx-rtd-theme"] requests = ["requests (>=2.4.0,<3.0.0)"] @@ -1294,6 +1330,18 @@ six = "*" [package.extras] develop = ["coverage (<5.0.0)", "mock", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<3.0.0)", "pytz", "sphinx", "sphinx-rtd-theme"] +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + [[package]] name = "exifread" version = "2.3.2" @@ -1395,70 +1443,71 @@ test = ["backports.socketpair", "cffi (>=1.12.2)", "contextvars (==2.4)", "cover [[package]] name = "google-api-core" -version = "2.11.0" +version = "2.11.1" description = "Google API client core library" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"}, - {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"}, + {file = "google-api-core-2.11.1.tar.gz", hash = "sha256:25d29e05a0058ed5f19c61c0a78b1b53adea4d9364b464d014fbda941f6d1c9a"}, + {file = "google_api_core-2.11.1-py3-none-any.whl", hash = "sha256:d92a5a92dc36dd4f4b9ee4e55528a90e432b059f93aee6ad857f9de8cc7ae94a"}, ] [package.dependencies] -google-auth = ">=2.14.1,<3.0dev" -googleapis-common-protos = ">=1.56.2,<2.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" -requests = ">=2.18.0,<3.0.0dev" +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.88.0" +version = "2.97.0" description = "Google API Client Library for Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.88.0.tar.gz", hash = "sha256:37068453f79ea28e5394a8fe20a4ba620594e7f8541068bea2e844dacdcc9d33"}, - {file = "google_api_python_client-2.88.0-py2.py3-none-any.whl", hash = "sha256:d003008400a779524ea21b5a3ddc6fc59327d401fb8c37c466d413694c279cae"}, + {file = "google-api-python-client-2.97.0.tar.gz", hash = "sha256:48277291894876a1ca7ed4127e055e81f81e6343ced1b544a7200ae2c119dcd7"}, + {file = "google_api_python_client-2.97.0-py2.py3-none-any.whl", hash = "sha256:5215f4cd577753fc4192ccfbe0bb8b55d4bb5fd68fa6268ac5cf271b6305de31"}, ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" -google-auth = ">=1.19.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" google-auth-httplib2 = ">=0.1.0" -httplib2 = ">=0.15.0,<1dev" +httplib2 = ">=0.15.0,<1.dev0" uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.17.3" +version = "2.22.0" description = "Google Authentication Library" category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.6" files = [ - {file = "google-auth-2.17.3.tar.gz", hash = "sha256:ce311e2bc58b130fddf316df57c9b3943c2a7b4f6ec31de9663a9333e4064efc"}, - {file = "google_auth-2.17.3-py2.py3-none-any.whl", hash = "sha256:f586b274d3eb7bd932ea424b1c702a30e0393a2e2bc4ca3eae8263ffd8be229f"}, + {file = "google-auth-2.22.0.tar.gz", hash = "sha256:164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"}, + {file = "google_auth-2.22.0-py2.py3-none-any.whl", hash = "sha256:d61d1b40897407b574da67da1a833bdc10d5a11642566e506565d1b1a46ba873"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} +rsa = ">=3.1.4,<5" six = ">=1.9.0" +urllib3 = "<2.0" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0dev)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-httplib2" @@ -1498,21 +1547,21 @@ tool = ["click (>=6.0.0)"] [[package]] name = "googleapis-common-protos" -version = "1.59.0" +version = "1.60.0" description = "Common protobufs used in Google APIs" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.59.0.tar.gz", hash = "sha256:4168fcb568a826a52f23510412da405abd93f4d23ba544bb68d943b14ba3cb44"}, - {file = "googleapis_common_protos-1.59.0-py2.py3-none-any.whl", hash = "sha256:b287dc48449d1d41af0c69f4ea26242b5ae4c3d7249a38b0984c86a4caffff1f"}, + {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"}, + {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"}, ] [package.dependencies] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "greenlet" @@ -1762,22 +1811,22 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1800,19 +1849,18 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsonfield" -version = "2.1.1" +version = "3.1.0" description = "A reusable Django field that allows you to store validated JSON in your model." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "jsonfield-2.1.1-py2.py3-none-any.whl", hash = "sha256:1ae437686daab56dfb619291d4774ac075016ab4cad24abf445ad05da03a85a8"}, - {file = "jsonfield-2.1.1.tar.gz", hash = "sha256:ed7c5e1829e9453e24a8bebef1e702ffe402e6def6b326f0e0b88764c59a6dc7"}, + {file = "jsonfield-3.1.0-py3-none-any.whl", hash = "sha256:df857811587f252b97bafba42e02805e70a398a7a47870bc6358a0308dd689ed"}, + {file = "jsonfield-3.1.0.tar.gz", hash = "sha256:7e4e84597de21eeaeeaaa7cc5da08c61c48a9b64d0c446b2d71255d01812887a"}, ] [package.dependencies] -Django = ">=1.11" -six = "*" +Django = ">=2.2" [[package]] name = "jsonpickle" @@ -2079,6 +2127,21 @@ files = [ {file = "olefile-0.46.zip", hash = "sha256:133b031eaf8fd2c9399b78b8bc5b8fcbe4c31e85295749bb17a87cba8f3c3964"}, ] +[[package]] +name = "openpyxl" +version = "3.1.2" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, + {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, +] + +[package.dependencies] +et-xmlfile = "*" + [[package]] name = "opf-fido" version = "1.4.1" @@ -2130,14 +2193,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -2260,22 +2323,22 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "platformdirs" -version = "3.5.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, - {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.dependencies] -typing-extensions = {version = ">=4.5", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" @@ -2326,25 +2389,25 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.23.2" +version = "4.24.1" description = "" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.23.2-cp310-abi3-win32.whl", hash = "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3"}, - {file = "protobuf-4.23.2-cp310-abi3-win_amd64.whl", hash = "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a"}, - {file = "protobuf-4.23.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df"}, - {file = "protobuf-4.23.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e"}, - {file = "protobuf-4.23.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa"}, - {file = "protobuf-4.23.2-cp37-cp37m-win32.whl", hash = "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f"}, - {file = "protobuf-4.23.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea"}, - {file = "protobuf-4.23.2-cp38-cp38-win32.whl", hash = "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e"}, - {file = "protobuf-4.23.2-cp38-cp38-win_amd64.whl", hash = "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511"}, - {file = "protobuf-4.23.2-cp39-cp39-win32.whl", hash = "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91"}, - {file = "protobuf-4.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f"}, - {file = "protobuf-4.23.2-py3-none-any.whl", hash = "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f"}, - {file = "protobuf-4.23.2.tar.gz", hash = "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7"}, + {file = "protobuf-4.24.1-cp310-abi3-win32.whl", hash = "sha256:d414199ca605eeb498adc4d2ba82aedc0379dca4a7c364ff9bc9a179aa28e71b"}, + {file = "protobuf-4.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:5906c5e79ff50fe38b2d49d37db5874e3c8010826f2362f79996d83128a8ed9b"}, + {file = "protobuf-4.24.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:970c701ee16788d74f3de20938520d7a0aebc7e4fff37096a48804c80d2908cf"}, + {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc361148e902949dcb953bbcb148c99fe8f8854291ad01107e4120361849fd0e"}, + {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:5d32363d14aca6e5c9e9d5918ad8fb65b091b6df66740ae9de50ac3916055e43"}, + {file = "protobuf-4.24.1-cp37-cp37m-win32.whl", hash = "sha256:df015c47d6855b8efa0b9be706c70bf7f050a4d5ac6d37fb043fbd95157a0e25"}, + {file = "protobuf-4.24.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d4af4fd9e9418e819be30f8df2a16e72fbad546a7576ac7f3653be92a6966d30"}, + {file = "protobuf-4.24.1-cp38-cp38-win32.whl", hash = "sha256:302e8752c760549ed4c7a508abc86b25d46553c81989343782809e1a062a2ef9"}, + {file = "protobuf-4.24.1-cp38-cp38-win_amd64.whl", hash = "sha256:06437f0d4bb0d5f29e3d392aba69600188d4be5ad1e0a3370e581a9bf75a3081"}, + {file = "protobuf-4.24.1-cp39-cp39-win32.whl", hash = "sha256:0b2b224e9541fe9f046dd7317d05f08769c332b7e4c54d93c7f0f372dedb0b1a"}, + {file = "protobuf-4.24.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd39b9094a4cc003a1f911b847ab379f89059f478c0b611ba1215053e295132e"}, + {file = "protobuf-4.24.1-py3-none-any.whl", hash = "sha256:55dd644adc27d2a624339332755fe077c7f26971045b469ebb9732a69ce1f2ca"}, + {file = "protobuf-4.24.1.tar.gz", hash = "sha256:44837a5ed9c9418ad5d502f89f28ba102e9cd172b6668bc813f21716f9273348"}, ] [[package]] @@ -2412,14 +2475,14 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2444,18 +2507,18 @@ test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner [[package]] name = "pylint" -version = "2.17.4" +version = "2.17.5" description = "python code static checker" category = "main" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.4-py3-none-any.whl", hash = "sha256:7a1145fb08c251bdb5cca11739722ce64a63db479283d10ce718b2460e54123c"}, - {file = "pylint-2.17.4.tar.gz", hash = "sha256:5dcf1d9e19f41f38e4e85d10f511e5b9c35e1aa74251bf95cdd8cb23584e2db1"}, + {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, + {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, ] [package.dependencies] -astroid = ">=2.15.4,<=2.17.0-dev0" +astroid = ">=2.15.6,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -2603,14 +2666,14 @@ zstd = ["zstandard"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -2702,14 +2765,14 @@ testing = ["Django", "django-configurations (>=2.0)", "six"] [[package]] name = "pytest-mock" -version = "3.10.0" +version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, - {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, ] [package.dependencies] @@ -2787,16 +2850,66 @@ files = [ {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + [[package]] name = "redis" -version = "4.5.5" +version = "5.0.0" description = "Python client for Redis database and key-value store" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, + {file = "redis-5.0.0-py3-none-any.whl", hash = "sha256:06570d0b2d84d46c21defc550afbaada381af82f5b83e5b3777600e05d8e2ed0"}, + {file = "redis-5.0.0.tar.gz", hash = "sha256:5cea6c0d335c9a7332a460ed8729ceabb4d0c489c7285b0a86dbbf8a017bd120"}, ] [package.dependencies] @@ -2832,14 +2945,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-mock" -version = "1.10.0" +version = "1.11.0" description = "Mock out responses from the requests package" category = "main" optional = false python-versions = "*" files = [ - {file = "requests-mock-1.10.0.tar.gz", hash = "sha256:59c9c32419a9fb1ae83ec242d98e889c45bd7d7a65d48375cc243ec08441658b"}, - {file = "requests_mock-1.10.0-py2.py3-none-any.whl", hash = "sha256:2fdbb637ad17ee15c06f33d31169e71bf9fe2bdb7bc9da26185be0dd8d842699"}, + {file = "requests-mock-1.11.0.tar.gz", hash = "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4"}, + {file = "requests_mock-1.11.0-py2.py3-none-any.whl", hash = "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15"}, ] [package.dependencies] @@ -2848,7 +2961,7 @@ six = "*" [package.extras] fixture = ["fixtures"] -test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testrepository (>=0.0.18)", "testtools"] +test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] [[package]] name = "requests-oauthlib" @@ -2916,14 +3029,14 @@ six = "*" [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] @@ -2954,6 +3067,23 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "sqlparse" +version = "0.4.4" +description = "A non-validating SQL parser." +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, + {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, +] + +[package.extras] +dev = ["build", "flake8"] +doc = ["sphinx"] +test = ["pytest", "pytest-cov"] + [[package]] name = "stone" version = "3.3.1" @@ -2983,6 +3113,10 @@ files = [ {file = "tablib-3.4.0.tar.gz", hash = "sha256:77ea97faf6f92a7e198c05bd0c690f3cba57b83ea45a636b72f967cb6fe6f160"}, ] +[package.dependencies] +openpyxl = {version = ">=2.6.0", optional = true, markers = "extra == \"xlsx\""} +pyyaml = {version = "*", optional = true, markers = "extra == \"yaml\""} + [package.extras] all = ["markuppy", "odfpy", "openpyxl (>=2.6.0)", "pandas", "pyyaml", "tabulate", "xlrd", "xlwt"] cli = ["tabulate"] @@ -3019,14 +3153,14 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.1" description = "Style preserving TOML library" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, ] [[package]] @@ -3047,48 +3181,65 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typed-ast" -version = "1.5.4" +version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -3117,31 +3268,30 @@ files = [ [[package]] name = "urllib3" -version = "2.0.3" +version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "uwsgi" -version = "2.0.21" +version = "2.0.22" description = "The uWSGI server" category = "main" optional = false python-versions = "*" files = [ - {file = "uwsgi-2.0.21.tar.gz", hash = "sha256:35a30d83791329429bc04fe44183ce4ab512fcf6968070a7bfba42fc5a0552a9"}, + {file = "uwsgi-2.0.22.tar.gz", hash = "sha256:4cc4727258671ac5fa17ab422155e9aaef8a2008ebb86e4404b66deaae965db2"}, ] [[package]] @@ -3193,14 +3343,14 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.2" +version = "1.6.1" description = "WebSocket client for Python with low level API options" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.2.tar.gz", hash = "sha256:c7d67c13b928645f259d9b847ab5b57fd2d127213ca41ebd880de1f553b7c23b"}, - {file = "websocket_client-1.5.2-py3-none-any.whl", hash = "sha256:f8c64e28cd700e7ba1f04350d66422b6833b82a796b525a51e740b8cc8dab4b1"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -3311,14 +3461,14 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [[package]] name = "zope-event" -version = "4.6" +version = "5.0" description = "Very basic event publishing system" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "zope.event-4.6-py2.py3-none-any.whl", hash = "sha256:73d9e3ef750cca14816a9c322c7250b0d7c9dbc337df5d1b807ff8d3d0b9e97c"}, - {file = "zope.event-4.6.tar.gz", hash = "sha256:81d98813046fc86cc4136e3698fee628a3282f9c320db18658c21749235fce80"}, + {file = "zope.event-5.0-py3-none-any.whl", hash = "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26"}, + {file = "zope.event-5.0.tar.gz", hash = "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd"}, ] [package.dependencies] @@ -3379,4 +3529,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7.12" -content-hash = "7123862624a3a85e2ca442bfee229ed6e8cb17195c209b5e2b99c5023db3d962" +content-hash = "92b39fa1042f98ce79752aad3d0abf7e62da11410e515c524b3a46caa86ff774" diff --git a/pyproject.toml b/pyproject.toml index d387a55a0..64306fbc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,13 @@ [tool.poetry] name = "designsafe" -version = "5.2.12" +version = "6.0" description = "" authors = ["DesignSafe-CI "] [tool.poetry.dependencies] python = "^3.7.12" agavepy = "1.0.0a12" -Django = "^1.11" +Django = "^2.2.28" cryptography = "^2.3.1" django-cms = "3.7.4" importlib-resources = "^5.4.0" @@ -39,12 +39,12 @@ django-recaptcha2 = "1.4.1" djangocms-snippet = "^2.3.0" django-bootstrap3 = "^11.1.0" djangocms-text-ckeditor = "^3.5.0" -djangocms-cascade = "^0.16.3" +djangocms-cascade = { git = "https://github.com/DesignSafe-CI/djangocms-cascade", rev = "04d52dca46312b24ded3aa1d4cf3955a88ebc147" } djangocms-style = "^2.3.0" djangocms-video = "^2.3.0" djangocms-picture = "^2.4.0" djangocms-file = "^2.4.0" -djangocms-forms = "^0.2.5" +djangocms-forms-maintained = { git = "https://github.com/avryhof/djangocms-forms", rev = "d8a69efd2f447ee2f940c7b6f5b8b088c9cb79ed" } djangocms-googlemap = "^1.4.0" oauth2client = "^4.1.2" mysqlclient = "^1.4.6" diff --git a/requirements.txt b/requirements.txt index 5fc434c45..fea69f270 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,158 +1,168 @@ agavepy==1.0.0a12 -amqp==5.0.7; python_version >= "3.6" -appnope==0.1.2; sys_platform == "darwin" and python_version >= "3.4" -arrow==1.2.2; python_version >= "3.6" -astroid==2.9.0; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" -atomicwrites==1.4.0; python_version >= "3.5" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") or sys_platform == "win32" and python_version >= "3.5" and python_full_version >= "3.4.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") +amqp==5.1.1; python_version >= "3.7" +appnope==0.1.3; sys_platform == "darwin" and python_version >= "3.4" +arrow==1.2.3; python_version >= "3.6" +asgiref==3.6.0; python_version >= "3.7" +astroid==2.14.2; python_full_version >= "3.7.2" +async-timeout==4.0.2; python_version >= "3.7" +atomicwrites==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.4.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") attrdict==2.0.1 -attrs==21.2.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5" +attrs==22.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" backcall==0.2.0; python_version >= "3.4" -billiard==3.6.4.0; python_version >= "3.6" +billiard==3.6.4.0; python_version >= "3.7" black==21.12b0; python_full_version >= "3.6.2" boxsdk==2.14.0 -cached-property==1.5.2; python_version < "3.8" and python_version >= "3.6" -cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") -celery==5.1.2; python_version >= "3.6" -certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" -cffi==1.15.0; python_version >= "2.7" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" and sys_platform == "win32" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5") or platform_python_implementation == "CPython" and sys_platform == "win32" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5") and python_full_version >= "3.5.0" -charset-normalizer==2.0.9; python_full_version >= "3.6.0" and python_version >= "3" -click-didyoumean==0.3.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" -click-plugins==1.1.1; python_version >= "3.6" -click-repl==0.2.0; python_version >= "3.6" -click==7.1.2; python_full_version >= "3.6.2" and python_version >= "3.6" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") -cloudpickle==2.0.0; python_version >= "3.6" -colorama==0.4.4; sys_platform == "win32" and python_version >= "3.5" and python_full_version >= "3.6.2" and (python_version >= "3.4" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.4" and python_full_version >= "3.5.0") and (python_version >= "3.5" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") or sys_platform == "win32" and python_version >= "3.5" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") and python_full_version >= "3.5.0") -coverage==6.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +cached-property==1.5.2; python_version < "3.8" and python_version >= "3.7" +cachetools==5.3.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") +celery==5.2.7; python_version >= "3.7" +certifi==2022.12.7; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.4.0" and python_version < "4" and python_version >= "3.7" +cffi==1.15.1; python_version >= "2.7" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" and sys_platform == "win32" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5") or platform_python_implementation == "CPython" and sys_platform == "win32" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5") and python_full_version >= "3.5.0" +charset-normalizer==3.0.1; python_version >= "3.7" and python_version < "4" +click-didyoumean==0.3.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.7" +click-plugins==1.1.1; python_version >= "3.7" +click-repl==0.2.0; python_version >= "3.7" +click==8.1.3; python_version >= "3.7" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" +cloudpickle==2.2.1; python_version >= "3.6" +colorama==0.4.6; sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.2" and platform_system == "Windows" and (python_version >= "3.4" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.4" and python_full_version >= "3.7.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") or sys_platform == "win32" and python_version >= "3.7" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and python_full_version >= "3.7.0") +coverage==7.1.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" cryptography==2.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") curlify==2.2.1 -dataclasses==0.8; python_version >= "3.6" and python_version < "3.7" and python_full_version >= "3.6.2" -decorator==5.1.0; python_version >= "3.5" -deprecated==1.2.13; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +decorator==5.1.1; python_version >= "3.5" +dill==0.3.6 django-appconf==1.0.5; python_version >= "3.6" django-bootstrap3==11.1.0 -django-classy-tags==1.0.0 -django-cms==3.4.7 +django-classy-tags==3.0.1; python_version >= "3.7" +django-cms==3.8.0 +django-entangled==0.5.3 django-filer==1.7.1 django-formtools==2.2 django-haystack==2.8.1 django-impersonate==1.5.1 django-ipware==1.2.0 -django-js-asset==1.2.2; python_version >= "3.6" -django-mptt==0.13.4; python_version >= "3.6" +django-js-asset==2.0.0; python_version >= "3.6" +django-mptt==0.14.0; python_version >= "3.6" django-polymorphic==2.1.2 django-recaptcha2==1.4.1 +django-recaptcha==3.0.0 django-sekizai==1.1.0 +django-select2==6.3.1 django-termsandconditions==1.2.15 -django-treebeard==4.3.1 +django-treebeard==4.5.1; python_version >= "3.6" django-websocket-redis==0.6.0 -django==1.11.29 -djangocms-admin-style==2.0.2 -djangocms-attributes-field==1.2.0 -djangocms-cascade==0.16.3 +django==2.2.28; python_version >= "3.5" +djangocms-admin-style==3.2.3; python_version >= "3.7" +djangocms-attributes-field==2.0.0 +djangocms-cascade==1.3.7 djangocms-file==2.4.0 -djangocms-forms==0.2.5 +djangocms-forms-maintained @ git+https://github.com/avryhof/djangocms-forms@d8a69efd2f447ee2f940c7b6f5b8b088c9cb79ed djangocms-googlemap==1.4.0 djangocms-picture==2.4.0 djangocms-snippet==2.3.0 djangocms-style==2.3.0 -djangocms-text-ckeditor==3.10.0 +djangocms-text-ckeditor==4.0.0 djangocms-video==2.3.0 dropbox==10.6.0 -easy-thumbnails==2.7.2; python_version >= "3.5" +easy-thumbnails==2.8.5; python_version >= "3.6" elasticsearch-dsl==7.4.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") -elasticsearch==7.16.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0" and python_version < "4") +elasticsearch==7.17.9; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0" and python_version < "4") +et-xmlfile==1.1.0; python_version >= "3.7" exifread==2.3.2 -future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" -gevent==21.12.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" -google-api-core==2.3.0; python_version >= "3.6" -google-api-python-client==2.33.0; python_version >= "3.6" +future==0.18.3; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" +gevent==22.10.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" +google-api-core==2.11.0; python_version >= "3.7" +google-api-python-client==2.77.0; python_version >= "3.7" google-auth-httplib2==0.1.0 google-auth-oauthlib==0.4.6; python_version >= "3.6" -google-auth==2.3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" -googleapis-common-protos==1.54.0; python_version >= "3.6" -greenlet==1.1.2; python_version >= "2.7" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" or python_version > "3.5" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" or python_version > "3.5" and platform_python_implementation == "CPython" and python_full_version >= "3.5.0" +google-auth==2.16.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" +googleapis-common-protos==1.58.0; python_version >= "3.7" +greenlet==2.0.2; python_version >= "2.7" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" or python_version > "3.5" and python_full_version < "3.0.0" and platform_python_implementation == "CPython" or python_version > "3.5" and platform_python_implementation == "CPython" and python_full_version >= "3.5.0" hashids==1.3.1; python_version >= "2.7" html5lib==1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" -httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5" -importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.4.0" and python_version >= "3.6" and python_version < "3.8") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") -importlib-resources==5.4.0; python_version >= "3.6" +httplib2==0.21.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +idna==3.4; python_version >= "3.7" and python_version < "4" +importlib-metadata==2.1.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") +importlib-resources==5.10.2; python_version >= "3.7" ipdb==0.12.3; python_version >= "2.7" -ipython-genutils==0.2.0; python_version >= "3.3" ipython==6.5.0; python_version >= "3.3" -isort==5.10.1; python_full_version >= "3.6.2" and python_version < "4.0" -jedi==0.18.1; python_version >= "3.6" -jinja2==3.0.3; python_version >= "3.6" -jsonfield==2.1.1 +isort==5.11.5; python_full_version >= "3.7.2" +jedi==0.18.2; python_version >= "3.6" +jinja2==3.1.2; python_version >= "3.7" +jsonfield==3.1.0; python_version >= "3.6" jsonpickle==0.9.6 -kombu==5.1.0; python_version >= "3.6" -lazy-object-proxy==1.7.0; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" -markupsafe==2.0.1; python_version >= "3.6" -mccabe==0.6.1; python_full_version >= "3.6.2" +kombu==5.2.4; python_version >= "3.7" +lazy-object-proxy==1.9.0; python_version >= "3.7" and python_full_version >= "3.7.2" +markupsafe==2.1.2; python_version >= "3.7" +mccabe==0.7.0; python_version >= "3.6" and python_full_version >= "3.7.2" mock==4.0.3; python_version >= "3.6" -more-itertools==8.12.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5" -mypy-extensions==0.4.3; python_full_version >= "3.6.2" +more-itertools==9.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" +mypy-extensions==1.0.0; python_version >= "3.5" and python_full_version >= "3.6.2" mysqlclient==1.4.6 oauth2client==4.1.3 -oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +oauthlib==3.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +olefile==0.46; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" +openpyxl==3.1.1; python_version >= "3.7" +opf-fido==1.6.1 +packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" parso==0.8.3; python_version >= "3.6" -pathspec==0.9.0; python_full_version >= "3.6.2" +pathspec==0.11.0; python_version >= "3.7" and python_full_version >= "3.6.2" petname==2.6 pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.4" pickleshare==0.7.5; python_version >= "3.4" -pillow==8.4.0; python_version >= "3.6" -platformdirs==2.4.0; python_version >= "3.6" and python_full_version >= "3.6.2" -pluggy==0.13.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5" +pillow==9.4.0; python_version >= "3.7" +platformdirs==3.0.0; python_version >= "3.7" and python_full_version >= "3.7.2" +pluggy==0.13.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" ply==3.11 -prompt-toolkit==1.0.18; python_version >= "3.6" -protobuf==3.19.1; python_version >= "3.6" +prompt-toolkit==1.0.18; python_version >= "3.7" +protobuf==4.21.12; python_version >= "3.7" ptyprocess==0.7.0; sys_platform != "win32" and python_version >= "3.3" -py==1.11.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5" -pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" -pyasn1==0.4.8; python_version >= "3.6" and python_version < "4" +py==1.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" +pyasn1-modules==0.2.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" +pyasn1==0.4.8; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") or python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") pycparser==2.21; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" -pygments==2.10.0; python_version >= "3.5" +pygments==2.14.0; python_version >= "3.6" pyjwt==1.7.1 -pylint==2.12.2; python_full_version >= "3.6.2" -pymongo==3.12.3 -pyparsing==3.0.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +pylint==2.16.2; python_full_version >= "3.7.2" +pymongo==3.13.0 +pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.7" pytest-asyncio==0.14.0; python_version >= "3.5" pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") pytest-django==3.10.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") -pytest-mock==3.6.1; python_version >= "3.6" +pytest-mock==3.10.0; python_version >= "3.7" pytest==5.4.3; python_version >= "3.5" python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -python-dotenv==0.19.2; python_version >= "3.5" -python-magic==0.4.24; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") +python-dotenv==0.21.1; python_version >= "3.7" +python-magic==0.4.27; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") python-memcached==1.59 -pytz==2021.3; python_version >= "3.6" -redis==4.0.2; python_version >= "3.6" -requests-mock==1.9.3 -requests-oauthlib==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -requests-toolbelt==0.9.1 -requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" -rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") +pytz==2022.7.1; python_version >= "3.7" +pyyaml==6.0; python_version >= "3.7" +redis==4.5.1; python_version >= "3.7" +requests-mock==1.10.0 +requests-oauthlib==1.3.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +requests-toolbelt==0.10.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" +requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") +rsa==4.9; python_version >= "3.6" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") rt==1.0.13 simplegeneric==0.8.1; python_version >= "3.4" -six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" -stone==3.2.1 -tablib==3.1.0; python_version >= "3.6" -toml==0.10.2; python_full_version >= "3.6.2" -tomli==1.2.3; python_version >= "3.6" and python_full_version >= "3.6.2" -traitlets==4.3.3; python_version >= "3.4" -typed-ast==1.5.1; python_version < "3.8" and implementation_name == "cpython" and python_full_version >= "3.6.2" and python_version >= "3.6" -typing-extensions==4.0.1 +six==1.16.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" +sqlparse==0.4.3; python_version >= "3.6" +stone==3.3.1 +tablib==3.3.0; python_version >= "3.7" +toml==0.10.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" +tomli==1.2.3; python_version >= "3.6" and python_full_version >= "3.7.2" and python_version < "3.11" +tomlkit==0.11.6; python_version >= "3.6" and python_full_version >= "3.7.2" +traitlets==5.9.0; python_version >= "3.7" +typed-ast==1.5.4; python_version < "3.8" and implementation_name == "cpython" and python_full_version >= "3.7.2" and python_version >= "3.6" +typing-extensions==4.4.0 unidecode==1.1.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" -uritemplate==4.1.1; python_version >= "3.6" -urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" -uwsgi==2.0.20 +uritemplate==4.1.1; python_version >= "3.7" +urllib3==1.26.14; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" +uwsgi==2.0.21 uwsgitop==0.11 -vine==5.0.0; python_version >= "3.6" -wcwidth==0.2.5; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5" +vine==5.0.0; python_version >= "3.7" +wcwidth==0.2.6; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" webencodings==0.5.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" -websocket-client==1.2.3; python_version >= "3.6" -wrapt==1.13.3; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") -zipp==3.6.0; python_version < "3.8" and python_version >= "3.6" -zope.event==4.5.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" -zope.interface==5.4.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version > "3.5" +websocket-client==1.5.1; python_version >= "3.7" +wrapt==1.14.1 +zipp==3.13.0; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_version < "3.8" and python_version >= "3.7" and python_full_version >= "3.5.0") and python_full_version >= "3.6.2" +zope.event==4.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" +zope.interface==5.5.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_version > "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version > "3.5"