def for_macro(*tree): ret = None # for [x iter y iter] ... # -> # foreach x iter # foreach y iter # ... tree = HyExpression(tree).replace(tree[0]) it = iter(tree.pop(0)) blocks = list(zip(it, it)) # List for Python 3.x degenerating. key, val = blocks.pop(0) ret = HyExpression([HySymbol("foreach"), HyList([key, val])]) root = ret ret.replace(tree) for key, val in blocks: # x, [1, 2, 3, 4] nret = HyExpression([HySymbol("foreach"), HyList([key, val])]) nret.replace(key) ret.append(nret) ret = nret [ret.append(x) for x in tree] # we really need ~@ return root
def router(tree, rkwargs=None): tree = HyExpression(tree) name = tree.pop(0) path = tree.pop(0) tree.insert(0, HySymbol("fn")) tree = HyExpression([HySymbol("def"), name, tree]) route = HyExpression([HySymbol(".route"), HySymbol("app"), path]) if rkwargs: route = HyExpression([HySymbol("kwapply"), route, HyDict({HyString("methods"): rkwargs})]) return HyExpression([HySymbol("with_decorator"), route, tree])
def router(tree, rkwargs=None): tree = HyExpression(tree) name = tree.pop(0) path = tree.pop(0) tree.insert(0, HySymbol("fn")) tree = HyExpression([HySymbol("def"), name, tree]) route = HyExpression([HySymbol(".route"), HySymbol("app"), path]) if rkwargs: route = HyExpression([ HySymbol("kwapply"), route, HyDict({HyString("methods"): rkwargs}) ]) return HyExpression([HySymbol("with_decorator"), route, tree])