tet.services

Dependency injection support for Tet applications.

This module provides dependency injection via pyramid_di. It is included automatically when using the services feature.

The DI primitives (service(), RequestScopedBaseService, ApplicationScopedBaseService, BaseService, autowired()) are re-exported here so application code can import them from a single, stable location – tet.services – rather than reaching into pyramid_di directly.

Example

Defining a service:

from tet.services import service, RequestScopedBaseService, autowired

@service()
class UserService(RequestScopedBaseService):
    def get_user(self, user_id):
        return self.request.dbsession.query(User).get(user_id)

@service()
class OrderService(RequestScopedBaseService):
    user_service = autowired(UserService)

    def get_user_orders(self, user_id):
        user = self.user_service.get_user(user_id)
        return user.orders

Setup and scanning services:

from tet.config import application_factory

@application_factory(included_features=["services"])
def main(config):
    config.scan_services("myapp.services")
    config.scan()

Using services in class-based views:

from pyramid.view import view_config
from tet.services import autowired
from myapp.services import UserService

class UserViews:
    user_service = autowired(UserService)

    def __init__(self, request):
        self.request = request

    @view_config(route_name="user", renderer="json")
    def get_user(self):
        return self.user_service.get_user(self.request.matchdict["id"])

Using services in function-based views:

from pyramid.view import view_config
from myapp.services import UserService

@view_config(route_name="user", renderer="json")
def get_user(request):
    user_service = request.find_service(UserService)
    return user_service.get_user(request.matchdict["id"])
class tet.services.ApplicationScopedBaseService(*, registry: pyramid.registry.Registry, **kw)[source]

Bases: object

A convenience base class for application-scoped services.

registry: pyramid.registry.Registry
class tet.services.BaseService(**kw)[source]

Bases: ApplicationScopedBaseService

class tet.services.RequestScopedBaseService(*, request: pyramid.request.Request, **kw)[source]

Bases: object

A convenience class for request-scoped services.

context: Any
registry: pyramid.registry.Registry
request: pyramid.request.Request
tet.services.autowired(interface: Type[T] = <InterfaceClass zope.interface.Interface>, name: str = '') T[source]
tet.services.includeme(config: Configurator) None[source]

Include pyramid_di for dependency injection support.

tet.services.service(interface=None, *, name='', context_iface=<InterfaceClass zope.interface.Interface>, scope=<object object>)[source]