Esempio n. 1
0
def resolve_model(request, mount):
    """Resolve path to a model using consumers.
    """
    lookup = request.lookup  # XXX can get this from argument too
    # consume steps toward model
    mounts = request.mounts
    model = mount
    mounts.append(model)
    while request.unconsumed:
        next_model = generic.consume(request, model, lookup=lookup)
        if next_model is None:
            return model
        model = next_model
        if isinstance(model, Mount):
            mounts.append(model)
        # get new lookup for whatever we found if it exists
        lookup = generic.lookup(model, lookup=lookup, default=lookup)
        request.lookup = lookup
    # if there is nothing (left), we consume toward a root model
    if not request.unconsumed:
        root_model = generic.consume(request, model, lookup=lookup)
        if root_model is not None:
            model = root_model
        # XXX handling mounting? lookups? write test cases
    request.lookup = lookup
    return model
Esempio n. 2
0
def resolve_model(obj, stack, lookup):
    """Resolve path to a model using consumers.
    """
    # if there is no stack, we consume toward a root model
    if not stack:
        for consumer in generic.consumer.all(obj, lookup=lookup):
            any_consumed, obj, unconsumed = consumer(obj, stack, lookup)
            if any_consumed:
                break
        return obj, stack, lookup
    # consume steps toward model
    unconsumed = stack[:]
    while unconsumed:
        for consumer in generic.consumer.all(obj, lookup=lookup):
            any_consumed, obj, unconsumed = consumer(obj, unconsumed, lookup)
            if any_consumed:
                # get new lookup for whatever we found if it exists
                lookup = generic.lookup(obj, lookup=lookup, default=lookup)
                break
        else:
            # nothing could be consumed
            break
    return obj, unconsumed, lookup