Ich schreibe ein Plone-Kalendermodul zum Reservieren verschiedener Ressourcen. Dieses Modul verfügt über einen Kalender, dessen Ereignisse in Postgresql gespeichert sind. Jeder Kalender ist ein Geschicklichkeitsobjekt, das im ZODB gespeichert ist.Abfrage von portal_catalog mit typisierten Uuids anstelle von String-Uuids
Um eine Verbindung zwischen Plone und Postgresql herzustellen, wandte ich mich natürlich der Uuid-Eigenschaft der Plone-Objekte zu. So dient jede UUID in Plone als Fremdschlüssel in Postgresql, der nativ UUID unterstützt.
Das hat in den letzten 6 Monaten gut funktioniert, bis ich mit Plone 4.1.4 angefangen habe. Damit wurde plone.uuid 1.0.2 eingeführt, welches die Darstellung der UUIDs von UUID mit in UUID ohne Striche ändert.
Das Problem mit dieser Änderung ist, dass ich nicht mehr sicher sein kann, welche Darstellung für ein bestimmtes Objekt verwendet wird. Objekte, die vor Plone 4.1.4 erstellt wurden, enthalten einen anders formatierten UUID-String als Objekte, die danach erstellt werden.
Lange Rede, kurzer Sinn, um sicherzustellen, dass mein Code mit jeder UUID-Darstellung funktioniert, würde ich gerne mit Pythons UUID-Typ suchen können.
Anstatt also diese:
catalog.searchResults(UID='325dc47e-08f9-4fa1-bc18-3944a725adb4')
Welche verschiedene Ergebnisse als dies zurück:
catalog.searchResults(UID='325dc47e08f94fa1bc183944a725adb4')
Ich würde gerne, dies zu tun:
from uuid import UUID
catalog.searchResults(UID=UUID('325dc47e-08f9-4fa1-bc18-3944a725adb4'))
Welche Äquivalent dazu wäre:
catalog.searchResults(UID=UUID('325dc47e08f94fa1bc183944a725adb4'))
Wer weiß, wie ich diese Art von Unabhängigkeit von der UUID Vertretung in Plone erreichen kann?
Hm. Können Sie nicht an anderer Stelle eine Funktions-UUID haben, die die Zeichenfolge prüft, bei Bedarf Striche einfügt oder entfernt und dann 'uuid.UUID' aufruft? (Erstaunlich, wie viel Bruch Plone bei jeder kleinen Aktualisierung erzeugt ...) –
uuid.UUID erlaubt tatsächlich Strings mit oder ohne Bindestriche. Und wo immer ich kann, kann ich dieses Feature nutzen, indem ich dafür sorge, dass die Strings, mit denen ich arbeite (hauptsächlich für JSON), immer ein vorhersagbares Format haben. Das Problem ist wirklich, dass ich im Wesentlichen den Katalog mit beiden Darstellungen abfragen muss, um sicherzustellen, dass ich das Objekt zurückbekomme. –
Wäre die Lösung, dass Sie einfach annehmen, dass (U) UID String-ID ist und jede Art von Zeichen enthalten? Warum strippst du die Striche weg? –