(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.)
(Posting this in German to re-use a chat...)
OcrdEnvConfigist 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 malconfig.is_setbenutzen?Dann setzen wir doch mal
config.OCRD_METS_CACHING = True. Jetzt hat sie einen Wert (vom Typ bool). Das hat das builtinsetattrnämlich gesetzt. Die Abfrage geschieht aber nicht per überschriebenem__getattr__– sondern builtingetattrgreift zuvor den Wert ab. Schön – ist mir eigentlich egal.Aber:
config.is_set('OCRD_METS_CACHING')liefert immer nochFalse! Denn inos.environhat sich ja nichts getan.Ich kann mich also auch nicht auf
config.is_setverlassen. 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_setnicht, undos.environwird von programmatischen Zuweisungen ebenfalls nicht berührt.)