default behavior is to unlimit results, except for explicit commands (searches or history)

closes #1139
This commit is contained in:
Romain Bignon 2013-07-27 15:31:49 +02:00
commit 9094294683
17 changed files with 65 additions and 21 deletions

View file

@ -23,7 +23,7 @@ import sys
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.capabilities.bank import ICapBank, Account, Transaction from weboob.capabilities.bank import ICapBank, Account, Transaction
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
@ -226,6 +226,7 @@ class Boobank(ReplApplication):
if len(args) == 2: if len(args) == 2:
return self._complete_account() return self._complete_account()
@defaultcount(10)
def do_history(self, id): def do_history(self, id):
""" """
history ID history ID
@ -246,6 +247,7 @@ class Boobank(ReplApplication):
if len(args) == 2: if len(args) == 2:
return self._complete_account() return self._complete_account()
@defaultcount(10)
def do_coming(self, id): def do_coming(self, id):
""" """
coming ID coming ID

View file

@ -22,7 +22,7 @@ import sys
from decimal import Decimal from decimal import Decimal
from weboob.capabilities.bill import ICapBill, Detail, Subscription from weboob.capabilities.bill import ICapBill, Detail, Subscription
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import PrettyFormatter from weboob.tools.application.formatters.iformatter import PrettyFormatter
@ -129,6 +129,7 @@ class Boobill(ReplApplication):
self.exec_method(id, 'get_balance') self.exec_method(id, 'get_balance')
@defaultcount(10)
def do_history(self, id): def do_history(self, id):
""" """
history [Id] history [Id]
@ -138,6 +139,7 @@ class Boobill(ReplApplication):
""" """
self.exec_method(id, 'iter_bills_history') self.exec_method(id, 'iter_bills_history')
@defaultcount(10)
def do_bills(self, id): def do_bills(self, id):
""" """
bills [Id] bills [Id]

View file

@ -23,7 +23,7 @@ import sys
from weboob.capabilities.lyrics import ICapLyrics from weboob.capabilities.lyrics import ICapLyrics
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
@ -97,6 +97,7 @@ class Booblyrics(ReplApplication):
if len(args) == 2: if len(args) == 2:
return self.SEARCH_CRITERIAS return self.SEARCH_CRITERIAS
@defaultcount(10)
def do_search(self, line): def do_search(self, line):
""" """
search [artist | song] [PATTERN] search [artist | song] [PATTERN]

View file

@ -30,7 +30,7 @@ from weboob.core import CallErrors
from weboob.capabilities.messages import ICapMessages, Message, Thread from weboob.capabilities.messages import ICapMessages, Message, Thread
from weboob.capabilities.account import ICapAccount from weboob.capabilities.account import ICapAccount
from weboob.capabilities.contact import ICapContact, Contact from weboob.capabilities.contact import ICapContact, Contact
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter from weboob.tools.application.formatters.iformatter import IFormatter
from weboob.tools.misc import html2text from weboob.tools.misc import html2text
@ -382,6 +382,7 @@ class Boobmsg(ReplApplication):
threads = [] threads = []
messages = [] messages = []
@defaultcount(10)
def do_list(self, arg): def do_list(self, arg):
""" """
list list

View file

@ -22,7 +22,7 @@ from datetime import timedelta
import sys import sys
from weboob.capabilities.bugtracker import ICapBugTracker, Query, Update, Project, Issue from weboob.capabilities.bugtracker import ICapBugTracker, Query, Update, Project, Issue
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
from weboob.tools.misc import html2text from weboob.tools.misc import html2text
@ -96,6 +96,7 @@ class BoobTracker(ReplApplication):
group.add_option('--category') group.add_option('--category')
group.add_option('--status') group.add_option('--status')
@defaultcount(10)
def do_search(self, line): def do_search(self, line):
""" """
search PROJECT search PROJECT

View file

@ -28,7 +28,7 @@ from weboob.capabilities.torrent import ICapTorrent, MagnetOnly
from weboob.capabilities.cinema import ICapCinema from weboob.capabilities.cinema import ICapCinema
from weboob.capabilities.subtitle import ICapSubtitle from weboob.capabilities.subtitle import ICapSubtitle
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
from weboob.core import CallErrors from weboob.core import CallErrors
@ -325,6 +325,7 @@ class Cineoob(ReplApplication):
self.format(person) self.format(person)
self.flush() self.flush()
@defaultcount(10)
def do_search_movie(self, pattern): def do_search_movie(self, pattern):
""" """
search_movie [PATTERN] search_movie [PATTERN]
@ -340,6 +341,7 @@ class Cineoob(ReplApplication):
self.cached_format(movie) self.cached_format(movie)
self.flush() self.flush()
@defaultcount(10)
def do_search_person(self, pattern): def do_search_person(self, pattern):
""" """
search_person [PATTERN] search_person [PATTERN]
@ -507,6 +509,7 @@ class Cineoob(ReplApplication):
print >>sys.stderr, 'Torrent "%s" not found' % id print >>sys.stderr, 'Torrent "%s" not found' % id
return 3 return 3
@defaultcount(10)
def do_search_torrent(self, pattern): def do_search_torrent(self, pattern):
""" """
search_torrent [PATTERN] search_torrent [PATTERN]
@ -522,6 +525,7 @@ class Cineoob(ReplApplication):
self.cached_format(torrent) self.cached_format(torrent)
self.flush() self.flush()
@defaultcount(10)
def do_search_movie_torrent(self, id): def do_search_movie_torrent(self, id):
""" """
search_movie_torrent movie_ID search_movie_torrent movie_ID
@ -609,6 +613,7 @@ class Cineoob(ReplApplication):
print >>sys.stderr, 'Subtitle "%s" not found' % id print >>sys.stderr, 'Subtitle "%s" not found' % id
return 3 return 3
@defaultcount(10)
def do_search_subtitle(self, line): def do_search_subtitle(self, line):
""" """
search_subtitle language [PATTERN] search_subtitle language [PATTERN]
@ -645,6 +650,7 @@ class Cineoob(ReplApplication):
self.cached_format(subtitle) self.cached_format(subtitle)
self.flush() self.flush()
@defaultcount(10)
def do_search_movie_subtitle(self, line): def do_search_movie_subtitle(self, line):
""" """
search_movie_subtitle language movie_ID search_movie_subtitle language movie_ID

View file

@ -24,7 +24,7 @@ import codecs
from weboob.capabilities.recipe import ICapRecipe from weboob.capabilities.recipe import ICapRecipe
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
@ -148,6 +148,7 @@ class Cookboob(ReplApplication):
print >>sys.stderr, 'Recipe "%s" not found' % id print >>sys.stderr, 'Recipe "%s" not found' % id
return 3 return 3
@defaultcount(10)
def do_search(self, pattern): def do_search(self, pattern):
""" """
search [PATTERN] search [PATTERN]

View file

@ -21,7 +21,7 @@
import sys import sys
from weboob.capabilities.housing import ICapHousing, Query from weboob.capabilities.housing import ICapHousing, Query
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
@ -91,6 +91,7 @@ class Flatboob(ReplApplication):
self.load_config() self.load_config()
return ReplApplication.main(self, argv) return ReplApplication.main(self, argv)
@defaultcount(10)
def do_search(self, line): def do_search(self, line):
pattern = 'notempty' pattern = 'notempty'
query = Query() query = Query()

View file

@ -23,7 +23,7 @@ import sys
import os import os
from re import search, sub from re import search, sub
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.capabilities.gallery import ICapGallery, BaseGallery, BaseImage from weboob.capabilities.gallery import ICapGallery, BaseGallery, BaseImage
from weboob.tools.application.formatters.iformatter import PrettyFormatter from weboob.tools.application.formatters.iformatter import PrettyFormatter
@ -60,6 +60,7 @@ class Galleroob(ReplApplication):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
ReplApplication.__init__(self, *args, **kwargs) ReplApplication.__init__(self, *args, **kwargs)
@defaultcount(10)
def do_search(self, pattern): def do_search(self, pattern):
""" """
search PATTERN search PATTERN

View file

@ -20,7 +20,7 @@
import sys import sys
from weboob.capabilities.job import ICapJob from weboob.capabilities.job import ICapJob
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
__all__ = ['Handjoob'] __all__ = ['Handjoob']
@ -87,6 +87,7 @@ class Handjoob(ReplApplication):
'info': 'job_advert', 'info': 'job_advert',
} }
@defaultcount(10)
def do_search(self, pattern): def do_search(self, pattern):
""" """
search PATTERN search PATTERN

View file

@ -22,7 +22,7 @@ import sys
from weboob.capabilities.radio import ICapRadio, Radio from weboob.capabilities.radio import ICapRadio, Radio
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.media_player import InvalidMediaPlayer, MediaPlayer, MediaPlayerNotFound from weboob.tools.application.media_player import InvalidMediaPlayer, MediaPlayer, MediaPlayerNotFound
from weboob.tools.application.formatters.iformatter import PrettyFormatter from weboob.tools.application.formatters.iformatter import PrettyFormatter
@ -119,6 +119,7 @@ class Radioob(ReplApplication):
self.format(radio) self.format(radio)
self.flush() self.flush()
@defaultcount(10)
def do_search(self, pattern=None): def do_search(self, pattern=None):
""" """
search PATTERN search PATTERN
@ -140,8 +141,5 @@ class Radioob(ReplApplication):
List radios List radios
""" """
count = self.options.count
self.options.count = None
ret = super(Radioob, self).do_ls(line) ret = super(Radioob, self).do_ls(line)
self.options.count = count
return ret return ret

View file

@ -23,7 +23,7 @@ import sys
from weboob.capabilities.subtitle import ICapSubtitle from weboob.capabilities.subtitle import ICapSubtitle
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
@ -164,6 +164,7 @@ class Suboob(ReplApplication):
print 'Saved to %s' % dest print 'Saved to %s' % dest
return return
@defaultcount(10)
def do_search(self, line): def do_search(self, line):
""" """
search language [PATTERN] search language [PATTERN]

View file

@ -23,7 +23,7 @@ from datetime import datetime
import logging import logging
from weboob.capabilities.travel import ICapTravel, RoadmapFilters from weboob.capabilities.travel import ICapTravel, RoadmapFilters
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
__all__ = ['Traveloob'] __all__ = ['Traveloob']
@ -42,6 +42,7 @@ class Traveloob(ReplApplication):
group.add_option('--departure-time') group.add_option('--departure-time')
group.add_option('--arrival-time') group.add_option('--arrival-time')
@defaultcount(10)
def do_stations(self, pattern): def do_stations(self, pattern):
""" """
stations PATTERN stations PATTERN
@ -52,6 +53,7 @@ class Traveloob(ReplApplication):
self.format(station) self.format(station)
self.flush() self.flush()
@defaultcount(10)
def do_departures(self, line): def do_departures(self, line):
""" """
departures STATION [ARRIVAL] departures STATION [ARRIVAL]

View file

@ -25,7 +25,7 @@ import os
from weboob.capabilities.video import ICapVideo, BaseVideo from weboob.capabilities.video import ICapVideo, BaseVideo
from weboob.capabilities.base import empty from weboob.capabilities.base import empty
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.media_player import InvalidMediaPlayer, MediaPlayer, MediaPlayerNotFound from weboob.tools.application.media_player import InvalidMediaPlayer, MediaPlayer, MediaPlayerNotFound
from weboob.tools.application.formatters.iformatter import PrettyFormatter from weboob.tools.application.formatters.iformatter import PrettyFormatter
@ -204,6 +204,7 @@ class Videoob(ReplApplication):
else: else:
print "on" if self.nsfw else "off" print "on" if self.nsfw else "off"
@defaultcount()
def do_search(self, pattern): def do_search(self, pattern):
""" """
search PATTERN search PATTERN

View file

@ -22,7 +22,7 @@
import sys import sys
from weboob.capabilities.torrent import ICapTorrent, MagnetOnly from weboob.capabilities.torrent import ICapTorrent, MagnetOnly
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
from weboob.core import CallErrors from weboob.core import CallErrors
from weboob.capabilities.base import NotAvailable from weboob.capabilities.base import NotAvailable
@ -154,6 +154,7 @@ class Weboorrents(ReplApplication):
print >>sys.stderr, 'Torrent "%s" not found' % id print >>sys.stderr, 'Torrent "%s" not found' % id
return 3 return 3
@defaultcount(10)
def do_search(self, pattern): def do_search(self, pattern):
""" """
search [PATTERN] search [PATTERN]

View file

@ -20,7 +20,7 @@
from weboob.capabilities.weather import ICapWeather from weboob.capabilities.weather import ICapWeather
from weboob.capabilities.gauge import ICapGauge, SensorNotFound from weboob.capabilities.gauge import ICapGauge, SensorNotFound
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter from weboob.tools.application.formatters.iformatter import IFormatter, PrettyFormatter
import sys import sys
@ -80,6 +80,7 @@ class WetBoobs(ReplApplication):
self.load_config() self.load_config()
return ReplApplication.main(self, argv) return ReplApplication.main(self, argv)
@defaultcount(10)
def do_cities(self, pattern): def do_cities(self, pattern):
""" """
cities PATTERN cities PATTERN

View file

@ -69,6 +69,24 @@ class ReplOptionFormatter(IndentedHelpFormatter):
s += ' %s\n' % c s += ' %s\n' % c
return s return s
def defaultcount(default_count=10):
def deco(f):
def inner(self, *args, **kwargs):
oldvalue = self.options.count
if self._is_default_count:
self.options.count = default_count
try:
return f(self, *args, **kwargs)
finally:
self.options.count = oldvalue
inner.__doc__ = f.__doc__
assert inner.__doc__ is not None, "A command must have a docstring"
inner.__doc__ += '\nDefault is limited to %s results.' % default_count
return inner
return deco
class ReplApplication(Cmd, ConsoleApplication): class ReplApplication(Cmd, ConsoleApplication):
""" """
@ -116,8 +134,8 @@ class ReplApplication(Cmd, ConsoleApplication):
results_options = OptionGroup(self._parser, 'Results Options') results_options = OptionGroup(self._parser, 'Results Options')
results_options.add_option('-c', '--condition', help='filter result items to display given a boolean expression') results_options.add_option('-c', '--condition', help='filter result items to display given a boolean expression')
results_options.add_option('-n', '--count', default='10', type='int', results_options.add_option('-n', '--count', type='int',
help='get a maximum number of results (all backends merged)') help='limit number of results (from each backends)')
results_options.add_option('-s', '--select', help='select result item keys to display (comma separated)') results_options.add_option('-s', '--select', help='select result item keys to display (comma separated)')
self._parser.add_option_group(results_options) self._parser.add_option_group(results_options)
@ -131,6 +149,7 @@ class ReplApplication(Cmd, ConsoleApplication):
self._parser.add_option_group(formatting_options) self._parser.add_option_group(formatting_options)
self._interactive = False self._interactive = False
self._is_default_count = True
self.working_path = WorkingPath() self.working_path = WorkingPath()
self._change_prompt() self._change_prompt()
@ -458,6 +477,8 @@ class ReplApplication(Cmd, ConsoleApplication):
else: else:
self.condition = None self.condition = None
if self.options.count is not None:
self._is_default_count = False
if self.options.count <= 0: if self.options.count <= 0:
# infinite search # infinite search
self.options.count = None self.options.count = None
@ -759,6 +780,7 @@ class ReplApplication(Cmd, ConsoleApplication):
if line: if line:
if line == 'off': if line == 'off':
self.options.count = None self.options.count = None
self._is_default_count = False
else: else:
try: try:
count = int(line) count = int(line)
@ -768,6 +790,7 @@ class ReplApplication(Cmd, ConsoleApplication):
else: else:
if count > 0: if count > 0:
self.options.count = count self.options.count = count
self._is_default_count = False
else: else:
print >>sys.stderr, 'Number must be at least 1.' print >>sys.stderr, 'Number must be at least 1.'
return 2 return 2