Skip to main content

A simple dependency injection container

Project description

Simple Dependency Injection Container inspired by Pimple.


Using pip:

# pip install rumple


$ git clone
$ cd rumple
# python install


from rumple import Container

c1 = Container()
c2 = Container({
    'param': 'value',
    'service': lambda: object()

Defining services

from rumple import Container

class Service(object):

class AnotherService(object):
    def __init__(self, service):
        self.service = service

container = Container()
container['service'] = lambda: Service()
container['another_service'] = lambda c: AnotherService(c['service'])
another_service = container['another_service']
assert isinstance(another_service, AnotherService)
assert another_service.service is container['service']

Defining parameters

from rumple import Container

container = Container()
container['parameter'] = 'value'
assert container['parameter'] == 'value'

Extending services

from rumple import Container

class Service(object):
    def __init__(self):
        self.optional_dependency = None

    def set_optional_dependency(self, dependency):
        self.optional_dependency = dependency

class OptionalDependency(object):

def extend_service(service, container):  # Note: you can omit "container" argument
    return service

container = Container()
container['service'] = lambda: Service()
container['optional_dependency'] = lambda: OptionalDependency()
container.extend('service', extend_service)


from rumple import Container, extend, share, value

class Provider(object):
    def service(self):
        return object()

    def another_service(self):
        return object()

    def service_for_extend(self):
        return object()

    def first_option(self):
        return 'value_1'

    def second_option(self):
        return 'value_2'

    def _ignored(self):
        return 'value'

class AnotherProvider(object):
    def extend_service(self, service_for_extend):
        assert isinstance(service_for_extend, object)
        return str(object)

class SomeLibProvider(object):
    __prefix__ = 'some_lib.'

    def service(self):
        return object()

    def extend(self, service):
        return str(service)

container = Container()
container.register(AnotherProvider(), {'additional_option': 'value1'})
container.register(SomeLibProvider(), {'additional_option': 'value2'})
assert isinstance(container['service'], object)
assert isinstance(container['renamed_service'], object)
assert isinstance(container['service_for_extend'], str)
assert container['first_option'] == 'value_1'
assert container['second_option_renamed'] == 'value_2'
assert '_ignored' not in container
assert container['additional_option'] == 'value1'
assert isinstance(container['some_lib.service'], str)
assert container['some_lib.additional_option'] == 'value2'

Iterating through a container

from rumple import Container

container = Container({'k1': 'v1', 'k2': 'v2'})
for item in container:

# Output:
# ('k1', 'v1')
# ('k2', 'v2')


0.2.0 (25.01.2019)

  • Ablity to specify vendor prefix in providers
  • Fix of inspect.getargspec() deprecation

0.1.0 (15.07.2015)

  • First release


  • Fork and clone it
  • Create your feature branch (git checkout -b awesome-feature)
  • Make your changes
  • Write/update tests, if it’s necessary
  • Update, if it’s necessary
  • Push your branch (git push origin awesome-feature)
  • Send a pull request


The MIT License (MIT)

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for rumple, version 0.2.0
Filename, size File type Python version Upload date Hashes
Filename, size rumple-0.2.0.tar.gz (4.0 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page