Seite 1 von 1
csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 17:22
von jbs
Ich möchte aus Spaß ein ORM für CSV schreiben. Nun frage ich mich, ob es möglich ist aus folgender Dekleration möglich ist, herauszufinden, welches Feld sich an welcher Stelle befindet.
Code: Alles auswählen
class SomeCSV(Model):
first = Field()
second = Field()
third = Field()
Die Metaklasse bekommt zur Initialisierung ja nur ein Dictionary übergeben. Kann man nun trotzdem ohne große Hacks die Reihenfolge rekonstruieren?
Re: csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 17:41
von kbr
Ich wüsste jetzt nicht wie, aber selbst wenn, wäre das nicht ungefährlich: Das spätere vertauschen von Zeilen, was normalerweise unkritisch ist, könnte dann fatal sein. Eventuell brauchst Du ein weiteres Attribut wie z.B. "FieldOrder", welches die Anordnung der Felder explizit auflistet.
Re: csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 17:50
von BlackJack
@jbs: Du könntest den `Field`-Objekten ein Attribut mit einer Zahl verpassen, so dass jedes Objekt dort einen höheren Wert bekommt als alle davor erstellten. Dann kannst Du sie problemlos nach relativem Zeitpunkt der Erstellung über dieses Attribut sortieren und bekommst so auch die Reihenfolge heraus in der sie in der Klasse angelegt wurden.
Re: csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 17:51
von jbs
Meine - zugegeben nicht wirklich schöne - Idee ist, den Feldern eine ID zuzuordnen, die automatisch beim Erstellen angelegt und hochgezählt wird.
Jedenfalls vielen Dank für eure Antworten

Re: csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 17:54
von DasIch
Deine "nicht wirklich schöne" Idee ist was alle deklarativen APIs dieser Art machen.
Re: csv orm modell
Verfasst: Mittwoch 16. Januar 2013, 18:01
von lunar
@jbs In Python 3 kannst Du auch eine Metaklasse mit "__prepare()__" implementieren, und dort ein "OrderedDict" zurückgeben, siehe PEP 3115.