Understand the general features of Aglyph

Release:2.1.1

Aglyph supports Python 2 and 3 (CPython), PyPy, Stackless, IronPython, and Jython

The single Aglyph distribution and API is 100% compatible across Python language versions 2.7 and 3.3+, and the implementations listed below:

The Aglyph 2.1.1 testing summary provides detailed information for the Python implementation releases and platforms under which the Aglyph unit test suite is executed.

Aglyph does not require framework-specific changes to your application code

Adding Aglyph Dependency Injection support to a new or existing application is easy, because Aglyph doesn’t require any framework-specific code to reside in your application’s business logic code.

Conceptually, Aglyph acts like a layer or proxy that sits between your business logic code and the scaffolding/controlling code that uses it. Put another way: Aglyph knows about your application components, but your application components don’t know about Aglyph.

Any object (application-specific, Python standard library, or 3rd-party) can be an Aglyph component

Because Aglyph doesn’t require that component source code be modified, either to be injected with dependencies or to serve as a dependency (or both!), any object can serve as a component in your application.

Aglyph will happily assemble any object that is reachable from an absolute importable dotted name and, optionally, attribute access on that object (via aglyph.component.Component.factory_name or aglyph.component.Component.member_name).

The only requirements for a component are that:

  1. aglyph.component.Component.component_id must be unique within an aglyph.context.Context.
  2. aglyph.component.Component.dotted_name must be a “dotted_name.NAME” or “dotted_name” string that represents a valid absolute import statement according to the productions listed below.
absolute_import_stmt ::=  "from" dotted_name "import" NAME
                          | "import" dotted_name
dotted_name          ::=  NAME ('.' NAME)*

Whether you want to describe a component as an object from your own application, from the Python standard library, from a 3rd-party library, or even from an implementation-specific library (e.g. a .NET class in IronPython, a Java class in Jython), Aglyph is up to the task. No adapter code, no monkey-patching, no fuss.