Welcome to Subdivisions
A55 Python library for PubSub Messaging
Install in Project
# pyproject.toml
# Add in every project which will
# receive or send messages
[tool.subdivisions]
source_name = "ProjectName" # ex.: "Client-Manager"
[tool.poetry.dependencies]
subdivisions = "*"
Run poetry update
Usage
Send Messages
from subdivisions.client import SubClient
from subdivisions.events import UserEvents
client = SubClient()
client.topic = UserEvents.USER_REGISTERED
client.send({"foo": "bar"})
Receive Messages
from subdivisions.client import SubClient
from subdivisions.events import UserEvents
client = SubClient()
client.topic = UserEvents.USER_REGISTERED
messages = client.get_messages() # use the ``from_dead_letter=True` to receive Dead Letter messages
# Process messages
client.delete_received_messages()
Full Configuration options
Configure subdivisions options in pyproject.toml file, inside [tool.subdivisions] table:
# pyproject.toml
[tool.subdivisions]
aws_region = "us-east-1" # AWS Region
aws_allowed_account = "" # AWS Allowed Account Id for create artifacts / send messages
pub_key = "alias/PubSubKey" # KMS PubSubKey (must be created first)
sqs_tags = [] # SQS tags for new queues. Example [{"foo": "bar"}]
queue_prefix = "" # Prefix for new SQS queues
queue_suffix = "" # Suffix for new SQS queues
queue_max_receive_count = 1000 # SQS MaxReceiveCount setting
sns_prefix = "" # Prefix for new SNS topics
sns_suffix = "" # Suffix for new SNS topics
sns_tags = [] # SNS tags for new topics. Example [{"foo": "bar"}]
event_prefix = "" # Prefix for new Eventbride rules
event_suffix = "" # Suffix for new Eventbride rules
event_tags = [] # Eventbridge tags for new rules. Example [{"foo": "bar"}]
event_bus = "default" # Eventbridge Bus
source_name = "" # Eventbridge default source name. No default, must inform
auto_create_new_topic = true # Auto create new topic if not exists in Eventbridge
auto_remove_from_queue = false # Acknowledge first messages on receive
use_aws_env_vars = true # Use AWS default env vars. If false append "SUBDIVISION_" on env vars. Example: "SUBDIVISION_AWS_ACCESS_KEY_ID"
default_prefix = "a55" # Default prefix for all sns, sqs and rule created
default_suffix = "" # Default suffix for all sns, sqs and rule created
All options above can be configured in environment variables. Just append SUBDIVISIONS_ on name. Example: SUBDIVISIONS_SOURCE_NAME="my_project"
Local Development
For local development, please first clone and install this project:
git clone git@github.com:access55/subdivisions.git /path/to/project
cd /path/to/project
# Install on WSL/Linux
make install
# Install on Powershell
poetry install
Example: Adding a new Topic
To avoid different names in different projects for the same topic, (i.e: "client_registered" and
"customer_registered") please add new events using Python Enum on subdivisions.event module:
# subdivisions.events
from enum import unique, Enum
@unique
class MyNewEvents(Enum):
MY_NEW_EVENT = "my_new_event"
Commit using a conventional commit message
To generate a new PyPI version, at least one commit must following the
Conventional Commit Specification, when you can
add the feat: or fix: prefix in your message:
# Create a new patch event. Ex. 1.0.0 to 1.0.1
git commit -m "fix: Event Bug"
# Create a new minor event. Ex. 1.0.0 to 1.1.0
git commit -m "feat: Add New Event"
# Create a new major event. Ex. 1.0.0 to 2.0.0
git commit -m "feat!: Add New Event \n\nBREAKING CHANGE: API changed"
Without a feat: or fix: prefixed commited message, code will not generate a new PyPI version.
Using AWS Credentials locally
Subdivisions will use AWS default environment variables. If you need to define another credentials, use the following variables:
SUBDIVISIONS_USE_AWS_ENV_VARS="false"
SUBDIVISIONS_AWS_ACCESS_KEY_ID="your id"
SUBDIVISIONS_AWS_SECRET_ACCESS_KEY="your key"
SUBDIVISIONS_AWS_SESSION_TOKEN="your token" # optional
Using Subdivisions in LOCALSTACK
To use with localstack, you need to activate the sqs, sns, events, and kms services and add them to your .env file:
LOCALSTACK_HOSTNAME_LOCAL="http://localstack:4566"
Metadata
Release files for subdivisions 1.53.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| subdivisions-1.53.0.tar.gz | 16.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| subdivisions-1.53.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.2 kB
Release files / subdivisions-1.53.0.tar.gz
| Download URL | subdivisions-1.53.0.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fccd839d40aa64314521d52570a9e3b7c9675d68aeab4ee70f5474290066ce41
|
|
BLAKE2b-256 checksum How to use checksums |
edb7bcb2dead52ce97c3622e00f9e04e8c04847548e3f7cb4139048e719bee04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 importlib-metadata/7.1.0 keyring/21.8.0 pkginfo/1.10.0 requests/2.31.0 requests-toolbelt/0.9.1 urllib3/2.2.1 CPython/3.9.19
|
Release files / subdivisions-1.53.0-py3-none-any.whl
| Download URL | subdivisions-1.53.0-py3-none-any.whl |
|---|---|
| Size | 17.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a4163178783dda9e8f5a41915d6e033b4d2b5b89725d5de3f80776bdc950f7b
|
|
BLAKE2b-256 checksum How to use checksums |
7f79c0e1b0daca06d7478d26eb0d2b08b5996f2ff33b5ac0dd968f77f3bdfb74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 importlib-metadata/7.1.0 keyring/21.8.0 pkginfo/1.10.0 requests/2.31.0 requests-toolbelt/0.9.1 urllib3/2.2.1 CPython/3.9.19
|