Skip to main content

memberjojo

memberjojo is a Python library for using Membermojo data from CSV imports.
It provides member database, and completed payments querying.
This is done in a local SQLite database which is optionally encrypted if sqlcipher3 is installed, and does not alter anything on Membermojo.
It provides tools to load, and query membership and transaction data efficiently without having to use SQLite directly.
When importing CSV files existing entries are dropped before import, so you can just import the latest download and the local database is updated with a summary diff printed out.

Using the download_csv function the csv can be downloaded directly into the db, which can also be in memory if :memory: is used as the db path.


Installation

Installing via pip on macos with optional sqlcipher installed via homebrew:
(The sqlcipher bindings are compiled by pip so the C_INCLUDE_PATH and LIBRARY_PATH are needed for the libsqlcipher files to be found)

brew install sqlcipher
export C_INCLUDE_PATH="/opt/homebrew/opt/sqlcipher/include"
export LIBRARY_PATH="/opt/homebrew/opt/sqlcipher/lib"
pip install memberjojo[sqlciper]

Installing via pip on ubuntu:

sudo apt-get --no-install-recommends --no-install-suggests install libsqlcipher-dev
pip install memberjojo[sqlcipher]

Installing via pip without sqlcipher:

pip install memberjojo

Or clone the repo and install locally with flit:

git clone https://github.com/a16bitsysop/memberjojo.git
cd memberjojo
flit install --symlink

Usage

Example loading members and using Member objects:

from pathlib import Path
from membermojo import Member

# database is created if it does not exist
member_database_path = Path(Path(__file__).parent, "database", "my-members.db")
member_csv_path = Path("download", "members.csv")

members = Member(member_database_path, "My DB Password")
members.import_csv(member_csv_path)

for member in members:
    print(member.first_name, member.last_name, member.member_number)

# Get full name for a given member number
found_name = members.get_name(1)
if found_name:
    print(f"Member with id of 1 is {found_name}")
else:
    print("Member 1 does not exist")

Documentation

Full documentation is available at
👉 https://a16bitsysop.github.io/memberjojo/


Running Tests

Run tests:

pytest

Contributing

Contributions are welcome! Please:

  1. Fork the repo
  2. Create your feature branch git checkout -b my-feature
  3. Edit the source code to add and test your changes
  4. Commit your changes git commit -m 'Add some feature'
  5. Push to your branch git push origin my-feature
  6. Open a Pull Request

Please follow the existing code style and write tests for new features.


License

This project is licensed under the MIT MIT License.


Contact

Created and maintained by Duncan Bellamy. Feel free to open issues or reach out on GitHub.


Metadata

Release files for memberjojo 4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for memberjojo 4.1
File Size Uploaded Provenance
memberjojo-4.1.tar.gz 25.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for memberjojo 4.1
File Interpreter ABI Platform
memberjojo-4.1-py3-none-any.whl Python 3 none any Details

Total release size: 46.1 kB

Release files / memberjojo-4.1.tar.gz

Download URL memberjojo-4.1.tar.gz
Size 25.5 kB
Tags Source
SHA-256 checksum
How to use checksums
d1b6d39a5d31a6cfd0c03a784b68c88e62de357d9443a8456647370a182d0e83
BLAKE2b-256 checksum
How to use checksums
3d0dfbf5b221199dede2fa118c0840b6d2c6bbdb989cfe8a50f567eaa0f7a7e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 30, 2026.

Transparency log

Release files / memberjojo-4.1-py3-none-any.whl

Download URL memberjojo-4.1-py3-none-any.whl
Size 20.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
222fc3ff97b82ffa6cf7624c2a0beb62f7fde8e9ebc509a53a98674e4dad0fa5
BLAKE2b-256 checksum
How to use checksums
483c5beb8131d4ff755d88f15c91bbb79411e6dd997fa6027a7cfd57ef618f60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 30, 2026.

Transparency log

Security for memberjojo 4.1

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for memberjojo-4.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 30, 2026.

Transparency log

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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