Skip to main content

Welcome to Subdivisions

PyPI Publish PyPI - Python Version Conventional Commits Code style: black pre-commit

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)

Source distribution for subdivisions 1.53.0
File Size Uploaded
subdivisions-1.53.0.tar.gz 16.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for subdivisions 1.53.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.53.0 This release

2 release files

1.51.0

2 release files

1.50.0

2 release files

1.49.1

2 release files

1.49.0

2 release files

1.48.0

2 release files

1.47.0

2 release files

1.45.0

2 release files

1.44.0

2 release files

1.43.0

2 release files

1.42.0

2 release files

1.40.0

2 release files

1.39.0

2 release files

1.37.0

2 release files

1.36.0

2 release files

1.35.0

2 release files

1.34.0

2 release files

1.33.0

2 release files

1.32.0

2 release files

1.31.0

2 release files

1.30.0

2 release files

1.29.5

2 release files

1.29.4

2 release files

1.29.3

2 release files

1.28.0

2 release files

1.27.0

2 release files

1.26.0

2 release files

1.25.0

2 release files

1.23.0

2 release files

1.22.0

2 release files

1.19.0

2 release files

1.18.0

2 release files

1.17.0

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page