Coder Social home page Coder Social logo

dep_injector's Introduction

Dep injector

Allows expressing dependency graphs and getting dependencies from them.

This is potentially useful for dependency injection.

Example:

from injector import Dependencies

def value_source():
	return 'Result of a {}'.format('computation')

def both_source_and_dependant(computed_value, another_value):
	return len(computed_value) + another_value

class UsesInjector:
	def __init__(self, computed_value, len_value):
		self.s = computed_value
		self.l = len_value

	def __str__(self):
		return 'UsesInjector({}, {})'.format(self.s, self.l)

# register dependencies
deps = Dependencies()
# You can register a class as a factory
deps.register_factory(
	'uses-injector',
	UsesInjector,
	dependencies=['computed_value', 'len_value'],
)
# or a function
deps.register_factory(
	'len_value',
	both_source_and_dependant,
	dependencies=['computed_value', 'another_value'],
)
deps.register_factory('computed_value', value_source)
# You can also register plain values
deps.register_value('another_value', 10000)

# Get the injector - this finalizes the dependencies and checks to make sure
# that the dependencies are all correct.
inj = deps.build_injector()

print(inj.get_dependency('uses-injector'))
print(inj.get_dependency('len_value'))

# You can also inject new functions (just not register more values)
def uses_computed_value(computed_value):
	return ''.join(set(computed_value))

print(inj.inject(uses_computed_value, ['computed_value']))

Development

Run this:

virtualenv -p python3 env
source env/bin/activate
pip install -r dev-requirements.txt
nosetests .

dep_injector's People

Contributors

jmikkola avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.