DAPR_* environment variables are snapshotted at import time, so loading config after import silently dials localhost
I maintainer di solito rispondono entro 4 giorni
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Python
- Stelle
- 273
- Fork
- 156
- Merge medio
- 6g 6h
- PR unite (30g)
- 16
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dapr/python-sdk
-
SDK Alignment of Workflow ExamplesForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertadapr-ext-workflow good first issue kind/enhancement P2
Difficoltà 2/5 1-2 giorni Idoneità per principianti 72/100
dapr/python-sdk#853 · 4 commenti ·
I maintainer di solito rispondono entro 4 giorni
-
[WORKFLOW SDK FEATURE REQUEST] Retry WaitForInstanceCompletion/Start on a server-sent CANCELLEDApertadapr-ext-workflow kind/enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
dapr/python-sdk#1246 ·
I maintainer di solito rispondono entro 4 giorni
-
[BUG] subscribe_with_handler stops silently: async task can die or be collected, sync retry path exits, handler errors reconnect the streamForse già presa @CasperGN l’ha presa 18 giorni fa. Apertakind/bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 65/100
dapr/python-sdk#1233 ·
I maintainer di solito rispondono entro 4 giorni
-
[BUG] Configuration subscription stops permanently after the daprd sidecar restartsForse già presa @CasperGN l’ha presa 14 giorni fa. Apertakind/bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
dapr/python-sdk#1232 ·
I maintainer di solito rispondono entro 4 giorni
-
[BUG] Streaming subscribe returns None after a reconnect, making test_streaming_subscribe_receives_published_message flakyForse già presa @CasperGN l’ha presa 18 giorni fa. Apertakind/bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
dapr/python-sdk#1230 ·
I maintainer di solito rispondono entro 4 giorni
Tutte le issue di dapr/python-sdk
Issue simili
-
enhancement from-review
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
khuisman/mcp-gee-sweet#1010 ·
I maintainer di solito rispondono entro 1 giorno
-
bug confirmed issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
open-webui/open-webui#32333 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ll7/robot_sf_ll7#10368 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
mcp: a write that loses its answer is reported as "cannot reach", although it may have landedAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
flop-labs/technocore-chat#982 ·
I maintainer di solito rispondono entro 1 giorno