Handle properly state.allowExtra in context.

This commit is contained in:
Jeremy Fincher 2004-10-19 11:56:34 +00:00
parent 8436a7e590
commit eb5531034c

View File

@ -181,12 +181,12 @@ def getNonInt(irc, msg, args, state, type='non-integer value'):
except ValueError: except ValueError:
state.args.append(args.pop(0)) state.args.append(args.pop(0))
def getFloat(irc, msg, args, state): def getFloat(irc, msg, args, state, type='floating point number'):
try: try:
state.args.append(float(args[0])) state.args.append(float(args[0]))
del args[0] del args[0]
except ValueError: except ValueError:
irc.errorInvalid('floating point number', args[0]) irc.errorInvalid(type, args[0])
def getPositiveInt(irc, msg, args, state, *L): def getPositiveInt(irc, msg, args, state, *L):
getInt(irc, msg, args, state, getInt(irc, msg, args, state,
@ -196,6 +196,11 @@ def getNonNegativeInt(irc, msg, args, state, *L):
getInt(irc, msg, args, state, getInt(irc, msg, args, state,
p=lambda i: i>=0, type='non-negative integer', *L) p=lambda i: i>=0, type='non-negative integer', *L)
def getIndex(irc, msg, args, state):
getInt(irc, msg, args, state, type='index')
if state.args[-1] > 0:
state.args[-1] -= 1
def getId(irc, msg, args, state, kind=None): def getId(irc, msg, args, state, kind=None):
type = 'id' type = 'id'
if kind is not None: if kind is not None:
@ -464,10 +469,18 @@ def getPlugin(irc, msg, args, state, require=True):
else: else:
state.args.append(None) state.args.append(None)
def getIrcColor(irc, msg, args, state):
if args[0] in ircutils.mircColors:
state.args.append(ircutils.mircColors[args.pop(0)])
else:
irc.errorInvalid('irc color')
wrappers = ircutils.IrcDict({ wrappers = ircutils.IrcDict({
'id': getId, 'id': getId,
'ip': getIp, 'ip': getIp,
'int': getInt, 'int': getInt,
'index': getIndex,
'color': getIrcColor,
'now': getNow, 'now': getNow,
'url': getUrl, 'url': getUrl,
'float': getFloat, 'float': getFloat,
@ -557,7 +570,7 @@ class context(object):
self.converter = getConverter(spec) self.converter = getConverter(spec)
def __call__(self, irc, msg, args, state): def __call__(self, irc, msg, args, state):
if not state.types and args: if args and not (state.types or state.allowExtra):
# We're the last context/type, we should combine the remaining # We're the last context/type, we should combine the remaining
# arguments into one string. # arguments into one string.
args[:] = [' '.join(args)] args[:] = [' '.join(args)]
@ -720,6 +733,10 @@ class Spec(object):
_decorators = decorators _decorators = decorators
def wrap(f, specList=[], decorators=None, **kw): def wrap(f, specList=[], decorators=None, **kw):
spec = Spec(specList, **kw) spec = Spec(specList, **kw)
# XXX This is a hack, but it's just a workaround until I know the right way
# to fix this problem.
if decorators is not None and 'urlSnarfer' in decorators:
kw['allowExtra'] = True
def newf(self, irc, msg, args, **kwargs): def newf(self, irc, msg, args, **kwargs):
state = spec(irc, msg, args, stateAttrs={'cb': self, 'log': self.log}) state = spec(irc, msg, args, stateAttrs={'cb': self, 'log': self.log})
f(self, irc, msg, args, *state.args, **state.kwargs) f(self, irc, msg, args, *state.args, **state.kwargs)