def register_path(app, model, path, variables, converters, required, model_factory, arguments=None): traject = app.traject if traject is None: traject = Traject() app.traject = traject converters = converters or {} if arguments is None: arguments = get_arguments(model_factory, SPECIAL_ARGUMENTS) converters = get_converters(arguments, converters, app.converter_for_type, app.converter_for_value) exclude = Path(path).variables() exclude.update(app.mount_variables()) parameters = get_url_parameters(arguments, exclude) if required is None: required = set() required = set(required) parameter_factory = ParameterFactory(parameters, converters, required) if variables is None: variables = get_variables_func(arguments, app.mount_variables()) traject.add_pattern(path, (model_factory, parameter_factory), converters) traject.inverse(model, path, variables, converters, list(parameters.keys())) def get_app(model): return app app.register(generic.app, [model], get_app)
def test_path_for_model_with_converter(): traject = Traject() class IdModel(object): def __init__(self, id): self.id = id traject.inverse(IdModel, "foo/{id}", lambda model: {"id": model.id}, dict(id=Converter(int)), []) assert traject.path(IdModel(1)) == ("foo/1", {})
def test_path_for_model(): traject = Traject() class IdModel(object): def __init__(self, id): self.id = id traject.inverse(IdModel, "foo/{id}", lambda model: {"id": model.id}, {}, []) assert traject.path(IdModel("a")) == ("foo/a", {})
def test_path_for_model_with_converter(): traject = Traject() class IdModel(object): def __init__(self, id): self.id = id traject.inverse(IdModel, 'foo/{id:int}', lambda model: {'id': model.id}) assert traject.path(IdModel(1)) == 'foo/1'
def test_path_for_model(): traject = Traject() class IdModel(object): def __init__(self, id): self.id = id traject.inverse(IdModel, 'foo/{id}', lambda model: {'id': model.id}, {}, []) assert traject.path(IdModel('a')) == ('foo/a', {})
def register_model(app, model, path, variables, model_factory, base=None, get_base=None): if base is not None: traject = app.exact(generic.traject, [base]) if traject is None: traject = Traject() app.register(generic.traject, [base], lambda base: traject) else: traject = app.traject if traject is None: traject = Traject() app.traject = traject traject.add_pattern(path, model_factory) traject.inverse(model, path, variables) if get_base is None: def get_base(model): return app app.register(generic.base, [model], get_base)