我正在開發一個Python應用程序中的GUI應用程序,它以XML格式存儲它的文檔。該應用程序是一個數學模型,其中有幾個可以拖放的預定義組件。我還希望用戶能夠通過在應用程序中提供的編輯器內編寫一個python函數來創建自定義組件。我的問題是將這些函數存儲在XML中。如何在XML文件中存儲python函數
一個函數可能看起來像這樣:
def func(node, timestamp):
return node.weight * timestamp.day + 4
這些功能被包裹在其提供調用它們的標準方法的對象(與預先定義的組件)。如果我是從Python中創建一個直接就應該是這樣的:
parameter = ParameterFunction(func)
的功能,然後通過模型這樣叫:
parameter.value(node=node, timestamp=timestamp)
的ParameterFunction
對象有一個to_xml
和from_xml
功能,這需要將該對象序列化爲/從一個XML表示中解序列化。
我的問題是:如何將Python函數存儲在XML文檔中?
一個解決方案到目前爲止,我還以爲是存儲函數定義爲一個字符串,eval()
或exec()
它的使用,但保持了字符串,那麼該字符串存儲在XML CDATA塊。有沒有我沒有看到的這個問題?
另一種方法是將所有的Python代碼存儲在一個單獨的文件中,並使XML參考只是函數名稱。這可能很好,因爲它可以在外部編輯器中輕鬆編輯。在這種情況下,導入代碼的最佳方式是什麼?我正在設想與python導入路徑的戰鬥...我知道有運行不受信任的代碼會有安全問題,但我願意爲它給予用戶的自由權衡這個折衷。
我指的具體應用是在github上。如果需要的話,我很樂意提供更多的信息,但我試圖在這裏保持相當通用。 https://github.com/snorfalorpagus/pywr/blob/120928eaacb9206701ceb9bc91a5d73740db1953/pywr/core.py#L396-L402