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)
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)
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)
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)
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
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
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
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)