def unapi(req): """View callable implementing the server side of the unAPI spec.""" id_ = req.params.get('id') if id_: obj = req.ctx_for_url(id_) if not obj: return pyramid.httpexceptions.HTTPNotFound() format_ = req.params.get('format') if not format_: kw = {'content_type': 'application/xml'} if id_: formats = [a for n, a in get_adapters(IMetadata, obj, req)] kw['status'] = '300 Multiple Choices' else: formats = [] body = render('unapiformats.mako', { 'formats': formats, 'identifier': id_ }, request=req) return Response(body, **kw) if not id_: return pyramid.httpexceptions.HTTPNotFound() adapter = None for _n, _a in get_adapters(IMetadata, obj, req): if _a.unapi_name == format_: adapter = _a break if not adapter: return pyramid.httpexceptions.HTTPNotAcceptable() return pyramid.httpexceptions.HTTPFound( location=req.resource_url(obj, ext=adapter.extension))
def unapi(req): """implements the server side of the unAPI spec. """ id_ = req.params.get('id') if id_: obj = req.ctx_for_url(id_) if not obj: return HTTPNotFound() format_ = req.params.get('format') if not format_: kw = {'content_type': 'application/xml'} if id_: formats = [a for n, a in get_adapters(IMetadata, obj, req)] kw['status'] = '300 Multiple Choices' else: formats = [] body = render( 'unapiformats.mako', {'formats': formats, 'identifier': id_}, request=req) return Response(body, **kw) if not id_: return HTTPNotFound() adapter = None for _n, _a in get_adapters(IMetadata, obj, req): if _a.unapi_name == format_: adapter = _a break if not adapter: return HTTPNotAcceptable() return HTTPFound(location=req.resource_url(obj, ext=adapter.extension))
def ctx_factory(model, type_, req): """Factory function for request contexts. The context of a request is either a single model instance or an instance of DataTable incorporating all information to retrieve an appropriately filtered list of model instances. """ def replacement(id_): raise HTTPMovedPermanently( location=req.route_url(model.__name__.lower(), id=id_)) if type_ == 'index': datatable = req.registry.getUtility( interfaces.IDataTable, name=req.matched_route.name) return datatable(req, model) try: if model == common.Dataset: ctx = req.db.query(model).one() elif model == common.Combination: ctx = common.Combination.get(req.matchdict['id']) else: ctx = req.registry.getUtility(interfaces.ICtxFactoryQuery)(model, req) if ctx.replacement_id: return replacement(ctx.replacement_id) ctx.metadata = get_adapters(interfaces.IMetadata, ctx, req) return ctx except NoResultFound: if req.matchdict.get('id'): replacement_id = common.Config.get_replacement_id(model, req.matchdict['id']) if replacement_id: if replacement_id == common.Config.gone: raise HTTPGone() return replacement(replacement_id) raise HTTPNotFound()
def ctx_factory(model, type_, req): """The context of a request is either a single model instance or an instance of DataTable incorporating all information to retrieve an appropriately filtered list of model instances. """ def replacement(id_): raise HTTPMovedPermanently( location=req.route_url(model.mapper_name().lower(), id=id_)) if type_ == 'index': datatable = req.registry.getUtility(interfaces.IDataTable, name=req.matched_route.name) return datatable(req, model) try: if model == common.Dataset: ctx = req.db.query(model).one() elif model == common.Combination: ctx = common.Combination.get(req.matchdict['id']) else: ctx = req.registry.getUtility(interfaces.ICtxFactoryQuery)(model, req) if ctx.replacement_id: return replacement(ctx.replacement_id) ctx.metadata = get_adapters(interfaces.IMetadata, ctx, req) return ctx except NoResultFound: if req.matchdict.get('id'): replacement_id = common.Config.get_replacement_id( model, req.matchdict['id']) if replacement_id: if replacement_id == common.Config.gone: raise HTTPGone() return replacement(replacement_id) raise HTTPNotFound()
def ctx_factory(model, type_, req): """The context of a request is either a single model instance or an instance of DataTable incorporating all information to retrieve an appropriately filtered list of model instances. """ if type_ == 'index': datatable = req.registry.getUtility( interfaces.IDataTable, name=req.matched_route.name) return datatable(req, model) try: if model == common.Dataset: ctx = req.db.query(model).one() else: ctx = req.registry.getUtility(interfaces.ICtxFactoryQuery)(model, req) ctx.metadata = get_adapters(interfaces.IMetadata, ctx, req) return ctx except NoResultFound: raise HTTPNotFound()
def ctx_factory(model, type_, req): """The context of a request is either a single model instance or an instance of DataTable incorporating all information to retrieve an appropriately filtered list of model instances. """ if type_ == 'index': datatable = req.registry.getUtility(interfaces.IDataTable, name=req.matched_route.name) return datatable(req, model) try: if model == common.Dataset: ctx = req.db.query(model).one() else: ctx = req.registry.getUtility(interfaces.ICtxFactoryQuery)(model, req) ctx.metadata = get_adapters(interfaces.IMetadata, ctx, req) return ctx except NoResultFound: raise HTTPNotFound()