zodb中存储的对象的历史状态
dm.historical的Python项目详细描述
dm.historical
==
用于访问存储在zodb(zope对象数据库)中的对象的历史状态的实用程序。
这些实用程序可用于查找过去对象的情况,并还原意外删除或修改的对象。
联盟报告了神秘丢失的物体。结果发现,对象
根本没有丢失,只是没有编制索引。
这个版本是针对zodb 3.4和zodb 3.6测试的。它在zodb 3.2中不起作用。它可能(也可能不会)与最新的zodb版本一起工作。
除了zodb之外,这个版本还需要zope的"datetime"包。
api
>目前,有以下实用工具:
``getHistory(obj,first=0,last=20)```,
``getobjectat(obj,time)`,
``generatHistory(obj)``和``generatebTreehistory(btree)`。
<
<<
<<<
*time*可以是zope ``datetime``实例、epoch
后以秒为单位的浮点数或串行/事务ID。
``generatehistory``是``gethistory``的生成器版本。
以及子存储桶,即它将btree视为
应用程序看到它,而不是仅在持久性级别上。
请注意,由"generatebtreehistory"生成的历史记录可能不完整:可能缺少某些删除操作。但是,
历史记录中至少有一个条目引用此类删除。
让我们来看看它的历史记录。
>gt>gt>gt;来自dm.histor历史导入gethistorhistory,getobjectat
>>>gt>gt;来自ppprint import ppprint-ppprint-a pp
>>;h=gethistory(f)
>;pp(h)pp(h)
[{'description':'',
'obj':<;folder at/f>;,
'size':157l,
'tid'>'tid':'\x03r\xcolor\xbcobjectat
>>>>>>gt>gt;来自ppprinprint impprint impprint-imp8\x1b\xf3hu',
"时间":dATETIME('2008/01/01 09:01:09:59:57.049 GMT+1'),
'用户名':',
'version':'},
{'description':',
'obj':<;文件夹位于/f>;,
'size':124l,
'tid':'\x03r\xc8\x1bx\x0e\xfb\xxbc',
'time':日期('2008/01/01/01 09:01:09.09:59:20.639 GMT+1'),
'version''version'''''''''''''''''''''''''br/>/>'用户名':'',
'版本':'},
{'说明':',
'对象':<;folder at/f>;,
"大小":48L,
"tid":"\x03r\xc8\x15\x1c\x9f\xb03",
"时间":日期时间('2008/01/01 09:53:06.709 GMT+1'),
"用户名":",
"版本":"}"
这告诉我们zodb知道影响
"f"的3个事务。我们可以在第一个事务之后访问它的状态。
>;>f1=h[-1]['obj']
>;>f1.objectids()
[]
``f``当时是空的。让我们看看"f"是如何被
其他事务所改变的:
>;对于h中的hr:
…打印(hr['time'].strrftime('%h%m%m%s'),hr['obj'].objectids())
……
09:59:57['x','y']
09:59:20['x']
09:53:06[]
/>这告诉我们,第二个事务添加了"x",第三个事务添加了"x",第三个事务添加了"y```````x`````x```,第三个事务添加了"x`````x``````和第三个
br/>br/>我们可以控制哪些历史记录是用可选参数*第一乙r/>>>gt;pp(gethistory(f,last=1))
[{'description':'',
'obj':<;folder at/f>;,
'size':157l,
'tid':'\x03r\xc8\x1b\xf3hu,
'size':157l,
'tid':'\x03r\xc8\x1b\xf3hu,
'time':日期时间('2008/01/01 09:2008/01 09:59:57.049:57.049 GMT+1'),
'user用户名':',
,
'version':'''>>'version'>pp(gethistory(f,first=2))
[{'描述':'',
'对象':<;折叠er at/f>;,
"大小":48L,
"tid":"\x03r\xc8\x15\x1c\x9f\xb03",
"时间":日期时间('2008/01/01 09:53:06.709 GMT+1'),
"用户名":",
"版本":"}"
"getobjectat"可用于检索给定时间的历史状态。我们想学习截至9:55。
最容易指定时间的方法是通过"DateTime"来指定时间。
>>gt>>gt;from datetime import datetime
>gt;dt=datetime(2008,1,1,1,1,9,55)
>>gt;dt
>datetime('2008/01/01 01 09/01 09:01 09:01 09:55:00 GMT+1')
>gt>gt;getobjectat(f,dt.objectids()
[>
当我们请求的状态超出了所请求的状态时,当我们请求的状态超出了所请求的状态时,我们所请求的状态的范围时,
>Zodb的维护在ED历史,
我们得到了一个``poskeyerror``。
>>gt>gt>getobjectat(f,datetime(2008,1,1,1,9,50))
tracebackack(最近一次调用最后一次):
…
zodb.posexception.poskeyexception.poskeyerror:('\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x82\xd32','\x03r\x08\x12\x08\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
或通过序列号然而,这些将很少被使用。
>>gt;ts=dt.timetime()
>gt;ts
>1199177700.0
>gt>gt;getobjectat(f,ts).objectds()
>>>>>>>
>>>>>>>>>>>>>>>>>>>getobjectat(f,b'\x03r\x8\x15\x1c\x9f\xb03').objectds()
>
>
<依赖
>>
<<<
<
<<
<>
此包依赖于zodb变量(`zodb`或"zodb3",或其他人)
和"datetime"和"datetime"。
2.0版
2.0版
……
"生成树历史"。
==
用于访问存储在zodb(zope对象数据库)中的对象的历史状态的实用程序。
这些实用程序可用于查找过去对象的情况,并还原意外删除或修改的对象。
联盟报告了神秘丢失的物体。结果发现,对象
根本没有丢失,只是没有编制索引。
这个版本是针对zodb 3.4和zodb 3.6测试的。它在zodb 3.2中不起作用。它可能(也可能不会)与最新的zodb版本一起工作。
除了zodb之外,这个版本还需要zope的"datetime"包。
api
>目前,有以下实用工具:
``getHistory(obj,first=0,last=20)```,
``getobjectat(obj,time)`,
``generatHistory(obj)``和``generatebTreehistory(btree)`。
<
<<
<<<
*time*可以是zope ``datetime``实例、epoch
后以秒为单位的浮点数或串行/事务ID。
``generatehistory``是``gethistory``的生成器版本。
以及子存储桶,即它将btree视为
应用程序看到它,而不是仅在持久性级别上。
请注意,由"generatebtreehistory"生成的历史记录可能不完整:可能缺少某些删除操作。但是,
历史记录中至少有一个条目引用此类删除。
让我们来看看它的历史记录。
>gt>gt>gt;来自dm.histor历史导入gethistorhistory,getobjectat
>>>gt>gt;来自ppprint import ppprint-ppprint-a pp
>>;h=gethistory(f)
>;pp(h)pp(h)
[{'description':'',
'obj':<;folder at/f>;,
'size':157l,
'tid'>'tid':'\x03r\xcolor\xbcobjectat
>>
"时间":dATETIME('2008/01/01 09:01:09:59:57.049 GMT+1'),
'用户名':',
'version':'},
{'description':',
'obj':<;文件夹位于/f>;,
'size':124l,
'tid':'\x03r\xc8\x1bx\x0e\xfb\xxbc',
'time':日期('2008/01/01/01 09:01:09.09:59:20.639 GMT+1'),
'version''version'''''''''''''''''''''''''br/>/>'用户名':'',
'版本':'},
{'说明':',
'对象':<;folder at/f>;,
"大小":48L,
"tid":"\x03r\xc8\x15\x1c\x9f\xb03",
"时间":日期时间('2008/01/01 09:53:06.709 GMT+1'),
"用户名":",
"版本":"}"
这告诉我们zodb知道影响
"f"的3个事务。我们可以在第一个事务之后访问它的状态。
>;>f1=h[-1]['obj']
>;>f1.objectids()
[]
``f``当时是空的。让我们看看"f"是如何被
其他事务所改变的:
>;对于h中的hr:
…打印(hr['time'].strrftime('%h%m%m%s'),hr['obj'].objectids())
……
09:59:57['x','y']
09:59:20['x']
09:53:06[]
/>这告诉我们,第二个事务添加了"x",第三个事务添加了"x",第三个事务添加了"y```````x`````x```,第三个事务添加了"x`````x``````和第三个
br/>br/>我们可以控制哪些历史记录是用可选参数*第一乙r/>>>gt;pp(gethistory(f,last=1))
[{'description':'',
'obj':<;folder at/f>;,
'size':157l,
'tid':'\x03r\xc8\x1b\xf3hu,
'size':157l,
'tid':'\x03r\xc8\x1b\xf3hu,
'time':日期时间('2008/01/01 09:2008/01 09:59:57.049:57.049 GMT+1'),
'user用户名':',
,
'version':'''>>'version'>pp(gethistory(f,first=2))
[{'描述':'',
'对象':<;折叠er at/f>;,
"大小":48L,
"tid":"\x03r\xc8\x15\x1c\x9f\xb03",
"时间":日期时间('2008/01/01 09:53:06.709 GMT+1'),
"用户名":",
"版本":"}"
"getobjectat"可用于检索给定时间的历史状态。我们想学习截至9:55。
最容易指定时间的方法是通过"DateTime"来指定时间。
>>gt>>gt;from datetime import datetime
>gt;dt=datetime(2008,1,1,1,1,9,55)
>>gt;dt
>datetime('2008/01/01 01 09/01 09:01 09:01 09:55:00 GMT+1')
>gt>gt;getobjectat(f,dt.objectids()
[>
当我们请求的状态超出了所请求的状态时,当我们请求的状态超出了所请求的状态时,我们所请求的状态的范围时,
>Zodb的维护在ED历史,
我们得到了一个``poskeyerror``。
>>gt>gt>getobjectat(f,datetime(2008,1,1,1,9,50))
tracebackack(最近一次调用最后一次):
…
zodb.posexception.poskeyexception.poskeyerror:('\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x82\xd32','\x03r\x08\x12\x08\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
或通过序列号然而,这些将很少被使用。
>>gt;ts=dt.timetime()
>gt;ts
>1199177700.0
>gt>gt;getobjectat(f,ts).objectds()
>>>>>>>
>>>>>>>>>>>>>>>>>>>getobjectat(f,b'\x03r\x8\x15\x1c\x9f\xb03').objectds()
>
>
<依赖
>>
<<<
<
<<
<>
此包依赖于zodb变量(`zodb`或"zodb3",或其他人)
和"datetime"和"datetime"。
2.0版
2.0版
……
"生成树历史"。