Skip to main content

A library that helps introspect Pyramid views and extract their metadata and information.

Project description

pyramid-introspector

Extract route and view metadata from Pyramid applications, with an extension system that handles library-specific introspection for Cornice and pycornmarsh.

Why

Pyramid's introspectable registry holds rich metadata about routes and views, but extracting it -- especially when libraries like Cornice and pycornmarsh layer their own conventions on top -- requires non-trivial, repetitive code. This library provides a single, tested entry point for that work.

Installation

pip install pyramid-introspector

With Cornice/Marshmallow support:

pip install pyramid-introspector[cornice]

Quick start

from pyramid.config import Configurator
from pyramid_introspector import PyramidIntrospector

config = Configurator()
# ... add routes, views, include cornice, etc.
config.commit()

introspector = PyramidIntrospector(config.registry)
routes = introspector.introspect()

for route in routes:
    for view in route.views:
        print(f"{view.method:6} {route.pattern}")
        if view.request_schema:
            print(f"       body: {view.request_schema.name}")
        if view.response_schema:
            print(f"       resp: {view.response_schema.name}")

What you get

Each RouteInfo contains:

Field Type Description
name str Pyramid route name
pattern str URL pattern (e.g. /items/{id})
views list[ViewInfo] One per HTTP method
factory Any Route factory for ACL contexts
extra dict Extension-specific route metadata

Each ViewInfo contains:

Field Type Description
method str HTTP method (GET, POST, ...)
callable Any The Python view function
permission str | None Pyramid permission (from ACL)
security str | None Auth scheme type (e.g. "bearer", "BearerAuth")
description str First line of view docstring
parameters list[ParameterInfo] Path, querystring, and body parameters
request_schema SchemaInfo | None Marshmallow schema for request body
querystring_schema SchemaInfo | None Marshmallow schema for querystring
response_schema SchemaInfo | None Primary 2xx response schema
response_schemas dict[int, SchemaInfo] All response schemas keyed by status code
extra dict Extension-specific view metadata

Extensions

Extensions enrich the base route/view data with library-specific metadata. Built-in extensions are loaded automatically when their dependencies are installed.

Cornice

Activated when cornice is installed. Discovers Cornice services, matches them to routes by path, and extracts Marshmallow schemas from service definitions -- both composite schemas (body/querystring/path as nested fields) and flat schemas with location detection from validators.

pycornmarsh

Activated when cornice is installed. Reads pycornmarsh predicates (pcm_request, pcm_responses, pcm_tags, pcm_summary, pcm_description, pcm_security, pcm_show) from Cornice service definition args and populates the corresponding ViewInfo fields.

Writing custom extensions

Any class that satisfies the IntrospectionExtension protocol can be used:

from pyramid_introspector.extensions import IntrospectionExtension
from pyramid_introspector.models import RouteInfo

class MyExtension:
    name = "my_library"

    def is_available(self) -> bool:
        try:
            import my_library
            return True
        except ImportError:
            return False

    def enrich(self, registry, routes: list[RouteInfo]) -> list[RouteInfo]:
        # Mutate views with library-specific metadata
        return routes

Pass it directly:

introspector = PyramidIntrospector(registry, extensions=[MyExtension()])

Or register it via entry points for automatic discovery:

[project.entry-points."pyramid_introspector.extensions"]
my_library = "my_package:MyExtension"

Development

git clone https://github.com/your-org/pyramid-introspector.git
cd pyramid-introspector
uv sync --group dev

Run tests:

uv run pytest

Lint and format:

uv run ruff check src/ tests/
uv run black src/ tests/

License

MIT

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_introspector-0.3.0.tar.gz (89.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_introspector-0.3.0-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file pyramid_introspector-0.3.0.tar.gz.

File metadata

  • Download URL: pyramid_introspector-0.3.0.tar.gz
  • Upload date:
  • Size: 89.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyramid_introspector-0.3.0.tar.gz
Algorithm Hash digest
SHA256 5051bc8967757bd1f398d796a597d739dc54364212f2e48470dd40515b60bfc2
MD5 329ec34b7338dae5706e4b100e2ce54d
BLAKE2b-256 f68669f017903c50335ac2f3d22531bc737e7d392a68074949404a3598878bab

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyramid_introspector-0.3.0.tar.gz:

Publisher: ci.yml on cartaorobbin/pyramid-introspector

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyramid_introspector-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyramid_introspector-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 29e0bf243c0f0e3b10a5710920f254cc095b9ee4448df0141590dc4b46f35023
MD5 48f21d5f96dfb98e9368eb4e863430ea
BLAKE2b-256 5a14f5c7777b915fbaece1ee6cae45275c49c4d5780e6c2a065486d5d684caac

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyramid_introspector-0.3.0-py3-none-any.whl:

Publisher: ci.yml on cartaorobbin/pyramid-introspector

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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