211
212
from_element = classmethod(from_element)
213
def __eq__(self, other):
214
def __cmp__(self, other):
214
217
if not isinstance(other, InventoryEntry):
215
218
return NotImplemented
217
return (self.file_id == other.file_id) \
218
and (self.name == other.name) \
219
and (self.text_sha1 == other.text_sha1) \
220
and (self.text_size == other.text_size) \
221
and (self.text_id == other.text_id) \
222
and (self.parent_id == other.parent_id) \
223
and (self.kind == other.kind)
226
def __ne__(self, other):
227
return not (self == other)
230
raise ValueError('not hashable')
220
return cmp(self.file_id, other.file_id) \
221
or cmp(self.name, other.name) \
222
or cmp(self.text_sha1, other.text_sha1) \
223
or cmp(self.text_size, other.text_size) \
224
or cmp(self.text_id, other.text_id) \
225
or cmp(self.parent_id, other.parent_id) \
226
or cmp(self.kind, other.kind)
239
235
self.parent_id = None
242
def __eq__(self, other):
238
def __cmp__(self, other):
243
241
if not isinstance(other, RootEntry):
244
242
return NotImplemented
246
return (self.file_id == other.file_id) \
247
and (self.children == other.children)
243
return cmp(self.file_id, other.file_id) \
244
or cmp(self.children, other.children)
329
326
if ie.kind == 'directory':
330
327
for cn, cie in self.iter_entries(from_dir=ie.file_id):
331
328
yield os.path.join(name, cn), cie
335
"""Return list of (path, ie) for all entries except the root.
337
This may be faster than iter_entries.
332
def directories(self):
333
"""Return (path, entry) pairs for all directories.
340
def descend(dir_ie, dir_path):
341
kids = dir_ie.children.items()
343
for name, ie in kids:
344
child_path = os.path.join(dir_path, name)
345
accum.append((child_path, ie))
335
def descend(parent_ie):
336
parent_name = parent_ie.name
337
yield parent_name, parent_ie
339
# directory children in sorted order
341
for ie in parent_ie.children.itervalues():
346
342
if ie.kind == 'directory':
347
descend(ie, child_path)
349
descend(self.root, '')
353
def directories(self):
354
"""Return (path, entry) pairs for all directories, including the root.
357
def descend(parent_ie, parent_path):
358
accum.append((parent_path, parent_ie))
343
dn.append((ie.name, ie))
360
kids = [(ie.name, ie) for ie in parent_ie.children.itervalues() if ie.kind == 'directory']
346
for name, child_ie in dn:
347
for sub_name, sub_ie in descend(child_ie):
348
yield appendpath(parent_name, sub_name), sub_ie
363
for name, child_ie in kids:
364
child_path = os.path.join(parent_path, name)
365
descend(child_ie, child_path)
366
descend(self.root, '')
350
for name, ie in descend(self.root):
515
506
if not isinstance(other, Inventory):
516
507
return NotImplemented
518
if len(self._byid) != len(other._byid):
519
# shortcut: obviously not the same
522
return self._byid == other._byid
525
def __ne__(self, other):
526
return not (self == other)
530
raise ValueError('not hashable')
509
if self.id_set() ^ other.id_set():
512
for file_id in self._byid:
513
c = cmp(self[file_id], other[file_id])
534
519
def get_idpath(self, file_id):