Skip to main content

Dependency injection stuff for Pyramid

Project description

pyramid_di

PyPI version Python versions License Documentation Status GitHub stars

Easier service location and dependency injection for Pyramid.

Usage

Define services:

# 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()

Setup when creating the Pyramid app:

# Pyramid setup code:
from pyramid.config import Configurator

with Configurator() as config:
    config.include('pyramid_di')
    config.scan_services('app.services')

Use in views:

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'

Mocking services for testing

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'

Development

Dev setup:

$ python3 -m venv venv
$ pip install -e '.[dev]'

Tests are run with pytest:

$ pytest

Changes

0.4.4

  • 2025-01-28 Add Python 3.14 support.

0.4.3

  • 2025-01-28 Add support for pyramid_services 2.0+, Python 3.12 and 3.13. Drop support for Python 3.6-3.8.

0.4.2

  • 2023-05-28 Change from TravisCI to Github Actions, update testing matrix to cover Python 3.10 and Pyramid 2.0+.

0.4.1

  • 2021-03-19 The request-scoped services were not quite correct as they could have been instantiated twice
    • once in the traversal-time and the other time after context was set. Now the context is forced to None for the request-scoped services.

0.4.0

  • 2020-11-25 Python 3.6+ only; better test coverage, fixes for scoped services, deprecations and so forth.

0.3.dev0

  • 2020-11 Unreleased development version

0.2.dev0

  • 2020-11-04 Require Python 3 for cleaner code

0.1

  • 2018-03-26 Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyramid_di-0.4.4.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyramid_di-0.4.4-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file pyramid_di-0.4.4.tar.gz.

File metadata

  • Download URL: pyramid_di-0.4.4.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyramid_di-0.4.4.tar.gz
Algorithm Hash digest
SHA256 c57280fed50a6e0510212e529a6c2e1a35081228e6576bfeb1c5266e1e6ce1b4
MD5 4b75b86cb741d79342fecbce5ba8e799
BLAKE2b-256 8b23d1673499b683e62cb4f50d860e726127cd0bcaaf9cdd2618d19208909580

See more details on using hashes here.

File details

Details for the file pyramid_di-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: pyramid_di-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyramid_di-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cac32727dc6a2c1804bf6065e491235a4d8b370e33f2665b5108d83a4dfa17ad
MD5 c99f379584f5e3a56e80861486d9b646
BLAKE2b-256 6c43cc063437f1ba8b5c05f24559109464b9462b65d8f415859df2d6fcd9e722

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page