Pyramid的依赖注入功能
项目描述
pyramid_di
为Pyramid提供更简单的服务定位和依赖注入。
用法
定义服务
# app/services/__init__.py
from .my import MyService
from .another import AnotherService
# app/services/my.py
from pyramid_di import service, RequestScopedBaseService, autowired
@service()
class MyService(RequestScopedBaseService):
def my_method(self):
return 'foobar'
# app/services/another.py
from pyramid_di import service, RequestScopedBaseService, autowired
from .my import MyService
@service()
class AnotherService(RequestScopedBaseService):
dependency = autowired(MyService)
def another_method(self):
return self.dependency.my_method()
在创建Pyramid应用程序时设置
# Pyramid setup code:
from pyramid.config import Configurator
with Configurator() as config:
config.include('pyramid_di')
config.scan_services('app.services')
在视图中使用
from pyramid_di import autowired
from pyramid.view import view_config
from my.services import AnotherService
class MyViews:
service = autowired(AnotherService)
def __init__(self, request):
# self.request is required for autowired to work
self.request = request
@view_config(route_name='some_view', renderer='json')
def some_view(self):
return self.service.another_method() # 'foobar'
# alternatively, without class-based views:
@view_config(route_name='some_view')
def some_view(request):
service = request.find_service(AnotherService)
service.another_method() # 'foobar'
模拟服务进行测试
class MockService:
def another_method(self):
return 'mocked'
def test_views():
request = DummyRequest()
my_views = MyViews(request)
my_views.service = MockService()
assert my_views.some_view() == 'mocked'
开发
开发设置
$ python3 -m venv venv
$ pip install -e '.[dev]'
使用pytest运行测试
$ pytest
变更记录
0.4.2
- 2023-05-28 从TravisCI更改为Github Actions,更新测试矩阵以覆盖Python 3.10和Pyramid 2.0+。
0.4.1
- 2021-03-19 请求作用域的服务并不完全正确,因为它们可能被实例化两次
- 一次在遍历时间,另一次在上下文设置之后。现在强制将请求作用域的服务上下文设置为None。
0.4.0
- 2020-11-25 Python 3.6+;更好的测试覆盖率,作用域服务的修复,弃用等。
0.3.dev0
- 2020-06 未发布开发版本
0.2.dev0
- 2020-11-04 需要 Python 3 以编写更简洁的代码
0.1
- 2018-03-26 初次发布
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。
源分布
pyramid_di-0.4.2.tar.gz (5.9 kB 查看哈希)
构建分布
pyramid_di-0.4.2-py3-none-any.whl (4.7 kB 查看哈希)
关闭
pyramid_di-0.4.2.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b58dd76e2c6fa06b9574afdce2cf05a24611f52988455502e7a230d0aeff14b |
|
MD5 | c00e5b469f227183ac2dcc31835140c1 |
|
BLAKE2b-256 | 08384be3f8fcfd661a72bcd3b2e32f35f25cbc3d99dac8296757c6c458e90fd9 |
关闭
pyramid_di-0.4.2-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 16e88b53b36a53953a69b0ba847ab12e4f1591a7459771fd9f763eff04e99db6 |
|
MD5 | 76903e4ec96fc8a023a33fca89ad1519 |
|
BLAKE2b-256 | 4e669335d0afb5bb926957a66bfc2fa41848b3528f1654de544f0b7822d300d8 |