Skip to main content

simple di framework like java spring-framework

Project description

Simple-PyDI

Intro

simple python dependency injection framwork

just like java spring-framework.

Install

pip install simple-pydi

Usage

Components

app.py

class Engine:
    pass


class Wheels:
    def __init__(self, wheels_count: int = 4):
        self.wheels_count = wheels_count


class Body:
    pass


class Person:
    def __init__(self, name: str):
        self.name = name


class Car:
    def __init__(self, engine: Engine, wheels: Wheels, body: Body, driver: Person):
        self.engine = engine
        self.wheels = wheels
        self.body = body
        self.driver = driver

Direct Register

main.py

from di import NewContext

from app import Car, Engine, Wheels, Body, Person


ctx = NewContext()

# directly register beans
ctx.register(Car, id='car')
ctx.register(Engine)
ctx.register(Wheels)
ctx.register(Body)
ctx.register(Person, consts={'name': 'Ben'})

car: Car = ctx.instance_by_id('car')

assert car.driver.name == 'Ben'
assert car.wheels.wheels_count == 4

# view beans xml definition
print(ctx.format_beans_xml())

Register by XML File

beans.xml

<?xml version="1.0" ?>
<beans>
	<bean cls="app.Car" id="car" singleton="true">
		<property name="engine" ref="cls:app.Engine"/>
		<property name="wheels" ref="cls:app.Wheels"/>
		<property name="body" ref="cls:app.Body"/>
		<property name="driver" ref="cls:app.Person"/>
	</bean>
	<bean cls="app.Engine" id="app.Engine" singleton="true"/>
	<bean cls="app.Wheels" id="app.Wheels" singleton="true">
		<property name="wheels_count" value="4" value-type="int"/>
	</bean>
	<bean cls="app.Body" id="app.Body" singleton="true"/>
	<bean cls="app.Person" id="app.Person" singleton="true">
		<property name="name" value="Ben" value-type="str"/>
	</bean>
</beans>

main.py

from di import NewContext

from app import Car


ctx = NewContext()

# get beans definition from xml file
ctx.register_file('beans.xml')

car: Car = ctx.instance_by_id('car')

assert car.driver.name == 'Ben'
assert car.wheels.wheels_count == 4

# view beans xml definition
print(ctx.format_beans_xml())

Use Decorator Definition

app.py

from di.decorator import bean


@bean
class Engine:
    pass


@bean
class Wheels:
    def __init__(self, wheels_count: int = 4):
        self.wheels_count = wheels_count


@bean
class Body:
    pass


@bean(consts={'name': 'Ben'})
class Person:
    def __init__(self, name: str):
        self.name = name


@bean(id='car')
class Car:
    def __init__(self, engine: Engine, wheels: Wheels, body: Body, driver: Person):
        self.engine = engine
        self.wheels = wheels
        self.body = body
        self.driver = driver

main.py

from di import NewContext

from app import Car

ctx = NewContext()

# register pre defined group (by decorator) 
ctx.register_group()

car: Car = ctx.instance_by_cls(Car)

assert car.driver.name == 'Ben'
assert car.wheels.wheels_count == 4

# view beans xml definition
print(ctx.format_beans_xml())

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

Simple-PyDI-0.9.0.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

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

Simple_PyDI-0.9.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file Simple-PyDI-0.9.0.tar.gz.

File metadata

  • Download URL: Simple-PyDI-0.9.0.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for Simple-PyDI-0.9.0.tar.gz
Algorithm Hash digest
SHA256 f871ca0201d81c7f0908f59703c9da69fcf823273c636f98e7ac779abd3f16c8
MD5 3c02d130da0a1c6b005689a9b74fef9f
BLAKE2b-256 32bd1268108b4d67e4bb9c5e6d4bef46e7a13328974d0cdda8950ac72202d725

See more details on using hashes here.

File details

Details for the file Simple_PyDI-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: Simple_PyDI-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for Simple_PyDI-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 61bd0ac4b5109e97f5da4c8f606ab6477fb309b7ebcb2f43658be59becf3a0ea
MD5 e5fd1fb9ed0c18bfa8c0de7100f7879f
BLAKE2b-256 35da6e63363636f81640040543fdff5e467f5f18b7c36f344e2f9e6605608250

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