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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f871ca0201d81c7f0908f59703c9da69fcf823273c636f98e7ac779abd3f16c8
|
|
| MD5 |
3c02d130da0a1c6b005689a9b74fef9f
|
|
| BLAKE2b-256 |
32bd1268108b4d67e4bb9c5e6d4bef46e7a13328974d0cdda8950ac72202d725
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61bd0ac4b5109e97f5da4c8f606ab6477fb309b7ebcb2f43658be59becf3a0ea
|
|
| MD5 |
e5fd1fb9ed0c18bfa8c0de7100f7879f
|
|
| BLAKE2b-256 |
35da6e63363636f81640040543fdff5e467f5f18b7c36f344e2f9e6605608250
|