在网页中导航成批结果的助手。
lazr.batchnavigator的Python项目详细描述
.BR/>此文件是LaZr.Basnavigigor的一部分。
BR/> LZR.Basnavigigor是免费软件:您可以重新分发它和/或BR/>根据GNU小通用公共许可证的条款修改它为BR/>由自由软件基金会发布的许可证第3版。
BR/>lazr.batchnavigator的发布是希望它会有用,但它没有任何保证;甚至没有对适销性或特定用途的适用性的隐含保证。有关详细信息,请参阅gnu less general public
许可证。
如果没有,请参见
<;http://www.gnu.org/licenses/>;
batch navigation
********
batch navigation通过提供指向结果的下一页、上一页和编号页的url链接,提供了在web
页中导航批结果的方法。
控制批处理的OST参数:
-备注:用于
批的位置的基础存储索引指针的记录。
-方向:指示备注是在批的开始还是结束。
-开始:示意-用于计算表观位置n(但请注意,
由于对批的重复访问的并发性质,
真实偏移量可能不同-但是集合不会跳过或显示两次
项。为了与保存的url兼容,如果memo和
方向都不存在,那么start用于将
列表切片到集合中。
-batch:控制每个批次显示的项目数。只有当它与创建批时设置的默认值不同时,才会出现
。
这些值可以在请求中重写,除非同时传递
force_start=true,这将使start参数(再次默认为0)
始终处于选中状态。
导入:从lazr.batchnavigator导入batchnavigator,listrangefactory从zope.publisher.browser导入testrequest从zope.publisher.http导入httpcharsets从zope.component导入getsitemmanager
>;>sm=getsitemanager()
>;>sm.registeradapter(httpcharsets)
>;>def build_request(query_string_args=none,method='get'):
…如果query_string_args为none:
…查询字符串=''
…其他:
…如果getattr(query_string_args,'items',none)不是none:
…query_string_args=查询_string_args.items()
…查询字符串="&;"。加入(
…[%s=%s%(k,v)表示查询字符串中的k,v参数]
…request=testrequest(服务器url='http://www.example.com/foo',
…方法=方法,
…environ={'query_string':query_string})
…request.processinputs()
…返回请求
虚拟请求对象:
>一些示例数据。
>;>;驯鹿=['dasher'、'dancer'、'prancer'、'vixen'、'comet'、
…'Cupid、Donner、Blitzen、Rudolph']
range\u factory
提供一个实现irangefactory的对象并管理此协议。
listrangefactory是一个简单的包含实现,如果没有range\u factory,batchnavigator将使用它。
…range_factory=listrangefactory(驯鹿))
简单地说:
>;>;安全驯鹿=驯鹿
>;>;安全驯鹿批次导航器=批次导航器(
…safe_reinder,build_request(),size=3)
lazr.batchnavigator的一个重要特性是它不愿意在底层数据集上调用len()。len()是一个昂贵的
操作,几乎没有什么好处,因此这个库试图避免调用len(),除非它是绝对必要的。为了显示这一点,我们将定义一个python列表类型的子类,当对其调用
len()时,该子类将爆炸。
>;>class listwithexplosivelen(list):
…""不喜欢调用其len()的列表子类。""
…定义长度(自身):
…引发运行时错误
除非另有说明,否则我们将在整个
测试期间仅使用此列表,以验证除非我们希望调用len(),否则不会调用它。
>>;>;explosive椆reinder=listwithexplosivelen(reinder)
>;>;reinder椆batch椆navigaTOR=批次导航器(
…爆炸驯鹿,build_request(),size=3)
batchnavigator实现ibatchnavigator。我们需要在这里使用
"安全"的批导航器,因为verify object探测它传递的对象的所有方法,包括从zope.interface.verify import verifyobject
>>>;,从lazr.batch navigator.interface s import ibatchnavigator
>;>verifyobject(ibatchnavigator,safe_reindeer_batch_navigator)
true
batchnavigator类提供ibatchnavigator工厂。这可用于将批次导航器工厂注册为实用程序,例如,从lazr.batch navigator.interfaces导入ibatchnavigatorfactory
>;>verifyobject(ibatchnavigatorfactory,batchnavigator)
true
igator对于当前显示的结果块
(例如,在zpt中迭代它们以进行呈现):
>;>;列表(驯鹿批导航器.currentbatch())
['dasher','dancer','prancer']
/>
>>>驯鹿批导航器.firstBatchURL()
'
>>>驯鹿批导航器.prevBatchURL()
'
>>>驯鹿批导航器.nextBatchURL()
'http://www.example.com/foo?memo=3&start=3'
E.COM/FOO?direction=backward&start=6'
>如果没有进一步的结果,则下一个链接将为空:
>;>;请求=生成请求({"开始":"3","批":"20"})
>;>;最后一个驯鹿批导航器=批导航器(驯鹿,请求=请求)
>;>;last_reindeer_batch_navigator.nextbatchurl()
"
即使我们从0
和批大小之间的某个点开始,第一个和上一个链接也应该出现:
>;>;request=build_request({"start":"2","batch":"3"})
>;>;last_reindeer_batch_navigator=batchnavigator(reindeer,request=request)
在这里,我们也可以看到batch参数作为url的一部分出现。
这是因为在创建批处理对象时请求的大小不同于默认值
,默认情况下为5。
>;last_驯鹿导航仪.firstbatchurl()
'http://www.example.com/foo?batch=3'
>;>last_reindeer_batch_navigator.prevBatchURL()
'http://www.example.com/foo?batch=3&direction=backwards&memo=2'
这都适用于其他值在查询字符串中:
>;>;请求=生成请求({'fnorb':'bar',
…'开始":"3",
…"批次':'3'})
>;>驯鹿,请求,大小=3)
>;>安全的驯鹿,请求,大小=3)
在这种情况下,我们创建了默认大小为"3"的batchnavigator,并且
请求正是询问每个批的项目数,因此,我们不需要将"批"显示为url的一部分。
>;驯鹿批导航或者使用"qs.firstBatchURL()
"http://www.example.com/foo?fnorb=bar'
>>>>驯鹿批导航器带qs.prevbatchurl()
'http://www.example.com/foo?fnorb=bar&;direction=backwards&;memo=3'
>;>>驯鹿批次导航器,带有qs.nextBatchUrl()
'http://www.example.com/foo?fnorb=bar&;memo=6&start=6'
(同样,如果不知道整个列表的大小,就无法获取最后一批。)
>;>;安全的驯鹿批导航器,使用http://www.example.com/foo?fnorb=bar&;direction=backwards&;start=6'
"force\u start"参数允许忽略
请求中的起始值。例如,当筛选器已更改,并且
所需的行为是在0重新启动时,这可能很有用。
>;
驯鹿,请求,大小=3,force_start=true)
>;>reindeer_batch_navigator_with_qs.currentbatch().start
0
>;>reindeer_batch_navigator_with_qs.nextbatchurl()
'http://www.example.com/foo?fnorb=bar&;memo=3&start=3'
>;>>驯鹿[:3]==列表(驯鹿批导航器带有qs.currentbatch())
true
我们确保对后期操作也遵守url中提供的批参数
:
>;请求=生成请求({'fnorb':‘酒吧’,
…开始":"3",
…"批处理':'3'},method='post')
>;>>驯鹿批处理导航器批处理,qs=batch navigator(
…驯鹿,请求)
fnorb=bar&batch=3&memo=6&start=6'
首选第一个。
>;>;请求=生成请求(
…[("batch","1"),("batch","7"),("start","2"),("start","10")])
>;>gt;navigator=batchnavigator(驯鹿,请求=请求)
>;>gt;navigator.nextbatchurl()
'http://www.example.com/foo?batch=1&memo=3&start=3'
batch参数必须为正。忽略其他数字,而是使用默认批大小。
>>>;from cgi import parse-qs
>;>;request=build-request({'batch':'0})
>;>;navigator=batchnavigator(range(99),request=request)
>;>;print'batch'in parse_qs(navigator.nextbatchurl())
false
>;>;request=build_request({'batch':'-1'})
>;>;navigator=batchnavigator(range(99),request=request)
>;>;在parse_qs(navigator.nextbatchurl())中打印"batch"
=======
空批次
===
无,生成请求(),大小=3)
>;。>;空的批次导航器。firstBatchUrl()
'
>>>空的批次导航器。nextBatchUrl()
'
>>>空的批次导航器。prevBatchUrl()
'
>>>空的批次导航器。lastBatchUrl()
>>>空的批次导航器。TOR=批次导航器(
…[],build_request(),size=3)
>;>null_batch_navigator.firstbatchurl()
'
>;>null_batch_navigator.nextbatchurl()
'
>;>null_batch_navigator.prevbatchurl()
>;>null_batch_navigator.lastbatchurl()
>待办事项:
-在开始时间超出结束时间时炸毁
-孤儿
-重叠
一个不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎,不受欢迎的支持结果,不受欢迎,不受欢迎的影响,br/>
一些result对象不实现len,因为通常python代码假定len是廉价的。例如,sqlobject和storm结果集都有这种
行为,因此获取长度是一个非常简单的操作。要支持这些对象,批处理将在结果集上查找"len"。如果
它不存在,它会将结果调整为
zope.interface.common.sequence.ifinitesequence,并使用该结果集(对象):
定义初始化(自我,结果):
…self.stub_results=结果
…定义计数(自身):
…#假设这实际上返回了
…返回len(self.stub_results)
…定义获取项(self,ix):
…返回self.stub_results[ix]也适用于切片
…定义(自我):
…从zope返回iter(self.stub_results)
…
>>>;。接口导入实现从zope执行
>;。组件导入适配器,从zope.interface.common.sequence导入ifinitesequence
>;>;类示例适配器(检查pleresultset):
…改编(例如resultset)
…实现(ifinitesequence)
…定义长度(自身):
…返回self.stub_results.count()
…
>;>;sm=getsitemanager()
>;>;sm.registeradapter(示例适配器)
>;>;example=exampleResultset(安全驯鹿)
>;>;example=batchNavigator=batchNavigator(
…例如,build_request(),size=3)
只获取结果的一部分,而不是访问整个结果。
>;>>类ExampleResultSet(ExampleResultSet):
…定义初始化(自我,结果):
…超级(例如resultset,self)。\uu init(结果)
…self.getitem_历史记录=[]
…定义获取项(self,ix):
…self.getitem_history.append(ix)
…返回super(exampleResultSet,self)。\uGetitem(ix)
…
>;example=exampleResultSet(驯鹿)
>;>example=batchNavigator=batchNavigator(
…例如,build_request(),size=3)
>;>比需要的多一个项目。这是为了方便
确定给定批次是否是列表中的最后一个批次,
无需显式查找列表的长度
(可能是一个昂贵的操作)。
==
==添加回调函数
==
==
==有时,在确定批处理值后,使用批处理值调用函数是很有用的。如果
是需要对每个批执行的后续查询,
则会出现这种情况,并且对于整个结果集中的
每个值执行查询是不可取的或代价过高的。
回调函数必须定义两个参数。第一个是
batch navigator对象本身,第二个是当前批。
构造
batchnavigator并确定当前批时,只调用一次回调函数。
对于批量项目:
…打印项目
>>>驯鹿批次导航器=批次导航器(
…驯鹿,构建请求(),大小=3,回调=打印回调)
dasher
dancer
prancer
>;>;请求=构建请求({"开始":"3","批":"20"})
>;>;最后一个驯鹿批导航器=批导航器(
…驯鹿,请求=请求,回调=打印回调)
vixen
comet
cupid
donner
blitzen
rudolph
OWS添加额外的成员变量。当batchnavigator成为批处理的页面模板
中的上下文时,这将非常有用。
>;>;类reindeerview:
…def constructureIndeerFromatoms(self、context、batch):
…#一些明显缓慢的过程
…view.build_reindeer=列表(批)
…def batchedReinder(自):
…返回BatchNavigator(
…驯鹿,构建请求(),大小=3,
…回调=self.constructReindeerRomatoms)
>;>;view=ReindeerView()
>;>;批处理导航器=view.batchedReindeer()
>;>;打印视图。已生成的驯鹿
['dasher','dancer','prancer']
>;>;打印列表(批处理导航器.currentbatch()
['dasher'、'dancer'、'prancer']
========
最大批大小
==========
由于批大小在url中公开,因此用户可以调整批参数以检索更多结果。由于这可能会
潜在地耗尽服务器资源,因此对批
大小设置了上限。如果请求的批处理参数高于此值,则会引发一个
InvalidBatchSizeRor错误。
>>gt;类DemoBatchNavigator(BatchNavigator):
…最大批处理大小=5
…
>;>request=build\u request({"start":"0","batch":"20"})
>;>demobatchnavigator(驯鹿,request=request)
回溯(最近的最后一次调用):
…
invalidBatchSizeRor:"batch"参数的最大值为5。
==
url参数
==
==
通常,在当前页面的url中传递的任何参数都会在批处理导航器的链接中复制。"transient"参数是指仅与当前页请求相关且不应传递给后续页请求的参数。
……安静":"ssht",
…"嘈杂的':'你好',
…}
>;>request_with_parameters=build_request(request_parameters)
一个参数"quiet"是暂时的。还有一个名为"absent"的临时
参数,但它没有在我们正在进行的页面
请求中传递。飞行员(名单):
…返回BatchNavigator(
…列表,带有参数的请求,大小=3,
…瞬态导航参数=['quiet','absent'])
>;>navigator_with_parameters=build_navigator(驯鹿)
>;>safe_navigator_with_parameters=build_navigator(驯鹿)
_parameters.nextBatchUrl()
'http://www.example.com/foo?noisy=hello&memo=3&start=3'
>>gt;带参数的安全导航器。lastbatchurl()
'http://www.example.com/foo?noisy=hello&direction=backwards&start=6'
省略了瞬态参数,而一开始从未传入的参数也不会神奇地出现。
=======
BatchNavigator的heading属性包含要显示的对象的描述。
>;>;安全驯鹿批次导航器。heading
"结果"
=batch navigator(['only-one',request=request)
>;>navigator.heading
'result'
(accessing.heading导致在基础列表中调用len(),
这就是为什么我们必须使用安全的批导航器的原因。理论上,这个
是可以优化的,但没有实际意义,因为标题总是
前面加上基本列表的实际长度,
例如"10个结果"。因为len()无论如何都会被调用,并且其值是缓存的,所以第二个len()不会影响性能。)
批次导航将根据批次中的总项目返回相应的
标题。
>>;>;navigator=batchnavigator(安全驯鹿,请求=请求)
>;>;navigator.setheadings('bug','bugs')
>;>;navigator.heading
'bugs'
>;>;navigator=batchnavigator(['only-one'],request=request)
>>gt>gt;navigator.setheadings('bug,'bug,'bugs')
>>gt;navigator.heading
'bug'
(清理)
(清理)
>
>gt>gt;sm.unregisteradapter(httpcharset)unregister(httpcharset)
true
>true
>true
>true
>true
>true
>true
>true
===================是的s
==
toctree::
:glob:
*
docs/*
============================
NEWS for lazr.batchnavigator
============================
1.2.11 (2015-04-09)
===================
- Save a query if the slice is of the form [x:x].
1.2.10 (2011-09-14)
===================
- delegate the calc将结果集的大致长度计算为
irangefactory.
1.2.9(2011-08-25)
====
-当向后批处理开始太短,并且添加了结果集中的另一个块
时,已切片的批处理列表()不再为已检索的块使用备注值。
参数开始确定上一个/下一个批次是否存在;不依赖len(result set)并确定批次的实际大小。
-避免空结果集上的负开始索引。
1.2.7(2011-07-18)
====br/>
-仅通过t的
范围工厂。
1.2.6(2011-07-28)
======
-修复了在处理返回的元素少于预期的向后批处理时的错误。
-url编码batchnavigator.generatebatchrl()
1.2.5(2011-07-13)
==
==
==-允许用一个前缀更改所有变量名。
1.2.4(2011-04-11)
==
==
-允许重写determinesize以控制如何在子类中确定批默认值和具体的大小。
-列表IFY(切片后)而不是假设成批切片将遵守完整的列表协议。
1.2.3(2011-04-06)
==
==
-添加irangefactory和使用后端数据库提示高效检索页面的能力。
-删除terribl对GetBatchUrls方法进行扩展。
1.2.2(2010-08-19)1.2.2(2010-08-08-19)1.2.2(2010-08-08-19)1.2.2(2010-08-08-19)1.2.2
-使len()在当前批是最后一批(或仅
批)时调用变得便宜;br/>
-避免在生成导航器时调用len len len 1.2.1.2.1(2010/>-修复以前对批进行
1.2.0(2010-08-05)迭代时批的len()中的错误
==
-尽可能避免在底层序列上调用len()
-当批超出范围
1.1.1(2010-0)时不返回endnumber5-10)
=
>
-忽略负批量
>1.1(2009-08-08-31)
=
>1.1(2009-08-08-31)1.1(2009-08-08-08-31)1.1(2009-08-08-31)1.1(2009-08-08-31)1.1
=
=
=
=========br/>
=>1.1.1(2009-08-08-31)
===
-初始rpypi上的elease
BR/> LZR.Basnavigigor是免费软件:您可以重新分发它和/或BR/>根据GNU小通用公共许可证的条款修改它为BR/>由自由软件基金会发布的许可证第3版。
BR/>lazr.batchnavigator的发布是希望它会有用,但它没有任何保证;甚至没有对适销性或特定用途的适用性的隐含保证。有关详细信息,请参阅gnu less general public
许可证。
如果没有,请参见
<;http://www.gnu.org/licenses/>;
batch navigation
********
batch navigation通过提供指向结果的下一页、上一页和编号页的url链接,提供了在web
页中导航批结果的方法。
控制批处理的OST参数:
-备注:用于
批的位置的基础存储索引指针的记录。
-方向:指示备注是在批的开始还是结束。
-开始:示意-用于计算表观位置n(但请注意,
由于对批的重复访问的并发性质,
真实偏移量可能不同-但是集合不会跳过或显示两次
项。为了与保存的url兼容,如果memo和
方向都不存在,那么start用于将
列表切片到集合中。
-batch:控制每个批次显示的项目数。只有当它与创建批时设置的默认值不同时,才会出现
。
这些值可以在请求中重写,除非同时传递
force_start=true,这将使start参数(再次默认为0)
始终处于选中状态。
导入:从lazr.batchnavigator导入batchnavigator,listrangefactory从zope.publisher.browser导入testrequest从zope.publisher.http导入httpcharsets从zope.component导入getsitemmanager
>;>sm=getsitemanager()
>;>sm.registeradapter(httpcharsets)
>;>def build_request(query_string_args=none,method='get'):
…如果query_string_args为none:
…查询字符串=''
…其他:
…如果getattr(query_string_args,'items',none)不是none:
…query_string_args=查询_string_args.items()
…查询字符串="&;"。加入(
…[%s=%s%(k,v)表示查询字符串中的k,v参数]
…request=testrequest(服务器url='http://www.example.com/foo',
…方法=方法,
…environ={'query_string':query_string})
…request.processinputs()
…返回请求
虚拟请求对象:
>一些示例数据。
>;>;驯鹿=['dasher'、'dancer'、'prancer'、'vixen'、'comet'、
…'Cupid、Donner、Blitzen、Rudolph']
range\u factory
提供一个实现irangefactory的对象并管理此协议。
listrangefactory是一个简单的包含实现,如果没有range\u factory,batchnavigator将使用它。
…range_factory=listrangefactory(驯鹿))
简单地说:
>;>;安全驯鹿=驯鹿
>;>;安全驯鹿批次导航器=批次导航器(
…safe_reinder,build_request(),size=3)
lazr.batchnavigator的一个重要特性是它不愿意在底层数据集上调用len()。len()是一个昂贵的
操作,几乎没有什么好处,因此这个库试图避免调用len(),除非它是绝对必要的。为了显示这一点,我们将定义一个python列表类型的子类,当对其调用
len()时,该子类将爆炸。
>;>class listwithexplosivelen(list):
…""不喜欢调用其len()的列表子类。""
…定义长度(自身):
…引发运行时错误
除非另有说明,否则我们将在整个
测试期间仅使用此列表,以验证除非我们希望调用len(),否则不会调用它。
>>;>;explosive椆reinder=listwithexplosivelen(reinder)
>;>;reinder椆batch椆navigaTOR=批次导航器(
…爆炸驯鹿,build_request(),size=3)
batchnavigator实现ibatchnavigator。我们需要在这里使用
"安全"的批导航器,因为verify object探测它传递的对象的所有方法,包括从zope.interface.verify import verifyobject
>>>;,从lazr.batch navigator.interface s import ibatchnavigator
>;>verifyobject(ibatchnavigator,safe_reindeer_batch_navigator)
true
batchnavigator类提供ibatchnavigator工厂。这可用于将批次导航器工厂注册为实用程序,例如,从lazr.batch navigator.interfaces导入ibatchnavigatorfactory
>;>verifyobject(ibatchnavigatorfactory,batchnavigator)
true
igator对于当前显示的结果块
(例如,在zpt中迭代它们以进行呈现):
>;>;列表(驯鹿批导航器.currentbatch())
['dasher','dancer','prancer']
/>
>>>驯鹿批导航器.firstBatchURL()
'
>>>驯鹿批导航器.prevBatchURL()
'
>>>驯鹿批导航器.nextBatchURL()
'http://www.example.com/foo?memo=3&start=3'
E.COM/FOO?direction=backward&start=6'
>如果没有进一步的结果,则下一个链接将为空:
>;>;请求=生成请求({"开始":"3","批":"20"})
>;>;最后一个驯鹿批导航器=批导航器(驯鹿,请求=请求)
>;>;last_reindeer_batch_navigator.nextbatchurl()
"
即使我们从0
和批大小之间的某个点开始,第一个和上一个链接也应该出现:
>;>;request=build_request({"start":"2","batch":"3"})
>;>;last_reindeer_batch_navigator=batchnavigator(reindeer,request=request)
在这里,我们也可以看到batch参数作为url的一部分出现。
这是因为在创建批处理对象时请求的大小不同于默认值
,默认情况下为5。
>;last_驯鹿导航仪.firstbatchurl()
'http://www.example.com/foo?batch=3'
>;>last_reindeer_batch_navigator.prevBatchURL()
'http://www.example.com/foo?batch=3&direction=backwards&memo=2'
这都适用于其他值在查询字符串中:
>;>;请求=生成请求({'fnorb':'bar',
…'开始":"3",
…"批次':'3'})
>;>驯鹿,请求,大小=3)
>;>安全的驯鹿,请求,大小=3)
在这种情况下,我们创建了默认大小为"3"的batchnavigator,并且
请求正是询问每个批的项目数,因此,我们不需要将"批"显示为url的一部分。
>;驯鹿批导航或者使用"qs.firstBatchURL()
"http://www.example.com/foo?fnorb=bar'
>>>>驯鹿批导航器带qs.prevbatchurl()
'http://www.example.com/foo?fnorb=bar&;direction=backwards&;memo=3'
>;>>驯鹿批次导航器,带有qs.nextBatchUrl()
'http://www.example.com/foo?fnorb=bar&;memo=6&start=6'
(同样,如果不知道整个列表的大小,就无法获取最后一批。)
>;>;安全的驯鹿批导航器,使用http://www.example.com/foo?fnorb=bar&;direction=backwards&;start=6'
"force\u start"参数允许忽略
请求中的起始值。例如,当筛选器已更改,并且
所需的行为是在0重新启动时,这可能很有用。
>;
驯鹿,请求,大小=3,force_start=true)
>;>reindeer_batch_navigator_with_qs.currentbatch().start
0
>;>reindeer_batch_navigator_with_qs.nextbatchurl()
'http://www.example.com/foo?fnorb=bar&;memo=3&start=3'
>;>>驯鹿[:3]==列表(驯鹿批导航器带有qs.currentbatch())
true
我们确保对后期操作也遵守url中提供的批参数
:
>;请求=生成请求({'fnorb':‘酒吧’,
…开始":"3",
…"批处理':'3'},method='post')
>;>>驯鹿批处理导航器批处理,qs=batch navigator(
…驯鹿,请求)
fnorb=bar&batch=3&memo=6&start=6'
首选第一个。
>;>;请求=生成请求(
…[("batch","1"),("batch","7"),("start","2"),("start","10")])
>;>gt;navigator=batchnavigator(驯鹿,请求=请求)
>;>gt;navigator.nextbatchurl()
'http://www.example.com/foo?batch=1&memo=3&start=3'
batch参数必须为正。忽略其他数字,而是使用默认批大小。
>>>;from cgi import parse-qs
>;>;request=build-request({'batch':'0})
>;>;navigator=batchnavigator(range(99),request=request)
>;>;print'batch'in parse_qs(navigator.nextbatchurl())
false
>;>;request=build_request({'batch':'-1'})
>;>;navigator=batchnavigator(range(99),request=request)
>;>;在parse_qs(navigator.nextbatchurl())中打印"batch"
=======
空批次
===
无,生成请求(),大小=3)
>;。>;空的批次导航器。firstBatchUrl()
'
>>>空的批次导航器。nextBatchUrl()
'
>>>空的批次导航器。prevBatchUrl()
'
>>>空的批次导航器。lastBatchUrl()
>>>空的批次导航器。TOR=批次导航器(
…[],build_request(),size=3)
>;>null_batch_navigator.firstbatchurl()
'
>;>null_batch_navigator.nextbatchurl()
'
>;>null_batch_navigator.prevbatchurl()
>;>null_batch_navigator.lastbatchurl()
>待办事项:
-在开始时间超出结束时间时炸毁
-孤儿
-重叠
一个不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎的支持结果,不受欢迎,不受欢迎的支持结果,不受欢迎,不受欢迎的影响,br/>
一些result对象不实现len,因为通常python代码假定len是廉价的。例如,sqlobject和storm结果集都有这种
行为,因此获取长度是一个非常简单的操作。要支持这些对象,批处理将在结果集上查找"len"。如果
它不存在,它会将结果调整为
zope.interface.common.sequence.ifinitesequence,并使用该结果集(对象):
定义初始化(自我,结果):
…self.stub_results=结果
…定义计数(自身):
…#假设这实际上返回了
…返回len(self.stub_results)
…定义获取项(self,ix):
…返回self.stub_results[ix]也适用于切片
…定义(自我):
…从zope返回iter(self.stub_results)
…
>>>;。接口导入实现从zope执行
>;。组件导入适配器,从zope.interface.common.sequence导入ifinitesequence
>;>;类示例适配器(检查pleresultset):
…改编(例如resultset)
…实现(ifinitesequence)
…定义长度(自身):
…返回self.stub_results.count()
…
>;>;sm=getsitemanager()
>;>;sm.registeradapter(示例适配器)
>;>;example=exampleResultset(安全驯鹿)
>;>;example=batchNavigator=batchNavigator(
…例如,build_request(),size=3)
只获取结果的一部分,而不是访问整个结果。
>;>>类ExampleResultSet(ExampleResultSet):
…定义初始化(自我,结果):
…超级(例如resultset,self)。\uu init(结果)
…self.getitem_历史记录=[]
…定义获取项(self,ix):
…self.getitem_history.append(ix)
…返回super(exampleResultSet,self)。\uGetitem(ix)
…
>;example=exampleResultSet(驯鹿)
>;>example=batchNavigator=batchNavigator(
…例如,build_request(),size=3)
>;>比需要的多一个项目。这是为了方便
确定给定批次是否是列表中的最后一个批次,
无需显式查找列表的长度
(可能是一个昂贵的操作)。
==
==添加回调函数
==
==
==有时,在确定批处理值后,使用批处理值调用函数是很有用的。如果
是需要对每个批执行的后续查询,
则会出现这种情况,并且对于整个结果集中的
每个值执行查询是不可取的或代价过高的。
回调函数必须定义两个参数。第一个是
batch navigator对象本身,第二个是当前批。
构造
batchnavigator并确定当前批时,只调用一次回调函数。
对于批量项目:
…打印项目
>>>驯鹿批次导航器=批次导航器(
…驯鹿,构建请求(),大小=3,回调=打印回调)
dasher
dancer
prancer
>;>;请求=构建请求({"开始":"3","批":"20"})
>;>;最后一个驯鹿批导航器=批导航器(
…驯鹿,请求=请求,回调=打印回调)
vixen
comet
cupid
donner
blitzen
rudolph
OWS添加额外的成员变量。当batchnavigator成为批处理的页面模板
中的上下文时,这将非常有用。
>;>;类reindeerview:
…def constructureIndeerFromatoms(self、context、batch):
…#一些明显缓慢的过程
…view.build_reindeer=列表(批)
…def batchedReinder(自):
…返回BatchNavigator(
…驯鹿,构建请求(),大小=3,
…回调=self.constructReindeerRomatoms)
>;>;view=ReindeerView()
>;>;批处理导航器=view.batchedReindeer()
>;>;打印视图。已生成的驯鹿
['dasher','dancer','prancer']
>;>;打印列表(批处理导航器.currentbatch()
['dasher'、'dancer'、'prancer']
========
最大批大小
==========
由于批大小在url中公开,因此用户可以调整批参数以检索更多结果。由于这可能会
潜在地耗尽服务器资源,因此对批
大小设置了上限。如果请求的批处理参数高于此值,则会引发一个
InvalidBatchSizeRor错误。
>>gt;类DemoBatchNavigator(BatchNavigator):
…最大批处理大小=5
…
>;>request=build\u request({"start":"0","batch":"20"})
>;>demobatchnavigator(驯鹿,request=request)
回溯(最近的最后一次调用):
…
invalidBatchSizeRor:"batch"参数的最大值为5。
==
url参数
==
==
通常,在当前页面的url中传递的任何参数都会在批处理导航器的链接中复制。"transient"参数是指仅与当前页请求相关且不应传递给后续页请求的参数。
……安静":"ssht",
…"嘈杂的':'你好',
…}
>;>request_with_parameters=build_request(request_parameters)
一个参数"quiet"是暂时的。还有一个名为"absent"的临时
参数,但它没有在我们正在进行的页面
请求中传递。飞行员(名单):
…返回BatchNavigator(
…列表,带有参数的请求,大小=3,
…瞬态导航参数=['quiet','absent'])
>;>navigator_with_parameters=build_navigator(驯鹿)
>;>safe_navigator_with_parameters=build_navigator(驯鹿)
_parameters.nextBatchUrl()
'http://www.example.com/foo?noisy=hello&memo=3&start=3'
>>gt;带参数的安全导航器。lastbatchurl()
'http://www.example.com/foo?noisy=hello&direction=backwards&start=6'
省略了瞬态参数,而一开始从未传入的参数也不会神奇地出现。
=======
BatchNavigator的heading属性包含要显示的对象的描述。
>;>;安全驯鹿批次导航器。heading
"结果"
=batch navigator(['only-one',request=request)
>;>navigator.heading
'result'
(accessing.heading导致在基础列表中调用len(),
这就是为什么我们必须使用安全的批导航器的原因。理论上,这个
是可以优化的,但没有实际意义,因为标题总是
前面加上基本列表的实际长度,
例如"10个结果"。因为len()无论如何都会被调用,并且其值是缓存的,所以第二个len()不会影响性能。)
批次导航将根据批次中的总项目返回相应的
标题。
>>;>;navigator=batchnavigator(安全驯鹿,请求=请求)
>;>;navigator.setheadings('bug','bugs')
>;>;navigator.heading
'bugs'
>;>;navigator=batchnavigator(['only-one'],request=request)
>>gt>gt;navigator.setheadings('bug,'bug,'bugs')
>>gt;navigator.heading
'bug'
(清理)
(清理)
>
>gt>gt;sm.unregisteradapter(httpcharset)unregister(httpcharset)
true
>true
>true
>true
>true
>true
>true
>true
===================是的s
==
toctree::
:glob:
*
docs/*
============================
NEWS for lazr.batchnavigator
============================
1.2.11 (2015-04-09)
===================
- Save a query if the slice is of the form [x:x].
1.2.10 (2011-09-14)
===================
- delegate the calc将结果集的大致长度计算为
irangefactory.
1.2.9(2011-08-25)
====
-当向后批处理开始太短,并且添加了结果集中的另一个块
时,已切片的批处理列表()不再为已检索的块使用备注值。
参数开始确定上一个/下一个批次是否存在;不依赖len(result set)并确定批次的实际大小。
-避免空结果集上的负开始索引。
1.2.7(2011-07-18)
====br/>
-仅通过t的
范围工厂。
1.2.6(2011-07-28)
======
-修复了在处理返回的元素少于预期的向后批处理时的错误。
-url编码batchnavigator.generatebatchrl()
1.2.5(2011-07-13)
==
==
==-允许用一个前缀更改所有变量名。
1.2.4(2011-04-11)
==
==
-允许重写determinesize以控制如何在子类中确定批默认值和具体的大小。
-列表IFY(切片后)而不是假设成批切片将遵守完整的列表协议。
1.2.3(2011-04-06)
==
==
-添加irangefactory和使用后端数据库提示高效检索页面的能力。
-删除terribl对GetBatchUrls方法进行扩展。
1.2.2(2010-08-19)1.2.2(2010-08-08-19)1.2.2(2010-08-08-19)1.2.2(2010-08-08-19)1.2.2
-使len()在当前批是最后一批(或仅
批)时调用变得便宜;br/>
-避免在生成导航器时调用len len len 1.2.1.2.1(2010/>-修复以前对批进行
1.2.0(2010-08-05)迭代时批的len()中的错误
==
-尽可能避免在底层序列上调用len()
-当批超出范围
1.1.1(2010-0)时不返回endnumber5-10)
=
>
-忽略负批量
>1.1(2009-08-08-31)
=
>1.1(2009-08-08-31)1.1(2009-08-08-08-31)1.1(2009-08-08-31)1.1(2009-08-08-31)1.1
=
=
=
=========br/>
=>1.1.1(2009-08-08-31)
===
-初始rpypi上的elease