sbcommons
A comprehensive Python library providing shared utilities and clients for AWS services, CRM integrations (Klaviyo, Symplify), messaging platforms (Slack, Microsoft Teams), and data processing operations used across Haypp Group's data systems.
Features
- AWS Integration: Clients for S3, Redshift, Lambda, DMS, SNS, and Secrets Manager
- CRM Clients:
- Klaviyo API v3 client with comprehensive campaign, event, and customer management
- Symplify integration for customer relationship management
- ADP client for survey data
- Messaging: Slack and Microsoft Teams webhook utilities with modern Adaptive Cards support
- Logging: Enhanced logging with Lambda-compatible logger and rotating file handlers
- Data Utilities: Extract and parse utilities for common data transformation tasks
Installation
Install from PyPI:
pip install sbcommons
Requirements
- Python 3.9, 3.10, 3.11, or 3.12
- boto3 >= 1.24.35
- requests >= 2.28.1
- Other dependencies listed in
requirements.txt
Usage
AWS Services
from sbcommons.aws.s3 import S3Client
from sbcommons.aws.redshift import RedshiftClient
from sbcommons.aws.secrets import get_secret
# S3 operations
s3_client = S3Client()
s3_client.upload_file('local.txt', 'bucket', 'key.txt')
# Redshift queries
redshift = RedshiftClient(host='your-host', database='db')
results = redshift.execute_query('SELECT * FROM table')
# Secrets Manager
secret = get_secret('my-secret-name')
CRM Integration
from sbcommons.crm.klaviyo.client import KlaviyoClient
# Klaviyo operations
klaviyo = KlaviyoClient(api_key='your-key')
campaigns = klaviyo.get_email_campaigns()
events = klaviyo.get_events(metric_id='metric123')
Messaging
from sbcommons.teams.teams import post_to_teams
from sbcommons.slack.slack import SlackMessenger
# Microsoft Teams (Adaptive Cards)
post_to_teams('https://webhook-url', 'Message title', 'Message body')
# Slack
slack = SlackMessenger('https://slack-webhook-url')
slack.post_message('Hello from sbcommons!')
Development
Setup Development Environment
Clone the repository and create a virtual environment:
git clone https://github.com/Snusbolaget/sbcommons.git
cd sbcommons
pip install -r requirements.txt
Running Tests
# Run tests with pytest
pytest tests/ -v --cov=sbcommons --cov-report=term
Tests are automatically run via GitHub Actions on push and pull requests for Python 3.9, 3.10, and 3.11.
Building and Publishing
Local Development Builds
For local testing, you can build the package:
# Install build tools
pip install build twine
# Build distributions
python -m build
# Validate the build
twine check dist/*
# Clean build artifacts when done
rm -rf dist/ build/ *.egg-info
Testing on TestPyPI (Optional)
Before releasing to production, you can test the package on TestPyPI:
# Build and upload to TestPyPI
python -m build
twine upload --repository testpypi dist/*
# Test installation from TestPyPI
pip install --index-url https://test.pypi.org/simple/ sbcommons
Note: TestPyPI uploads are for manual testing only and should not be part of the automated workflow.
Publishing to PyPI (Production)
Publishing is fully automated via GitHub Actions. When your PR is merged to main, the release workflow automatically:
- Builds the package distributions
- Publishes to PyPI using the
PYPI_API_TOKENsecret
To release a new version:
- Update the version in
setup.py - Document changes in
CHANGELOG.md - Create a PR to
main - Once merged, the package is automatically published to PyPI
Manual publishing is not recommended to ensure consistency and prevent version conflicts. All releases should go through the PR review process.
Project Structure
sbcommons/
├── adp/ # ADP client integration
├── aws/ # AWS service clients (S3, Redshift, Lambda, etc.)
├── crm/ # CRM integrations (Klaviyo, Symplify)
├── extract_utils/ # Data extraction utilities
├── logging/ # Enhanced logging utilities
├── messaging/ # Webhook utilities
├── parse_utils/ # Configuration and text parsing
├── slack/ # Slack messaging client
└── teams/ # Microsoft Teams messaging (Adaptive Cards)
CI/CD
The project uses GitHub Actions for continuous integration and deployment:
- CI Workflow (
.github/workflows/ci.yml): Runs tests on Python 3.9-3.11 for all pull requests and pushes to main - Release Workflow (
.github/workflows/release.yml): Automatically publishes to PyPI when changes are pushed to main branch
Contributing
- Create a feature branch from
main - Make your changes and add tests
- Update the CHANGELOG.md with your changes
- Update the version in
setup.py - Submit a pull request
The CI workflow will verify that:
- Tests pass on all supported Python versions
- If
sbcommons/code is modified, both CHANGELOG.md and setup.py versions are updated
Changelog
See CHANGELOG.md for detailed version history.
Maintained by Haypp Group Data Team | data@hayppgroup.com
Metadata
Release files for sbcommons 1.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sbcommons-1.2.5.tar.gz | 45.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sbcommons-1.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.8 kB
Release files / sbcommons-1.2.5.tar.gz
| Download URL | sbcommons-1.2.5.tar.gz |
|---|---|
| Size | 45.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4c15ff18b58f7fa7dc937ff00b1c8d74581d6e65e106adc3208eba7379fa1919
|
|
BLAKE2b-256 checksum How to use checksums |
2cbcea37dfa27f0fb9669646829f44fcc66bdae915ee6bdea44d8bbf9469689b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / sbcommons-1.2.5-py3-none-any.whl
| Download URL | sbcommons-1.2.5-py3-none-any.whl |
|---|---|
| Size | 53.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e682713590ea1421ca259ba4750c9728cabff05249aefd4af02ce7f0b6c975c4
|
|
BLAKE2b-256 checksum How to use checksums |
9e082f655640285ad9a4a634271b9fecc7c489b14e90b3b29af83132d189d7cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Security for sbcommons 1.2.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.