diff --git a/.coveragerc b/.coveragerc index 9a86c7fa7..f233092c9 100644 --- a/.coveragerc +++ b/.coveragerc @@ -5,4 +5,3 @@ omit = */migrations/* */tests.py */test_*.py - */autofixtures.py diff --git a/apps/activities/migrations/0005_rename_table_to_default.py b/apps/activities/migrations/0005_rename_table_to_default.py index e8285e64a..5f6faca47 100644 --- a/apps/activities/migrations/0005_rename_table_to_default.py +++ b/apps/activities/migrations/0005_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_activities', '0004_update_content_types'), diff --git a/apps/budgeting/exports.py b/apps/budgeting/exports.py index a9a57fd7d..0a6837b07 100644 --- a/apps/budgeting/exports.py +++ b/apps/budgeting/exports.py @@ -39,7 +39,7 @@ def get_queryset(self): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated class ProposalCommentExportView(PermissionRequiredMixin, @@ -75,4 +75,4 @@ def get_virtual_fields(self, virtual): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated diff --git a/apps/budgeting/migrations/0021_update_content_types.py b/apps/budgeting/migrations/0021_update_content_types.py index f5ff701bf..5cf422b4c 100644 --- a/apps/budgeting/migrations/0021_update_content_types.py +++ b/apps/budgeting/migrations/0021_update_content_types.py @@ -14,6 +14,7 @@ class Migration(migrations.Migration): + atomic = False replaces = [('liqd_product_budgeting', '0021_update_content_types')] diff --git a/apps/budgeting/migrations/0023_rename_table_to_default.py b/apps/budgeting/migrations/0023_rename_table_to_default.py index 2d0fe84c7..66de067f1 100644 --- a/apps/budgeting/migrations/0023_rename_table_to_default.py +++ b/apps/budgeting/migrations/0023_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_budgeting', '0022_update_content_types'), diff --git a/apps/budgeting/models.py b/apps/budgeting/models.py index 83329d87b..746d88add 100644 --- a/apps/budgeting/models.py +++ b/apps/budgeting/models.py @@ -1,6 +1,6 @@ from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from adhocracy4.comments import models as comment_models diff --git a/apps/cms/pages/migrations/0006_rename_tables_to_default.py b/apps/cms/pages/migrations/0006_rename_tables_to_default.py index b672b5f91..197509177 100644 --- a/apps/cms/pages/migrations/0006_rename_tables_to_default.py +++ b/apps/cms/pages/migrations/0006_rename_tables_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_cms_pages', '0005_update_content_types'), diff --git a/apps/cms/settings/migrations/0003_rename_table_to_default.py b/apps/cms/settings/migrations/0003_rename_table_to_default.py index 3c2ebb96d..49d678b6c 100644 --- a/apps/cms/settings/migrations/0003_rename_table_to_default.py +++ b/apps/cms/settings/migrations/0003_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_cms_settings', '0002_update_content_types'), diff --git a/apps/contrib/sitemaps/product_projects_sitemap.py b/apps/contrib/sitemaps/product_projects_sitemap.py index cdfb15020..f6be80252 100644 --- a/apps/contrib/sitemaps/product_projects_sitemap.py +++ b/apps/contrib/sitemaps/product_projects_sitemap.py @@ -1,5 +1,5 @@ from django.contrib.sitemaps import Sitemap -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.projects.models import Project from apps.partners.models import Partner diff --git a/apps/contrib/templatetags/item_tags.py b/apps/contrib/templatetags/item_tags.py index 023d0fec3..f62b6a182 100644 --- a/apps/contrib/templatetags/item_tags.py +++ b/apps/contrib/templatetags/item_tags.py @@ -1,6 +1,6 @@ from django import template -from django.core.urlresolvers import reverse from django.urls import NoReverseMatch +from django.urls import reverse register = template.Library() diff --git a/apps/dashboard/views.py b/apps/dashboard/views.py index 0e17414aa..a9c45f8b0 100644 --- a/apps/dashboard/views.py +++ b/apps/dashboard/views.py @@ -1,6 +1,6 @@ from django.apps import apps -from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect +from django.urls import reverse from django.views import generic from django.views.generic.detail import SingleObjectMixin diff --git a/apps/documents/exports.py b/apps/documents/exports.py index 1bcfa7925..d7fc88aaf 100644 --- a/apps/documents/exports.py +++ b/apps/documents/exports.py @@ -43,4 +43,4 @@ def get_virtual_fields(self, virtual): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated diff --git a/apps/documents/migrations/0009_rename_table_to_default.py b/apps/documents/migrations/0009_rename_table_to_default.py index 38aef7984..a2a14018b 100644 --- a/apps/documents/migrations/0009_rename_table_to_default.py +++ b/apps/documents/migrations/0009_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_documents', '0008_update_content_types'), diff --git a/apps/documents/models.py b/apps/documents/models.py index cf998a9f6..7161cb011 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -1,7 +1,7 @@ from ckeditor_uploader.fields import RichTextUploadingField from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.functional import cached_property from adhocracy4 import transforms diff --git a/apps/ideas/exports.py b/apps/ideas/exports.py index 5cea26339..1de4c16c2 100644 --- a/apps/ideas/exports.py +++ b/apps/ideas/exports.py @@ -38,7 +38,7 @@ def get_queryset(self): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated class IdeaCommentExportView(PermissionRequiredMixin, @@ -72,4 +72,4 @@ def get_virtual_fields(self, virtual): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated diff --git a/apps/ideas/migrations/0018_rename_table_to_default.py b/apps/ideas/migrations/0018_rename_table_to_default.py index be9a84402..f61c81b82 100644 --- a/apps/ideas/migrations/0018_rename_table_to_default.py +++ b/apps/ideas/migrations/0018_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_ideas', '0017_rename_app_in_phase_type'), diff --git a/apps/ideas/models.py b/apps/ideas/models.py index d45a0c4fd..03359ae03 100644 --- a/apps/ideas/models.py +++ b/apps/ideas/models.py @@ -2,8 +2,8 @@ from ckeditor.fields import RichTextField from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.models import ContentType -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from adhocracy4 import transforms @@ -25,7 +25,8 @@ class IdeaQuerySet(query.RateableQuerySet, query.CommentableQuerySet): class AbstractIdea(module_models.Item, Moderateable): item_ptr = models.OneToOneField(to=module_models.Item, parent_link=True, - related_name='%(app_label)s_%(class)s') + related_name='%(app_label)s_%(class)s', + on_delete=models.CASCADE) slug = AutoSlugField(populate_from='name', unique=True) name = models.CharField(max_length=120, verbose_name=_('Title')) description = RichTextField(verbose_name=_('Description')) diff --git a/apps/ideas/views.py b/apps/ideas/views.py index 9672a7416..78ef89363 100644 --- a/apps/ideas/views.py +++ b/apps/ideas/views.py @@ -1,6 +1,6 @@ from django.contrib import messages -from django.core.urlresolvers import reverse from django.db import transaction +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django.views import generic diff --git a/apps/mapideas/exports.py b/apps/mapideas/exports.py index 12c50c0f7..e7e49d3cc 100644 --- a/apps/mapideas/exports.py +++ b/apps/mapideas/exports.py @@ -39,7 +39,7 @@ def get_permission_object(self): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated class MapIdeaCommentExportView(PermissionRequiredMixin, @@ -73,4 +73,4 @@ def get_virtual_fields(self, virtual): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated diff --git a/apps/mapideas/migrations/0020_rename_table_to_default.py b/apps/mapideas/migrations/0020_rename_table_to_default.py index ad8659294..0979a1dd4 100644 --- a/apps/mapideas/migrations/0020_rename_table_to_default.py +++ b/apps/mapideas/migrations/0020_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_mapideas', '0019_update_content_types'), diff --git a/apps/mapideas/models.py b/apps/mapideas/models.py index 53833e4a7..e198b683c 100644 --- a/apps/mapideas/models.py +++ b/apps/mapideas/models.py @@ -1,6 +1,6 @@ from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from adhocracy4.comments import models as comment_models diff --git a/apps/maps/migrations/0005_rename_table_to_default.py b/apps/maps/migrations/0005_rename_table_to_default.py index 24d59a64c..7e4754e71 100644 --- a/apps/maps/migrations/0005_rename_table_to_default.py +++ b/apps/maps/migrations/0005_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_maps', '0004_update_content_types'), diff --git a/apps/moderatorfeedback/migrations/0003_rename_table_to_default.py b/apps/moderatorfeedback/migrations/0003_rename_table_to_default.py index b27d229c9..6f3b11311 100644 --- a/apps/moderatorfeedback/migrations/0003_rename_table_to_default.py +++ b/apps/moderatorfeedback/migrations/0003_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_moderatorfeedback', '0002_update_content_types'), diff --git a/apps/moderatorfeedback/models.py b/apps/moderatorfeedback/models.py index 85e6b09d3..b416ab24e 100644 --- a/apps/moderatorfeedback/models.py +++ b/apps/moderatorfeedback/models.py @@ -32,6 +32,7 @@ class Moderateable(models.Model): related_name='+', null=True, blank=True, + on_delete=models.CASCADE ) class Meta: diff --git a/apps/moderatorremark/api.py b/apps/moderatorremark/api.py index a14fb08c7..6e227fb5a 100644 --- a/apps/moderatorremark/api.py +++ b/apps/moderatorremark/api.py @@ -24,7 +24,7 @@ class ModeratorRemarkViewSet(mixins.CreateModelMixin, serializer_class = ModeratorRemarkSerializer permission_classes = (ViewSetRulesPermission,) filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('item_object_id', 'item_content_type') + filterset_fields = ('item_object_id', 'item_content_type') content_type_filter = AllContentTypesFilter() def get_permission_object(self): diff --git a/apps/moderatorremark/migrations/0005_rename_table_to_default.py b/apps/moderatorremark/migrations/0005_rename_table_to_default.py index 8c4d1a745..932b2d88e 100644 --- a/apps/moderatorremark/migrations/0005_rename_table_to_default.py +++ b/apps/moderatorremark/migrations/0005_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_moderatorremark', '0004_update_content_types'), diff --git a/apps/offlineevents/migrations/0005_rename_table_to_default.py b/apps/offlineevents/migrations/0005_rename_table_to_default.py index 019f3b8f9..765ef5a18 100644 --- a/apps/offlineevents/migrations/0005_rename_table_to_default.py +++ b/apps/offlineevents/migrations/0005_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_offlineevents', '0004_update_content_types'), diff --git a/apps/offlineevents/models.py b/apps/offlineevents/models.py index 4e9ac0ffa..7360f4f8f 100644 --- a/apps/offlineevents/models.py +++ b/apps/offlineevents/models.py @@ -1,7 +1,7 @@ from autoslug import AutoSlugField from ckeditor_uploader.fields import RichTextUploadingField -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from adhocracy4 import transforms diff --git a/apps/offlineevents/views.py b/apps/offlineevents/views.py index e91d35e50..991b82e55 100644 --- a/apps/offlineevents/views.py +++ b/apps/offlineevents/views.py @@ -1,5 +1,5 @@ from django.contrib import messages -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django.views import generic diff --git a/apps/organisations/migrations/0003_rename_table_to_default.py b/apps/organisations/migrations/0003_rename_table_to_default.py index 7d2efd2cf..9fbc68360 100644 --- a/apps/organisations/migrations/0003_rename_table_to_default.py +++ b/apps/organisations/migrations/0003_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_organisations', '0002_update_content_types'), diff --git a/apps/partners/migrations/0014_rename_table_to_default.py b/apps/partners/migrations/0014_rename_table_to_default.py index 9b5de6685..7c5a15197 100644 --- a/apps/partners/migrations/0014_rename_table_to_default.py +++ b/apps/partners/migrations/0014_rename_table_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_partners', '0013_update_content_types'), diff --git a/apps/partners/urlresolvers.py b/apps/partners/urlresolvers.py index fb6e85777..a74bc2de1 100644 --- a/apps/partners/urlresolvers.py +++ b/apps/partners/urlresolvers.py @@ -1,9 +1,9 @@ import itertools -from django.conf.urls import RegexURLPattern -from django.conf.urls import RegexURLResolver from django.conf.urls import include from django.conf.urls import url +from django.urls import URLPattern +from django.urls import URLResolver from apps.django_overwrites.urlresolvers import django_reverse @@ -15,14 +15,14 @@ def partner_patterns(*pattern_list): """Mark the url patterns used with partners.""" for pattern in pattern_list: - if isinstance(pattern, RegexURLPattern): + if isinstance(pattern, URLPattern): _partner_pattern_names.add(pattern.name) - elif isinstance(pattern, RegexURLResolver): + elif isinstance(pattern, URLResolver): for url_pattern in pattern.url_patterns: ns = '' if pattern.app_name: ns = ns + pattern.app_name + ':' - if pattern.namespace: + elif pattern.namespace: ns = ns + pattern.namespace + ':' _partner_pattern_names.add(ns + url_pattern.name) else: diff --git a/apps/polls/exports.py b/apps/polls/exports.py index f04fbec2d..a9f4bc828 100644 --- a/apps/polls/exports.py +++ b/apps/polls/exports.py @@ -39,4 +39,4 @@ def get_virtual_fields(self, virtual): @property def raise_exception(self): - return bool(self.request.user.is_authenticated) + return self.request.user.is_authenticated diff --git a/apps/polls/migrations/0006_rename_tables_to_default.py b/apps/polls/migrations/0006_rename_tables_to_default.py index b2d6d058a..acb676753 100644 --- a/apps/polls/migrations/0006_rename_tables_to_default.py +++ b/apps/polls/migrations/0006_rename_tables_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_polls', '0005_update_content_types'), diff --git a/apps/polls/models.py b/apps/polls/models.py index 9480a3d41..c79f3055b 100644 --- a/apps/polls/models.py +++ b/apps/polls/models.py @@ -1,6 +1,6 @@ from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from adhocracy4.comments import models as comment_models from adhocracy4.models.base import UserGeneratedContentModel diff --git a/apps/projects/migrations/0003_rename_tables_to_default.py b/apps/projects/migrations/0003_rename_tables_to_default.py index 2d6510d2a..0f7564e6e 100644 --- a/apps/projects/migrations/0003_rename_tables_to_default.py +++ b/apps/projects/migrations/0003_rename_tables_to_default.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_projects', '0002_update_content_types'), diff --git a/apps/projects/models.py b/apps/projects/models.py index 6147afc82..a57e48303 100644 --- a/apps/projects/models.py +++ b/apps/projects/models.py @@ -1,8 +1,8 @@ import uuid from django.conf import settings -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from adhocracy4.models import base from adhocracy4.projects.models import Project diff --git a/apps/users/migrations/0007_rename_table_to_defaults.py b/apps/users/migrations/0007_rename_table_to_defaults.py index b05ab2857..c733ce59e 100644 --- a/apps/users/migrations/0007_rename_table_to_defaults.py +++ b/apps/users/migrations/0007_rename_table_to_defaults.py @@ -6,6 +6,7 @@ class Migration(migrations.Migration): + atomic = False dependencies = [ ('a4_candy_users', '0006_update_content_types'), diff --git a/apps/users/models.py b/apps/users/models.py index 77baa352a..77f8273dd 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -1,8 +1,8 @@ from django.conf import settings from django.contrib.auth import models as auth_models from django.core import validators -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils import timezone from django.utils.translation import get_language from django.utils.translation import ugettext_lazy as _ diff --git a/apps/users/templatetags/userindicator.py b/apps/users/templatetags/userindicator.py index 40ee15450..a28d6c0ae 100644 --- a/apps/users/templatetags/userindicator.py +++ b/apps/users/templatetags/userindicator.py @@ -1,7 +1,7 @@ from allauth.account import urls as account_urls from django import template -from django.core.urlresolvers import Resolver404 -from django.core.urlresolvers import resolve +from django.urls import Resolver404 +from django.urls import resolve INVALID_URL_NAME = object() diff --git a/liqd_product/config/settings/base.py b/liqd_product/config/settings/base.py index f8d1636bf..c2e090188 100644 --- a/liqd_product/config/settings/base.py +++ b/liqd_product/config/settings/base.py @@ -116,7 +116,6 @@ 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'apps.partners.middleware.PartnerMiddleware', diff --git a/liqd_product/config/urls.py b/liqd_product/config/urls.py index 3b8830ce1..6700e6d27 100644 --- a/liqd_product/config/urls.py +++ b/liqd_product/config/urls.py @@ -8,7 +8,7 @@ from django.contrib import admin from django.views.decorators.cache import never_cache from django.views.generic import TemplateView -from django.views.i18n import javascript_catalog +from django.views.i18n import JavaScriptCatalog from rest_framework import routers from wagtail.contrib.sitemaps import views as wagtail_sitemap_views from wagtail.contrib.sitemaps.sitemap_generator import \ @@ -33,10 +33,6 @@ from apps.polls.routers import QuestionDefaultRouter from apps.users.decorators import user_is_project_admin -js_info_dict = { - 'packages': ('adhocracy4.comments',), -} - router = routers.DefaultRouter() router.register(r'follows', FollowViewSet, base_name='follows') router.register(r'reports', ReportViewSet, base_name='reports') @@ -89,8 +85,7 @@ name='ckeditor_browse'), url(r'^components/$', contrib_views.ComponentLibraryView.as_view()), - url(r'^jsi18n/$', javascript_catalog, - js_info_dict, name='javascript-catalog'), + url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'), # Urls within the context of a partner partner_patterns( @@ -100,15 +95,16 @@ # to a separate app. url(r'^projects/', include('apps.projects.urls')), url(r'^offlineevents/', include( - 'apps.offlineevents.urls', + ('apps.offlineevents.urls', 'a4_candy_offlineevents'), namespace='a4_candy_offlineevents')), - url(r'^ideas/', include(r'apps.ideas.urls', + url(r'^ideas/', include(('apps.ideas.urls', 'a4_candy_ideas'), namespace='a4_candy_ideas')), - url(r'^mapideas/', include('apps.mapideas.urls', + url(r'^mapideas/', include(('apps.mapideas.urls', 'a4_candy_mapideas'), namespace='a4_candy_mapideas')), - url(r'^text/', include('apps.documents.urls', + url(r'^text/', include(('apps.documents.urls', 'a4_candy_documents'), namespace='a4_candy_documents')), - url(r'^budgeting/', include('apps.budgeting.urls', + url(r'^budgeting/', include(('apps.budgeting.urls', + 'a4_candy_budgeting'), namespace='a4_candy_budgeting')), ), diff --git a/package.json b/package.json index 8a2c2e52f..5e57d88e5 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@babel/runtime": "7.4.5", "@fortawesome/fontawesome-free": "5.9.0", "acorn": "6.1.1", - "adhocracy4": "liqd/adhocracy4#django1-v1.0", + "adhocracy4": "liqd/adhocracy4#django2-v1.0", "autoprefixer": "9.6.0", "babel-loader": "8.0.6", "bootstrap": "4.3.1", diff --git a/pytest.ini b/pytest.ini index d32eca5b8..6bab49447 100644 --- a/pytest.ini +++ b/pytest.ini @@ -4,3 +4,5 @@ testpaths=tests python_files= tests.py test_*.py +markers= + parametrized diff --git a/requirements/base.txt b/requirements/base.txt index 91f97c10c..68eaef4a5 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,23 +1,25 @@ -git+git://github.com/liqd/adhocracy4.git@django1-v1.0#egg=adhocracy4 -Django==1.11.22 # pyup: <2.0 -wagtail==2.3 # pyup: <2.4 +# A4 +git+git://github.com/liqd/adhocracy4.git@django2-v1.0#egg=adhocracy4 +# Additional requirements bcrypt==3.1.6 +brotli==1.0.7 django-capture-tag==1.0 -XlsxWriter==1.1.8 +django-cloudflare-push==0.2.0 +django-sites==0.10 +raven==6.10.0 +wagtail==2.5.1 +whitenoise==4.1.2 zeep==3.3.1 # Inherited a4-core requirements bleach==3.1.0 -brotli==1.0.7 +Django==2.2.2 # pyup: <2.3 django-allauth==0.39.1 django-autoslug==1.9.4 django-background-tasks==1.2.0 django-ckeditor==5.7.1 -django-cloudflare-push==0.2.0 django-filter==2.1.0 -django-multiselectfield==0.1.8 -django-sites==0.10 django-widget-tweaks==1.4.3 djangorestframework==3.9.4 easy-thumbnails==2.6 @@ -25,6 +27,8 @@ html5lib==1.0.1 jsonfield==2.0.2 python-dateutil==2.8.0 python-magic==0.4.15 -raven==6.10.0 rules==2.0.1 -whitenoise==4.1.2 +XlsxWriter==1.1.8 + +# Project is currently unmaintained. Use our own fork in the meantime +git+git://github.com/liqd/django-multiselectfield.git@v0.1.9#egg=django-multiselectfield==0.1.9 diff --git a/requirements/dev.txt b/requirements/dev.txt index 3445615bf..f030710d1 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,13 +1,14 @@ -r base.txt -django-autofixture==0.12.1 -django-debug-toolbar==1.11 +django-debug-toolbar==2.0 factory-boy==2.12.0 Faker==1.0.7 +# docstyle 4.0 breaks flake8-docstrings 1.3.0. Remove after succesful update +pydocstyle==3.0.0 # pyup: <4.0.0 flake8-docstrings==1.3.0 -flake8==3.7.7 +flake8==3.7.8 freezegun==0.3.11 isort==4.3.20 pytest-cov==2.7.1 -pytest-django==3.4.8 -pytest-factoryboy==2.0.2 -pytest==4.5.0 +pytest-django==3.5.1 +pytest-factoryboy==2.0.3 +pytest==5.0.1 diff --git a/tests/budgeting/test_views_integration.py b/tests/budgeting/test_views_integration.py index 66b2b8b47..c2acabc1f 100644 --- a/tests/budgeting/test_views_integration.py +++ b/tests/budgeting/test_views_integration.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.budgeting import phases diff --git a/tests/documents/test_document_api.py b/tests/documents/test_document_api.py index 3dee404bb..299d9b3e1 100644 --- a/tests/documents/test_document_api.py +++ b/tests/documents/test_document_api.py @@ -1,6 +1,6 @@ import django import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from rest_framework import status from apps.documents import models as document_models @@ -17,7 +17,7 @@ def test_anonymous_user_can_not_retrieve_chapter_list(apiclient, module): def test_anonymous_user_can_not_retrieve_chapter_detail( apiclient, chapter, module): # Assert that no detail route exists - with pytest.raises(django.core.urlresolvers.NoReverseMatch): + with pytest.raises(django.urls.exceptions.NoReverseMatch): url = reverse( 'chapters-detail', kwargs={'module_pk': module.pk, 'pk': chapter.pk} diff --git a/tests/documents/test_document_views.py b/tests/documents/test_document_views.py index febe4b30a..a1d2be959 100644 --- a/tests/documents/test_document_views.py +++ b/tests/documents/test_document_views.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target diff --git a/tests/ideas/test_idea_models.py b/tests/ideas/test_idea_models.py index 11a85653f..736722cfc 100644 --- a/tests/ideas/test_idea_models.py +++ b/tests/ideas/test_idea_models.py @@ -2,7 +2,7 @@ import pytest from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.comments import models as comments_models from adhocracy4.ratings import models as rating_models diff --git a/tests/ideas/test_views_integration.py b/tests/ideas/test_views_integration.py index 875d719e2..29748e7c9 100644 --- a/tests/ideas/test_views_integration.py +++ b/tests/ideas/test_views_integration.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.ideas import phases diff --git a/tests/ideas/views/test_idea_create.py b/tests/ideas/views/test_idea_create.py index 75bedd194..ca8fe92c4 100644 --- a/tests/ideas/views/test_idea_create.py +++ b/tests/ideas/views/test_idea_create.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.ideas import models diff --git a/tests/ideas/views/test_idea_delete.py b/tests/ideas/views/test_idea_delete.py index b053eb711..dae96a8ed 100644 --- a/tests/ideas/views/test_idea_delete.py +++ b/tests/ideas/views/test_idea_delete.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.ideas import models diff --git a/tests/ideas/views/test_idea_update.py b/tests/ideas/views/test_idea_update.py index dd914103a..38aa0f9c1 100644 --- a/tests/ideas/views/test_idea_update.py +++ b/tests/ideas/views/test_idea_update.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.ideas import models diff --git a/tests/mapideas/test_moderation_access.py b/tests/mapideas/test_moderation_access.py index a03346e89..69c2946d7 100644 --- a/tests/mapideas/test_moderation_access.py +++ b/tests/mapideas/test_moderation_access.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from apps.mapideas import phases from tests.factories import PhaseFactory diff --git a/tests/mapideas/test_views_integration.py b/tests/mapideas/test_views_integration.py index a496817e4..95a7a9a10 100644 --- a/tests/mapideas/test_views_integration.py +++ b/tests/mapideas/test_views_integration.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.mapideas import phases diff --git a/tests/mapideas/views/test_mapidea_create.py b/tests/mapideas/views/test_mapidea_create.py index a7175a8d2..f5e0d920c 100644 --- a/tests/mapideas/views/test_mapidea_create.py +++ b/tests/mapideas/views/test_mapidea_create.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.mapideas import models diff --git a/tests/mapideas/views/test_mapidea_delete.py b/tests/mapideas/views/test_mapidea_delete.py index b9e7881bc..cda1b8e91 100644 --- a/tests/mapideas/views/test_mapidea_delete.py +++ b/tests/mapideas/views/test_mapidea_delete.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.mapideas import models diff --git a/tests/mapideas/views/test_mapidea_update.py b/tests/mapideas/views/test_mapidea_update.py index 6a1d8ad46..f76b82629 100644 --- a/tests/mapideas/views/test_mapidea_update.py +++ b/tests/mapideas/views/test_mapidea_update.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.test.helpers import redirect_target from apps.mapideas import models diff --git a/tests/offlineevents/dashboard_components/test_views_project_offlineevents.py b/tests/offlineevents/dashboard_components/test_views_project_offlineevents.py index b4123c5b6..6346581f2 100644 --- a/tests/offlineevents/dashboard_components/test_views_project_offlineevents.py +++ b/tests/offlineevents/dashboard_components/test_views_project_offlineevents.py @@ -1,6 +1,6 @@ import pytest from dateutil.parser import parse -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.dashboard import components from adhocracy4.test.helpers import redirect_target diff --git a/tests/partners/test_partner_detail_view.py b/tests/partners/test_partner_detail_view.py index 97b3d7cbc..326b0a37e 100644 --- a/tests/partners/test_partner_detail_view.py +++ b/tests/partners/test_partner_detail_view.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from apps.partners import set_partner diff --git a/tests/partners/test_urlresolver.py b/tests/partners/test_urlresolver.py index b247507d6..839e699f3 100644 --- a/tests/partners/test_urlresolver.py +++ b/tests/partners/test_urlresolver.py @@ -46,7 +46,8 @@ def test_partner_patterns_instance_ns(partner_factory): auto_set_partner=False) set_partner(partner) urlconf = (partner_patterns( - url(r'^ns/', include(base_urlconf, namespace='instance-ns')) + url(r'^ns/', include((base_urlconf, 'instance-ns'), + namespace='instance-ns')) ),) url_ = reverse('instance-ns:static-url', urlconf) diff --git a/tests/projects/test_dashboard_delete_view.py b/tests/projects/test_dashboard_delete_view.py index c06893529..9674d746b 100644 --- a/tests/projects/test_dashboard_delete_view.py +++ b/tests/projects/test_dashboard_delete_view.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from adhocracy4.projects import models from adhocracy4.test.helpers import redirect_target @@ -36,7 +36,7 @@ def test_user_cannot_delete(client, project_factory, user): 'pk': project.pk }) response = client.post(url) - assert response.status_code == 302 + assert response.status_code == 403 count = models.Project.objects.all().count() assert count == 1 @@ -55,7 +55,7 @@ def test_moderator_cannot_delete(client, project_factory, user): 'pk': project.pk }) response = client.post(url) - assert response.status_code == 302 + assert response.status_code == 403 count = models.Project.objects.all().count() assert count == 1