Commit df0ba347 by Andrew Zafft

Updating to OEP-18 standards and updating to the latest version of the analytics-data-api-client

parent c699f245
.PHONY: requirements
ROOT = $(shell echo "$$PWD") ROOT = $(shell echo "$$PWD")
COVERAGE = $(ROOT)/build/coverage COVERAGE = $(ROOT)/build/coverage
NODE_BIN=./node_modules/.bin NODE_BIN=./node_modules/.bin
DJANGO_SETTINGS_MODULE ?= "analytics_dashboard.settings.local" DJANGO_SETTINGS_MODULE ?= "analytics_dashboard.settings.local"
.PHONY: requirements clean .PHONY: requirements clean upgrade pin_pip
# pin to 9.0.3 until tox-battery upgrades # pin to 9.0.3 until tox-battery upgrades
# 9.0.3 does not work on Sierra Mac OSX. 10.0.1 should be used instead.
pin_pip: pin_pip:
pip install --upgrade pip==9.0.3 pip install --upgrade pip==9.0.3
requirements: requirements.py requirements.js requirements: requirements.py requirements.js
upgrade: ## update the pip requirements files to use the latest releases satisfying our constraints
pip install -qr requirements/pip-tools.txt
pip-compile --upgrade -o requirements/pip-tools.txt requirements/pip-tools.in
pip-compile --upgrade -o requirements/base.txt requirements/base.in
pip-compile --upgrade -o requirements/doc.txt requirements/doc.in
pip-compile --upgrade -o requirements/local.txt requirements/local.in
pip-compile --upgrade -o requirements/optional.txt requirements/optional.in
pip-compile --upgrade -o requirements/production.txt requirements/production.in
pip-compile --upgrade -o requirements/test.txt requirements/test.in
# Post process all of the files generated above to replace the instructions for recreating them
scripts/post-pip-compile.sh \
requirements/pip-tools.txt \
requirements/base.txt \
requirements/doc.txt \
requirements/local.txt \
requirements/optional.txt \
requirements/production.txt \
requirements/test.txt
requirements.py: requirements.py:
pip install -q -r requirements/base.txt --exists-action w pip install -q -r requirements/base.txt --exists-action w
......
import datetime import datetime
from unittest import skipUnless from unittest import skipUnless
from analyticsclient.constants import activity_type as at from analyticsclient.constants import activity_types as at
from bok_choy.web_app_test import WebAppTest from bok_choy.web_app_test import WebAppTest
from opaque_keys.edx.keys import UsageKey from opaque_keys.edx.keys import UsageKey
......
from collections import OrderedDict from collections import OrderedDict
import datetime import datetime
from analyticsclient.constants import demographic, UNKNOWN_COUNTRY_CODE, enrollment_modes from analyticsclient.constants import demographics, UNKNOWN_COUNTRY_CODE, enrollment_modes
from bok_choy.web_app_test import WebAppTest from bok_choy.web_app_test import WebAppTest
from acceptance_tests.mixins import CoursePageTestsMixin from acceptance_tests.mixins import CoursePageTestsMixin
...@@ -128,7 +128,7 @@ class CourseEnrollmentGeographyTests(CoursePageTestsMixin, WebAppTest): ...@@ -128,7 +128,7 @@ class CourseEnrollmentGeographyTests(CoursePageTestsMixin, WebAppTest):
super(CourseEnrollmentGeographyTests, self).setUp() super(CourseEnrollmentGeographyTests, self).setUp()
self.page = CourseEnrollmentGeographyPage(self.browser) self.page = CourseEnrollmentGeographyPage(self.browser)
self.course = self.analytics_api_client.courses(self.page.course_id) self.course = self.analytics_api_client.courses(self.page.course_id)
self.enrollment_data = sorted(self.course.enrollment(demographic.LOCATION), self.enrollment_data = sorted(self.course.enrollment(demographics.LOCATION),
key=lambda item: item['count'], reverse=True) key=lambda item: item['count'], reverse=True)
def test_page(self): def test_page(self):
...@@ -138,7 +138,7 @@ class CourseEnrollmentGeographyTests(CoursePageTestsMixin, WebAppTest): ...@@ -138,7 +138,7 @@ class CourseEnrollmentGeographyTests(CoursePageTestsMixin, WebAppTest):
self._test_metrics() self._test_metrics()
def _get_data_update_message(self): def _get_data_update_message(self):
current_enrollment = self.course.enrollment(demographic.LOCATION)[0] current_enrollment = self.course.enrollment(demographics.LOCATION)[0]
last_updated = datetime.datetime.strptime(current_enrollment['created'], self.api_datetime_format) last_updated = datetime.datetime.strptime(current_enrollment['created'], self.api_datetime_format)
return 'Geographic learner data was last updated %(update_date)s at %(update_time)s UTC.' % \ return 'Geographic learner data was last updated %(update_date)s at %(update_time)s UTC.' % \
self.format_last_updated_date_and_time(last_updated) self.format_last_updated_date_and_time(last_updated)
......
import datetime import datetime
from analyticsclient.constants import demographic from analyticsclient.constants import demographics
import analyticsclient.constants.education_level as EDUCATION_LEVEL import analyticsclient.constants.education_levels as EDUCATION_LEVEL
import analyticsclient.constants.gender as GENDER import analyticsclient.constants.genders as GENDER
from bok_choy.web_app_test import WebAppTest from bok_choy.web_app_test import WebAppTest
from acceptance_tests.mixins import CourseDemographicsPageTestsMixin from acceptance_tests.mixins import CourseDemographicsPageTestsMixin
...@@ -16,7 +16,7 @@ _multiprocess_can_split_ = True ...@@ -16,7 +16,7 @@ _multiprocess_can_split_ = True
class CourseEnrollmentDemographicsAgeTests(CourseDemographicsPageTestsMixin, WebAppTest): class CourseEnrollmentDemographicsAgeTests(CourseDemographicsPageTestsMixin, WebAppTest):
help_path = 'enrollment/Demographics_Age.html' help_path = 'enrollment/Demographics_Age.html'
demographic_type = demographic.BIRTH_YEAR demographic_type = demographics.BIRTH_YEAR
table_columns = ['Age', 'Number of Learners', 'Percent of Total'] table_columns = ['Age', 'Number of Learners', 'Percent of Total']
def setUp(self): def setUp(self):
...@@ -112,7 +112,7 @@ class CourseEnrollmentDemographicsAgeTests(CourseDemographicsPageTestsMixin, Web ...@@ -112,7 +112,7 @@ class CourseEnrollmentDemographicsAgeTests(CourseDemographicsPageTestsMixin, Web
class CourseEnrollmentDemographicsGenderTests(CourseDemographicsPageTestsMixin, WebAppTest): class CourseEnrollmentDemographicsGenderTests(CourseDemographicsPageTestsMixin, WebAppTest):
help_path = 'enrollment/Demographics_Gender.html' help_path = 'enrollment/Demographics_Gender.html'
demographic_type = demographic.GENDER demographic_type = demographics.GENDER
table_columns = ['Date', 'Current Enrollment', 'Female', 'Male', 'Other', 'Not Reported'] table_columns = ['Date', 'Current Enrollment', 'Female', 'Male', 'Other', 'Not Reported']
def setUp(self): def setUp(self):
...@@ -162,7 +162,7 @@ class CourseEnrollmentDemographicsEducationTests(CourseDemographicsPageTestsMixi ...@@ -162,7 +162,7 @@ class CourseEnrollmentDemographicsEducationTests(CourseDemographicsPageTestsMixi
help_path = 'enrollment/Demographics_Education.html' help_path = 'enrollment/Demographics_Education.html'
demographic_type = demographic.EDUCATION demographic_type = demographics.EDUCATION
table_columns = ['Educational Background', 'Number of Learners'] table_columns = ['Educational Background', 'Number of Learners']
def setUp(self): def setUp(self):
......
...@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
from waffle import switch_is_active from waffle import switch_is_active
from analyticsclient.client import Client from analyticsclient.client import Client
import analyticsclient.constants.activity_type as AT import analyticsclient.constants.activity_types as AT
from analyticsclient.exceptions import NotFoundError from analyticsclient.exceptions import NotFoundError
from core.templatetags.dashboard_extras import metric_percentage from core.templatetags.dashboard_extras import metric_percentage
......
...@@ -4,9 +4,9 @@ import logging ...@@ -4,9 +4,9 @@ import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_countries import countries from django_countries import countries
from analyticsclient.constants import demographic, UNKNOWN_COUNTRY_CODE, enrollment_modes from analyticsclient.constants import demographics, UNKNOWN_COUNTRY_CODE, enrollment_modes
import analyticsclient.constants.education_level as EDUCATION_LEVEL import analyticsclient.constants.education_levels as EDUCATION_LEVEL
import analyticsclient.constants.gender as GENDER import analyticsclient.constants.genders as GENDER
import courses.utils as utils import courses.utils as utils
from courses.presenters import CoursePresenter from courses.presenters import CoursePresenter
...@@ -198,7 +198,7 @@ class CourseEnrollmentPresenter(CoursePresenter): ...@@ -198,7 +198,7 @@ class CourseEnrollmentPresenter(CoursePresenter):
""" """
Returns a list of course geography data and the updated date (ex. 2014-1-31). Returns a list of course geography data and the updated date (ex. 2014-1-31).
""" """
api_response = self.course.enrollment(demographic.LOCATION) api_response = self.course.enrollment(demographics.LOCATION)
data = [] data = []
summary = {} summary = {}
...@@ -287,7 +287,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter): ...@@ -287,7 +287,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter):
Returns the updated time, most recent gender counts, and breakdown of daily Returns the updated time, most recent gender counts, and breakdown of daily
gender trends. gender trends.
""" """
api_response = self.course.enrollment(demographic.GENDER, end_date=self.get_current_date()) api_response = self.course.enrollment(demographics.GENDER, end_date=self.get_current_date())
recent_genders = None recent_genders = None
trend = None trend = None
last_updated = None last_updated = None
...@@ -340,7 +340,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter): ...@@ -340,7 +340,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter):
ages with counts and percentages and ages greater than MAX_AGE aggregated ages with counts and percentages and ages greater than MAX_AGE aggregated
within MAX_AGE. within MAX_AGE.
""" """
api_response = self.course.enrollment(demographic.BIRTH_YEAR) api_response = self.course.enrollment(demographics.BIRTH_YEAR)
last_updated = None last_updated = None
binned_ages = None binned_ages = None
summary = None summary = None
...@@ -533,7 +533,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter): ...@@ -533,7 +533,7 @@ class CourseEnrollmentDemographicsPresenter(CoursePresenter):
return api_response return api_response
def get_education(self): def get_education(self):
api_response = self.course.enrollment(demographic.EDUCATION) api_response = self.course.enrollment(demographics.EDUCATION)
education_levels = None education_levels = None
education_summary = None education_summary = None
last_updated = None last_updated = None
......
...@@ -12,7 +12,7 @@ from slugify import slugify ...@@ -12,7 +12,7 @@ from slugify import slugify
import mock import mock
from waffle.testutils import override_switch from waffle.testutils import override_switch
import analyticsclient.constants.activity_type as AT import analyticsclient.constants.activity_types as AT
from analyticsclient.constants import enrollment_modes from analyticsclient.constants import enrollment_modes
from common.tests.course_fixtures import ( from common.tests.course_fixtures import (
......
...@@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
from waffle.testutils import override_switch from waffle.testutils import override_switch
import analyticsclient.constants.activity_type as AT import analyticsclient.constants.activity_types as AT
from courses.tests.factories import CourseEngagementDataFactory from courses.tests.factories import CourseEngagementDataFactory
from courses.tests.test_views import ( from courses.tests.test_views import (
......
...@@ -6,9 +6,9 @@ import uuid ...@@ -6,9 +6,9 @@ import uuid
from analyticsclient.client import Client from analyticsclient.client import Client
from analyticsclient.constants import enrollment_modes, UNKNOWN_COUNTRY_CODE from analyticsclient.constants import enrollment_modes, UNKNOWN_COUNTRY_CODE
import analyticsclient.constants.activity_type as AT import analyticsclient.constants.activity_types as AT
import analyticsclient.constants.education_level as EDUCATION_LEVEL import analyticsclient.constants.education_levels as EDUCATION_LEVEL
import analyticsclient.constants.gender as GENDER import analyticsclient.constants.genders as GENDER
from courses.permissions import set_user_course_permissions from courses.permissions import set_user_course_permissions
from courses.presenters.performance import AnswerDistributionEntry from courses.presenters.performance import AnswerDistributionEntry
......
...@@ -5,7 +5,7 @@ import urllib ...@@ -5,7 +5,7 @@ import urllib
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.utils import timezone from django.utils import timezone
from analyticsclient.constants import data_format, demographic from analyticsclient.constants import data_formats, demographics
from analyticsclient.client import Client from analyticsclient.client import Client
from courses.presenters.performance import CourseReportDownloadPresenter from courses.presenters.performance import CourseReportDownloadPresenter
...@@ -63,14 +63,14 @@ class CourseEnrollmentDemographicsAgeCSV(CourseCSVResponseMixin, CourseView): ...@@ -63,14 +63,14 @@ class CourseEnrollmentDemographicsAgeCSV(CourseCSVResponseMixin, CourseView):
csv_filename_suffix = u'enrollment-by-birth-year' csv_filename_suffix = u'enrollment-by-birth-year'
def get_data(self): def get_data(self):
return self.course.enrollment(demographic.BIRTH_YEAR, data_format=data_format.CSV), return self.course.enrollment(demographics.BIRTH_YEAR, data_format=data_formats.CSV),
class CourseEnrollmentDemographicsEducationCSV(CourseCSVResponseMixin, CourseView): class CourseEnrollmentDemographicsEducationCSV(CourseCSVResponseMixin, CourseView):
csv_filename_suffix = u'enrollment-by-education' csv_filename_suffix = u'enrollment-by-education'
def get_data(self): def get_data(self):
return self.course.enrollment(demographic.EDUCATION, data_format=data_format.CSV), return self.course.enrollment(demographics.EDUCATION, data_format=data_formats.CSV),
class CourseEnrollmentDemographicsGenderCSV(CourseCSVResponseMixin, CourseView): class CourseEnrollmentDemographicsGenderCSV(CourseCSVResponseMixin, CourseView):
...@@ -78,14 +78,14 @@ class CourseEnrollmentDemographicsGenderCSV(CourseCSVResponseMixin, CourseView): ...@@ -78,14 +78,14 @@ class CourseEnrollmentDemographicsGenderCSV(CourseCSVResponseMixin, CourseView):
def get_data(self): def get_data(self):
end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT) end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT)
return self.course.enrollment(demographic.GENDER, end_date=end_date, data_format=data_format.CSV), return self.course.enrollment(demographics.GENDER, end_date=end_date, data_format=data_formats.CSV),
class CourseEnrollmentByCountryCSV(CourseCSVResponseMixin, CourseView): class CourseEnrollmentByCountryCSV(CourseCSVResponseMixin, CourseView):
csv_filename_suffix = u'enrollment-location' csv_filename_suffix = u'enrollment-location'
def get_data(self): def get_data(self):
return self.course.enrollment(demographic.LOCATION, data_format=data_format.CSV) return self.course.enrollment(demographics.LOCATION, data_format=data_formats.CSV)
class CourseEnrollmentCSV(CourseCSVResponseMixin, CourseView): class CourseEnrollmentCSV(CourseCSVResponseMixin, CourseView):
...@@ -93,7 +93,7 @@ class CourseEnrollmentCSV(CourseCSVResponseMixin, CourseView): ...@@ -93,7 +93,7 @@ class CourseEnrollmentCSV(CourseCSVResponseMixin, CourseView):
def get_data(self): def get_data(self):
end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT) end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT)
return self.course.enrollment('mode', data_format=data_format.CSV, end_date=end_date) return self.course.enrollment('mode', data_format=data_formats.CSV, end_date=end_date)
class CourseEngagementActivityTrendCSV(CourseCSVResponseMixin, CourseView): class CourseEngagementActivityTrendCSV(CourseCSVResponseMixin, CourseView):
...@@ -101,7 +101,7 @@ class CourseEngagementActivityTrendCSV(CourseCSVResponseMixin, CourseView): ...@@ -101,7 +101,7 @@ class CourseEngagementActivityTrendCSV(CourseCSVResponseMixin, CourseView):
def get_data(self): def get_data(self):
end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT) end_date = datetime.datetime.utcnow().strftime(Client.DATE_FORMAT)
return self.course.activity(data_format=data_format.CSV, end_date=end_date) return self.course.activity(data_format=data_formats.CSV, end_date=end_date)
class CourseEngagementVideoTimelineCSV(CourseCSVResponseMixin, CourseView): class CourseEngagementVideoTimelineCSV(CourseCSVResponseMixin, CourseView):
...@@ -109,7 +109,7 @@ class CourseEngagementVideoTimelineCSV(CourseCSVResponseMixin, CourseView): ...@@ -109,7 +109,7 @@ class CourseEngagementVideoTimelineCSV(CourseCSVResponseMixin, CourseView):
def get_data(self): def get_data(self):
modules = self.client.modules(self.course_id, self.kwargs['pipeline_video_id']) modules = self.client.modules(self.course_id, self.kwargs['pipeline_video_id'])
return modules.video_timeline(data_format=data_format.CSV) return modules.video_timeline(data_format=data_formats.CSV)
class PerformanceAnswerDistributionCSV(CourseCSVResponseMixin, CourseView): class PerformanceAnswerDistributionCSV(CourseCSVResponseMixin, CourseView):
...@@ -117,7 +117,7 @@ class PerformanceAnswerDistributionCSV(CourseCSVResponseMixin, CourseView): ...@@ -117,7 +117,7 @@ class PerformanceAnswerDistributionCSV(CourseCSVResponseMixin, CourseView):
def get_data(self): def get_data(self):
modules = self.client.modules(self.course_id, self.kwargs['content_id']) modules = self.client.modules(self.course_id, self.kwargs['content_id'])
return modules.answer_distribution(data_format=data_format.CSV) return modules.answer_distribution(data_format=data_formats.CSV)
class PerformanceProblemResponseCSV(CourseView): class PerformanceProblemResponseCSV(CourseView):
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
# http://open-edx-proposals.readthedocs.io/en/latest/oeps/oep-0002.html#specification # http://open-edx-proposals.readthedocs.io/en/latest/oeps/oep-0002.html#specification
nick: dash nick: dash
oeps: {} oeps:
oep-18: True
openedx-release: {ref: master, requirements: requirements/base.txt} openedx-release: {ref: master, requirements: requirements/base.txt}
owner: edx/educator-dahlia owner: edx/educator-dahlia
tags: [analytics] tags: [analytics]
......
requests==2.17.3 # Apache 2.0
awesome-slugify==1.6.5 # GPLv3
bpython==0.16 # MIT License
Django==1.11.5 # BSD License
django-appconf==1.0.2
django-braces==1.11.0 # BSD
django-countries==4.5 # MIT
django-model-utils==2.6.1 # BSD
django-webpack-loader==0.4.1 # MIT
djangorestframework==3.6.3 # BSD
djangorestframework-csv==2.0.0 # BSD
# Dependency of djangorestframework
django-crispy-forms==1.6.1 # MIT
django-soapbox==1.3 # BSD
django-waffle==0.12.0 # BSD
pinax-announcements==2.0.4 # MIT
edx-auth-backends==1.1.3
edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1 # Apache
libsass==0.11.1 # MIT
logutils==0.3.4.1 # BSD
# edx-analytics-data-api-client
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4 # edX
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
# custom opaque-key implementations for ccx
-e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
awesome-slugify==1.6.5 # GPLv3 #
bpython==0.16 # MIT License # This file is autogenerated by pip-compile
Django==1.11.5 # BSD License # To update, run:
#
# make upgrade
#
-e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
awesome-slugify==1.6.5
blessings==1.6.1 # via curtsies
bpython==0.16
certifi==2018.4.16 # via requests
chardet==3.0.4 # via requests
curtsies==0.3.0 # via bpython
django-appconf==1.0.2 django-appconf==1.0.2
django-braces==1.11.0 # BSD django-braces==1.11.0
django-countries==4.5 # MIT django-countries==4.5
django-model-utils==2.6.1 # BSD django-crispy-forms==1.6.1
django-webpack-loader==0.4.1 # MIT django-model-utils==2.6.1
djangorestframework==3.6.3 # BSD django-soapbox==1.3
djangorestframework-csv==2.0.0 # BSD django-waffle==0.12.0
# Dependency of djangorestframework django-webpack-loader==0.4.1
django-crispy-forms==1.6.1 # MIT django==1.11.5
django-soapbox==1.3 # BSD djangorestframework-csv==2.0.0
django-waffle==0.12.0 # BSD djangorestframework==3.6.3
pinax-announcements==2.0.4 # MIT
edx-auth-backends==1.1.3 edx-auth-backends==1.1.3
edx-django-release-util==0.3.1 edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2 edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1 # Apache edx-rest-api-client==1.7.1
future==0.16.0 # via pyjwkest
libsass==0.11.1 # MIT greenlet==0.4.13 # via bpython
idna==2.5 # via requests
logutils==0.3.4.1 # BSD libsass==0.11.1
logutils==0.3.4.1
requests==2.17.3 # Apache 2.0 oauthlib==2.1.0 # via requests-oauthlib, social-auth-core
path.py==11.0.1 # via edx-i18n-tools
git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware pbr==4.0.3 # via stevedore
git+https://github.com/edx/edx-analytics-data-api-client.git@0.12.0#egg=edx-analytics-data-api-client==0.12.0 # edX pinax-announcements==2.0.4
git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys polib==1.1.0 # via edx-i18n-tools
# custom opaque-key implementations for ccx pycryptodomex==3.6.1 # via pyjwkest
git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys pygments==2.2.0 # via bpython
pyjwkest==1.4.0 # via social-auth-core
pyjwt==1.6.4 # via edx-rest-api-client, social-auth-core
pymongo==3.6.1
python-openid==2.2.5 # via social-auth-core
pytz==2018.4 # via django
pyyaml==3.12 # via edx-django-release-util, edx-i18n-tools
regex==2018.2.21 # via awesome-slugify
requests-oauthlib==1.0.0 # via social-auth-core
requests==2.17.3
six==1.11.0 # via bpython, djangorestframework-csv, edx-auth-backends, edx-django-release-util, edx-i18n-tools, libsass, pyjwkest, social-auth-app-django, social-auth-core, stevedore
slumber==0.7.1 # via edx-rest-api-client
social-auth-app-django==1.2.0 # via edx-auth-backends
social-auth-core[openidconnect]==1.7.0 # via edx-auth-backends, social-auth-app-django
stevedore==1.28.0
typing==3.6.4 # via curtsies
unicodecsv==0.14.1 # via djangorestframework-csv
unidecode==0.4.21 # via awesome-slugify
urllib3==1.21.1 # via requests
wcwidth==0.1.7 # via curtsies
# Dependencies for building documentation
-r base.txt
Sphinx==1.4.5
sphinx_rtd_theme==0.1.9
# Dependencies for building documentation #
-r base.txt # This file is autogenerated by pip-compile
Sphinx==1.4.5 # To update, run:
#
# make upgrade
#
-e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
alabaster==0.7.10 # via sphinx
awesome-slugify==1.6.5
babel==2.6.0 # via sphinx
blessings==1.6.1
bpython==0.16
certifi==2018.4.16
chardet==3.0.4
curtsies==0.3.0
django-appconf==1.0.2
django-braces==1.11.0
django-countries==4.5
django-crispy-forms==1.6.1
django-model-utils==2.6.1
django-soapbox==1.3
django-waffle==0.12.0
django-webpack-loader==0.4.1
django==1.11.5
djangorestframework-csv==2.0.0
djangorestframework==3.6.3
docutils==0.14 # via sphinx
edx-auth-backends==1.1.3
edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1
future==0.16.0
greenlet==0.4.13
idna==2.5
imagesize==1.0.0 # via sphinx
jinja2==2.10 # via sphinx
libsass==0.11.1
logutils==0.3.4.1
markupsafe==1.0 # via jinja2
oauthlib==2.1.0
path.py==11.0.1
pbr==4.0.3
pinax-announcements==2.0.4
polib==1.1.0
pycryptodomex==3.6.1
pygments==2.2.0
pyjwkest==1.4.0
pyjwt==1.6.4
pymongo==3.6.1
python-openid==2.2.5
pytz==2018.4
pyyaml==3.12
regex==2018.2.21
requests-oauthlib==1.0.0
requests==2.17.3
six==1.11.0
slumber==0.7.1
snowballstemmer==1.2.1 # via sphinx
social-auth-app-django==1.2.0
social-auth-core[openidconnect]==1.7.0
sphinx==1.4.5
sphinx_rtd_theme==0.1.9 sphinx_rtd_theme==0.1.9
stevedore==1.28.0
typing==3.6.4
unicodecsv==0.14.1
unidecode==0.4.21
urllib3==1.21.1
wcwidth==0.1.7
# Local development dependencies go here
-r base.txt
django-debug-toolbar==1.8
transifex-client==0.12.4
# Local development dependencies go here #
-r base.txt # This file is autogenerated by pip-compile
# To update, run:
#
# make upgrade
#
-e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
awesome-slugify==1.6.5
blessings==1.6.1
bpython==0.16
certifi==2018.4.16
chardet==3.0.4
curtsies==0.3.0
django-appconf==1.0.2
django-braces==1.11.0
django-countries==4.5
django-crispy-forms==1.6.1
django-debug-toolbar==1.8 django-debug-toolbar==1.8
django-model-utils==2.6.1
django-soapbox==1.3
django-waffle==0.12.0
django-webpack-loader==0.4.1
django==1.11.5
djangorestframework-csv==2.0.0
djangorestframework==3.6.3
edx-auth-backends==1.1.3
edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1
future==0.16.0
greenlet==0.4.13
idna==2.5
libsass==0.11.1
logutils==0.3.4.1
oauthlib==2.1.0
path.py==11.0.1
pbr==4.0.3
pinax-announcements==2.0.4
polib==1.1.0
pycryptodomex==3.6.1
pygments==2.2.0
pyjwkest==1.4.0
pyjwt==1.6.4
pymongo==3.6.1
python-openid==2.2.5
pytz==2018.4
pyyaml==3.12
regex==2018.2.21
requests-oauthlib==1.0.0
requests==2.17.3
six==1.11.0
slumber==0.7.1
social-auth-app-django==1.2.0
social-auth-core[openidconnect]==1.7.0
sqlparse==0.2.4 # via django-debug-toolbar
stevedore==1.28.0
transifex-client==0.12.4 transifex-client==0.12.4
typing==3.6.4
unicodecsv==0.14.1
unidecode==0.4.21
urllib3==1.21.1
wcwidth==0.1.7
newrelic==2.98.0.81 # New Relic
newrelic==2.98.0.81 # New Relic #
# This file is autogenerated by pip-compile
# To update, run:
#
# make upgrade
#
newrelic==2.98.0.81
# Just the dependencies to run pip-tools, mainly for the "upgrade" make target
pip-tools # Contains pip-compile, used to generate pip requirements files
#
# This file is autogenerated by pip-compile
# To update, run:
#
# make upgrade
#
click==6.7 # via pip-tools
first==2.0.1 # via pip-tools
pip-tools==2.0.2
six==1.11.0 # via pip-tools
-r base.txt
MySQL-python==1.2.5 # GPL License
PyYAML==3.12 # MIT License
gunicorn==0.17.4 # MIT
python-memcached==1.58
nodeenv==1.1.2 # BSD
# Pro-tip: Try not to put anything here. There should be no dependency in #
# production that isn't in development. # This file is autogenerated by pip-compile
-r base.txt # To update, run:
#
MySQL-python==1.2.5 # GPL License # make upgrade
PyYAML==3.12 # MIT License #
gunicorn==0.17.4 # MIT -e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
awesome-slugify==1.6.5
blessings==1.6.1
bpython==0.16
certifi==2018.4.16
chardet==3.0.4
curtsies==0.3.0
django-appconf==1.0.2
django-braces==1.11.0
django-countries==4.5
django-crispy-forms==1.6.1
django-model-utils==2.6.1
django-soapbox==1.3
django-waffle==0.12.0
django-webpack-loader==0.4.1
django==1.11.5
djangorestframework-csv==2.0.0
djangorestframework==3.6.3
edx-auth-backends==1.1.3
edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1
future==0.16.0
greenlet==0.4.13
gunicorn==0.17.4
idna==2.5
libsass==0.11.1
logutils==0.3.4.1
mysql-python==1.2.5
nodeenv==1.1.2
oauthlib==2.1.0
path.py==11.0.1
pbr==4.0.3
pinax-announcements==2.0.4
polib==1.1.0
pycryptodomex==3.6.1
pygments==2.2.0
pyjwkest==1.4.0
pyjwt==1.6.4
pymongo==3.6.1
python-memcached==1.58 python-memcached==1.58
nodeenv==1.1.2 # BSD python-openid==2.2.5
pytz==2018.4
pyyaml==3.12
regex==2018.2.21
requests-oauthlib==1.0.0
requests==2.17.3
six==1.11.0
slumber==0.7.1
social-auth-app-django==1.2.0
social-auth-core[openidconnect]==1.7.0
stevedore==1.28.0
typing==3.6.4
unicodecsv==0.14.1
unidecode==0.4.21
urllib3==1.21.1
wcwidth==0.1.7
# Test dependencies go here.
-r base.txt
bok-choy==0.7.0
coverage==4.4.1
ddt==1.1.1
django-dynamic-fixture==1.9.5
django-nose==1.4.4
elasticsearch==2.4.1
unittest2==1.1.0
httpretty==0.8.14
mock==1.3.0
nose-exclude==0.5.0
nose-ignore-docstring==0.2
nose==1.3.7
pep257==0.7.0
pep8==1.7.0
pylint==1.7.1
logilab-common==1.4.0
selenium>=2.44.0,<3.0.0
sure==1.4.6
testfixtures==4.14.3
# Test dependencies go here. #
-r base.txt # This file is autogenerated by pip-compile
# To update, run:
#
# make upgrade
#
-e git+https://github.com/jazkarta/ccx-keys.git@e6b03704b1bb97c1d2f31301ecb4e3a687c536ea#egg=ccx-keys
-e git+https://github.com/edx/django-lang-pref-middleware.git@0.1.0#egg=django-lang-pref-middleware
-e git+https://github.com/edx/edx-analytics-data-api-client.git@0.14.4#egg=edx-analytics-data-api-client==0.14.4
-e git+https://github.com/edx/opaque-keys.git@d45d0bd8d64c69531be69178b9505b5d38806ce0#egg=opaque-keys
argparse==1.4.0 # via unittest2
astroid==1.6.4 # via pylint
awesome-slugify==1.6.5
backports.functools-lru-cache==1.5 # via astroid, pylint
blessings==1.6.1
bok-choy==0.7.0 bok-choy==0.7.0
bpython==0.16
certifi==2018.4.16
chardet==3.0.4
configparser==3.5.0 # via pylint
coverage==4.4.1 coverage==4.4.1
curtsies==0.3.0
ddt==1.1.1 ddt==1.1.1
django-appconf==1.0.2
django-braces==1.11.0
django-countries==4.5
django-crispy-forms==1.6.1
django-dynamic-fixture==1.9.5 django-dynamic-fixture==1.9.5
django-model-utils==2.6.1
django-nose==1.4.4 django-nose==1.4.4
django-soapbox==1.3
django-waffle==0.12.0
django-webpack-loader==0.4.1
django==1.11.5
djangorestframework-csv==2.0.0
djangorestframework==3.6.3
edx-auth-backends==1.1.3
edx-django-release-util==0.3.1
edx-i18n-tools==0.4.2
edx-rest-api-client==1.7.1
elasticsearch==2.4.1 elasticsearch==2.4.1
unittest2==1.1.0 enum34==1.1.6 # via astroid
funcsigs==1.0.2 # via mock
future==0.16.0
futures==3.2.0 # via isort
greenlet==0.4.13
httpretty==0.8.14 httpretty==0.8.14
idna==2.5
isort==4.3.4 # via pylint
lazy-object-proxy==1.3.1 # via astroid
lazy==1.3 # via bok-choy
libsass==0.11.1
linecache2==1.0.0 # via traceback2
logilab-common==1.4.0
logutils==0.3.4.1
mccabe==0.6.1 # via pylint
mock==1.3.0 mock==1.3.0
needle==0.5.0 # via bok-choy
nose-exclude==0.5.0 nose-exclude==0.5.0
nose-ignore-docstring==0.2 nose-ignore-docstring==0.2
nose==1.3.7 nose==1.3.7
oauthlib==2.1.0
path.py==11.0.1
pbr==4.0.3
pep257==0.7.0 pep257==0.7.0
pep8==1.7.0 pep8==1.7.0
pillow==5.1.0 # via needle
pinax-announcements==2.0.4
polib==1.1.0
pycryptodomex==3.6.1
pygments==2.2.0
pyjwkest==1.4.0
pyjwt==1.6.4
pylint==1.7.1 pylint==1.7.1
logilab-common==1.4.0 pymongo==3.6.1
selenium>=2.44.0,<3.0.0 python-openid==2.2.5
pytz==2018.4
pyyaml==3.12
regex==2018.2.21
requests-oauthlib==1.0.0
requests==2.17.3
selenium==2.53.6
singledispatch==3.4.0.3 # via astroid, pylint
six==1.11.0
slumber==0.7.1
social-auth-app-django==1.2.0
social-auth-core[openidconnect]==1.7.0
stevedore==1.28.0
sure==1.4.6 sure==1.4.6
testfixtures==4.14.3 testfixtures==4.14.3
traceback2==1.4.0 # via unittest2
typing==3.6.4
unicodecsv==0.14.1
unidecode==0.4.21
unittest2==1.1.0
urllib3==1.21.1
wcwidth==0.1.7
wrapt==1.10.11 # via astroid
#!/usr/bin/env bash
set -e
# Replace the instructions for regenerating requirements/*.txt files
function show_help {
echo "Usage: post-pip-compile.sh file ..."
echo "Replace the instructions for regenerating the given requirements file(s)."
}
function clean_file {
FILE_PATH=$1
TEMP_FILE=${FILE_PATH}.tmp
# Replace the instructions for regenerating the output file.
INPUT_FILE=${FILE_PATH/\.txt/\.in}
sed "s/pip-compile --output-file.*/make upgrade/" ${FILE_PATH} > ${TEMP_FILE}
mv ${TEMP_FILE} ${FILE_PATH}
}
for i in "$@"; do
case ${i} in
-h|--help)
# help or unknown option
show_help
exit 0
;;
*)
clean_file ${i}
;;
esac
done
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