semvec/pypi-packages huggingface dataset:
steputil 0.2.16
Utilities to simplify creation of pipeline steps
License: MIT
Requires Python: >=3.8

# steputil

Utilities to simplify creation of pipeline steps.

## Installation

```bash
pip install steputil
```

## Usage

```python
import steputil

# Add usage examples here
```

## Development

### Setup

1. Clone the repository:
```bash
git clone https://github.com/k-pipe/step-util.git
cd step-util
```

2. Create a virtual environment and install dependencies:
```bash
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[dev]"
```

### Running Tests

```bash
pytest
```

### Code Formatting

```bash
black src/ tests/
```

### Type Checking

```bash
mypy src/
```

## Publishing

This package is automatically published to PyPI when a new release is created on GitHub.

To create a new release:
1. Update the version in `pyproject.toml`
2. Create a new git tag: `git tag v0.1.0`
3. Push the tag: `git push origin v0.1.0`

The GitHub Action will automatically build and publish the package to PyPI.

## License

MIT License - see LICENSE file for details.
ff-iii-luciferin 1.0.0b5
A Firefly III enrichment engine that makes your data glow
License: MIT
Requires Python: >=3.12
Keywords: firefly-iii, finance, enrichment, transactions, api

# ff-iii-luciferin

[![CI](https://github.com/wini83/ff-iii-luciferin/actions/workflows/ci.yml/badge.svg)](https://github.com/wini83/ff-iii-luciferin/actions/workflows/ci.yml)
![PyPI](https://img.shields.io/pypi/v/ff-iii-luciferin?include_prereleases)
![Python](https://img.shields.io/pypi/pyversions/ff-iii-luciferin?include_prereleases)
![License](https://img.shields.io/pypi/l/ff-iii-luciferin?include_prereleases)
[![codecov](https://codecov.io/gh/wini83/ff-iii-luciferin/graph/badge.svg?token=SSWFZZT4J1)](https://codecov.io/gh/wini83/ff-iii-luciferin)

**ff-iii-luciferin** is a Python enrichment engine for  
[Firefly III](https://www.firefly-iii.org/) transactions.

⚠️ This project is currently in **beta**. APIs may still change.

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**
- 🚫 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:

````bash
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:

````env
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:

````python
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())
````

## 📄 License

MIT License.  

MIT License — see [LICENSE](LICENSE) for details.