BootstrappingΒΆ

Here a quick example on how to use the ioc to initialize a project.

First, create a start.py file with the following code.

import sys, logging, optparse

import ioc

def main():
    parser = optparse.OptionParser()
    parser.add_option("-e", "--env", dest="env", help="Define the environment", default='dev')
    parser.add_option("-d", "--debug", dest="debug", action="store_true", default=False)

    options, args = parser.parse_args()

    if options.debug:
        logging.basicConfig(level=logging.DEBUG)

    container = ioc.build([
        'config/services.yml',
        'config/parameters_%s.yml' % options.env,
    ])

    ## adapt this line depends on your need
    container.get('myservice').start()


if __name__ == "__main__":
    main()

Now you can create a services.yml containing services definitions:

parameters:
    app_name: My App

services:
    my.service:
        class: module.ClassName
        arg: [arg1, @my.second.service]
        kwargs:
            api_key:  '%external.service.api_key%'
            app_name: '%app.name%'

    my.second.service:
        class: logging.getLogger
        arguments:
            - 'logger_name'

If you need to have different configurations, another files can be defined. The switch will be done by the start.py script with the env option.

# configuration parameters_prod.yml
parameters:
    external.service.api_key: XXXXXX

# configuration parameters_dev.yml
parameters:
    external.service.api_key: YYYYYY

The project can be started by using:

python start.py -e prod