-
Notifications
You must be signed in to change notification settings - Fork 31
Description
(Posting this in German to re-use a chat...)
OcrdEnvConfig
ist sehr seltsam definiert:
Nehmen wir eine Variable, die keinen Default hat, z.B. OCRD_METS_CACHING
:
Der Versuch einer Referenzierung (config.OCRD_METS_CACHING
) ergibt eine Exception: KeyError
. Na ok, ich soll also immer erst mal config.is_set
benutzen?
Dann setzen wir doch mal config.OCRD_METS_CACHING = True
. Jetzt hat sie einen Wert (vom Typ bool). Das hat das builtin setattr
nämlich gesetzt. Die Abfrage geschieht aber nicht per überschriebenem __getattr__
– sondern builtin getattr
greift zuvor den Wert ab. Schön – ist mir eigentlich egal.
Aber: config.is_set('OCRD_METS_CACHING')
liefert immer noch False
! Denn in os.environ
hat sich ja nichts getan.
Ich kann mich also auch nicht auf config.is_set
verlassen. Wenn sie jemand gesetzt hat, kann ich sie direkt abrufen, wenn nicht bekomme ich eine Exception.
(Bei Variablen mit Defaults ist es übrigens etwas logischer, aber auch dort funktioniert is_set
nicht, und os.environ
wird von programmatischen Zuweisungen ebenfalls nicht berührt.)