Esempio n. 1
0
def traject_path(request, model):
    base = generic.base(model, lookup=request.lookup, default=None)
    if base is None:
        raise LinkError("cannot determine model base for %r" % model)
    traject = generic.traject(base, lookup=request.lookup, default=None)
    if traject is None:
        raise LinkError("cannot determine traject path info for base %r" %
                        base)
    return traject.get_path(model)
Esempio n. 2
0
def traject_path(request, model):
    base = generic.base(model, lookup=request.lookup, default=None)
    if base is None:
        raise LinkError(
            "cannot determine model base for %r" % model)
    traject = generic.traject(base, lookup=request.lookup, default=None)
    if traject is None:
        raise LinkError(
            "cannot determine traject path info for base %r" % base)
    return traject.get_path(model)
Esempio n. 3
0
def app_path(model, lookup):
    result = []
    while True:
        base = generic.base(model, lookup=lookup, default=None)
        if base is None:
            break
        traject = generic.traject(base, lookup=lookup)
        result.append(traject.path(model))
        model = base
    result.reverse()
    return '/'.join(result)
Esempio n. 4
0
def app_path(model, lookup):
    result = []
    while True:
        base = generic.base(model, lookup=lookup, default=None)
        # We cannot construct link at all, so this is an error.
        if base is None:
            raise LinkError()
        traject = generic.traject(base, lookup=lookup)
        result.append(traject.path(model))
        # If the base is an App, we cannot continue constructing link further.
        if isinstance(base, AppBase):
            break
        model = base
    result.reverse()
    return '/'.join(result)
Esempio n. 5
0
def traject_consume(request, model, lookup):
    traject = generic.traject(model, lookup=lookup, default=None)
    if traject is None:
        return None
    get_model, stack, traject_variables = traject(request.unconsumed)
    if get_model is None:
        return None
    variables = generic.context(model, default={}, lookup=lookup)
    variables['base'] = model
    variables['request'] = request
    variables.update(traject_variables)
    next_model = mapply(get_model, **variables)
    if next_model is None:
        return None
    request.unconsumed = stack
    return next_model
Esempio n. 6
0
def traject_consume(request, model, lookup):
    traject = generic.traject(model, lookup=lookup, default=None)
    if traject is None:
        return None
    value, stack, traject_variables = traject.consume(request.unconsumed)
    if value is None:
        return None
    get_model, get_parameters = value
    variables = get_parameters(request.args)
    variables.update(generic.context(model, default={}, lookup=lookup))
    variables['parent'] = model
    variables['request'] = request
    variables.update(traject_variables)
    next_model = mapply(get_model, **variables)
    if next_model is None:
        return None
    request.unconsumed = stack
    return next_model
Esempio n. 7
0
def traject_consumer(base, stack, lookup):
    traject = generic.traject(base, lookup=lookup, default=None)
    if traject is None:
        return False, base, stack
    variables = {}
    pattern = ()
    consumed = []
    while stack:
        step = stack.pop()
        next_pattern, matched = traject.match(pattern, step)
        variables.update(matched)
        if next_pattern is None:
            # put the last step back onto the stack
            stack.append(step)
            break
        consumed.append(step)
        pattern = next_pattern
    model = traject.get_model(base, pattern, variables)
    if model is None:
        # put everything we tried to consume back on stack
        stack.extend(reversed(consumed))
        return False, base, stack
    return True, model, stack
Esempio n. 8
0
def traject_consumer(base, stack, lookup):
    traject = generic.traject(base, lookup=lookup, default=None)
    if traject is None:
        return False, base, stack
    variables = {}
    pattern = ()
    consumed = []
    while stack:
        step = stack.pop()
        next_pattern, matched = traject.match(pattern, step)
        variables.update(matched)
        if next_pattern is None:
            # put the last step back onto the stack
            stack.append(step)
            break
        consumed.append(step)
        pattern = next_pattern
    model = traject.get_model(base, pattern, variables)
    if model is None:
        # put everything we tried to consume back on stack
        stack.extend(reversed(consumed))
        return False, base, stack
    return True, model, stack
Esempio n. 9
0
def app_path(model, lookup):
    app = generic.app(model, lookup=lookup, default=None)
    if app is None:
        raise LinkError()
    traject = generic.traject(app, lookup=lookup)
    return traject.path(model)