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:
- Fork the repo
- Create your feature branch
git checkout -b my-feature - Edit the source code to add and test your changes
- Commit your changes
git commit -m 'Add some feature' - Push to your branch
git push origin my-feature - 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| memberjojo-4.1.tar.gz | 25.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.