我正在編寫一個用於保留不同資源的Plone日曆模塊。該模塊具有一個日曆,其事件存儲在Postgresql中。每個日曆都是存儲在ZODB中的敏捷對象。使用鍵入的uuids而不是字符串uuids查詢portal_catalog
爲了在Plone和Postgresql之間建立鏈接,我自然轉向了Plone對象的uuid屬性。因此,Plone中的每個uuid都充當Postgresql中的外鍵,它在本地支持uuid。
直到我開始使用Plone 4.1.4時,這在過去的6個月裏對我很好。有了它,引入了plone.uuid 1.0.2,它將uuids的字符串表示形式從uuids 與更改爲uuids 而沒有破折號。
這個改變的問題是我不能再確定哪個表示將被用在任何給定的對象上。在Plone 4.1.4之前創建的對象包含與之後創建的對象不同的格式化uuid字符串。長話短說,爲了確保我的代碼能夠與任何uuid表示一起工作,我希望能夠使用Python的uuid類型進行搜索。
所以不是這樣:
catalog.searchResults(UID='325dc47e-08f9-4fa1-bc18-3944a725adb4')
它返回不同結果比這
catalog.searchResults(UID='325dc47e08f94fa1bc183944a725adb4')
我很樂意這樣做:
from uuid import UUID
catalog.searchResults(UID=UUID('325dc47e-08f9-4fa1-bc18-3944a725adb4'))
這將是相當於這樣:
catalog.searchResults(UID=UUID('325dc47e08f94fa1bc183944a725adb4'))
有誰知道我能做到那樣的獨立性,從Plone中的uuid的代表性?
嗯。你不能在其他地方檢查字符串的函數UUID,根據需要插入或刪除破折號,然後調用'uuid.UUID'? (令人驚訝Plone每次更新都會產生多少破壞......) – 2012-04-13 09:31:16
uuid.UUID實際上允許帶有或不帶破折號的字符串。在我所能做到的任何地方,我都會通過確保我處理的字符串(主要用於JSON)始終具有可預測的格式來利用該功能。 問題是,我基本上必須用兩種表示來查詢目錄,以確保我得到對象。 – 2012-04-13 10:09:13
解決方案會是你所假設的(U)UID是字符串ID幷包含任何種類的字符?你爲什麼要破解破折號? – 2012-04-13 10:48:17