From 8bfa9a33b093f1aaa3288b7e75da54d97ef5eee5 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Wed, 1 Feb 2017 18:18:48 +0000 Subject: [PATCH 01/21] Updated requirements to Django 1.10 - Legacy-Id: 12778 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5e2737603..a210975fb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ coverage>=4.0.1,!=4.0.2 #cssselect>=0.6.1 # for PyQuery decorator>=3.4.0 defusedxml>=0.4.1 # for TastyPie when ussing xml; not a declared dependency -Django>=1.9,<1.10 +Django>=1.10,<1.11 django-bootstrap3>=7.0 django-formtools>=1.0 # instead of django.contrib.formtools in 1.8 django-markup>=1.1 From b76227340016daa4488bdae36fa24eb55fc36d7e Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 10 Feb 2017 11:00:38 +0000 Subject: [PATCH 02/21] Removed some old warning filters (OBE) - Legacy-Id: 12810 --- ietf/settings.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ietf/settings.py b/ietf/settings.py index cc5ee4ca1..49853f295 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -13,13 +13,9 @@ warnings.simplefilter("always", DeprecationWarning) warnings.filterwarnings("ignore", message="Report.file_reporters will no longer be available in Coverage.py 4.2", module="coverage.report") warnings.filterwarnings("ignore", message="initial_data fixtures are deprecated. Use data migrations instead.", module="django.core.management.commands.loaddata") warnings.filterwarnings("ignore", message="The popen2 module is deprecated. Use the subprocess module.", module="ietf.utils.pipe") -warnings.filterwarnings("ignore", message="Reversing by dotted path is deprecated") -warnings.filterwarnings("ignore", message=r"Support for string view arguments to url\(\) is deprecated and will be removed in Django 1.10") # This is triggered by the TimedeltaField, which we retain only for the sake # of old migrations: warnings.filterwarnings("ignore", message=r"SubfieldBase has been deprecated. Use Field.from_db_value instead.") -# Bootstrap3 library code: -warnings.filterwarnings("ignore", message=r"render\(\) must be called with a dict, not a Context", module="bootstrap3.utils") try: From deb8ab6dba1b5f7b0aabe7eff849106019df1797 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 10 Feb 2017 11:02:06 +0000 Subject: [PATCH 03/21] Changed the nomcom __getattr__ mixin manager so as to not interfere with django 1.10 internals. - Legacy-Id: 12811 --- ietf/nomcom/managers.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ietf/nomcom/managers.py b/ietf/nomcom/managers.py index 20f5e8ea0..74806959d 100644 --- a/ietf/nomcom/managers.py +++ b/ietf/nomcom/managers.py @@ -1,14 +1,17 @@ from django.db import models from django.db.models.query import QuerySet +import debug # pyflakes:ignore class MixinManager(object): def __getattr__(self, attr, *args): - try: - return getattr(self.__class__, attr, *args) - except AttributeError: - return getattr(self.get_queryset(), attr, *args) - + if attr.startswith('__'): + return getattr(self.__class__, attr, *args) + else: + try: + return getattr(self.__class__, attr, *args) + except AttributeError: + return getattr(self.get_queryset(), attr, *args) class NomineePositionQuerySet(QuerySet): From 088e2ca7f4e52aad6d732247b46a56abd7e5dad2 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 10 Feb 2017 14:43:37 +0000 Subject: [PATCH 04/21] Removed dead code which used to work around a now fixed bug (and also used a now removed django function) - Legacy-Id: 12813 --- ietf/doc/templatetags/ietf_filters.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 18c27572f..f8912b864 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -15,7 +15,6 @@ from django import template from django.conf import settings from django.utils.html import escape from django.template.defaultfilters import truncatewords_html, linebreaksbr, stringfilter, striptags, urlize -from django.template import resolve_variable from django.utils.safestring import mark_safe, SafeData from django.utils.html import strip_tags @@ -396,17 +395,6 @@ def has_role(user, role_names): return False return has_role(user, role_names.split(',')) -@register.filter -def stable_dictsort(value, arg): - """ - Like dictsort, except it's stable (preserves the order of items - whose sort key is the same). See also bug report - http://code.djangoproject.com/ticket/12110 - """ - decorated = [(resolve_variable('var.' + arg, {'var' : item}), item) for item in value] - decorated.sort(lambda a, b: cmp(a[0], b[0]) if a[0] and b[0] else -1 if b[0] else 1 if a[0] else 0) - return [item[1] for item in decorated] - @register.filter def ad_area(user): if user and user.is_authenticated(): From 2d8963cde75c562f0176b91e47997cdbda12249c Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 10 Feb 2017 14:44:23 +0000 Subject: [PATCH 05/21] Fixed an import issue - Legacy-Id: 12814 --- ietf/dbtemplate/template.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ietf/dbtemplate/template.py b/ietf/dbtemplate/template.py index dc29ff08b..32882ca2c 100644 --- a/ietf/dbtemplate/template.py +++ b/ietf/dbtemplate/template.py @@ -4,7 +4,7 @@ from docutils.core import publish_string from docutils.utils import SystemMessage import debug # pyflakes:ignore -from django.template import loaders +from django.template.loaders.base import Loader as BaseLoader from django.template.base import Template as DjangoTemplate, TemplateEncodingError from django.template.exceptions import TemplateDoesNotExist from django.utils.encoding import smart_unicode @@ -61,7 +61,7 @@ class RSTTemplate(PlainTemplate): e.args = tuple(args) raise e -class Loader(loaders.base.Loader): +class Loader(BaseLoader): def __init__(self, engine): super(Loader, self).__init__(engine) self.is_usable = True From 19d585255a3ec68d79ef8ca91ec160624ab40ddb Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 10 Feb 2017 14:49:16 +0000 Subject: [PATCH 06/21] Django 1.10 does not permit the view argument to url() to be a string any more. Changed all cases view arguments to url() which were strings to instead reference the actual imported function. - Legacy-Id: 12815 --- ietf/community/urls.py | 16 ++++---- ietf/dbtemplate/urls.py | 6 ++- ietf/doc/urls.py | 8 ++-- ietf/doc/urls_charter.py | 26 +++++++------ ietf/doc/urls_conflict_review.py | 16 ++++---- ietf/doc/urls_material.py | 4 +- ietf/doc/urls_status_change.py | 20 +++++----- ietf/group/urls.py | 22 ++++++----- ietf/group/urls_info.py | 2 +- ietf/group/urls_info_details.py | 59 +++++++++++++++-------------- ietf/help/urls.py | 8 ++-- ietf/iesg/urls.py | 28 +++++++------- ietf/ipr/urls.py | 38 ++++++++++--------- ietf/liaisons/urls.py | 34 +++++++++-------- ietf/mailinglists/urls.py | 4 +- ietf/mailtrigger/urls.py | 10 +++-- ietf/nomcom/urls.py | 65 ++++++++++++++++---------------- ietf/person/urls.py | 2 +- ietf/redirects/urls.py | 4 +- ietf/release/urls.py | 6 ++- ietf/secr/announcement/urls.py | 6 ++- ietf/secr/areas/urls.py | 18 +++++---- ietf/secr/console/urls.py | 4 +- ietf/secr/drafts/urls.py | 42 +++++++++++---------- ietf/secr/groups/urls.py | 26 +++++++------ ietf/secr/meetings/urls.py | 44 ++++++++++----------- ietf/secr/proceedings/urls.py | 16 ++++---- ietf/secr/roles/urls.py | 8 ++-- ietf/secr/rolodex/urls.py | 14 ++++--- ietf/secr/sreq/urls.py | 24 ++++++------ ietf/secr/telechat/urls.py | 20 +++++----- ietf/stats/urls.py | 6 +-- ietf/sync/urls.py | 8 ++-- ietf/urls.py | 25 ++++++------ ietf/utils/urls.py | 4 +- 35 files changed, 352 insertions(+), 291 deletions(-) diff --git a/ietf/community/urls.py b/ietf/community/urls.py index 999512f76..d07c37475 100644 --- a/ietf/community/urls.py +++ b/ietf/community/urls.py @@ -1,12 +1,14 @@ from django.conf.urls import url +from ietf.community import views + urlpatterns = [ - url(r'^personal/(?P[^/]+)/$', 'ietf.community.views.view_list'), - url(r'^personal/(?P[^/]+)/manage/$', 'ietf.community.views.manage_list'), - url(r'^personal/(?P[^/]+)/trackdocument/(?P[^/]+)/$', 'ietf.community.views.track_document'), - url(r'^personal/(?P[^/]+)/untrackdocument/(?P[^/]+)/$', 'ietf.community.views.untrack_document'), - url(r'^personal/(?P[^/]+)/csv/$', 'ietf.community.views.export_to_csv'), - url(r'^personal/(?P[^/]+)/feed/$', 'ietf.community.views.feed'), - url(r'^personal/(?P[^/]+)/subscription/$', 'ietf.community.views.subscription'), + url(r'^personal/(?P[^/]+)/$', views.view_list), + url(r'^personal/(?P[^/]+)/manage/$', views.manage_list), + url(r'^personal/(?P[^/]+)/trackdocument/(?P[^/]+)/$', views.track_document), + url(r'^personal/(?P[^/]+)/untrackdocument/(?P[^/]+)/$', views.untrack_document), + url(r'^personal/(?P[^/]+)/csv/$', views.export_to_csv), + url(r'^personal/(?P[^/]+)/feed/$', views.feed), + url(r'^personal/(?P[^/]+)/subscription/$', views.subscription), ] diff --git a/ietf/dbtemplate/urls.py b/ietf/dbtemplate/urls.py index 7a9a8bd51..3d878422a 100644 --- a/ietf/dbtemplate/urls.py +++ b/ietf/dbtemplate/urls.py @@ -1,7 +1,9 @@ from django.conf.urls import url +from ietf.dbtemplate import views + urlpatterns = [ - url(r'^(?P[-a-z0-9]+)/$', 'ietf.dbtemplate.views.template_list', name='template_list'), - url(r'^(?P[-a-z0-9]+)/(?P[\d]+)/$', 'ietf.dbtemplate.views.template_edit', name='template_edit'), + url(r'^(?P[-a-z0-9]+)/$', views.template_list, name='template_list'), + url(r'^(?P[-a-z0-9]+)/(?P[\d]+)/$', views.template_edit, name='template_edit'), ] diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index d9fba0082..cacb9c44d 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -34,7 +34,7 @@ from django.conf.urls import url, include from django.views.generic import RedirectView from django.conf import settings -from ietf.doc import views_search, views_draft, views_ballot, views_status_change, views_doc, views_stats +from ietf.doc import views_search, views_draft, views_ballot, views_status_change, views_doc, views_stats, views_help session_patterns = [ url(r'^add$', views_doc.add_sessionpresentation), @@ -116,9 +116,9 @@ urlpatterns = [ url(r'^%(name)s/edit/approveballot/$' % settings.URL_REGEXPS, views_ballot.approve_ballot, name='doc_approve_ballot'), url(r'^%(name)s/edit/makelastcall/$' % settings.URL_REGEXPS, views_ballot.make_last_call, name='doc_make_last_call'), - url(r'^help/state/(?P[\w-]+)/$', 'ietf.doc.views_help.state_help', name="state_help"), - url(r'^help/relationships/$', 'ietf.doc.views_help.relationship_help', name="relationship_help"), - url(r'^help/relationships/(?P\w+)/$', 'ietf.doc.views_help.relationship_help', name="relationship_subset_help"), + url(r'^help/state/(?P[\w-]+)/$', views_help.state_help, name="state_help"), + url(r'^help/relationships/$', views_help.relationship_help, name="relationship_help"), + url(r'^help/relationships/(?P\w+)/$', views_help.relationship_help, name="relationship_subset_help"), url(r'^%(name)s/meetings/?$' % settings.URL_REGEXPS, views_doc.all_presentations), diff --git a/ietf/doc/urls_charter.py b/ietf/doc/urls_charter.py index f298b7ced..ce3448d85 100644 --- a/ietf/doc/urls_charter.py +++ b/ietf/doc/urls_charter.py @@ -3,17 +3,19 @@ from django.conf.urls import url from django.conf import settings +from ietf.doc import views_charter, views_doc + urlpatterns = [ - url(r'^state/$', "ietf.doc.views_charter.change_state", name='charter_change_state'), - url(r'^title/$', "ietf.doc.views_charter.change_title", name='charter_change_title'), - url(r'^(?P