我们从Python开源项目中,提取了以下12个代码示例,用于说明如何使用utils.group()。
def _match(self, mapping, value): for pat, what in utils.group(mapping, 2): if isinstance(what, application): if value.startswith(pat): f = lambda: self._delegate_sub_application(pat, what) return f, None else: continue elif isinstance(what, basestring): what, result = utils.re_subm('^' + pat + '$', what, value) else: result = utils.re_compile('^' + pat + '$').match(value) if result: # it's a match return what, [x and urllib.unquote(x) for x in result.groups()] return None, None
def init_mapping(self, mapping): self.mapping = list(utils.group(mapping, 2))
def rer(self, r): x = re.match(r, self.t[self.p:]) #@@re_compile if not x: self.Error('r'+repr(r)) return self.tokr(x.group())
def _match(self, mapping, value): for pat, what in utils.group(mapping, 2): if isinstance(what, basestring): what, result = utils.re_subm('^' + pat + '$', what, value) else: result = utils.re_compile('^' + pat + '$').match(value) if result: # it's a match return what, [x and urllib.unquote(x) for x in result.groups()] return None, None
def test(): import sys verbose = '-v' in sys.argv def assertEqual(a, b): if a == b: if verbose: sys.stderr.write('.') sys.stderr.flush() else: assert a == b, "\nexpected: %s\ngot: %s" % (repr(b), repr(a)) from utils import storage, group t = Template tests = [ lambda: t('1')(), '1\n', lambda: t('$def with ()\n1')(), '1\n', lambda: t('$def with (a)\n$a')(1), '1\n', lambda: t('$def with (a=0)\n$a')(1), '1\n', lambda: t('$def with (a=0)\n$a')(a=1), '1\n', lambda: t('$if 1: 1')(), '1\n', lambda: t('$if 1:\n 1')(), '1\n', lambda: t('$if 0: 0\n$elif 1: 1')(), '1\n', lambda: t('$if 0: 0\n$elif None: 0\n$else: 1')(), '1\n', lambda: t('$if (0 < 1) and (1 < 2): 1')(), '1\n', lambda: t('$for x in [1, 2, 3]: $x')(), '1\n2\n3\n', lambda: t('$for x in []: 0\n$else: 1')(), '1\n', lambda: t('$def with (a)\n$while a and a.pop(): 1')([1, 2, 3]), '1\n1\n1\n', lambda: t('$while 0: 0\n$else: 1')(), '1\n', lambda: t('$ a = 1\n$a')(), '1\n', lambda: t('$# 0')(), '', lambda: t('$def with (d)\n$for k, v in d.iteritems(): $k')({1: 1}), '1\n', lambda: t('$def with (a)\n$(a)')(1), '1\n', lambda: t('$def with (a)\n$a')(1), '1\n', lambda: t('$def with (a)\n$a.b')(storage(b=1)), '1\n', lambda: t('$def with (a)\n$a[0]')([1]), '1\n', lambda: t('${0 or 1}')(), '1\n', lambda: t('$ a = [1]\n$a[0]')(), '1\n', lambda: t('$ a = {1: 1}\n$a.keys()[0]')(), '1\n', lambda: t('$ a = []\n$if not a: 1')(), '1\n', lambda: t('$ a = {}\n$if not a: 1')(), '1\n', lambda: t('$ a = -1\n$a')(), '-1\n', lambda: t('$ a = "1"\n$a')(), '1\n', lambda: t('$if 1 is 1: 1')(), '1\n', lambda: t('$if not 0: 1')(), '1\n', lambda: t('$if 1:\n $if 1: 1')(), '1\n', lambda: t('$ a = 1\n$a')(), '1\n', lambda: t('$ a = 1.\n$a')(), '1.0\n', lambda: t('$({1: 1}.keys()[0])')(), '1\n', lambda: t('$for x in [1, 2, 3]:\n\t$x') (), ' 1\n 2\n 3\n', lambda: t('$def with (a)\n$:a')(1), '1\n', ] for func, value in group(tests, 2): assertEqual(func(), value) j = Template("$var foo: bar")() assertEqual(str(j), '') assertEqual(j.foo, 'bar\n') if verbose: sys.stderr.write('\n')
def handle(mapping, fvars=None): """ Call the appropriate function based on the url to function mapping in `mapping`. If no module for the function is specified, look up the function in `fvars`. If `fvars` is empty, using the caller's context. `mapping` should be a tuple of paired regular expressions with function name substitutions. `handle` will import modules as necessary. """ for url, ofno in utils.group(mapping, 2): if isinstance(ofno, tuple): ofn, fna = ofno[0], list(ofno[1:]) else: ofn, fna = ofno, [] fn, result = utils.re_subm('^' + url + '$', ofn, web.ctx.path) if result: # it's a match if fn.split(' ', 1)[0] == "redirect": url = fn.split(' ', 1)[1] if web.ctx.method == "GET": x = web.ctx.env.get('QUERY_STRING', '') if x: url += '?' + x return http.redirect(url) elif '.' in fn: x = fn.split('.') mod, cls = '.'.join(x[:-1]), x[-1] mod = __import__(mod, globals(), locals(), [""]) cls = getattr(mod, cls) else: cls = fn mod = fvars if isinstance(mod, types.ModuleType): mod = vars(mod) try: cls = mod[cls] except KeyError: return web.notfound() meth = web.ctx.method if meth == "HEAD": if not hasattr(cls, meth): meth = "GET" if not hasattr(cls, meth): return nomethod(cls) tocall = getattr(cls(), meth) args = list(result.groups()) for d in re.findall(r'\\(\d+)', ofn): args.pop(int(d) - 1) return tocall(*([x and urllib.unquote(x) for x in args] + fna)) return web.notfound()