From 1620a14c86b338e819738d285eb3f6de8c5e7a28 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 13:50:37 +0000 Subject: [PATCH 01/10] Require Django 1.9 instead of 1.8 - Legacy-Id: 12579 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 16aba8935..bc83c0882 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.8.16,<1.9 +Django>=1.9,<1.10 django-bootstrap3>=5.1.1,<7.0.0 # django-bootstrap 7.0 requires django 1.8 django-formtools>=1.0 # instead of django.contrib.formtools in 1.8 django-markup>=1.1 From 7e3088993eae35beeed20af77bce4e933a5a32c9 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 13:52:00 +0000 Subject: [PATCH 02/10] Delay an import which causes not ready complaints if handled too early. - Legacy-Id: 12580 --- ietf/settings_sqlitetest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/settings_sqlitetest.py b/ietf/settings_sqlitetest.py index 5a9a10e31..149d896c6 100644 --- a/ietf/settings_sqlitetest.py +++ b/ietf/settings_sqlitetest.py @@ -17,13 +17,13 @@ debug.debug = True ## To be removed after upgrade to Django 1.8 ## -from django.db.migrations.loader import MIGRATIONS_MODULE_NAME class DisableMigrations(object): def __contains__(self, item): return True def __getitem__(self, item): + from django.db.migrations.loader import MIGRATIONS_MODULE_NAME # The string below is significant. It has to include the value of # django.db.migrations.loader.MIGRATIONS_MODULE_NAME. Used by django # 1.7 code in django.db.migrations.loader.MigrationLoader to From 244a7a96e469c4c9856e3043bf0fbf7ed2df9f0a Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 13:52:58 +0000 Subject: [PATCH 03/10] Import import_module directly instead of through django, which is deprecated. - Legacy-Id: 12581 --- ietf/api/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/api/__init__.py b/ietf/api/__init__.py index fa2601177..9a8819c4d 100644 --- a/ietf/api/__init__.py +++ b/ietf/api/__init__.py @@ -134,7 +134,7 @@ def autodiscover(): """ from django.conf import settings - from django.utils.importlib import import_module + from importlib import import_module from django.utils.module_loading import module_has_submodule for app in settings.INSTALLED_APPS: From faa7088d06eb49b0145e4972d26a66dead429561 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 13:53:36 +0000 Subject: [PATCH 04/10] Adjusted an import path. - Legacy-Id: 12582 --- ietf/dbtemplate/template.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ietf/dbtemplate/template.py b/ietf/dbtemplate/template.py index f4276a9ef..40fb34bcb 100644 --- a/ietf/dbtemplate/template.py +++ b/ietf/dbtemplate/template.py @@ -4,7 +4,8 @@ from docutils.core import publish_string from docutils.utils import SystemMessage import debug # pyflakes:ignore -from django.template.base import Template as DjangoTemplate, TemplateDoesNotExist, TemplateEncodingError +from django.template.base import Template as DjangoTemplate, TemplateEncodingError +from django.template.exceptions import TemplateDoesNotExist from django.template.loader import BaseLoader from django.utils.encoding import smart_unicode From 0399ca5c35e0a728aeb556b79414d18e754058a9 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 13:54:07 +0000 Subject: [PATCH 05/10] Adjusted an import path. - Legacy-Id: 12583 --- ietf/utils/templatetags/textfilters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/utils/templatetags/textfilters.py b/ietf/utils/templatetags/textfilters.py index 58a00bedb..1ee5e20c4 100644 --- a/ietf/utils/templatetags/textfilters.py +++ b/ietf/utils/templatetags/textfilters.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.template.base import Library +from django.template.library import Library from django.template.defaultfilters import stringfilter from ietf.utils.text import xslugify as _xslugify From eb167bc393b1f3f2ba6c8a15d0e494066c488cd6 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 19 Dec 2016 14:28:38 +0000 Subject: [PATCH 06/10] Removed the explicit import of Faker, as factory-boy has now been updated to refer to it by that name. - Legacy-Id: 12585 --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 16aba8935..81b80afc3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,8 +15,7 @@ django-tastypie>=0.13.1 django-widget-tweaks>=1.3 docutils>=0.12 factory-boy>=2.7.0 -# fake-factory==0.5.3 # from factory-boy -Faker>=0.7.1 # Explicit install +# Faker # from factory-boy hashids>=1.1.0 html5lib>=0.90,<0.99999999 # ietf.utils.html needs a rewrite for html5lib 1.x -- major code changes in sanitizer jsonfield>=1.0.3 # for SubmissionCheck. This is https://github.com/bradjasper/django-jsonfield/. From 471bbde4d5d42add78cbbd942adf7b53cbd8a004 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 22 Dec 2016 17:13:26 +0000 Subject: [PATCH 07/10] Django 1.9: Adjusted import path - Legacy-Id: 12615 --- ietf/utils/templatetags/textfilters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/utils/templatetags/textfilters.py b/ietf/utils/templatetags/textfilters.py index 58a00bedb..1ee5e20c4 100644 --- a/ietf/utils/templatetags/textfilters.py +++ b/ietf/utils/templatetags/textfilters.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.template.base import Library +from django.template.library import Library from django.template.defaultfilters import stringfilter from ietf.utils.text import xslugify as _xslugify From 3944ab95ccb968761d3a0a88047b1380a22bfb67 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 22 Dec 2016 17:14:51 +0000 Subject: [PATCH 08/10] Django 1.9: Supplied a required argument to TemplateDoesNotExist() - Legacy-Id: 12616 --- ietf/utils/test_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 259bd10bc..7a81e2912 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -113,7 +113,7 @@ class TemplateCoverageLoader(BaseLoader): global template_coverage_collection, loaded_templates if template_coverage_collection == True: loaded_templates.add(str(template_name)) - raise TemplateDoesNotExist + raise TemplateDoesNotExist(template_name) load_template_source.is_usable = True class RecordUrlsMiddleware(object): From bfc44dea82bd80a2a86b1fbfd706e9ee3c1b67b5 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 22 Dec 2016 17:20:29 +0000 Subject: [PATCH 09/10] Django 1.9: Added an alternative implementation of urls() which derives an url pattern name from the callable, in order to maintain DRY for url patterns. - Legacy-Id: 12617 --- ietf/utils/urls.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 ietf/utils/urls.py diff --git a/ietf/utils/urls.py b/ietf/utils/urls.py new file mode 100644 index 000000000..6fb5195b9 --- /dev/null +++ b/ietf/utils/urls.py @@ -0,0 +1,21 @@ +# Copyright The IETF Trust 2016, All Rights Reserved + +import six +import debug # pyflakes:ignore + +from django.conf.urls import url as django_url + +#@debug.trace +def url(regex, view, kwargs=None, name=None, prefix=''): + if isinstance(view, (list, tuple)): + pass # use the name passed in + elif isinstance(view, six.string_types): + name = view + elif callable(view): + name = "%s.%s" % (view.__module__, view.__name__) + else: + raise NotImplementedError("Auto-named url from view of type %s: %s" % (type(view), view)) + if name: + debug.show('name') + return django_url(regex, view, kwargs=kwargs, name=name, prefix=prefix) + \ No newline at end of file From c2541ec04b38ee36d2250e0b9b799ac07a6abba5 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 22 Dec 2016 17:21:57 +0000 Subject: [PATCH 10/10] Django 1.9: Removed deprecated use of django.conf.urls.patterns() from all urls*.py files. - Legacy-Id: 12618 --- ietf/community/urls.py | 7 +-- ietf/cookies/urls.py | 24 ++++---- ietf/dbtemplate/urls.py | 10 ++-- ietf/doc/urls.py | 28 +++++----- ietf/doc/urls_charter.py | 6 +- ietf/doc/urls_conflict_review.py | 23 ++++---- ietf/doc/urls_material.py | 8 +-- ietf/doc/urls_review.py | 7 +-- ietf/doc/urls_status_change.py | 27 ++++----- ietf/group/urls.py | 27 +++++---- ietf/group/urls_info.py | 36 ++++++------ ietf/group/urls_info_details.py | 72 ++++++++++++------------ ietf/group/urls_stream.py | 12 ++-- ietf/help/urls.py | 6 +- ietf/iesg/urls.py | 38 ++++++------- ietf/ietfauth/urls.py | 34 +++++------ ietf/ipr/urls.py | 46 +++++++-------- ietf/liaisons/urls.py | 54 +++++++++--------- ietf/mailinglists/urls.py | 14 ++--- ietf/mailtrigger/urls.py | 14 ++--- ietf/nomcom/urls.py | 71 +++++++++++------------ ietf/person/urls.py | 12 ++-- ietf/redirects/urls.py | 8 +-- ietf/release/urls.py | 15 +++-- ietf/secr/announcement/urls.py | 10 ++-- ietf/secr/areas/urls.py | 22 ++++---- ietf/secr/console/urls.py | 8 +-- ietf/secr/drafts/urls.py | 47 ++++++++-------- ietf/secr/groups/urls.py | 30 +++++----- ietf/secr/meetings/urls.py | 48 ++++++++-------- ietf/secr/proceedings/urls.py | 20 +++---- ietf/secr/roles/urls.py | 12 ++-- ietf/secr/rolodex/urls.py | 18 +++--- ietf/secr/sreq/urls.py | 28 +++++----- ietf/secr/telechat/urls.py | 24 ++++---- ietf/secr/urls.py | 28 +++++----- ietf/stats/urls.py | 6 +- ietf/submit/urls.py | 48 ++++++++-------- ietf/sync/urls.py | 6 +- ietf/urls.py | 96 ++++++++++++++++---------------- 40 files changed, 519 insertions(+), 531 deletions(-) diff --git a/ietf/community/urls.py b/ietf/community/urls.py index 510d1a350..999512f76 100644 --- a/ietf/community/urls.py +++ b/ietf/community/urls.py @@ -1,7 +1,7 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns('', +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'), @@ -9,5 +9,4 @@ urlpatterns = patterns('', 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'), - -) +] diff --git a/ietf/cookies/urls.py b/ietf/cookies/urls.py index b8f146dcb..1e8c4518e 100644 --- a/ietf/cookies/urls.py +++ b/ietf/cookies/urls.py @@ -1,16 +1,16 @@ # Copyright The IETF Trust 2010, All Rights Reserved -from django.conf.urls import patterns +from django.conf.urls import url from ietf.cookies import views -urlpatterns = patterns('', - (r'^$', views.preferences), - (r'^new_enough/(?P.+)$', views.new_enough), - (r'^new_enough/', views.new_enough), - (r'^expires_soon/(?P.+)$', views.expires_soon), - (r'^expires_soon/', views.expires_soon), - (r'^full_draft/(?P.+)$', views.full_draft), - (r'^full_draft/', views.full_draft), - (r'^left_menu/(?P.+)$', views.left_menu), - (r'^left_menu/', views.left_menu), -) +urlpatterns = [ + url(r'^$', views.preferences), + url(r'^new_enough/(?P.+)$', views.new_enough), + url(r'^new_enough/', views.new_enough), + url(r'^expires_soon/(?P.+)$', views.expires_soon), + url(r'^expires_soon/', views.expires_soon), + url(r'^full_draft/(?P.+)$', views.full_draft), + url(r'^full_draft/', views.full_draft), + url(r'^left_menu/(?P.+)$', views.left_menu), + url(r'^left_menu/', views.left_menu), +] diff --git a/ietf/dbtemplate/urls.py b/ietf/dbtemplate/urls.py index d2d03977d..7a9a8bd51 100644 --- a/ietf/dbtemplate/urls.py +++ b/ietf/dbtemplate/urls.py @@ -1,7 +1,7 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns('ietf.dbtemplate.views', - url(r'^(?P[-a-z0-9]+)/$', 'template_list', name='template_list'), - url(r'^(?P[-a-z0-9]+)/(?P[\d]+)/$', 'template_edit', name='template_edit'), -) +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'), +] diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index c8e7a503b..037d0d91b 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -30,7 +30,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from django.conf.urls import patterns, url, include +from django.conf.urls import url, include from django.views.generic import RedirectView from django.conf import settings @@ -42,13 +42,13 @@ session_patterns = [ url(r'^(?P\d+)/remove$', views_doc.remove_sessionpresentation), ] -urlpatterns = patterns('', - (r'^/?$', views_search.search), +urlpatterns = [ + url(r'^/?$', views_search.search), url(r'^(?P[A-Za-z0-9\._\+\-]+)$', views_search.search_for_name, name="doc_search_for_name"), url(r'^search/$', views_search.search, name="doc_search"), url(r'^in-last-call/$', views_search.drafts_in_last_call, name="drafts_in_last_call"), url(r'^ad/(?P[\w.-]+)/$(?u)', views_search.docs_for_ad, name="docs_for_ad"), - (r'^ad2/(?P[\w.-]+)/$(?u)', RedirectView.as_view(url='/doc/ad/%(name)s/', permanent=True)), + url(r'^ad2/(?P[\w.-]+)/$(?u)', RedirectView.as_view(url='/doc/ad/%(name)s/', permanent=True)), url(r'^rfc-status-changes/$', views_status_change.rfc_status_changes, name='rfc_status_changes'), url(r'^start-rfc-status-change/(?:%(name)s/)?$' % settings.URL_REGEXPS, views_status_change.start_rfc_status_change, name='start_rfc_status_change'), url(r'^iesg/(?P[A-Za-z0-9.-]+/)?$', views_search.drafts_in_iesg_process, name="drafts_in_iesg_process"), @@ -75,8 +75,8 @@ urlpatterns = patterns('', url(r'^%(name)s/ballot/(?P[0-9]+)/$' % settings.URL_REGEXPS, views_doc.document_ballot, name="doc_ballot"), url(r'^%(name)s/ballot/(?P[0-9]+)/position/$' % settings.URL_REGEXPS, views_ballot.edit_position), url(r'^%(name)s/ballot/(?P[0-9]+)/emailposition/$' % settings.URL_REGEXPS, views_ballot.send_ballot_comment, name='doc_send_ballot_comment'), - (r'^%(name)s/(?:%(rev)s/)?doc.json$' % settings.URL_REGEXPS, views_doc.document_json), - (r'^%(name)s/ballotpopup/(?P[0-9]+)/$' % settings.URL_REGEXPS, views_doc.ballot_popup), + url(r'^%(name)s/(?:%(rev)s/)?doc.json$' % settings.URL_REGEXPS, views_doc.document_json), + url(r'^%(name)s/ballotpopup/(?P[0-9]+)/$' % settings.URL_REGEXPS, views_doc.ballot_popup), url(r'^(?P[A-Za-z0-9._+-]+)/reviewrequest/', include("ietf.doc.urls_review")), url(r'^%(name)s/email-aliases/$' % settings.URL_REGEXPS, RedirectView.as_view(pattern_name='doc_email', permanent=False),name='doc_specific_email_aliases'), @@ -120,12 +120,12 @@ urlpatterns = patterns('', 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"), - (r'^%(name)s/meetings/?$' % settings.URL_REGEXPS, views_doc.all_presentations), + url(r'^%(name)s/meetings/?$' % settings.URL_REGEXPS, views_doc.all_presentations), - (r'^%(charter)s/' % settings.URL_REGEXPS, include('ietf.doc.urls_charter')), - (r'^%(name)s/conflict-review/' % settings.URL_REGEXPS, include('ietf.doc.urls_conflict_review')), - (r'^%(name)s/status-change/' % settings.URL_REGEXPS, include('ietf.doc.urls_status_change')), - (r'^%(name)s/material/' % settings.URL_REGEXPS, include('ietf.doc.urls_material')), - (r'^%(name)s/session/' % settings.URL_REGEXPS, include('ietf.doc.urls_material')), - (r'^(?P[A-Za-z0-9._+-]+)/session/', include(session_patterns)), -) + url(r'^%(charter)s/' % settings.URL_REGEXPS, include('ietf.doc.urls_charter')), + url(r'^%(name)s/conflict-review/' % settings.URL_REGEXPS, include('ietf.doc.urls_conflict_review')), + url(r'^%(name)s/status-change/' % settings.URL_REGEXPS, include('ietf.doc.urls_status_change')), + url(r'^%(name)s/material/' % settings.URL_REGEXPS, include('ietf.doc.urls_material')), + url(r'^%(name)s/session/' % settings.URL_REGEXPS, include('ietf.doc.urls_material')), + url(r'^(?P[A-Za-z0-9._+-]+)/session/', include(session_patterns)), +] diff --git a/ietf/doc/urls_charter.py b/ietf/doc/urls_charter.py index 4b708c52b..f298b7ced 100644 --- a/ietf/doc/urls_charter.py +++ b/ietf/doc/urls_charter.py @@ -1,9 +1,9 @@ # Copyright The IETF Trust 2011, All Rights Reserved -from django.conf.urls import patterns, url +from django.conf.urls import url from django.conf import settings -urlpatterns = patterns('', +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