From e385867741c5bddb8758bca3baf783a8e02133fd Mon Sep 17 00:00:00 2001 From: Bill DeRusha Date: Tue, 11 Feb 2020 16:34:56 -0500 Subject: [PATCH 1/6] Initial kombu consumer --- registrar/consumer.py | 39 ++++++++++++++++++++++++++++++++++++++ requirements/base.in | 1 + requirements/pip-tools.txt | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 registrar/consumer.py diff --git a/registrar/consumer.py b/registrar/consumer.py new file mode 100644 index 00000000..b7f8c178 --- /dev/null +++ b/registrar/consumer.py @@ -0,0 +1,39 @@ + """ + Defines the Kombu consumer for the registrar project. + """ + from __future__ import absolute_import + + from kombu.mixins import ConsumerMixin + from kombu import Exchange, Queue + + task_exchange = Exchange('course_discovery', type='direct') + queues = [ + Queue('task_queue', task_exchange, routing_key='task_queue'), + ] + + class Worker(ConsumerMixin): + + def __init__(self, connection): + self.connection = connection + + def get_consumers(self, Consumer, channel): + return [ + Consumer(queues, callbacks=[self.on_message], accept=['json']), + ] + + def on_message(self, body, message): + print('RECEIVED MESSAGE: {0!r}'.format(body)) + message.ack() + + + if __name__ == '__main__': + from kombu import Connection + from kombu.utils.debug import setup_logging + setup_logging(loglevel='DEBUG') + + with Connection('redis://:password@redis:6379/0') as conn: + try: + Worker(conn).run() + except KeyboardInterrupt: + print('bye bye') + diff --git a/requirements/base.in b/requirements/base.in index 9f3f8711..bd3254ec 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -17,5 +17,6 @@ edx-auth-backends edx-django-release-util edx-drf-extensions edx-rest-api-client==1.9.2 +kombu<3.1 pytz redis==2.8 diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 9cd8fc84..01eb63fb 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -5,5 +5,5 @@ # pip-compile --output-file=requirements/pip-tools.txt requirements/pip-tools.in # click==7.0 # via pip-tools -pip-tools==4.4.0 +pip-tools==4.4.1 six==1.14.0 # via pip-tools From 20097b27eb6b3b29ebd39110fcfcae34673b4424 Mon Sep 17 00:00:00 2001 From: Chris Pappas Date: Wed, 12 Feb 2020 09:59:39 -0500 Subject: [PATCH 2/6] getting consumner to run via management command; (#258) --- .../core/management/commands/run_consumer.py | 18 ++++++ registrar/consumer.py | 62 ++++++++++--------- 2 files changed, 51 insertions(+), 29 deletions(-) create mode 100644 registrar/apps/core/management/commands/run_consumer.py diff --git a/registrar/apps/core/management/commands/run_consumer.py b/registrar/apps/core/management/commands/run_consumer.py new file mode 100644 index 00000000..7f750f8a --- /dev/null +++ b/registrar/apps/core/management/commands/run_consumer.py @@ -0,0 +1,18 @@ +""" Management command to run worker that will act on messages """ +import logging + +from django.contrib.auth.models import Group +from django.core.management.base import BaseCommand, CommandError + +from registrar.consumer import run_consumer_worker + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + # pylint: disable=missing-docstring + + help = 'Runs a worker to act on messages received from queue.' + + def handle(self, *args, **options): + run_consumer_worker() diff --git a/registrar/consumer.py b/registrar/consumer.py index b7f8c178..ae5a12b2 100644 --- a/registrar/consumer.py +++ b/registrar/consumer.py @@ -1,39 +1,43 @@ - """ - Defines the Kombu consumer for the registrar project. - """ - from __future__ import absolute_import +""" +Defines the Kombu consumer for the registrar project. +""" +from __future__ import absolute_import - from kombu.mixins import ConsumerMixin - from kombu import Exchange, Queue +from kombu.mixins import ConsumerMixin +from kombu import Exchange, Queue - task_exchange = Exchange('course_discovery', type='direct') - queues = [ - Queue('task_queue', task_exchange, routing_key='task_queue'), - ] +from registrar.apps.core.models import Organization - class Worker(ConsumerMixin): +task_exchange = Exchange('course_discovery', type='direct') +queues = [ + Queue('task_queue', task_exchange, routing_key='task_queue'), +] - def __init__(self, connection): - self.connection = connection +class Worker(ConsumerMixin): - def get_consumers(self, Consumer, channel): - return [ - Consumer(queues, callbacks=[self.on_message], accept=['json']), - ] + def __init__(self, connection): + self.connection = connection - def on_message(self, body, message): - print('RECEIVED MESSAGE: {0!r}'.format(body)) - message.ack() + def get_consumers(self, Consumer, channel): + return [ + Consumer(queues, callbacks=[self.on_message], accept=['json']), + ] + def on_message(self, body, message): + print(Organization.objects.first()) + print("If this prints, then we can access Django models!") + print('RECEIVED MESSAGE: {0!r}'.format(body)) + message.ack() - if __name__ == '__main__': - from kombu import Connection - from kombu.utils.debug import setup_logging - setup_logging(loglevel='DEBUG') - with Connection('redis://:password@redis:6379/0') as conn: - try: - Worker(conn).run() - except KeyboardInterrupt: - print('bye bye') +def run_consumer_worker(): + from kombu import Connection + from kombu.utils.debug import setup_logging + setup_logging(loglevel='DEBUG') + + with Connection('redis://:password@redis:6379/0') as conn: + try: + Worker(conn).run() + except KeyboardInterrupt: + print('bye bye') From 8ecb331aca9fabc5b9d65e5a3c5d090c5a13475a Mon Sep 17 00:00:00 2001 From: Bill DeRusha Date: Wed, 12 Feb 2020 11:19:19 -0500 Subject: [PATCH 3/6] refactored code --- registrar/apps/core/consumers.py | 32 ++++++++++++++ .../core/management/commands/run_consumer.py | 14 +++++- registrar/consumer.py | 43 ------------------- 3 files changed, 44 insertions(+), 45 deletions(-) create mode 100644 registrar/apps/core/consumers.py delete mode 100644 registrar/consumer.py diff --git a/registrar/apps/core/consumers.py b/registrar/apps/core/consumers.py new file mode 100644 index 00000000..fb6fc8c8 --- /dev/null +++ b/registrar/apps/core/consumers.py @@ -0,0 +1,32 @@ +""" +Defines the Kombu consumer for the registrar project. +""" +from __future__ import absolute_import + +from django.conf import settings +from kombu.mixins import ConsumerMixin +from kombu import Exchange, Queue + +from registrar.apps.core.models import Program + + +class ProgramConsumer(ConsumerMixin): + exchange = Exchange('course_discovery', type='direct') + queues = [ + Queue('task_queue', exchange, routing_key='task_queue'), + ] + + def __init__(self, connection): + self.connection = connection + + def get_consumers(self, Consumer, channel): + return [ + Consumer(queues, callbacks=[self.on_message], accept=['json']), + ] + + def on_message(self, body, message): + print(Program.objects.first()) + print('RECEIVED MESSAGE: {0!r}'.format(body)) + + message.ack() + diff --git a/registrar/apps/core/management/commands/run_consumer.py b/registrar/apps/core/management/commands/run_consumer.py index 7f750f8a..e340f991 100644 --- a/registrar/apps/core/management/commands/run_consumer.py +++ b/registrar/apps/core/management/commands/run_consumer.py @@ -1,10 +1,13 @@ """ Management command to run worker that will act on messages """ import logging +from django.conf import settings from django.contrib.auth.models import Group from django.core.management.base import BaseCommand, CommandError +from kombu import Connection +from kombu.utils.debug import setup_logging -from registrar.consumer import run_consumer_worker +from registrar.apps.core.consumers import ProgramConsumer logger = logging.getLogger(__name__) @@ -15,4 +18,11 @@ class Command(BaseCommand): help = 'Runs a worker to act on messages received from queue.' def handle(self, *args, **options): - run_consumer_worker() + setup_logging(loglevel='DEBUG') + + with Connection(settings.BROKER_URL) as conn: + try: + ProgramConsumer(conn).run() + except KeyboardInterrupt: + print('bye bye') + diff --git a/registrar/consumer.py b/registrar/consumer.py deleted file mode 100644 index ae5a12b2..00000000 --- a/registrar/consumer.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Defines the Kombu consumer for the registrar project. -""" -from __future__ import absolute_import - -from kombu.mixins import ConsumerMixin -from kombu import Exchange, Queue - -from registrar.apps.core.models import Organization - -task_exchange = Exchange('course_discovery', type='direct') -queues = [ - Queue('task_queue', task_exchange, routing_key='task_queue'), -] - -class Worker(ConsumerMixin): - - def __init__(self, connection): - self.connection = connection - - def get_consumers(self, Consumer, channel): - return [ - Consumer(queues, callbacks=[self.on_message], accept=['json']), - ] - - def on_message(self, body, message): - print(Organization.objects.first()) - print("If this prints, then we can access Django models!") - print('RECEIVED MESSAGE: {0!r}'.format(body)) - message.ack() - - -def run_consumer_worker(): - from kombu import Connection - from kombu.utils.debug import setup_logging - setup_logging(loglevel='DEBUG') - - with Connection('redis://:password@redis:6379/0') as conn: - try: - Worker(conn).run() - except KeyboardInterrupt: - print('bye bye') - From fb271012db41657c576bab8f34eec3f48da66586 Mon Sep 17 00:00:00 2001 From: chavesj Date: Wed, 12 Feb 2020 11:49:16 -0500 Subject: [PATCH 4/6] quality fixes --- registrar/apps/core/consumers.py | 10 +-- .../core/management/commands/run_consumer.py | 20 +++--- requirements/constraints.txt | 6 +- requirements/devstack.txt | 70 +++++++++---------- requirements/local.in | 2 +- requirements/local.txt | 70 +++++++++---------- requirements/monitoring/requirements.txt | 70 +++++++++---------- requirements/production.txt | 36 +++++----- requirements/test.txt | 63 ++++++++--------- 9 files changed, 172 insertions(+), 175 deletions(-) diff --git a/registrar/apps/core/consumers.py b/registrar/apps/core/consumers.py index fb6fc8c8..87f97d9b 100644 --- a/registrar/apps/core/consumers.py +++ b/registrar/apps/core/consumers.py @@ -3,14 +3,17 @@ """ from __future__ import absolute_import -from django.conf import settings -from kombu.mixins import ConsumerMixin from kombu import Exchange, Queue +from kombu.mixins import ConsumerMixin from registrar.apps.core.models import Program class ProgramConsumer(ConsumerMixin): + """ + Class to define Kombu consumer behavior. + Consumer Queue binds to an exchange and handles messages from corresponding Producers. + """ exchange = Exchange('course_discovery', type='direct') queues = [ Queue('task_queue', exchange, routing_key='task_queue'), @@ -21,7 +24,7 @@ def __init__(self, connection): def get_consumers(self, Consumer, channel): return [ - Consumer(queues, callbacks=[self.on_message], accept=['json']), + Consumer(self.queues, callbacks=[self.on_message], accept=['json']), ] def on_message(self, body, message): @@ -29,4 +32,3 @@ def on_message(self, body, message): print('RECEIVED MESSAGE: {0!r}'.format(body)) message.ack() - diff --git a/registrar/apps/core/management/commands/run_consumer.py b/registrar/apps/core/management/commands/run_consumer.py index e340f991..9f1a601d 100644 --- a/registrar/apps/core/management/commands/run_consumer.py +++ b/registrar/apps/core/management/commands/run_consumer.py @@ -2,27 +2,25 @@ import logging from django.conf import settings -from django.contrib.auth.models import Group -from django.core.management.base import BaseCommand, CommandError +from django.core.management.base import BaseCommand from kombu import Connection from kombu.utils.debug import setup_logging from registrar.apps.core.consumers import ProgramConsumer + logger = logging.getLogger(__name__) class Command(BaseCommand): - # pylint: disable=missing-docstring - - help = 'Runs a worker to act on messages received from queue.' - + """ + Runs a worker to act on messages received from queue. + """ def handle(self, *args, **options): setup_logging(loglevel='DEBUG') with Connection(settings.BROKER_URL) as conn: - try: - ProgramConsumer(conn).run() - except KeyboardInterrupt: - print('bye bye') - + try: + ProgramConsumer(conn).run() + except KeyboardInterrupt: + print('bye bye') diff --git a/requirements/constraints.txt b/requirements/constraints.txt index a278ce99..89c24a5f 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -10,4 +10,8 @@ # These packages are pinned because their next version would require django 2.0.0 django-guardian==2.0.0 -django-model-utils<4.0.0 \ No newline at end of file +django-model-utils<4.0.0 + +# Requires Python 3.6+ +mock<4 +zipp<2 diff --git a/requirements/devstack.txt b/requirements/devstack.txt index bbe45179..5794d561 100644 --- a/requirements/devstack.txt +++ b/requirements/devstack.txt @@ -14,13 +14,13 @@ aws-sam-translator==1.20.1 # via cfn-lint aws-xray-sdk==2.4.3 # via moto babel==2.8.0 # via sphinx billiard==3.3.0.23 # via celery -boto3==1.11.6 # via aws-sam-translator, moto +boto3==1.11.15 # via aws-sam-translator, moto boto==2.49.0 # via moto -botocore==1.14.6 # via aws-xray-sdk, boto3, moto, s3transfer +botocore==1.14.15 # via aws-xray-sdk, boto3, moto, s3transfer celery==3.1.26.post2 certifi==2019.11.28 # via requests -cffi==1.13.2 # via cryptography -cfn-lint==0.27.1 # via moto +cffi==1.14.0 # via cryptography +cfn-lint==0.27.5 # via moto chardet==3.0.4 # via requests click-log==0.3.2 # via edx-lint click==7.0 # via click-log, code-annotations, edx-lint @@ -31,27 +31,27 @@ cryptography==2.8 # via moto ddt==1.2.2 defusedxml==0.6.0 # via python3-openid, social-auth-core django-cors-headers==3.2.1 -django-debug-toolbar==2.1 +django-debug-toolbar==2.2 django-dynamic-fixture==3.0.2 -django-extensions==2.2.6 +django-extensions==2.2.8 django-guardian==2.0.0 django-model-utils==3.2.0 django-mysql==3.3.0 django-simple-history==2.8.0 -django-storages==1.8 +django-storages==1.9.1 django-user-tasks==0.3.0 django-waffle==0.19.0 -django==1.11.27 +django==1.11.28 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.11.0 -docker==4.1.0 # via moto +docker==4.2.0 # via moto docopt==0.6.2 # via pipreqs docutils==0.15.2 # via botocore, sphinx ecdsa==0.15 # via python-jose -edx-auth-backends==2.0.2 -edx-django-release-util==0.3.3 -edx-django-utils==2.0.3 # via edx-drf-extensions -edx-drf-extensions==2.4.5 +edx-auth-backends==3.0.2 +edx-django-release-util==0.3.6 +edx-django-utils==2.0.4 # via edx-drf-extensions +edx-drf-extensions==2.4.6 edx-i18n-tools==0.5.0 edx-lint==1.3.0 edx-opaque-keys==2.0.1 # via edx-drf-extensions @@ -59,34 +59,33 @@ edx-rest-api-client==1.9.2 edx-sphinx-theme==1.5.0 factory-boy==2.12.0 faker==4.0.0 -freezegun==0.3.13 +freezegun==0.3.14 future==0.18.2 # via aws-xray-sdk, pyjwkest idna==2.8 # via moto, requests imagesize==1.2.0 # via sphinx -importlib-metadata==1.4.0 # via jsonschema, path, pluggy, pytest +importlib-metadata==1.5.0 # via jsonschema, path, pluggy, pytest importlib-resources==1.0.2 # via cfn-lint isort[requirements]==4.3.21 -jinja2==2.10.3 # via code-annotations, moto, sphinx +jinja2==2.11.1 # via code-annotations, moto, sphinx jmespath==0.9.4 # via boto3, botocore jsondiff==1.1.2 # via moto -jsonpatch==1.24 # via cfn-lint +jsonpatch==1.25 # via cfn-lint jsonpickle==1.2 # via aws-xray-sdk jsonpointer==2.0 # via jsonpatch jsonschema==3.2.0 # via aws-sam-translator, cfn-lint -kombu==3.0.37 # via celery +kombu==3.0.37 lazy-object-proxy==1.4.3 # via astroid markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via pylint mock==3.0.5 -more-itertools==8.1.0 # via pytest, zipp +more-itertools==8.2.0 # via pytest moto==1.3.8 mysqlclient==1.3.14 -newrelic==5.4.1.134 # via edx-django-utils +newrelic==5.6.0.135 # via edx-django-utils oauthlib==3.1.0 # via requests-oauthlib, social-auth-core -packaging==20.0 # via pytest +packaging==20.1 # via pytest path.py==12.4.0 # via edx-i18n-tools path==13.1.0 # via path.py -pathlib2==2.3.5 # via pytest pathspec==0.7.0 # via yamllint pbr==5.4.4 # via stevedore pip-api==0.0.13 # via isort @@ -98,10 +97,9 @@ py==1.8.1 # via pytest pyasn1==0.4.8 # via python-jose, rsa pycodestyle==2.5.0 pycparser==2.19 # via cffi -pycryptodomex==3.9.4 # via pyjwkest +pycryptodomex==3.9.6 # via pyjwkest pygments==2.5.2 # via sphinx -pyinotify==0.9.6 -pyjwkest==1.3.2 # via edx-drf-extensions, social-auth-core +pyjwkest==1.3.2 # via edx-drf-extensions pyjwt==1.7.1 # via djangorestframework-jwt, edx-auth-backends, edx-rest-api-client, social-auth-core pylint-celery==0.3 # via edx-lint pylint-django==0.7.2 # via edx-lint @@ -112,7 +110,7 @@ pyparsing==2.4.6 # via packaging pyrsistent==0.15.7 # via jsonschema pytest-cov==2.8.1 pytest-django==3.8.0 -pytest==5.3.4 +pytest==5.3.5 python-dateutil==2.8.1 # via analytics-python, botocore, edx-drf-extensions, faker, freezegun, moto, ruamel.yaml.convert python-jose==3.1.0 # via moto python-memcached==1.59 @@ -130,30 +128,30 @@ ruamel.std.argparse==0.8.1 # via ruamel.yaml.cmd ruamel.yaml.clib==0.2.0 # via ruamel.yaml ruamel.yaml.cmd==0.5.5 ruamel.yaml.convert==0.3.2 # via ruamel.yaml.cmd -ruamel.yaml==0.16.6 # via ruamel.yaml.cmd, ruamel.yaml.convert -s3transfer==0.3.1 # via boto3 +ruamel.yaml==0.16.10 # via ruamel.yaml.cmd, ruamel.yaml.convert +s3transfer==0.3.3 # via boto3 semantic-version==2.8.4 # via edx-drf-extensions -six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pathlib2, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, python-memcached, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client +six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, python-memcached, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client slumber==0.7.1 # via edx-rest-api-client snowballstemmer==2.0.0 # via sphinx -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 +social-auth-app-django==3.1.0 # via edx-auth-backends +social-auth-core==3.2.0 # via edx-auth-backends, social-auth-app-django sphinx==1.6.7 -sphinxcontrib-websupport==1.1.2 # via sphinx +sphinxcontrib-websupport==1.2.0 # via sphinx sqlparse==0.3.0 # via django-debug-toolbar -stevedore==1.31.0 # via code-annotations, edx-opaque-keys +stevedore==1.32.0 # via code-annotations, edx-opaque-keys text-unidecode==1.3 # via faker transifex-client==0.13.7 unidecode==1.1.1 # via python-slugify -urllib3==1.25.7 # via botocore, requests, transifex-client +urllib3==1.25.8 # via botocore, requests, transifex-client wcwidth==0.1.8 # via pytest websocket-client==0.57.0 # via docker -werkzeug==0.16.0 # via moto +werkzeug==1.0.0 # via moto wrapt==1.11.2 # via astroid, aws-xray-sdk xmltodict==0.12.0 # via moto yamllint==1.20.0 yarg==0.1.9 # via pipreqs -zipp==1.0.0 # via importlib-metadata +zipp==1.1.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/local.in b/requirements/local.in index b9690b31..6c1a1964 100644 --- a/requirements/local.in +++ b/requirements/local.in @@ -6,6 +6,6 @@ django-debug-toolbar edx-i18n-tools -pyinotify +#pyinotify ruamel.yaml.cmd transifex-client diff --git a/requirements/local.txt b/requirements/local.txt index 8e8d0edd..af9bc4e5 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -14,13 +14,13 @@ aws-sam-translator==1.20.1 # via cfn-lint aws-xray-sdk==2.4.3 # via moto babel==2.8.0 # via sphinx billiard==3.3.0.23 # via celery -boto3==1.11.6 # via aws-sam-translator, moto +boto3==1.11.15 # via aws-sam-translator, moto boto==2.49.0 # via moto -botocore==1.14.6 # via aws-xray-sdk, boto3, moto, s3transfer +botocore==1.14.15 # via aws-xray-sdk, boto3, moto, s3transfer celery==3.1.26.post2 certifi==2019.11.28 # via requests -cffi==1.13.2 # via cryptography -cfn-lint==0.27.1 # via moto +cffi==1.14.0 # via cryptography +cfn-lint==0.27.5 # via moto chardet==3.0.4 # via requests click-log==0.3.2 # via edx-lint click==7.0 # via click-log, code-annotations, edx-lint @@ -31,27 +31,27 @@ cryptography==2.8 # via moto ddt==1.2.2 defusedxml==0.6.0 # via python3-openid, social-auth-core django-cors-headers==3.2.1 -django-debug-toolbar==2.1 +django-debug-toolbar==2.2 django-dynamic-fixture==3.0.2 -django-extensions==2.2.6 +django-extensions==2.2.8 django-guardian==2.0.0 django-model-utils==3.2.0 django-mysql==3.3.0 django-simple-history==2.8.0 -django-storages==1.8 +django-storages==1.9.1 django-user-tasks==0.3.0 django-waffle==0.19.0 -django==1.11.27 +django==1.11.28 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.11.0 -docker==4.1.0 # via moto +docker==4.2.0 # via moto docopt==0.6.2 # via pipreqs docutils==0.15.2 # via botocore, sphinx ecdsa==0.15 # via python-jose -edx-auth-backends==2.0.2 -edx-django-release-util==0.3.3 -edx-django-utils==2.0.3 # via edx-drf-extensions -edx-drf-extensions==2.4.5 +edx-auth-backends==3.0.2 +edx-django-release-util==0.3.6 +edx-django-utils==2.0.4 # via edx-drf-extensions +edx-drf-extensions==2.4.6 edx-i18n-tools==0.5.0 edx-lint==1.3.0 edx-opaque-keys==2.0.1 # via edx-drf-extensions @@ -59,33 +59,32 @@ edx-rest-api-client==1.9.2 edx-sphinx-theme==1.5.0 factory-boy==2.12.0 faker==4.0.0 -freezegun==0.3.13 +freezegun==0.3.14 future==0.18.2 # via aws-xray-sdk, pyjwkest idna==2.8 # via moto, requests imagesize==1.2.0 # via sphinx -importlib-metadata==1.4.0 # via jsonschema, path, pluggy, pytest +importlib-metadata==1.5.0 # via jsonschema, path, pluggy, pytest importlib-resources==1.0.2 # via cfn-lint isort[requirements]==4.3.21 -jinja2==2.10.3 # via code-annotations, moto, sphinx +jinja2==2.11.1 # via code-annotations, moto, sphinx jmespath==0.9.4 # via boto3, botocore jsondiff==1.1.2 # via moto -jsonpatch==1.24 # via cfn-lint +jsonpatch==1.25 # via cfn-lint jsonpickle==1.2 # via aws-xray-sdk jsonpointer==2.0 # via jsonpatch jsonschema==3.2.0 # via aws-sam-translator, cfn-lint -kombu==3.0.37 # via celery +kombu==3.0.37 lazy-object-proxy==1.4.3 # via astroid markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via pylint mock==3.0.5 -more-itertools==8.1.0 # via pytest, zipp +more-itertools==8.2.0 # via pytest moto==1.3.8 -newrelic==5.4.1.134 # via edx-django-utils +newrelic==5.6.0.135 # via edx-django-utils oauthlib==3.1.0 # via requests-oauthlib, social-auth-core -packaging==20.0 # via pytest +packaging==20.1 # via pytest path.py==12.4.0 # via edx-i18n-tools path==13.1.0 # via path.py -pathlib2==2.3.5 # via pytest pathspec==0.7.0 # via yamllint pbr==5.4.4 # via stevedore pip-api==0.0.13 # via isort @@ -97,10 +96,9 @@ py==1.8.1 # via pytest pyasn1==0.4.8 # via python-jose, rsa pycodestyle==2.5.0 pycparser==2.19 # via cffi -pycryptodomex==3.9.4 # via pyjwkest +pycryptodomex==3.9.6 # via pyjwkest pygments==2.5.2 # via sphinx -pyinotify==0.9.6 -pyjwkest==1.3.2 # via edx-drf-extensions, social-auth-core +pyjwkest==1.3.2 # via edx-drf-extensions pyjwt==1.7.1 # via djangorestframework-jwt, edx-auth-backends, edx-rest-api-client, social-auth-core pylint-celery==0.3 # via edx-lint pylint-django==0.7.2 # via edx-lint @@ -111,7 +109,7 @@ pyparsing==2.4.6 # via packaging pyrsistent==0.15.7 # via jsonschema pytest-cov==2.8.1 pytest-django==3.8.0 -pytest==5.3.4 +pytest==5.3.5 python-dateutil==2.8.1 # via analytics-python, botocore, edx-drf-extensions, faker, freezegun, moto, ruamel.yaml.convert python-jose==3.1.0 # via moto python-slugify==1.2.6 # via code-annotations, transifex-client @@ -128,30 +126,30 @@ ruamel.std.argparse==0.8.1 # via ruamel.yaml.cmd ruamel.yaml.clib==0.2.0 # via ruamel.yaml ruamel.yaml.cmd==0.5.5 ruamel.yaml.convert==0.3.2 # via ruamel.yaml.cmd -ruamel.yaml==0.16.6 # via ruamel.yaml.cmd, ruamel.yaml.convert -s3transfer==0.3.1 # via boto3 +ruamel.yaml==0.16.10 # via ruamel.yaml.cmd, ruamel.yaml.convert +s3transfer==0.3.3 # via boto3 semantic-version==2.8.4 # via edx-drf-extensions -six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pathlib2, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client +six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client slumber==0.7.1 # via edx-rest-api-client snowballstemmer==2.0.0 # via sphinx -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 +social-auth-app-django==3.1.0 # via edx-auth-backends +social-auth-core==3.2.0 # via edx-auth-backends, social-auth-app-django sphinx==1.6.7 -sphinxcontrib-websupport==1.1.2 # via sphinx +sphinxcontrib-websupport==1.2.0 # via sphinx sqlparse==0.3.0 # via django-debug-toolbar -stevedore==1.31.0 # via code-annotations, edx-opaque-keys +stevedore==1.32.0 # via code-annotations, edx-opaque-keys text-unidecode==1.3 # via faker transifex-client==0.13.7 unidecode==1.1.1 # via python-slugify -urllib3==1.25.7 # via botocore, requests, transifex-client +urllib3==1.25.8 # via botocore, requests, transifex-client wcwidth==0.1.8 # via pytest websocket-client==0.57.0 # via docker -werkzeug==0.16.0 # via moto +werkzeug==1.0.0 # via moto wrapt==1.11.2 # via astroid, aws-xray-sdk xmltodict==0.12.0 # via moto yamllint==1.20.0 yarg==0.1.9 # via pipreqs -zipp==1.0.0 # via importlib-metadata +zipp==1.1.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/monitoring/requirements.txt b/requirements/monitoring/requirements.txt index 81dcde44..28c9adcf 100644 --- a/requirements/monitoring/requirements.txt +++ b/requirements/monitoring/requirements.txt @@ -14,13 +14,13 @@ aws-sam-translator==1.20.1 # via cfn-lint aws-xray-sdk==2.4.3 # via moto babel==2.8.0 # via sphinx billiard==3.3.0.23 # via celery -boto3==1.11.6 +boto3==1.11.15 boto==2.49.0 # via moto -botocore==1.14.6 # via aws-xray-sdk, boto3, moto, s3transfer +botocore==1.14.15 # via aws-xray-sdk, boto3, moto, s3transfer celery==3.1.26.post2 certifi==2019.11.28 # via requests -cffi==1.13.2 # via cryptography -cfn-lint==0.27.1 # via moto +cffi==1.14.0 # via cryptography +cfn-lint==0.27.5 # via moto chardet==3.0.4 # via requests click-log==0.3.2 # via edx-lint click==7.0 # via click-log, code-annotations, edx-lint @@ -31,27 +31,27 @@ cryptography==2.8 # via moto ddt==1.2.2 defusedxml==0.6.0 # via python3-openid, social-auth-core django-cors-headers==3.2.1 -django-debug-toolbar==2.1 +django-debug-toolbar==2.2 django-dynamic-fixture==3.0.2 -django-extensions==2.2.6 +django-extensions==2.2.8 django-guardian==2.0.0 django-model-utils==3.2.0 django-mysql==3.3.0 django-simple-history==2.8.0 -django-storages==1.8 +django-storages==1.9.1 django-user-tasks==0.3.0 django-waffle==0.19.0 -django==1.11.27 +django==1.11.28 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.11.0 -docker==4.1.0 # via moto +docker==4.2.0 # via moto docopt==0.6.2 # via pipreqs docutils==0.15.2 # via botocore, sphinx ecdsa==0.15 # via python-jose -edx-auth-backends==2.0.2 -edx-django-release-util==0.3.3 -edx-django-utils==2.0.3 # via edx-drf-extensions -edx-drf-extensions==2.4.5 +edx-auth-backends==3.0.2 +edx-django-release-util==0.3.6 +edx-django-utils==2.0.4 # via edx-drf-extensions +edx-drf-extensions==2.4.6 edx-i18n-tools==0.5.0 edx-lint==1.3.0 edx-opaque-keys==2.0.1 # via edx-drf-extensions @@ -59,37 +59,36 @@ edx-rest-api-client==1.9.2 edx-sphinx-theme==1.5.0 factory-boy==2.12.0 faker==4.0.0 -freezegun==0.3.13 +freezegun==0.3.14 future==0.18.2 # via aws-xray-sdk, pyjwkest gevent==1.4.0 greenlet==0.4.15 # via gevent gunicorn==20.0.4 idna==2.8 # via moto, requests imagesize==1.2.0 # via sphinx -importlib-metadata==1.4.0 # via jsonschema, path, pluggy, pytest +importlib-metadata==1.5.0 # via jsonschema, path, pluggy, pytest importlib-resources==1.0.2 # via cfn-lint isort[requirements]==4.3.21 -jinja2==2.10.3 # via code-annotations, moto, sphinx +jinja2==2.11.1 # via code-annotations, moto, sphinx jmespath==0.9.4 # via boto3, botocore jsondiff==1.1.2 # via moto -jsonpatch==1.24 # via cfn-lint +jsonpatch==1.25 # via cfn-lint jsonpickle==1.2 # via aws-xray-sdk jsonpointer==2.0 # via jsonpatch jsonschema==3.2.0 # via aws-sam-translator, cfn-lint -kombu==3.0.37 # via celery +kombu==3.0.37 lazy-object-proxy==1.4.3 # via astroid markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via pylint mock==3.0.5 -more-itertools==8.1.0 # via pytest, zipp +more-itertools==8.2.0 # via pytest moto==1.3.8 mysqlclient==1.3.14 -newrelic==5.4.1.134 +newrelic==5.6.0.135 oauthlib==3.1.0 # via requests-oauthlib, social-auth-core -packaging==20.0 # via pytest +packaging==20.1 # via pytest path.py==12.4.0 # via edx-i18n-tools path==13.1.0 # via path.py -pathlib2==2.3.5 # via pytest pathspec==0.7.0 # via yamllint pbr==5.4.4 # via stevedore pip-api==0.0.13 # via isort @@ -101,10 +100,9 @@ py==1.8.1 # via pytest pyasn1==0.4.8 # via python-jose, rsa pycodestyle==2.5.0 pycparser==2.19 # via cffi -pycryptodomex==3.9.4 # via pyjwkest +pycryptodomex==3.9.6 # via pyjwkest pygments==2.5.2 # via sphinx -pyinotify==0.9.6 -pyjwkest==1.3.2 # via edx-drf-extensions, social-auth-core +pyjwkest==1.3.2 # via edx-drf-extensions pyjwt==1.7.1 # via djangorestframework-jwt, edx-auth-backends, edx-rest-api-client, social-auth-core pylint-celery==0.3 # via edx-lint pylint-django==0.7.2 # via edx-lint @@ -115,7 +113,7 @@ pyparsing==2.4.6 # via packaging pyrsistent==0.15.7 # via jsonschema pytest-cov==2.8.1 pytest-django==3.8.0 -pytest==5.3.4 +pytest==5.3.5 python-dateutil==2.8.1 # via analytics-python, botocore, edx-drf-extensions, faker, freezegun, moto, ruamel.yaml.convert python-jose==3.1.0 # via moto python-memcached==1.59 @@ -133,30 +131,30 @@ ruamel.std.argparse==0.8.1 # via ruamel.yaml.cmd ruamel.yaml.clib==0.2.0 # via ruamel.yaml ruamel.yaml.cmd==0.5.5 ruamel.yaml.convert==0.3.2 # via ruamel.yaml.cmd -ruamel.yaml==0.16.6 # via ruamel.yaml.cmd, ruamel.yaml.convert -s3transfer==0.3.1 # via boto3 +ruamel.yaml==0.16.10 # via ruamel.yaml.cmd, ruamel.yaml.convert +s3transfer==0.3.3 # via boto3 semantic-version==2.8.4 # via edx-drf-extensions -six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pathlib2, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, python-memcached, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client +six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, configobj, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-i18n-tools, edx-lint, edx-opaque-keys, edx-sphinx-theme, freezegun, jsonschema, mock, moto, packaging, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, python-memcached, responses, social-auth-app-django, social-auth-core, sphinx, stevedore, transifex-client, websocket-client slumber==0.7.1 # via edx-rest-api-client snowballstemmer==2.0.0 # via sphinx -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 +social-auth-app-django==3.1.0 # via edx-auth-backends +social-auth-core==3.2.0 # via edx-auth-backends, social-auth-app-django sphinx==1.6.7 -sphinxcontrib-websupport==1.1.2 # via sphinx +sphinxcontrib-websupport==1.2.0 # via sphinx sqlparse==0.3.0 # via django-debug-toolbar -stevedore==1.31.0 # via code-annotations, edx-opaque-keys +stevedore==1.32.0 # via code-annotations, edx-opaque-keys text-unidecode==1.3 # via faker transifex-client==0.13.7 unidecode==1.1.1 # via python-slugify -urllib3==1.25.7 # via botocore, requests, transifex-client +urllib3==1.25.8 # via botocore, requests, transifex-client wcwidth==0.1.8 # via pytest websocket-client==0.57.0 # via docker -werkzeug==0.16.0 # via moto +werkzeug==1.0.0 # via moto wrapt==1.11.2 # via astroid, aws-xray-sdk xmltodict==0.12.0 # via moto yamllint==1.20.0 yarg==0.1.9 # via pipreqs -zipp==1.0.0 # via importlib-metadata +zipp==1.1.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/production.txt b/requirements/production.txt index 151910f5..d7383e93 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -8,29 +8,29 @@ amqp==1.4.9 # via kombu analytics-python==1.2.9 anyjson==0.3.3 # via kombu billiard==3.3.0.23 # via celery -boto3==1.11.6 -botocore==1.14.6 # via boto3, s3transfer +boto3==1.11.15 +botocore==1.14.15 # via boto3, s3transfer celery==3.1.26.post2 certifi==2019.11.28 # via requests chardet==3.0.4 # via requests defusedxml==0.6.0 # via python3-openid, social-auth-core django-cors-headers==3.2.1 -django-extensions==2.2.6 +django-extensions==2.2.8 django-guardian==2.0.0 django-model-utils==3.2.0 django-mysql==3.3.0 django-simple-history==2.8.0 -django-storages==1.8 +django-storages==1.9.1 django-user-tasks==0.3.0 django-waffle==0.19.0 -django==1.11.27 +django==1.11.28 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.11.0 docutils==0.15.2 # via botocore -edx-auth-backends==2.0.2 -edx-django-release-util==0.3.3 -edx-django-utils==2.0.3 # via edx-drf-extensions -edx-drf-extensions==2.4.5 +edx-auth-backends==3.0.2 +edx-django-release-util==0.3.6 +edx-django-utils==2.0.4 # via edx-drf-extensions +edx-drf-extensions==2.4.6 edx-opaque-keys==2.0.1 # via edx-drf-extensions edx-rest-api-client==1.9.2 future==0.18.2 # via pyjwkest @@ -39,14 +39,14 @@ greenlet==0.4.15 # via gevent gunicorn==20.0.4 idna==2.8 # via requests jmespath==0.9.4 # via boto3, botocore -kombu==3.0.37 # via celery +kombu==3.0.37 mysqlclient==1.3.14 -newrelic==5.4.1.134 # via edx-django-utils +newrelic==5.6.0.135 # via edx-django-utils oauthlib==3.1.0 # via requests-oauthlib, social-auth-core pbr==5.4.4 # via stevedore psutil==1.2.1 # via edx-django-utils, edx-drf-extensions -pycryptodomex==3.9.4 # via pyjwkest -pyjwkest==1.3.2 # via edx-drf-extensions, social-auth-core +pycryptodomex==3.9.6 # via pyjwkest +pyjwkest==1.3.2 # via edx-drf-extensions pyjwt==1.7.1 # via djangorestframework-jwt, edx-auth-backends, edx-rest-api-client, social-auth-core pymongo==3.10.1 # via edx-opaque-keys python-dateutil==2.8.1 # via analytics-python, botocore, edx-drf-extensions @@ -58,14 +58,14 @@ redis==2.8 requests-oauthlib==1.3.0 # via social-auth-core requests==2.22.0 # via analytics-python, edx-drf-extensions, edx-rest-api-client, pyjwkest, requests-oauthlib, slumber, social-auth-core rest-condition==1.0.3 # via edx-drf-extensions -s3transfer==0.3.1 # via boto3 +s3transfer==0.3.3 # via boto3 semantic-version==2.8.4 # via edx-drf-extensions six==1.14.0 # via analytics-python, django-extensions, django-simple-history, django-waffle, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-opaque-keys, pyjwkest, python-dateutil, python-memcached, 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.31.0 # via edx-opaque-keys -urllib3==1.25.7 # via botocore, requests +social-auth-app-django==3.1.0 # via edx-auth-backends +social-auth-core==3.2.0 # via edx-auth-backends, social-auth-app-django +stevedore==1.32.0 # via edx-opaque-keys +urllib3==1.25.8 # via botocore, requests # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/test.txt b/requirements/test.txt index 73b06019..f7368778 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -12,13 +12,13 @@ attrs==19.3.0 # via jsonschema, pytest aws-sam-translator==1.20.1 # via cfn-lint aws-xray-sdk==2.4.3 # via moto billiard==3.3.0.23 # via celery -boto3==1.11.6 # via aws-sam-translator, moto +boto3==1.11.15 # via aws-sam-translator, moto boto==2.49.0 # via moto -botocore==1.14.6 # via aws-xray-sdk, boto3, moto, s3transfer +botocore==1.14.15 # via aws-xray-sdk, boto3, moto, s3transfer celery==3.1.26.post2 certifi==2019.11.28 # via requests -cffi==1.13.2 # via cryptography -cfn-lint==0.27.1 # via moto +cffi==1.14.0 # via cryptography +cfn-lint==0.27.5 # via moto chardet==3.0.4 # via requests click-log==0.3.2 # via edx-lint click==7.0 # via click-log, code-annotations, edx-lint @@ -29,54 +29,53 @@ ddt==1.2.2 defusedxml==0.6.0 # via python3-openid, social-auth-core django-cors-headers==3.2.1 django-dynamic-fixture==3.0.2 -django-extensions==2.2.6 +django-extensions==2.2.8 django-guardian==2.0.0 django-model-utils==3.2.0 django-mysql==3.3.0 django-simple-history==2.8.0 -django-storages==1.8 +django-storages==1.9.1 django-user-tasks==0.3.0 django-waffle==0.19.0 -django==1.11.27 +django==1.11.28 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.11.0 -docker==4.1.0 # via moto +docker==4.2.0 # via moto docopt==0.6.2 # via pipreqs docutils==0.15.2 # via botocore ecdsa==0.15 # via python-jose -edx-auth-backends==2.0.2 -edx-django-release-util==0.3.3 -edx-django-utils==2.0.3 # via edx-drf-extensions -edx-drf-extensions==2.4.5 +edx-auth-backends==3.0.2 +edx-django-release-util==0.3.6 +edx-django-utils==2.0.4 # via edx-drf-extensions +edx-drf-extensions==2.4.6 edx-lint==1.3.0 edx-opaque-keys==2.0.1 # via edx-drf-extensions edx-rest-api-client==1.9.2 factory-boy==2.12.0 faker==4.0.0 -freezegun==0.3.13 +freezegun==0.3.14 future==0.18.2 # via aws-xray-sdk, pyjwkest idna==2.8 # via moto, requests -importlib-metadata==1.4.0 # via jsonschema, pluggy, pytest +importlib-metadata==1.5.0 # via jsonschema, pluggy, pytest importlib-resources==1.0.2 # via cfn-lint isort[requirements]==4.3.21 -jinja2==2.10.3 # via code-annotations, moto +jinja2==2.11.1 # via code-annotations, moto jmespath==0.9.4 # via boto3, botocore jsondiff==1.1.2 # via moto -jsonpatch==1.24 # via cfn-lint +jsonpatch==1.25 # via cfn-lint jsonpickle==1.2 # via aws-xray-sdk jsonpointer==2.0 # via jsonpatch jsonschema==3.2.0 # via aws-sam-translator, cfn-lint -kombu==3.0.37 # via celery +kombu==3.0.37 lazy-object-proxy==1.4.3 # via astroid markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via pylint mock==3.0.5 -more-itertools==8.1.0 # via pytest, zipp +more-itertools==8.2.0 # via pytest moto==1.3.8 -newrelic==5.4.1.134 # via edx-django-utils +newrelic==5.6.0.135 # via edx-django-utils oauthlib==3.1.0 # via requests-oauthlib, social-auth-core -packaging==20.0 # via pytest -pathlib2==2.3.5 # via pytest +packaging==20.1 # via pytest pathspec==0.7.0 # via yamllint pbr==5.4.4 # via stevedore pip-api==0.0.13 # via isort @@ -87,8 +86,8 @@ py==1.8.1 # via pytest pyasn1==0.4.8 # via python-jose, rsa pycodestyle==2.5.0 pycparser==2.19 # via cffi -pycryptodomex==3.9.4 # via pyjwkest -pyjwkest==1.3.2 # via edx-drf-extensions, social-auth-core +pycryptodomex==3.9.6 # via pyjwkest +pyjwkest==1.3.2 # via edx-drf-extensions pyjwt==1.7.1 # via djangorestframework-jwt, edx-auth-backends, edx-rest-api-client, social-auth-core pylint-celery==0.3 # via edx-lint pylint-django==0.7.2 # via edx-lint @@ -99,7 +98,7 @@ pyparsing==2.4.6 # via packaging pyrsistent==0.15.7 # via jsonschema pytest-cov==2.8.1 pytest-django==3.8.0 -pytest==5.3.4 +pytest==5.3.5 python-dateutil==2.8.1 # via analytics-python, botocore, edx-drf-extensions, faker, freezegun, moto python-jose==3.1.0 # via moto python-slugify==4.0.0 # via code-annotations @@ -112,23 +111,23 @@ requests==2.22.0 # via analytics-python, docker, edx-drf-extensions, ed responses==0.10.9 rest-condition==1.0.3 # via edx-drf-extensions rsa==4.0 # via python-jose -s3transfer==0.3.1 # via boto3 +s3transfer==0.3.3 # via boto3 semantic-version==2.8.4 # via edx-drf-extensions -six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-lint, edx-opaque-keys, freezegun, jsonschema, mock, moto, packaging, pathlib2, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, responses, social-auth-app-django, social-auth-core, stevedore, websocket-client +six==1.14.0 # via analytics-python, astroid, aws-sam-translator, cfn-lint, cryptography, django-dynamic-fixture, django-extensions, django-simple-history, django-waffle, docker, ecdsa, edx-auth-backends, edx-django-release-util, edx-drf-extensions, edx-lint, edx-opaque-keys, freezegun, jsonschema, mock, moto, packaging, pyjwkest, pylint, pyrsistent, python-dateutil, python-jose, responses, social-auth-app-django, social-auth-core, stevedore, websocket-client 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.31.0 # via code-annotations, edx-opaque-keys +social-auth-app-django==3.1.0 # via edx-auth-backends +social-auth-core==3.2.0 # via edx-auth-backends, social-auth-app-django +stevedore==1.32.0 # via code-annotations, edx-opaque-keys text-unidecode==1.3 # via faker, python-slugify -urllib3==1.25.7 # via botocore, requests +urllib3==1.25.8 # via botocore, requests wcwidth==0.1.8 # via pytest websocket-client==0.57.0 # via docker -werkzeug==0.16.0 # via moto +werkzeug==1.0.0 # via moto wrapt==1.11.2 # via astroid, aws-xray-sdk xmltodict==0.12.0 # via moto yamllint==1.20.0 yarg==0.1.9 # via pipreqs -zipp==1.0.0 # via importlib-metadata +zipp==1.1.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip From 35f33bd86b919e215522bc31fd304a54d258d6a7 Mon Sep 17 00:00:00 2001 From: Christopher Pappas Date: Wed, 12 Feb 2020 14:07:52 -0500 Subject: [PATCH 5/6] resolving conflict --- registrar/apps/core/consumers.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/registrar/apps/core/consumers.py b/registrar/apps/core/consumers.py index 87f97d9b..0cd63441 100644 --- a/registrar/apps/core/consumers.py +++ b/registrar/apps/core/consumers.py @@ -10,13 +10,12 @@ class ProgramConsumer(ConsumerMixin): - """ - Class to define Kombu consumer behavior. - Consumer Queue binds to an exchange and handles messages from corresponding Producers. - """ - exchange = Exchange('course_discovery', type='direct') + + exchange = Exchange('catalog', type='direct') queues = [ - Queue('task_queue', exchange, routing_key='task_queue'), + Queue('program_create_queue', exchange, routing_key='catalog.program.create'), + Queue('program_update_queue', exchange, routing_key='catalog.program.update'), + Queue('program_delete_queue', exchange, routing_key='catalog.program.delete'), ] def __init__(self, connection): From 1f189e85a6a144fc7781b0203ad7366ba7b3b3f7 Mon Sep 17 00:00:00 2001 From: chavesj Date: Wed, 12 Feb 2020 16:50:25 -0500 Subject: [PATCH 6/6] added handling of different operations --- registrar/apps/core/consumers.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/registrar/apps/core/consumers.py b/registrar/apps/core/consumers.py index 0cd63441..6d4d61e9 100644 --- a/registrar/apps/core/consumers.py +++ b/registrar/apps/core/consumers.py @@ -27,7 +27,14 @@ def get_consumers(self, Consumer, channel): ] def on_message(self, body, message): - print(Program.objects.first()) - print('RECEIVED MESSAGE: {0!r}'.format(body)) - + payload = message.payload + if message.delivery_info['routing_key'] == 'catalog.program.create': + print('CREATED!') + print(payload) + elif message.delivery_info['routing_key'] == 'catalog.program.update': + print('UPDATED!') + print(payload) + elif message.delivery_info['routing_key'] == 'catalog.program.delete': + print('DELETED!') + print(payload) message.ack()