Solución:
Spring Python es una rama de Spring Framework y Spring Security basados en Java, destinados a Python. Este proyecto contiene actualmente las siguientes características:
- Inversión de control (inyección de dependencia): use XML clásico o el decorador de Python @Object (similar al subproyecto Spring JavaConfig) para conectar las cosas. Si bien el formato @Object no es idéntico al estilo Guice (cableado centralizado frente a información de cableado en cada clase), es una forma valiosa de cablear su aplicación Python.
- Programación orientada a aspectos: aplique interceptores en un paradigma de programación horizontal (en lugar de la herencia vertical de OOP) para cosas como transacciones, seguridad y almacenamiento en caché.
- DatabaseTemplate: la lectura de la base de datos requiere un ciclo monótono de apertura de cursores, lectura de filas y cierre de cursores, junto con controladores de excepciones. Con esta clase de plantilla, todo lo que necesita es la consulta SQL y la función de manejo de filas. Spring Python hace el resto.
- Transacciones de la base de datos: envolver múltiples llamadas a la base de datos con transacciones puede hacer que su código sea difícil de leer. Este módulo proporciona múltiples formas de definir transacciones sin complicar las cosas.
- Seguridad: complemente los interceptores de seguridad para bloquear el acceso a sus métodos, utilizando tanto la autenticación como la autorización de dominio.
- Comunicación remota: es fácil convertir su aplicación local en una distribuida. Si ya ha creado sus piezas de cliente y servidor utilizando el contenedor de IoC, pasar de local a distribuido es solo un cambio de configuración.
- Muestras: para ayudar a demostrar varias características de Spring Python, se han creado algunas aplicaciones de muestra:
- PetClinic: la aplicación web de muestra de Spring Framework se ha reconstruido desde cero utilizando contenedores web de Python que incluyen: CherryPy. Échale un vistazo para ver un ejemplo de cómo usar este marco. (NOTA: En el futuro, se agregarán otros marcos web de Python a esta lista).
- Spring Wiki: las wikis son formas poderosas de almacenar y administrar contenido, ¡así que creamos una simple como demostración!
- Spring Bot: use Spring Python para construir un pequeño bot para administrar el canal IRC de su proyecto de código abierto.
Me gusta este marco simple y ordenado.
http://pypi.python.org/pypi/injector/
La inyección de dependencias como patrón formal es menos útil en Python que en otros lenguajes, principalmente debido a su soporte para argumentos de palabras clave, la facilidad con la que se pueden burlar de los objetos y su naturaleza dinámica.
Dicho esto, un marco para ayudar en este proceso puede eliminar una gran cantidad de placas de caldera de aplicaciones más grandes. Ahí es donde Injector puede ayudar. Proporciona de forma automática y transitiva argumentos de palabras clave con sus valores. Como beneficio adicional, Injector fomenta el código bien compartimentado mediante el uso de Module s.
Aunque está inspirado en Guice, no replica servilmente su API. Proporcionar una API Pythonic triunfa sobre la fidelidad.
No lo he usado, pero el marco Spring Python se basa en Spring e implementa Inversión de control.
También parece haber un proyecto de Guice en Python: snake-guice