diff --git a/weboob/backends/youjizz/backend.py b/weboob/backends/youjizz/backend.py index 8aa4797c..7cec9764 100644 --- a/weboob/backends/youjizz/backend.py +++ b/weboob/backends/youjizz/backend.py @@ -37,19 +37,23 @@ class YoujizzBackend(BaseBackend, ICapVideo): BROWSER = YoujizzBrowser def get_video(self, _id): - video = self.browser.get_video(_id) + with self.browser: + video = self.browser.get_video(_id) return video def iter_page_urls(self, mozaic_url): - return self.browser.iter_page_urls(mozaic_url) + with self.browser: + return self.browser.iter_page_urls(mozaic_url) def iter_search_results(self, pattern=None, sortby=ICapVideo.SEARCH_RELEVANCE, nsfw=False): if not nsfw: return - return self.browser.iter_search_results(pattern) + with self.browser: + return self.browser.iter_search_results(pattern) def fill_video(self, video, fields): # ignore the fields param: VideoPage.get_video() returns all the information - return self.browser.get_video(YoujizzVideo.id2url(video.id), video) + with self.browser: + return self.browser.get_video(YoujizzVideo.id2url(video.id), video) OBJECTS = {YoujizzVideo: fill_video} diff --git a/weboob/backends/youporn/backend.py b/weboob/backends/youporn/backend.py index 70a94f43..db4019ab 100644 --- a/weboob/backends/youporn/backend.py +++ b/weboob/backends/youporn/backend.py @@ -37,19 +37,22 @@ class YoupornBackend(BaseBackend, ICapVideo): BROWSER = YoupornBrowser def get_video(self, _id): - return self.browser.get_video(_id) + with self.browser: + return self.browser.get_video(_id) SORTBY = ['relevance', 'rating', 'views', 'time'] def iter_search_results(self, pattern=None, sortby=ICapVideo.SEARCH_RELEVANCE, nsfw=False): if not nsfw: return - return self.browser.iter_search_results(pattern, self.SORTBY[sortby]) + with self.browser: + return self.browser.iter_search_results(pattern, self.SORTBY[sortby]) def iter_page_urls(self, mozaic_url): raise NotImplementedError() def fill_video(self, video, fields): # ignore the fields param: VideoPage.get_video() returns all the information - return self.browser.get_video(YoupornVideo.id2url(video.id), video) + with self.browser: + return self.browser.get_video(YoupornVideo.id2url(video.id), video) OBJECTS = {YoupornVideo: fill_video} diff --git a/weboob/backends/youtube/backend.py b/weboob/backends/youtube/backend.py index ce681648..02626fa8 100644 --- a/weboob/backends/youtube/backend.py +++ b/weboob/backends/youtube/backend.py @@ -39,7 +39,8 @@ class YoutubeBackend(BaseBackend, ICapVideo): BROWSER = YoutubeBrowser def get_video(self, _id): - return self.browser.get_video(_id) + with self.browser: + return self.browser.get_video(_id) def iter_search_results(self, pattern=None, sortby=ICapVideo.SEARCH_RELEVANCE, nsfw=False): import gdata.youtube.service @@ -68,6 +69,7 @@ class YoutubeBackend(BaseBackend, ICapVideo): def fill_video(self, video, fields): # ignore the fields param: VideoPage.get_video() returns all the information - return self.browser.get_video(YoutubeVideo.id2url(video.id), video) + with self.browser: + return self.browser.get_video(YoutubeVideo.id2url(video.id), video) OBJECTS = {YoutubeVideo: fill_video} diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index 7efbf627..04b4c664 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -275,14 +275,29 @@ class ConsoleApplication(BaseApplication): """ Call Weboob.do(), after having filled the yielded object, if selected fields are given by user. """ - for i, (backend, result) in enumerate(self.weboob.do(function, *args, **kwargs)): - if self.options.count and i == self.options.count: - break + + def inner(backend, count, selected_fields, function, *args, **kwargs): + res = getattr(backend, function)(*args, **kwargs) if self.selected_fields: fields = set(self.selected_fields) - set('*') + else: + fields = None + if hasattr(res, '__iter__'): + for i, sub in enumerate(res): + if self.options.count and i == self.options.count: + break + if fields: + try: + backend.fillobj(sub, fields) + except NoSupportedObject, e: + logging.warning(u'Could not retrieve required fields (%s): %s' % (','.join(fields), e)) + yield sub + else: if fields: try: - backend.fillobj(result, fields) - except NotSupportedObject, e: + backend.fillobj(sub, fields) + except NoSupportedObject, e: logging.warning(u'Could not retrieve required fields (%s): %s' % (','.join(fields), e)) - yield backend, result + return res + + return self.weboob.do(inner, function, *args, **kwargs)