Commit 390b6975 by Tyler Hallada Committed by GitHub

Merge pull request #137 from edx/thallada/django-1.9-upgrade

Upgrade to Django 1.9
parents c9a9e490 66fa8c4a
from django.conf.urls import patterns, url, include from django.conf.urls import url, include
from rest_framework.urlpatterns import format_suffix_patterns from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = patterns( urlpatterns = [
'', url(r'^v0/', include('analytics_data_api.v0.urls', 'v0')),
url(r'^v0/', include('analytics_data_api.v0.urls', namespace='v0')), ]
)
urlpatterns = format_suffix_patterns(urlpatterns) urlpatterns = format_suffix_patterns(urlpatterns)
...@@ -2,14 +2,14 @@ from django.apps import AppConfig ...@@ -2,14 +2,14 @@ from django.apps import AppConfig
from django.conf import settings from django.conf import settings
from elasticsearch_dsl import connections from elasticsearch_dsl import connections
from analytics_data_api.utils import load_fully_qualified_definition
class ApiAppConfig(AppConfig): class ApiAppConfig(AppConfig):
name = 'analytics_data_api.v0' name = 'analytics_data_api.v0'
def ready(self): def ready(self):
from analytics_data_api.utils import load_fully_qualified_definition
super(ApiAppConfig, self).ready() super(ApiAppConfig, self).ready()
if settings.ELASTICSEARCH_LEARNERS_HOST: if settings.ELASTICSEARCH_LEARNERS_HOST:
connection_params = {'hosts': [settings.ELASTICSEARCH_LEARNERS_HOST]} connection_params = {'hosts': [settings.ELASTICSEARCH_LEARNERS_HOST]}
......
...@@ -33,7 +33,7 @@ class ESConnectionTests(TestCase): ...@@ -33,7 +33,7 @@ class ESConnectionTests(TestCase):
self.assertTrue('my_access_key' in auth_header) self.assertTrue('my_access_key' in auth_header)
def test_timeout(self): def test_timeout(self):
def fake_connection(_address): def fake_connection(*args): # pylint: disable=unused-argument
raise socket.timeout('fake error') raise socket.timeout('fake error')
socket.create_connection = fake_connection socket.create_connection = fake_connection
connection = ESConnection('mockservice.cc-zone-1.amazonaws.com', connection = ESConnection('mockservice.cc-zone-1.amazonaws.com',
......
...@@ -6,7 +6,7 @@ class UrlRedirectTests(TestCase): ...@@ -6,7 +6,7 @@ class UrlRedirectTests(TestCase):
api_root_path = '/api/v0/' api_root_path = '/api/v0/'
def assertRedirectsToRootPath(self, path, **kwargs): def assertRedirectsToRootPath(self, path, **kwargs):
assert_kwargs = {'status_code': 301} assert_kwargs = {'status_code': 302}
assert_kwargs.update(kwargs) assert_kwargs.update(kwargs)
p = '{0}{1}/'.format(self.api_root_path, path) p = '{0}{1}/'.format(self.api_root_path, path)
......
from django.conf.urls import patterns, url, include from django.conf.urls import url, include
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView from django.views.generic import RedirectView
COURSE_ID_PATTERN = r'(?P<course_id>[^/+]+[/+][^/+]+[/+][^/]+)' COURSE_ID_PATTERN = r'(?P<course_id>[^/+]+[/+][^/+]+[/+][^/]+)'
urlpatterns = patterns( urlpatterns = [
'', url(r'^courses/', include('analytics_data_api.v0.urls.courses', 'courses')),
url(r'^courses/', include('analytics_data_api.v0.urls.courses', namespace='courses')), url(r'^problems/', include('analytics_data_api.v0.urls.problems', 'problems')),
url(r'^problems/', include('analytics_data_api.v0.urls.problems', namespace='problems')), url(r'^videos/', include('analytics_data_api.v0.urls.videos', 'videos')),
url(r'^videos/', include('analytics_data_api.v0.urls.videos', namespace='videos')), url('^', include('analytics_data_api.v0.urls.learners', 'learners')),
url('^', include('analytics_data_api.v0.urls.learners', namespace='learners')),
# pylint: disable=no-value-for-parameter # pylint: disable=no-value-for-parameter
url(r'^authenticated/$', RedirectView.as_view(url=reverse_lazy('authenticated')), name='authenticated'), url(r'^authenticated/$', RedirectView.as_view(url=reverse_lazy('authenticated')), name='authenticated'),
url(r'^health/$', RedirectView.as_view(url=reverse_lazy('health')), name='health'), url(r'^health/$', RedirectView.as_view(url=reverse_lazy('health')), name='health'),
url(r'^status/$', RedirectView.as_view(url=reverse_lazy('status')), name='status'), url(r'^status/$', RedirectView.as_view(url=reverse_lazy('status')), name='status'),
) ]
from django.conf.urls import patterns, url from django.conf.urls import url
from analytics_data_api.v0.urls import COURSE_ID_PATTERN from analytics_data_api.v0.urls import COURSE_ID_PATTERN
from analytics_data_api.v0.views import courses as views from analytics_data_api.v0.views import courses as views
...@@ -21,4 +21,4 @@ urlpatterns = [] ...@@ -21,4 +21,4 @@ urlpatterns = []
for path, view, name in COURSE_URLS: for path, view, name in COURSE_URLS:
regex = r'^{0}/{1}/$'.format(COURSE_ID_PATTERN, path) regex = r'^{0}/{1}/$'.format(COURSE_ID_PATTERN, path)
urlpatterns += patterns('', url(regex, view.as_view(), name=name)) urlpatterns.append(url(regex, view.as_view(), name=name))
from django.conf.urls import patterns, url from django.conf.urls import url
from analytics_data_api.v0.urls import COURSE_ID_PATTERN from analytics_data_api.v0.urls import COURSE_ID_PATTERN
from analytics_data_api.v0.views import learners as views from analytics_data_api.v0.views import learners as views
USERNAME_PATTERN = r'(?P<username>[\w.+-]+)' USERNAME_PATTERN = r'(?P<username>[\w.+-]+)'
urlpatterns = patterns( urlpatterns = [
'',
url(r'^learners/$', views.LearnerListView.as_view(), name='learners'), url(r'^learners/$', views.LearnerListView.as_view(), name='learners'),
url(r'^learners/{}/$'.format(USERNAME_PATTERN), views.LearnerView.as_view(), name='learner'), url(r'^learners/{}/$'.format(USERNAME_PATTERN), views.LearnerView.as_view(), name='learner'),
url(r'^engagement_timelines/{}/$'.format(USERNAME_PATTERN), url(r'^engagement_timelines/{}/$'.format(USERNAME_PATTERN),
views.EngagementTimelineView.as_view(), name='engagement_timelines'), views.EngagementTimelineView.as_view(), name='engagement_timelines'),
url(r'^course_learner_metadata/{}/$'.format(COURSE_ID_PATTERN), url(r'^course_learner_metadata/{}/$'.format(COURSE_ID_PATTERN),
views.CourseLearnerMetadata.as_view(), name='course_learner_metadata'), views.CourseLearnerMetadata.as_view(), name='course_learner_metadata'),
) ]
import re import re
from django.conf.urls import patterns, url from django.conf.urls import url
from analytics_data_api.v0.views import problems as views from analytics_data_api.v0.views import problems as views
...@@ -9,11 +9,10 @@ PROBLEM_URLS = [ ...@@ -9,11 +9,10 @@ PROBLEM_URLS = [
('grade_distribution', views.GradeDistributionView, 'grade_distribution'), ('grade_distribution', views.GradeDistributionView, 'grade_distribution'),
] ]
urlpatterns = patterns( urlpatterns = [
'',
url(r'^(?P<module_id>.+)/sequential_open_distribution/$', url(r'^(?P<module_id>.+)/sequential_open_distribution/$',
views.SequentialOpenDistributionView.as_view(), name='sequential_open_distribution'), views.SequentialOpenDistributionView.as_view(), name='sequential_open_distribution'),
) ]
for path, view, name in PROBLEM_URLS: for path, view, name in PROBLEM_URLS:
urlpatterns += patterns('', url(r'^(?P<problem_id>.+)/' + re.escape(path) + r'/$', view.as_view(), name=name)) urlpatterns.append(url(r'^(?P<problem_id>.+)/' + re.escape(path) + r'/$', view.as_view(), name=name))
import re import re
from django.conf.urls import patterns, url from django.conf.urls import url
from analytics_data_api.v0.views import videos as views from analytics_data_api.v0.views import videos as views
...@@ -11,4 +11,4 @@ VIDEO_URLS = [ ...@@ -11,4 +11,4 @@ VIDEO_URLS = [
urlpatterns = [] urlpatterns = []
for path, view, name in VIDEO_URLS: for path, view, name in VIDEO_URLS:
urlpatterns += patterns('', url(r'^(?P<video_id>.+)/' + re.escape(path) + r'/$', view.as_view(), name=name)) urlpatterns.append(url(r'^(?P<video_id>.+)/' + re.escape(path) + r'/$', view.as_view(), name=name))
...@@ -20,9 +20,6 @@ SITE_NAME = basename(DJANGO_ROOT) ...@@ -20,9 +20,6 @@ SITE_NAME = basename(DJANGO_ROOT)
########## DEBUG CONFIGURATION ########## DEBUG CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug
DEBUG = False DEBUG = False
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug
TEMPLATE_DEBUG = DEBUG
########## END DEBUG CONFIGURATION ########## END DEBUG CONFIGURATION
...@@ -140,28 +137,28 @@ FIXTURE_DIRS = ( ...@@ -140,28 +137,28 @@ FIXTURE_DIRS = (
########## TEMPLATE CONFIGURATION ########## TEMPLATE CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors # See: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATES
TEMPLATE_CONTEXT_PROCESSORS = ( TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
normpath(join(SITE_ROOT, 'templates')),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug', 'django.template.context_processors.debug',
'django.core.context_processors.i18n', 'django.template.context_processors.i18n',
'django.core.context_processors.media', 'django.template.context_processors.media',
'django.core.context_processors.static', 'django.template.context_processors.static',
'django.core.context_processors.tz', 'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request', 'django.template.context_processors.request',
) ],
},
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-loaders }
TEMPLATE_LOADERS = ( ]
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-dirs
TEMPLATE_DIRS = (
normpath(join(SITE_ROOT, 'templates')),
)
########## END TEMPLATE CONFIGURATION ########## END TEMPLATE CONFIGURATION
......
...@@ -9,9 +9,6 @@ from analyticsdataserver.settings.base import * ...@@ -9,9 +9,6 @@ from analyticsdataserver.settings.base import *
########## DEBUG CONFIGURATION ########## DEBUG CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug
DEBUG = True DEBUG = True
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug
TEMPLATE_DEBUG = DEBUG
########## END DEBUG CONFIGURATION ########## END DEBUG CONFIGURATION
......
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, include, url from django.conf.urls import include, url
from django.contrib import admin from django.contrib import admin
from django.views.generic import RedirectView from django.views.generic import RedirectView
from analyticsdataserver import views from analyticsdataserver import views
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = patterns( urlpatterns = [
'',
url(r'^$', RedirectView.as_view(url='/docs')), # pylint: disable=no-value-for-parameter url(r'^$', RedirectView.as_view(url='/docs')), # pylint: disable=no-value-for-parameter
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'^api-auth/', include('rest_framework.urls', 'rest_framework')),
url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'), url(r'^api-token-auth/', obtain_auth_token),
url(r'^api/', include('analytics_data_api.urls', namespace='api')), url(r'^api/', include('analytics_data_api.urls', 'api')),
url(r'^docs/', include('rest_framework_swagger.urls')), url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^status/$', views.StatusView.as_view(), name='status'), url(r'^status/$', views.StatusView.as_view(), name='status'),
url(r'^authenticated/$', views.AuthenticationTestView.as_view(), name='authenticated'), url(r'^authenticated/$', views.AuthenticationTestView.as_view(), name='authenticated'),
url(r'^health/$', views.HealthView.as_view(), name='health'), url(r'^health/$', views.HealthView.as_view(), name='health'),
) ]
if settings.ENABLE_ADMIN_SITE: # pragma: no cover if settings.ENABLE_ADMIN_SITE: # pragma: no cover
admin.autodiscover() admin.autodiscover()
urlpatterns += patterns('', url(r'^site/admin/', include(admin.site.urls))) urlpatterns.append(url(r'^site/admin/', include(admin.site.urls)))
handler500 = 'analyticsdataserver.views.handle_internal_server_error' # pylint: disable=invalid-name handler500 = 'analyticsdataserver.views.handle_internal_server_error' # pylint: disable=invalid-name
handler404 = 'analyticsdataserver.views.handle_missing_resource_error' # pylint: disable=invalid-name handler404 = 'analyticsdataserver.views.handle_missing_resource_error' # pylint: disable=invalid-name
import os import os
from django.core.wsgi import get_wsgi_application
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks # We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use # if running multiple sites in the same mod_wsgi process. To fix this, use
...@@ -9,7 +10,6 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "analyticsdataserver.settings.pr ...@@ -9,7 +10,6 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "analyticsdataserver.settings.pr
# This application object is used by any WSGI server configured to use this # This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION # file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here. # setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application() # pylint: disable=invalid-name application = get_wsgi_application() # pylint: disable=invalid-name
# Apply WSGI middleware here. # Apply WSGI middleware here.
......
boto==2.22.1 # MIT boto==2.42.0 # MIT
Django==1.8.14 # BSD License Django==1.9.9 # BSD License
django-model-utils==2.2 # BSD django-model-utils==2.5.2 # BSD
djangorestframework==3.4.6 # BSD djangorestframework==3.4.6 # BSD
django-rest-swagger==0.2.8 # BSD django-rest-swagger==0.3.8 # BSD
djangorestframework-csv==1.3.3 # BSD djangorestframework-csv==1.4.1 # BSD
django-countries==3.2 # MIT django-countries==4.0 # MIT
edx-django-release-util==0.1.0 edx-django-release-util==0.1.0
elasticsearch-dsl==0.0.11 # Apache 2.0 elasticsearch-dsl==0.0.11 # Apache 2.0
# markdown is used by swagger for rendering the api docs # markdown is used by swagger for rendering the api docs
Markdown==2.6 # BSD Markdown==2.6.6 # BSD
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys -e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
newrelic==2.40.0.34 newrelic==2.68.0.50
...@@ -4,5 +4,5 @@ ...@@ -4,5 +4,5 @@
MySQL-python==1.2.5 # GPL License MySQL-python==1.2.5 # GPL License
PyYAML==3.11 # MIT PyYAML==3.11 # MIT
gunicorn==0.17.4 # MIT gunicorn==19.6.0 # MIT
path.py==5.2 # MIT path.py==8.2.1 # MIT
# Test dependencies go here. # Test dependencies go here.
-r base.txt -r base.txt
coverage==3.7.1 coverage==4.2
ddt==1.0.1 ddt==1.1.0
diff-cover >= 0.2.1 diff-cover >= 0.9.9
django-dynamic-fixture==1.8.1 django-dynamic-fixture==1.9.0
django-nose==1.4.3 django-nose==1.4.4
mock==1.0.1 mock==2.0.0
nose-exclude==0.2.0 nose-exclude==0.4.1
nose-ignore-docstring==0.2 nose-ignore-docstring==0.2
nose==1.3.4 nose==1.3.7
pep257==0.4.1 pep257==0.7.0
pep8==1.6.0 pep8==1.7.0
pylint==1.5.0 pylint==1.6.4
pytz==2014.10 pytz==2016.6.1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment