Skip to content

quirky ocrd_utils.config implementation, esp. for variables without default #1336

@bertsky

Description

@bertsky

(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.)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions