CapCollection is stateless: remove get_working_collection() and change_working_collection() methods

This commit is contained in:
Romain Bignon 2011-04-21 10:34:42 +02:00
commit e8084ef99f
5 changed files with 27 additions and 81 deletions

View file

@ -65,11 +65,7 @@ class CanalplusBackend(BaseBackend, ICapVideo, ICapCollection):
return video
OBJECTS = {CanalplusVideo: fill_video}
def change_working_collection(self, splited_path):
with self.browser:
return self.browser.change_working_collection(splited_path)
def iter_resources(self, splited_path):
with self.browser:
return self.browser.iter_resources(splited_path)

View file

@ -76,37 +76,18 @@ class CanalplusBrowser(BaseBrowser):
def get_video(self, url, video=None):
self.location(url)
return self.page.get_video(video, self.quality)
def change_working_collection(self, splited_path):
self.home()
collections = self.page.collections
def walk(path, collections, final=[]):
if len(path) == 0: return final
i = path.pop(0)
if i in [collection.title for collection in collections if isinstance(collection, Collection)]:
final.append(i)
else:
#~ print "Error path %s unknow, %s , %s " % (i,final,[collection.title for collection in collections if isinstance(collection, Collection)] )
raise CollectionNotFound()
return walk(path, [collection.children for collection in collections if isinstance(collection, Collection) and collection.title == i][0], final)
return walk(splited_path, collections)
def iter_resources(self, splited_path):
self.home()
collections = self.page.collections
def walk_res(path, collections):
if not isinstance(collections, (list, Collection)):
if len(path) == 0 or not isinstance(collections, (list, Collection)):
return collections
if len(path) == 0:
return [collection.title for collection in collections ]
i = path[0]
if i not in [collection.title for collection in collections]:
raise CollectionNotFound()
return walk_res(path[1:], [collection.children for collection in collections if collection.title == i][0])
return walk_res(splited_path, collections)

View file

@ -32,27 +32,24 @@ class DownparadiseBackend(BaseBackend, ICapCollection, ICapMessages, ICapMessage
VERSION = '0.8'
LICENSE = 'AGPLv3+'
DESCRIPTION = "Downparadise message board"
CONFIG = ValuesDict(Value('username', label='Username', regexp='.+'),
Value('password', label='Password', regexp='.+', masked=True))
BROWSER = Downparadise
def create_default_browser(self):
return self.create_browser(self.config['username'], self.config['password'])
#############################
## Collection
def change_working_collection(self, splited_path):
return self.browser.change_working_forum(splited_path)
def iter_resources(self, splited_path):
return self.browser.iter_forums(splited_path)
#############################
## Messages
def iter_threads(self):
"""
Iterates on threads, from newers to olders.
@ -85,10 +82,10 @@ class DownparadiseBackend(BaseBackend, ICapCollection, ICapMessages, ICapMessage
@param [message] message read (or ID)
"""
raise NotImplementedError()
#############################
## Message Post
def post_message(self, message):
"""
Post a message.

View file

@ -31,10 +31,10 @@ class Downparadise(BaseBrowser):
'http://forum.downparadise.ws/ucp.php.*' : UcpPage,
'http://forum.downparadise.ws/viewforum.php.*' : ViewforumPage,
}
def home(self):
return self.location('http://forum.downparadise.ws/index.php')
def login(self):
data = {'login': 'Connexion',
'password': self.password,
@ -42,44 +42,23 @@ class Downparadise(BaseBrowser):
self.location('http://forum.downparadise.ws/ucp.php?mode=login', urllib.urlencode(data) , no_login=True)
if not self.is_logged():
raise BrowserIncorrectPassword()
def is_logged(self):
return (self.page and self.page.is_logged())
def change_working_forum(self, splited_path):
def iter_forums(self, splited_path):
if not self.is_on_page(IndexPage):
self.home()
collections = self.page.get_collections()
def walk(path, collections, final=[]):
if len(path) == 0: return final
i = path.pop(0)
if i in [collection.title for collection in collections if isinstance(collection, Collection)]:
final.append(i)
else:
raise CollectionNotFound()
return walk(path, [collection.children for collection in collections if isinstance(collection, Collection) and collection.title == i][0], final)
return walk(splited_path, collections)
def iter_forums(self, splited_path):
if not self.is_on_page(IndexPage):
self.home()
collections = self.page.get_collections()
def walk_res(path, collections):
if not isinstance(collections, (list, Collection)):
if len(path) == 0 or not isinstance(collections, (list, Collection)):
return collections
if len(path) == 0:
return [collection.title for collection in collections ]
i = path[0]
if i not in [collection.title for collection in collections]:
raise CollectionNotFound()
return walk_res(path[1:], [collection.children for collection in collections if collection.title == i][0])
return walk_res(splited_path, collections)

View file

@ -34,10 +34,10 @@ class Children(object):
return obj._childrenfct(obj.id)
else:
return obj._children
def __set__(self, obj, value):
obj._childrenfct = value
class Collection(object):
"""
_childrenfct
@ -46,26 +46,19 @@ class Collection(object):
children return iterator
"""
children = Children()
def __init__(self, title=None, children=None):
self.title = title
self._children = children if children else []
self._childrenfct = None
def appendchild(self, child):
self._children.append(child)
class Ressource(object):
pass
class ICapCollection(IBaseCap):
def get_working_collection(self):
raise NotImplementedError()
def change_working_collection(self, splited_path):
raise NotImplementedError()
def iter_resources(self, splited_path):
raise NotImplementedError()