def test_register_model(): setup() app = App() root = Root() app.root_model = Root app.root_obj = root lookup = Lookup(ChainClassLookup(app, global_app)) def get_model(id): model = Model() model.id = id return model register_root(app, Root, lambda: root) register_model(app, Model, '{id}', lambda model: {'id': model.id}, get_model) found, obj, stack = traject_consumer(app, parse_path('a'), lookup) assert obj.id == 'a' model = Model() model.id = 'b' request = get_request() request.lookup = lookup assert generic.path(request, model, lookup=lookup) == 'b' assert generic.base(model, lookup=lookup) is app
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 test_register_root(): app = App() root = Root() lookup = app.lookup() c = setup() c.configurable(app) c.commit() register_root(app, Root, lambda: root) assert generic.path(root, lookup=lookup) == '' assert generic.base(root, lookup=lookup) is app
def test_register_root(): app = App() root = Root() app.root_model = Root app.root_obj = root lookup = Lookup(ChainClassLookup(app, global_app)) register_root(app, Root, lambda: root) request = get_request() request.lookup = lookup assert generic.path(request, root, lookup=lookup) == '' assert generic.base(root, lookup=lookup) is app
def link(request, model): result = [] lookup = request.lookup while True: path = generic.path(request, model, lookup=lookup) if path: result.append(path) model = generic.base(model, lookup=lookup, default=None) if model is None: break # XXX should switch lookup back to lookup of base model in order # to mimic what happens during path resolution 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 test_register_model(): app = App() root = Root() lookup = app.lookup() def get_model(id): model = Model() model.id = id return model c = setup() c.configurable(app) c.commit() register_root(app, Root, lambda: root) register_model(app, Model, '{id}', lambda model: {'id': model.id}, get_model) obj, request = consume(app, 'a') assert obj.id == 'a' model = Model() model.id = 'b' assert generic.path(model, lookup=lookup) == 'b' assert generic.base(model, lookup=lookup) is app