def register_view(registry, model, view, render=None, permission=None, predicates=None): if permission is not None: # instantiate permission class so it can be looked up using reg permission = permission() registration = View(view, render, permission) if predicates is not None: matcher = registry.exact(generic.view, (Request, model)) if matcher is None: predicate_info = registry.exact('predicate_info', ()) predicate_info.sort() matcher = PredicateMatcher( [predicate for (order, predicate) in predicate_info]) matcher.register(predicates, registration) registration = matcher registry.register(generic.view, (Request, model), registration)
def get_predicate_registration(registry, model, predicates, registration): predicate_info = registry.exact('predicate_info', ()) predicates = get_predicates_with_defaults(predicates, predicate_info) matcher = registry.exact(generic.view, (Request, model)) if matcher is None: predicate_infos = predicate_info.values() predicate_infos.sort() matcher = PredicateMatcher( [predicate for (order, predicate) in predicate_infos]) matcher.register(predicates, registration) for order, predicate in predicate_info.values(): fallback = getattr(predicate, 'fallback', None) if fallback is None: continue if predicates[predicate.name] is ANY: continue p = predicates.copy() p[predicate.name] = ANY matcher.register(p, View(fallback, None, None)) return matcher