From 8eef95310dbfe5832bd95b6ed6b1556116923237 Mon Sep 17 00:00:00 2001 From: "sandro.meireles" Date: Thu, 25 Jul 2024 11:48:36 -0300 Subject: [PATCH 1/2] feat: Add RabbitMQ to docker-compose to be used in EDA --- docker/docker-compose.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 77a5668..3e95fa6 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -9,3 +9,11 @@ services: - POSTGRES_USER=${POSTGRES_USER:-retail} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-retail} - POSTGRES_DB=${POSTGRES_DB:-retail} + rabbitmq: + image: rabbitmq:3.9.7-management + ports: + - "5672:5672" + - "15672:15672" + environment: + - RABBITMQ_DEFAULT_USER=guest + - RABBITMQ_DEFAULT_PASS=guest \ No newline at end of file From 4b4756079460860910cd2360a61aec9b0622b8c5 Mon Sep 17 00:00:00 2001 From: "sandro.meireles" Date: Thu, 25 Jul 2024 11:50:47 -0300 Subject: [PATCH 2/2] feat: Install the weni-eda package and configure event-driven --- docker/docker-compose.yml | 2 +- poetry.lock | 63 ++++++++++++++++++++++++++++++++- pyproject.toml | 3 ++ retail/event_driven/__init__.py | 0 retail/event_driven/handle.py | 5 +++ retail/settings.py | 15 ++++++++ 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 retail/event_driven/__init__.py create mode 100644 retail/event_driven/handle.py diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3e95fa6..fd3dc3d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -16,4 +16,4 @@ services: - "15672:15672" environment: - RABBITMQ_DEFAULT_USER=guest - - RABBITMQ_DEFAULT_PASS=guest \ No newline at end of file + - RABBITMQ_DEFAULT_PASS=guest diff --git a/poetry.lock b/poetry.lock index d85bea6..eeb99e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,19 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +[[package]] +name = "amqp" +version = "5.2.0" +description = "Low-level AMQP client for Python (fork of amqplib)." +optional = false +python-versions = ">=3.6" +files = [ + {file = "amqp-5.2.0-py3-none-any.whl", hash = "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637"}, + {file = "amqp-5.2.0.tar.gz", hash = "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"}, +] + +[package.dependencies] +vine = ">=5.0.0,<6.0.0" + [[package]] name = "asgiref" version = "3.8.1" @@ -200,6 +214,28 @@ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx- test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] type = ["mypy (>=1.8)"] +[[package]] +name = "psycopg2" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"}, + {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, + {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, + {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, + {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, + {file = "psycopg2-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:bac58c024c9922c23550af2a581998624d6e02350f4ae9c5f0bc642c633a2d5e"}, + {file = "psycopg2-2.9.9-cp39-cp39-win32.whl", hash = "sha256:c92811b2d4c9b6ea0285942b2e7cac98a59e166d59c588fe5cfe1eda58e72d59"}, + {file = "psycopg2-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913"}, + {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, +] + [[package]] name = "pycodestyle" version = "2.12.0" @@ -270,7 +306,32 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] +[[package]] +name = "vine" +version = "5.1.0" +description = "Python promises." +optional = false +python-versions = ">=3.6" +files = [ + {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, + {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, +] + +[[package]] +name = "weni-eda" +version = "0.0.1" +description = "" +optional = false +python-versions = "<4.0,>=3.10" +files = [ + {file = "weni_eda-0.0.1-py3-none-any.whl", hash = "sha256:d269174220fbb3615eadef58d246d32b95ca4e4c55d535714752dd2cc7e3cb0d"}, + {file = "weni_eda-0.0.1.tar.gz", hash = "sha256:2f1234ae450e2d3cf26bb674599fdaf7f6dda61a926247c6a5e10042b33ec09f"}, +] + +[package.dependencies] +amqp = ">=5.2.0,<6.0.0" + [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "be0cb8b881285382788fd513d543f3f5ca1fe6c216c1a403e98f914cdd46f305" +content-hash = "7865b056f3db9ccc2d4d7ca0423adfe85986af0be774154a4b62042094196d6e" diff --git a/pyproject.toml b/pyproject.toml index 1a49497..fe43fce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,11 +3,14 @@ name = "retail-setup" version = "0.0.1" description = "" authors = ["Weni"] +package-mode = false [tool.poetry.dependencies] python = "^3.10" django = "^5.0.7" django-environ = "^0.11.2" +weni-eda = "^0.0.1" +psycopg2 = "^2.9.9" [tool.poetry.group.dev.dependencies] diff --git a/retail/event_driven/__init__.py b/retail/event_driven/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/retail/event_driven/handle.py b/retail/event_driven/handle.py new file mode 100644 index 0000000..d84a1af --- /dev/null +++ b/retail/event_driven/handle.py @@ -0,0 +1,5 @@ +import amqp + + +def handle_consumers(channel: amqp.Channel): + pass diff --git a/retail/settings.py b/retail/settings.py index 81c8180..599c702 100644 --- a/retail/settings.py +++ b/retail/settings.py @@ -49,6 +49,7 @@ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", + "weni.eda.django.eda_app", ] MIDDLEWARE = [ @@ -128,3 +129,17 @@ # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + + +# Event Driven Architecture configurations + +USE_EDA = env.bool("USE_EDA", default=False) + +if USE_EDA: + EDA_CONSUMERS_HANDLE = "retail.event_driven.handle.handle_consumers" + + EDA_BROKER_HOST = env("EDA_BROKER_HOST", default="localhost") + EDA_VIRTUAL_HOST = env("EDA_VIRTUAL_HOST", default="/") + EDA_BROKER_PORT = env.int("EDA_BROKER_PORT", default=5672) + EDA_BROKER_USER = env("EDA_BROKER_USER", default="guest") + EDA_BROKER_PASSWORD = env("EDA_BROKER_PASSWORD", default="guest")