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版
……




















"生成树历史"。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java游戏!框架伪造应用程序它实际上做什么?   java如何在JavaFx中显示表视图中的即时更改?   对象类的equals()方法的java重载   xpages介绍如何部署java。IBM Notes中的策略更改   java如何访问侦听器中的另一个视图?   java getDefaultDisplay()的替代方法是什么   java opencv匹配模板   java Android Firebase写入数据时的常量超时   在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。   带有GUI的swing Java模拟无法运行模拟   java NoSuchElementException在特定的Web端上使用无头铬和硒   java对文件进行迭代,即使文件在目录中也会出现“未找到文件”异常。你能告诉我为什么吗?谢谢   递归Java 8,匿名递归嵌套方法   java为什么我看到枚举常量的字段值会被序列化/反序列化?在哪种情况下,枚举中哪些内容没有序列化?   java在运行sonar scanner和Spotbugs规则时出错,用于单片项目?   java如何检查硬件键盘是否可用?(黑莓)   tile游戏动作侦听器循环中的java错误   sockets Java线程池与高请求场景中的新线程   java如何使用Hibernate注释在联接表上创建索引?