[Python-de] Automatische Validierung von Attributen eines Objektes
Diez B. Roggisch
deets at web.de
Don Okt 20 13:37:22 CEST 2005
Am Mittwoch, 19. Oktober 2005 13:58 schrieb Rauch, Juergen (Juergen):
> Liebe Gemeinde,
>
> folgende Idee moechte ich hier zur Diskussion stellen um sie danach
> evtl. im Python Cookbook zu publizieren.
>
> Die Aufgabe:
> Es soll sichergestellt werden, dass einem Objekt keine unsinnigen
> Attribute zugewiesen werden koennen.
>
> Hintergrund:
> Zum Beispiel eine WEB Applikation die CGI-Parameter bekommt und
> diese dann Attributen zuweist.
> Es geht also um eine serverseitige Validierung von Eingabewerten -
> Ja, ich weiss, Eigabewerte kann man auch
> vom Client validieren lassen, aber darum geht es jetzt nicht.
<snip>
> Bin gespannt ob jemand eine Idee hat wie man das besser machen kann.
Ja. Metaclassen. Geht wesentlich einfacher.
Folgende annahme: ein Validator ist ein callable, das einfach den Wert bekommt
und dann einen ValueError schmeisst wenn der zu setzende String _nicht_
passt. Ausserdem werden Leerstrings und None auf None abgebildet.
Eine moegliche Erweiterung sieht so aus, das man statt eines validators ein
Tupel aus coercer und validator setzt. Erstere wird dazu verwendet den Wert
wirklich zu _setzen_, zweiterer zu validieren. Der Vorteil: Ich kann zB einen
String auf int-konformitaet pruefen, den ich aber trotzdem als String setzen
will.
Und richtig spannend wird's, wenn man einen validator-wrapper schreibt, der
die __and__ und __or__ Methoden ueberlaed, um compositionen von Validatoren
moeglich zu machen. Dann hat man eigentlich so ziemlich alles, was mir so
einfaellt was man brauchen koennte :)
Angehangen mein kleiner Test. Kleiner Schoenheitsfehler: Durch die Verwendung
von int und float hat man Probleme sowas wie "" oder None zu unterdruecken
mittels eines speziellen not-null-validators. Dazu muesste man die
Validator-Semantik so aendern, das sie "" und None akezeptieren.
MFG Diez
Diez
-------------- nلchster Teil --------------
Ein Dateianhang mit Bin?rdaten wurde abgetrennt...
Dateiname : validator.py
Dateityp : application/x-python
Dateigr??e : 3233 bytes
Beschreibung: nicht verf?gbar
URL : http://starship.python.net/pipermail/python-de/attachments/20051020/3a640d1a/validator.bin