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:
objectA 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:
objectA convenience class for request-scoped services.
- 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.