本文整理汇总了Python中BTrees.IIBTree.IITreeSet.add方法的典型用法代码示例。如果您正苦于以下问题:Python IITreeSet.add方法的具体用法?Python IITreeSet.add怎么用?Python IITreeSet.add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BTrees.IIBTree.IITreeSet
的用法示例。
在下文中一共展示了IITreeSet.add方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _finalize_index
# 需要导入模块: from BTrees.IIBTree import IITreeSet [as 别名]
# 或者: from BTrees.IIBTree.IITreeSet import add [as 别名]
def _finalize_index(self, result, start, end, used_fields):
filtered_result = IITreeSet()
# used_recurrence = False
for documentId in result:
recurrence = self._uid2recurrence.get(documentId)
if recurrence is None:
# This event isn't recurring, so it's a match:
filtered_result.add(documentId)
continue
# used_recurrence = True
match = False
# This is a possible place where optimizations can be done if
# necessary. For example, for periods where the start and end
# date is the same, we can first check if the start time and
# and time of the date falls inbetween the start and end times
# of the period, so to avoid expansion. But most likely this
# will have a very small impact on speed, so I skip this until
# it actually becomes a problem.
if start is not None:
event_start = datetime(*self._uid2start[documentId][:6])
else:
event_start = None
if end is not None:
event_duration = self._uid2duration[documentId]
event_end = event_start + event_duration
else:
event_end = None
for occurrence in recurrence._iter():
utc_occurrence = datetime(*occurrence.utctimetuple()[:6])
if event_start is not None and utc_occurrence < event_start:
# XXX we should add a counter and break after 10000 occurrences.
continue
if event_end is not None and utc_occurrence > event_end:
break
# The start of this occurrence starts between the start and end date of
# the query:
match = True
break
if match:
filtered_result.add(documentId)
# if used_recurrence:
used_fields += (self.recurrence_attr,)
return filtered_result, used_fields
示例2: BooleanIndex
# 需要导入模块: from BTrees.IIBTree import IITreeSet [as 别名]
# 或者: from BTrees.IIBTree.IITreeSet import add [as 别名]
class BooleanIndex(UnIndex):
"""Index for booleans
self._index = set([documentId1, documentId2])
self._unindex = {documentId:[True/False]}
self._length is the length of the unindex
self._index_length is the length of the index
False doesn't have actual entries in _index.
"""
meta_type = "BooleanIndex"
manage_options = (
{'label': 'Settings',
'action': 'manage_main'},
{'label': 'Browse',
'action': 'manage_browse'},
)
query_options = ["query"]
manage = manage_main = DTMLFile('dtml/manageBooleanIndex', globals())
manage_main._setName('manage_main')
manage_browse = DTMLFile('../dtml/browseIndex', globals())
_index_value = 1
_index_length = None
def clear(self):
self._index = IITreeSet()
self._index_length = BTrees.Length.Length()
self._index_value = 1
self._unindex = IIBTree()
self._length = BTrees.Length.Length()
if self._counter is None:
self._counter = BTrees.Length.Length()
else:
self._increment_counter()
def histogram(self):
"""Return a mapping which provides a histogram of the number of
elements found at each point in the index.
"""
histogram = {}
indexed = bool(self._index_value)
histogram[indexed] = self._index_length.value
histogram[not indexed] = self._length.value - self._index_length.value
return histogram
def _invert_index(self, documentId=None):
self._index_value = indexed = int(not self._index_value)
self._index.clear()
length = 0
for rid, value in self._unindex.iteritems():
if value == indexed:
self._index.add(rid)
length += 1
# documentId is the rid of the currently processed object that
# triggered the invert. in the case of unindexing, the rid hasn't
# been removed from the unindex yet. While indexing, the rid will
# be added to the index and unindex after this method is done
if documentId is not None:
self._index.remove(documentId)
length -= 1
self._index_length = BTrees.Length.Length(length)
def insertForwardIndexEntry(self, entry, documentId):
"""If the value matches the indexed one, insert into treeset
"""
# When we get the first entry, decide to index the opposite of what
# we got, as indexing zero items is fewer than one.
if self._length.value == 0:
self._index_value = int(not bool(entry))
# if the added entry value is index value, insert it into index
if bool(entry) is bool(self._index_value):
self._index_length.change(1)
self._index.insert(documentId)
# insert value into global unindex (before computing index invert)
self._unindex[documentId] = entry
self._length.change(1)
# is the index (after adding the current entry) larger than 60%
# of the total length? than switch the indexed value
if bool(entry) is bool(self._index_value):
if (self._index_length.value) >= ((self._length.value) * 0.6):
self._invert_index()
def removeForwardIndexEntry(self, entry, documentId, check=True):
"""Take the entry provided and remove any reference to documentId
in its entry in the index.
"""
if bool(entry) is bool(self._index_value):
try:
self._index.remove(documentId)
self._index_length.change(-1)
except ConflictError:
#.........这里部分代码省略.........