ff-iii-luciferin
ff-iii-luciferin is a Python enrichment engine for
Firefly III transactions.
It provides a clean, async-first API for post-processing financial data: descriptions, notes, tags, and categories — without polluting your domain logic.
✨ Key Features
- 🔌 Async client for Firefly III API (built on
httpx) - 📝 Update transaction descriptions and notes
- 🏷️ Add or manage tags
- 🗂️ Assign or change categories
- 🏦 Preserve simplified source/destination account references
- 🚫 Filter unwanted transactions (e.g. uncategorized, split-only)
- ⚠️ Explicit handling of API, network, and data errors
- 🧱 Generated OpenAPI client kept internal (not public API)
📦 Installation
From PyPI:
pip install ff-iii-luciferin
Python 3.12+ required.
⚙️ Configuration
The client requires access to your Firefly III instance and a personal access token.
Provide them via environment variables:
FIREFLY_URL=https://your-firefly-instance/api
FIREFLY_TOKEN=your_access_token
Using python-dotenv is optional but recommended for local development.
🚀 Quick Start
Minimal async example:
import asyncio
import os
from ff_iii_luciferin.api import FireflyClient
async def main() -> None:
client = FireflyClient(
base_url=os.environ["FIREFLY_URL"],
token=os.environ["FIREFLY_TOKEN"],
)
try:
transactions = await client.fetch_transactions()
categories = await client.fetch_categories()
await client.update_transaction_description(
transaction_id=123,
description="Updated description",
)
await client.update_transaction_notes(
transaction_id=123,
notes="Additional notes",
)
await client.add_tag_to_transaction(
transaction_id=123,
tag="processed",
)
await client.assign_transaction_category(
transaction_id=123,
new_category_id=1,
)
finally:
await client.close()
asyncio.run(main())
The examples/min_usage_search.py script shows the current transaction search
output with a rich table, including category and account columns.
📄 License
MIT License.
MIT License — see LICENSE for details.
Metadata
Release files for ff-iii-luciferin 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ff_iii_luciferin-1.1.0.tar.gz | 96.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ff_iii_luciferin-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 537.2 kB
Release files / ff_iii_luciferin-1.1.0.tar.gz
| Download URL | ff_iii_luciferin-1.1.0.tar.gz |
|---|---|
| Size | 96.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6d480b5f3965aec758f226780bb157904010f41e1df56b5a2257d9e18f09443
|
|
BLAKE2b-256 checksum How to use checksums |
da985e2cb423aed24d2e29463797fa2fce524f52edcd4547b0b361303aa84828
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ff_iii_luciferin-1.1.0-py3-none-any.whl
| Download URL | ff_iii_luciferin-1.1.0-py3-none-any.whl |
|---|---|
| Size | 440.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae499264105501a4bdace0a4677ee0e8843283b7033aa388694264b1d7ae37d8
|
|
BLAKE2b-256 checksum How to use checksums |
98f2314573f6a90da84a5cd246c81aa9030658c1c2ad572a95fc622ad77c032b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|