跳转到主要内容

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 查看哈希)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面