DAPR_* environment variables are snapshotted at import time, so loading config after import silently dials localhost
Los mantenedores suelen responder en 7 días
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Start with the dapr.conf settings module, which reads the DAPR_* variables at import, and with dapr.conf.helpers.GrpcEndpoint, which builds the endpoint from them. Run the reproduction in the issue to confirm the value stays None after os.environ changes. Done means either the settings are read when a client is constructed, or a clear error or warning is raised when os.environ and the snapshot disagree. The issue leaves the choice between these options to the maintainers, so confirm the approach before writing code.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens
dapr.conf.settings reads the DAPR_* environment variables when the module is
first imported. Setting them afterwards has no effect, and the SDK silently
falls back to dns:localhost:50001 instead of the configured endpoint. There is
no warning and no error — the first symptom is a connection failure that looks
like a network or platform problem.
This is easy to hit with any of the common config patterns: python-dotenv in a
config.py, a settings module, a CLI that parses args before wiring the client,
or a framework that imports your package before your .env loader runs.
Reproduction
import os
assert "DAPR_GRPC_ENDPOINT" not in os.environ
import dapr.conf as conf
print(conf.settings.DAPR_GRPC_ENDPOINT) # None
os.environ["DAPR_GRPC_ENDPOINT"] = "https://grpc-example.example.com:443"
print(os.environ["DAPR_GRPC_ENDPOINT"]) # the value we just set
print(conf.settings.DAPR_GRPC_ENDPOINT) # None <-- still
from dapr.conf.helpers import GrpcEndpoint
ep = GrpcEndpoint(conf.settings.DAPR_GRPC_ENDPOINT
or f"localhost:{conf.settings.DAPR_GRPC_PORT}")
print(ep.endpoint) # dns:localhost:50001
Observed output:
1. imported dapr.conf with no DAPR_GRPC_ENDPOINT set
settings.DAPR_GRPC_ENDPOINT = None
settings.DAPR_GRPC_PORT = 50001
2. set DAPR_GRPC_ENDPOINT AFTER import
os.environ value = https://grpc-example.example.com:443
settings.DAPR_GRPC_ENDPOINT = None
3. endpoint the SDK would dial: dns:localhost:50001
Expected
Any of the following would have saved the debugging time:
- Read the setting lazily, at client construction, rather than at import.
- Keep the import-time read, but re-check
os.environwhen a client is built
and raise or warn on a mismatch betweenos.environ["DAPR_GRPC_ENDPOINT"]
andsettings.DAPR_GRPC_ENDPOINT. - Document it prominently in the client docs — "set
DAPR_*before importing
dapr" — since the current failure mode is silent.
(1) seems best; (2) is the cheapest thing that makes the failure loud.
Environment
dapr1.18.3,dapr-ext-workflow1.18.3- Python 3.12.12, macOS 15 (darwin 24.3.0)
- Talking to a managed Dapr control plane over a remote gRPC endpoint, so the
localhost fallback can never succeed
Why it matters
Against a local sidecar the fallback is often correct, which is why this is
rarely noticed. Against any remote or managed endpoint it is always wrong, and
the error surfaces far from its cause — the one I chased presented as "every
connection fails", with correct-looking values in .env and in os.environ.
- Lenguaje dominante
- Python
- Estrellas
- 274
- Forks
- 157
- Merge medio
- 8 d 20 h
- PR fusionados (30 d)
- 31
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de dapr/python-sdk
-
Report the http(s):// gRPC endpoint deprecation as a DeprecationWarning, not a UserWarning on every clientPosiblemente ocupada @kocaemre la tomó hace 1 día. Abiertogood first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
dapr/python-sdk#1275 ·
Los mantenedores suelen responder en 7 días
-
SDK Alignment of Workflow ExamplesQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertodapr-ext-workflow good first issue kind/enhancement P2
Dificultad 2/5 1-2 días Aptitud para principiantes 72/100
dapr/python-sdk#853 · 4 comentarios ·
Los mantenedores suelen responder en 7 días
-
[WORKFLOW SDK FEATURE REQUEST] Retry WaitForInstanceCompletion/Start on a server-sent CANCELLEDAbiertodapr-ext-workflow kind/enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
dapr/python-sdk#1246 ·
Los mantenedores suelen responder en 7 días
-
[BUG] subscribe_with_handler stops silently: async task can die or be collected, sync retry path exits, handler errors reconnect the streamPosiblemente ocupada @CasperGN la tomó hace 20 días. Abiertokind/bug
Dificultad 4/5 3-5 días Aptitud para principiantes 65/100
dapr/python-sdk#1233 ·
Los mantenedores suelen responder en 7 días
-
[BUG] Configuration subscription stops permanently after the daprd sidecar restartsPosiblemente ocupada @CasperGN la tomó hace 16 días. Abiertokind/bug
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
dapr/python-sdk#1232 ·
Los mantenedores suelen responder en 7 días
Todos los issues de dapr/python-sdk
Issues similares
-
documentation pkg: sphinx-needs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
useblocks/sphinx-needs#2255 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 60/100
home-assistant/core#186538 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
btclib-org/btclib-secp256k1#1181 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
pyrite-wiki/pyrite#917 ·
Los mantenedores suelen responder en 1 día