Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

336
Vistas
Inyección de dependencia de matraz

Soy nuevo en matraz y python. Quiero implementar un contenedor de inyección de dependencia y acceder a las dependencias dentro de diferentes módulos. Mi primer intento se ve algo como:

 class AppModule(Module): def __init__(self, app): self.app = app """Configure the application.""" def configure(self, binder): client = self.configure_cosmos_client() binder.bind(CosmosClient, to=client, scope=singleton) binder.bind(Dao, to=Dao, scope=singleton) def configure_cosmos_client(self) -> CosmosClient: return CosmosClient( url_connection=self.app.config.get('ENDPOINT'), auth={'masterKey': self.app.config.get('PRIMARYKEY')} ) app = Flask(__name__) injector = Injector([AppModule(app)]) FlaskInjector(app=app, injector=injector) app.run()

y más dentro de un módulo, quiero obtener la dependencia de CosmosClient algo así como:

 class Dao: cosmos_client = None def __init__(self): self.cosmos_client = DI.get(CosmosClient)

¿Hay alguna manera de lograr esto? Tenga en cuenta que "DI.get" es solo un ejemplo, ya que no pude encontrar cómo acceder a estas dependencias además de inyectar las dependencias en la ruta.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Pruebe el inyector de dependencia . Tiene con Flask tutorial . Su contenedor se verá algo como:

 from dependency_injector import containers, providers from dependency_injector.ext import flask from flask import Flask from flask_bootstrap import Bootstrap from github import Github from . import views, services class ApplicationContainer(containers.DeclarativeContainer): """Application container.""" app = flask.Application(Flask, __name__) bootstrap = flask.Extension(Bootstrap) config = providers.Configuration() github_client = providers.Factory( Github, login_or_token=config.github.auth_token, timeout=config.github.request_timeout, ) search_service = providers.Factory( services.SearchService, github_client=github_client, ) index_view = flask.View( views.index, search_service=search_service, default_query=config.search.default_query, default_limit=config.search.default_limit, )

Para ejecutar la aplicación necesitas:

 from .containers import ApplicationContainer def create_app(): """Create and return Flask application.""" container = ApplicationContainer() container.config.from_yaml('config.yml') container.config.github.auth_token.from_env('GITHUB_TOKEN') app = container.app() app.container = container bootstrap = container.bootstrap() bootstrap.init_app(app) app.add_url_rule('/', view_func=container.index_view.as_view()) return app

Y la prueba se verá así:

 from unittest import mock import pytest from github import Github from flask import url_for from .application import create_app @pytest.fixture def app(): return create_app() def test_index(client, app): github_client_mock = mock.Mock(spec=Github) # Configure mock with app.container.github_client.override(github_client_mock): response = client.get(url_for('index')) assert response.status_code == 200 # Do more asserts
over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro de lo que está tratando de lograr exactamente, pero no codifique en Python con una mentalidad de Java.

Si está tratando de agregar cosmos_client a la aplicación y acceder a él desde otro lugar, es posible que desee guardarlo como un atributo de configuración para la aplicación del matraz.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda