Skip to main content

Dependency injection like FastAPI.

Project description

finjet

PyPI version codecov Codacy Badge

Simple dependency injection library like fastapi. It can be used to turn your modules to loosely coupled parts. and configurations to allow you to easily re-use and test your code.

Dependency injection is performed on the arguments given with the Depends function as the default argument. The inserted value will be given values of NamedTuple via Container.configure or the return value of the function.

Installation

Latest PyPI stable release

pip install finjet

Example

from typing import NamedTuple
from finjet import Container, Depends, Singleton, inject


class Config(NamedTuple):
    gear_ratio: int
    tire_r: int = 100


class Engine:
    # gear_ratio will be obtained from `Config`
    def __init__(self, gear_ratio: int = Depends()) -> None:
        self.gear_ratio = gear_ratio


class Tire:
    count = 0

    def __init__(self, tire_r: int = Depends()) -> None:
        Tire.count += 1
        # Actually tire_r is multiplied by instanced number of times.
        self.tire_r = tire_r * Tire.count


def get_rotation_speed(engine: Engine = Depends(Engine)) -> int:
    # Arguments of `Engine` class will inject from dependencies.
    # In this example, the gear_ratio is configured 100 or 50
    return engine.gear_ratio


@inject
def get_tire_speed(
    tire: Tire = Singleton(Tire),
    rpm: int = Depends(get_rotation_speed)
) -> float:
    # Depends is always created such as factory pattern
    # Singleton is only generate at once such as singleton pattern.
    # The singleton object is shared in the Container class.
    return tire.tire_r * rpm


def main():
    container = Container()

    # Configuration of container
    container.configure(Config(100, 100))
    with container:
        print('Speed:', get_tire_speed())  # 10000
        print('#Tire:', Tire.count)  # 1

    # If the configuration value is changed, the displaying value is difference.
    # But `Tire.count` is same so that a second argument, the Tire object is re-used.
    container.configure(Config(20, 100))
    with container:
        print('Speed:', get_tire_speed())  # 2000
        print('#Tire:', Tire.count)  # 1

    # If the configuration value is changed, the displaying value is difference.
    # The `Tire` object is updated.
    container.configure(Config(20, 10))
    with container:
        print('Speed:', get_tire_speed())  # 400
        print('#Tire:', Tire.count)  # 2


if __name__ == '__main__':
    main()

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

finjet-0.1.3.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

finjet-0.1.3-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file finjet-0.1.3.tar.gz.

File metadata

  • Download URL: finjet-0.1.3.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.8.9 Windows/10

File hashes

Hashes for finjet-0.1.3.tar.gz
Algorithm Hash digest
SHA256 83c76e31e0ee06b88f442ed5e043123df5ed746006a43e699b57b460a8d16567
MD5 d9970e51a61799d17be09811ccd02287
BLAKE2b-256 55fe549f4b4b1ad195e810aea37a213c6dad3c213adc100db0d3fc0cd7aaff4c

See more details on using hashes here.

File details

Details for the file finjet-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: finjet-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.8.9 Windows/10

File hashes

Hashes for finjet-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 feca07725d00895158beef9fc232c804ed3f6acbe652377e12d61fcdaa72aecf
MD5 c95711d28b64859b28a87f72b40a3f7e
BLAKE2b-256 8672cc547bcf93eb16c1a0ff067f7f72ea57b4e196dc0d6cca983a0ae10c48cc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page