Moin micokernel,
warum nennst Du »adodbapi« in »OleDb« um? Du solltest »\« auf jeden Fall in Deinem Code vermeiden. Ich sehe, daß Du Dich brav auf 7bit-ASCII beschränkt hast, die Angabe eines Encodings ist also überflüssig. »Query.__init__« verwendet Default-Parameter auf eine Art, die für den Nutzer ziemlich undurchsichtig und für den Programmierer recht umständlich sind. »Query.__repr__« erzeugt keine Repräsentation des Objekts.
Bei »Query.__build_query« arbeitest Du mit festen List-Indizes, was sehr wartungsintensiv und fehleranfällig ist. Viel klarer wäre es, zum Schluß per »' AND '.join(…)« alle Bedingungen zusammenzusetzen. Viel viel schlimmer ist jedoch, daß Du absolut nichts escapest. Nicht daß man dem Nutzer böse Dinge unterstellen will, aber er wundert sich, daß seine Anfragen in unverständlichen Fehlermeldungen enden.
In »Query.execute« nimmst Du »str(self)« statt des selbstbeschreibenden »self.query«. Das »conn.close()« wird nie erreicht.
Ist es eigentlich Absicht, daß »Query.select« die Spalten in eine beliebige Reihenfolge würfelt, so daß der Nutzer zum Schluß nicht weiß, wo welche Information steht? Zudem ist es sehr umständlich erst eine Liste zu erzeugen, um sie dann Element für Element mit etwas anderem zu ersetzen.
Code: Alles auswählen
def select(self, *cols):
self._select = [SYSTEMINDEX_COLS.get(col, col) for col in cols]
return self
Die if-Abfrage in »Query.scope« ist sinnfrei. Ebenso in »Query.sortby«. Jetzt erst verstehe ich diese komplizierten »getattr«-Ausdrücke. Weil Du in Deiner __init__ Deine Attribute nicht ordentlich initialisierst, mußt Du hier … Initialisiere in __init__ alle Attribute!
Code: Alles auswählen
def extensions(self, *exts):
# ´´exts´´ without a dot at the beginning
self._exts = list(set(self._exts)|set(exts))
return self
»fpattern« hieß als init-Argument noch »filepattern«. Wenn ich das richtig sehe, hat der Nutzer keine Möglichkeit nach Dateien mit „_“ zu suchen.