Skip to main content

Add your description here

Project description

Solidarity Tech Tools

An unofficial python library to help you automate solidarity tech (ST).

See the ST api page for more details: https://www.solidarity.tech/reference/

This is still in beta, and there is a bit more work to do. But you can still use this in production if you are bold.

Features

Client

Call python methods to interact with the ST api. You can pass pydantic models and receive pydantic models in return, so you can rely on the response structure.

from solidaritytechtools import STClient, models

with STClient(api_key="...") as client:
    # Perform calls
    users = client.get_users()

    # When passing arguments, you can either pass a Pydantic model (recommended)...
    user_1 = client.create_user(models.UserCreate(
        chapter_id=1, 
        phone_number='4145551234'
    ))

    # ...or a raw dict
    user_2 = client.create_user({
        "chapter_id": 1, 
        "phone_number": "4145551234"
    })

JSON Export Tools

The library includes tools for validating and parsing Solidarity Tech JSON export files into structured models.

from solidaritytechtools import get_persons_from_json_export

# Load and validate an export file
people = get_persons_from_json_export("export-members-data.json")

for person in people:
    print(f"{person.first_name} {person.last_name} has {len(person.notes)} notes")

Contact Matching

Given a JSON contact export and a live ST account, you can find the best matches to link local data to live API users. This is extremely useful for migrating historical data (like notes) from one ST account to another.

from solidaritytechtools import find_best_match

# Returns a mapping of {person_id: ClientUserMatch}
# Behind the scenes, this is using the `solidaritytechtools.client` and `solidaritytechtools.json_export`
matches = find_best_match(
    json_export_file="old_account_export.json",
    api_key="new_account_api_key"
)

for person_id, match in matches.items():
    if match:
        print(f"Export Person {person_id} -> API User {match.user_id} ({match.confidence*100}% confidence)")

Current heuristics use email and phone for high-confidence matching, and name + zip code for lower-confidence fuzzy matching. Please look through the code before using this in production to understand what it's doing.

Using

  1. Add solidaritytechtools as a dependency via uv add solidaritytechtools, pip install solidaritytechtools, etc
  2. Import the client, models, or functions, like from solidaritytechtools import STClient, models, find_best_match

See the /examples directory for scripts demonstrating usage.

Using Pydantic models provides better type safety and IDE autocompletion, but you can always fall back to a dict if the API spec drifts or a model is missing a field.

If you notice client functions not working as expected, feel free to use raw internal methods like client._get("path") or client._put("path", json=payload) to do what you need, and then submit an issue or a MR.

Contributing

  1. Clone the repo
  2. Install pre-commit hooks (uv run pre-commit install)
  3. Start coding and make a MR :)

Please use uv run ty check . to check the type safety of your code before submitting a MR. When possible, ty check . will be added to pre-commit hooks.

Publishing

The maintainer will probably take care of this

  1. uv version --bump patch (or minor, major etc)
  2. uv sync
  3. git add pyproject.toml uv.lock
  4. git commit -m "Release $(uv version)" && git tag v$(uv version --short)
  5. git push origin main --tags

Github workflow will push to pypi.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

solidaritytechtools-0.1.1.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

solidaritytechtools-0.1.1-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file solidaritytechtools-0.1.1.tar.gz.

File metadata

  • Download URL: solidaritytechtools-0.1.1.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for solidaritytechtools-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a75ca2be1c99d45ec5a537f9a23be073d78c49cad602a1ac6204dca1a8efc7ba
MD5 f566830361be079fc268ef3ffdd05c27
BLAKE2b-256 e7945e4fa323a4c010ff2759731b2b6d6c4b813abd97ae0a95b839582dcb2c22

See more details on using hashes here.

Provenance

The following attestation bundles were made for solidaritytechtools-0.1.1.tar.gz:

Publisher: workflow.yml on jackklika/solidaritytechtools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file solidaritytechtools-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for solidaritytechtools-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9d9ccc6a26952213919bbfb2761e26db76a8ee7265031456ef9bdc2ba8b91016
MD5 5dfb834b465b71fd53b4105ea5425e19
BLAKE2b-256 1735edc79472c7791b324ef644557e2f499bb9be05c0bb2e4775eaf301a1b70e

See more details on using hashes here.

Provenance

The following attestation bundles were made for solidaritytechtools-0.1.1-py3-none-any.whl:

Publisher: workflow.yml on jackklika/solidaritytechtools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page