Skip to main content

Forge your application registries.

Project description

Tamahagane

Documentation Continuous Integration Coverage Report

Forge your application registries.

Tamahagane is a library designed for constructing application registries, the essential foundation for building decoupled software architectures and enabling unit testing on application handlers.

Motivation

Tamahagane essentially serves as a modern alternative to Venusian, fulfilling the same core functionality.

The decision to create a new library stems from Venusian's limitations: it was originally built for Python 2, relies heavily on dynamic behavior, and lacks type support.

Tamahagane reuse the same vocabular, a Scanner and an attach function, but the API is not fully compatible, in order to get a simpler version.

Usage

To use Tamahagane you need to create a registries class that hold all registries your app may load. The definition of the registry is free and depends of the usage.

from dataclasses import dataclass

@dataclass
class Registries:
    app_registry: ...

After what, the registries is filled out using the scan of the application code.

import tamahagane as th

scanner = th.Scanner[Registries](Registries(app_registry=...))
scanner.scan("app.service_handlers")

At this time, the app.service_handlers is a module, or a package containing submodules, that will be recursibely loaded. It contains decorated function, where the decorator has been created in the application code to create the callback.

from collections.abc import Callable
from typing import Any

import tamahagane as th


CommandHandler = Callable[..., Any]

def command_handler(wrapped: CommandHandler) -> CommandHandler:

    def callback(registries: Registries) -> None:
        registries.app_registry.do_something_with(wrapped, ...)

    th.attach(wrapped, callback, category="app_registry")
    return wrapped

Now, you have a command_handler decorator that can be used an be filled out an application registry with the decorated method.

@command_handler
def handle_stuff(...):
    ...

handle_stuff is unmodified by its decorator and is purely unit testable. No overhead.

Difference from Venusian

  • Tamahagane does not have a onerror on the scan, it raises.
  • Tamahagane only support list of string, or tuple of string on the onignore.
  • Tamahagane does not have a category on the scan method, the categories are the attributes of the registry, nothing less, nothing more.
  • Tamahagane does not support class decoration.

Installation

Tamahagane is available on PyPI

So you can installing using your favorite packaging tool, mine is uv:

uv add tamahagane

See also

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

tamahagane-0.4.1.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

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

tamahagane-0.4.1-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file tamahagane-0.4.1.tar.gz.

File metadata

  • Download URL: tamahagane-0.4.1.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.26.6 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for tamahagane-0.4.1.tar.gz
Algorithm Hash digest
SHA256 4b11e234656f99468a1998e39a910207df59da2e7f1fa26dac3cc08f55d0c5c2
MD5 18c90d8a14f9b5dca53fa109a81cb03b
BLAKE2b-256 b188d5741a6c726b67c0e90c022c9ae585e7e044f61c59b5a75e7bdbf1a4fe50

See more details on using hashes here.

File details

Details for the file tamahagane-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: tamahagane-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.26.6 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for tamahagane-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6263f8715d30c988971e6bda60ecd90838aab7bb61e56c213cf00b1fe5b3c9b8
MD5 6d4dcc25eecab58d609f8f7b2697e1dd
BLAKE2b-256 29e42dfba2428a1f8add1edc60acd9b37eb0ea540f7266a33ab12fe2f4ed25c7

See more details on using hashes here.

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