Add some useful properties to Collection
This commit is contained in:
parent
1430b40bc5
commit
f4dbefb6ef
4 changed files with 47 additions and 13 deletions
|
|
@ -82,11 +82,11 @@ class CanalplusBrowser(BaseBrowser):
|
||||||
|
|
||||||
if len(split_path) == 0:
|
if len(split_path) == 0:
|
||||||
for channel in channels:
|
for channel in channels:
|
||||||
if len(channel.split_path) == 1:
|
if channel.level == 1:
|
||||||
yield channel
|
yield channel
|
||||||
elif len(split_path) == 1:
|
elif len(split_path) == 1:
|
||||||
for channel in channels:
|
for channel in channels:
|
||||||
if len(channel.split_path) == 2 and split_path[0] == channel.split_path[0]:
|
if channel.level == 2 and split_path == channel.parent:
|
||||||
yield channel
|
yield channel
|
||||||
elif len(split_path) == 2:
|
elif len(split_path) == 2:
|
||||||
subchannels = self.iter_resources(split_path[0:1])
|
subchannels = self.iter_resources(split_path[0:1])
|
||||||
|
|
|
||||||
|
|
@ -106,15 +106,15 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection):
|
||||||
return self.iter_issues(query)
|
return self.iter_issues(query)
|
||||||
|
|
||||||
def validate_collection(self, objs, collection):
|
def validate_collection(self, objs, collection):
|
||||||
if len(collection.split_path) == 0:
|
if collection.level == 0:
|
||||||
return
|
return
|
||||||
if Issue in objs and len(collection.split_path) == 1:
|
if Issue in objs and collection.level == 1:
|
||||||
for project in self.iter_projects():
|
for project in self.iter_projects():
|
||||||
if collection.split_path[0] == project.id:
|
if collection.basename == project.id:
|
||||||
return Collection([project.id], project.name)
|
return Collection([project.id], project.name)
|
||||||
# if the project is not found by ID, try again by name
|
# if the project is not found by ID, try again by name
|
||||||
for project in self.iter_projects():
|
for project in self.iter_projects():
|
||||||
if collection.split_path[0] == project.name:
|
if collection.basename == project.name:
|
||||||
return Collection([project.id], project.name)
|
return Collection([project.id], project.name)
|
||||||
raise CollectionNotFound(collection.split_path)
|
raise CollectionNotFound(collection.split_path)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ class Collection(CapBaseObject):
|
||||||
def __init__(self, split_path, title=None, backend=None):
|
def __init__(self, split_path, title=None, backend=None):
|
||||||
self.split_path = split_path
|
self.split_path = split_path
|
||||||
self.title = title
|
self.title = title
|
||||||
_id = split_path[-1] if len(split_path) else None
|
_id = self.basename
|
||||||
CapBaseObject.__init__(self, _id, backend)
|
CapBaseObject.__init__(self, _id, backend)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|
@ -52,6 +52,18 @@ class Collection(CapBaseObject):
|
||||||
else:
|
else:
|
||||||
return u'Unknown collection'
|
return u'Unknown collection'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def basename(self):
|
||||||
|
return self.split_path[-1] if self.level else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parent(self):
|
||||||
|
return self.split_path[0:-1] if self.level else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def level(self):
|
||||||
|
return len(self.split_path)
|
||||||
|
|
||||||
|
|
||||||
class ICapCollection(IBaseCap):
|
class ICapCollection(IBaseCap):
|
||||||
def iter_resources_flat(self, objs, split_path, clean_only=False):
|
def iter_resources_flat(self, objs, split_path, clean_only=False):
|
||||||
|
|
@ -93,7 +105,7 @@ class ICapCollection(IBaseCap):
|
||||||
You can replace the collection object entirely by returning a new one.
|
You can replace the collection object entirely by returning a new one.
|
||||||
"""
|
"""
|
||||||
# Root
|
# Root
|
||||||
if len(collection.split_path) == 0:
|
if collection.level == 0:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
i = self.iter_resources(objs, collection.split_path)
|
i = self.iter_resources(objs, collection.split_path)
|
||||||
|
|
@ -104,3 +116,25 @@ class ICapCollection(IBaseCap):
|
||||||
def _restrict_level(self, split_path, lmax=0):
|
def _restrict_level(self, split_path, lmax=0):
|
||||||
if len(split_path) > lmax:
|
if len(split_path) > lmax:
|
||||||
raise CollectionNotFound(split_path)
|
raise CollectionNotFound(split_path)
|
||||||
|
|
||||||
|
|
||||||
|
def test():
|
||||||
|
c = Collection([])
|
||||||
|
assert c.basename is None
|
||||||
|
assert c.parent is None
|
||||||
|
assert c.level == 0
|
||||||
|
|
||||||
|
c = Collection([u'lol'])
|
||||||
|
assert c.basename == u'lol'
|
||||||
|
assert c.parent == []
|
||||||
|
assert c.level == 1
|
||||||
|
|
||||||
|
c = Collection([u'lol', u'cat'])
|
||||||
|
assert c.basename == u'cat'
|
||||||
|
assert c.parent == [u'lol']
|
||||||
|
assert c.level == 2
|
||||||
|
|
||||||
|
c = Collection([u'w', u'e', u'e', u'b', u'o', u'o', u'b'])
|
||||||
|
assert c.basename == u'b'
|
||||||
|
assert c.parent == [u'w', u'e', u'e', u'b', u'o', u'o']
|
||||||
|
assert c.level == 7
|
||||||
|
|
|
||||||
|
|
@ -867,12 +867,12 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
print
|
print
|
||||||
print 'Collections:'
|
print 'Collections:'
|
||||||
for collection in self.collections:
|
for collection in self.collections:
|
||||||
if collection.id and collection.title:
|
if collection.basename and collection.title:
|
||||||
print u'%s* (%s) %s (%s)%s' % \
|
print u'%s* (%s) %s (%s)%s' % \
|
||||||
(self.BOLD, collection.id, collection.title, collection.backend, self.NC)
|
(self.BOLD, collection.basename, collection.title, collection.backend, self.NC)
|
||||||
elif collection.id:
|
elif collection.basename:
|
||||||
print u'%s* (%s) (%s)%s' % \
|
print u'%s* (%s) (%s)%s' % \
|
||||||
(self.BOLD, collection.id, collection.backend, self.NC)
|
(self.BOLD, collection.basename, collection.backend, self.NC)
|
||||||
else:
|
else:
|
||||||
print collection
|
print collection
|
||||||
|
|
||||||
|
|
@ -956,7 +956,7 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
self.bcall_error_handler(backend, error, backtrace)
|
self.bcall_error_handler(backend, error, backtrace)
|
||||||
|
|
||||||
for collection in self.collections:
|
for collection in self.collections:
|
||||||
directories.add(collection.id.encode(sys.stdout.encoding or locale.getpreferredencoding()))
|
directories.add(collection.basename.encode(sys.stdout.encoding or locale.getpreferredencoding()))
|
||||||
|
|
||||||
return [s[offs:] for s in directories if s.startswith(mline)]
|
return [s[offs:] for s in directories if s.startswith(mline)]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue