(func)
Return a generator for routes that match the signature (name, args)
    of the func parameter. This may yield more than one route if the function
    takes optional keyword arguments. The output is best described by example::

        a()         -> '/a'
        b(x, y)     -> '/b/:x/:y'
        c(x, y=5)   -> '/c/:x' and '/c/:x/:y'
        d(x=5, y=6) -> '/d' and '/d/:x' and '/d/:x/:y'
Return a generator for routes that match the signature (name, args)
    of the func parameter. This may yield more than one route if the function
    takes optional keyword arguments. The output is best described by example::
Return a generator for routes that match the signature ( name args ) of the func parameter . This may yield more than one route if the function takes optional keyword arguments . The output is best described by example ::
def yieldroutes(func):
    """ Return a generator for routes that match the signature (name, args)
    of the func parameter. This may yield more than one route if the function
    takes optional keyword arguments. The output is best described by example::

        a()         -> '/a'
        b(x, y)     -> '/b/:x/:y'
        c(x, y=5)   -> '/c/:x' and '/c/:x/:y'
        d(x=5, y=6) -> '/d' and '/d/:x' and '/d/:x/:y'
    """
    import inspect # Expensive module. Only import if necessary.
    path = '/' + func.__name__.replace('__','/').lstrip('/')
    spec = inspect.getargspec(func)
    argc = len(spec[0]) - len(spec[3] or [])
    path += ('/:%s' * argc) % tuple(spec[0][:argc])
    yield path
    for arg in spec[0][argc:]:
        path += '/:%s' % arg
        yield path
def yieldroutes ( func ) : import inspect # Expensive module. Only import if necessary. path = '/' + func . __name__ . replace ( '__' , '/' ) . lstrip ( '/' ) spec = inspect . getargspec ( func ) argc = len ( spec [ 0 ] ) - len ( spec [ 3 ] or [ ] ) path += ( '/:%s' * argc ) % tuple ( spec [ 0 ] [ : argc ] ) yield path for arg in spec [ 0 ] [ argc : ] : path += '/:%s' % arg yield path