def add_renderer(self, name, factory): # Pyramid has default renderers (e.g., for JSON) that conflict with # the everest renderers, hence we override add_renderer to only add # the non-conflicting if not (name in get_registered_representer_names() and factory is not RendererFactory): PyramidConfigurator.add_renderer(self, name, factory)
def __setup_everest(self, filter_specification_factory, order_specification_factory, service, cql_filter_specification_visitor, sql_filter_specification_visitor, eval_filter_specification_visitor, cql_order_specification_visitor, sql_order_specification_visitor, eval_order_specification_visitor, url_converter): if self.query_registered_utilities(IRepositoryManager) is None: # These are core initializations which should only be done once. # Set up the repository manager. repo_mgr = RepositoryManager() self._register_utility(repo_mgr, IRepositoryManager) self.add_subscriber(repo_mgr.on_app_created, IApplicationCreated) # Set up the root MEMORY repository and set it as the default # for all resources that do not specify a repository. self.__add_repository(REPOSITORY_DOMAINS.ROOT, REPOSITORY_TYPES.MEMORY, None, None, True, None) # Create representer registry and register builtin representer classes. rpr_reg = RepresenterRegistry() rpr_reg.register_representer_class(CsvResourceRepresenter) rpr_reg.register_representer_class(JsonResourceRepresenter) rpr_reg.register_representer_class(XmlResourceRepresenter) rpr_reg.register_representer_class(AtomResourceRepresenter) self._register_utility(rpr_reg, IRepresenterRegistry) # Register renderer factories for registered representers. for reg_rnd_name in get_registered_representer_names(): rnd = self.query_registered_utilities(IRendererFactory, reg_rnd_name) if not isinstance(rnd, RendererFactory): self.add_renderer(reg_rnd_name, RendererFactory) if not filter_specification_factory is None: self._set_filter_specification_factory( filter_specification_factory) if not order_specification_factory is None: self._set_order_specification_factory(order_specification_factory) if not service is None: self._set_service(service) if not cql_filter_specification_visitor is None: self._set_cql_filter_specification_visitor( cql_filter_specification_visitor) if not sql_filter_specification_visitor is None: self._set_sql_filter_specification_visitor( sql_filter_specification_visitor) if not eval_filter_specification_visitor is None: self._set_eval_filter_specification_visitor( eval_filter_specification_visitor) if not cql_order_specification_visitor is None: self._set_cql_order_specification_visitor( cql_order_specification_visitor) if not sql_order_specification_visitor is None: self._set_sql_order_specification_visitor( sql_order_specification_visitor) if not eval_order_specification_visitor is None: self._set_eval_order_specification_visitor( eval_order_specification_visitor) if not url_converter is None: self._set_url_converter(url_converter)
def test_registry(self): self.assert_raises(ValueError, register_mime_type, MimeNotImplementingIMime) self.assert_raises(ValueError, register_mime_type, MimeWithDuplicateTypeString) self.assert_raises(ValueError, register_mime_type, MimeWithDuplicateNameString) self.assert_raises(ValueError, register_mime_type, MimeWithDuplicateFileExtensionString) self.assert_true(XmlMime.mime_type_string in get_registered_mime_strings()) self.assert_true(XmlMime.representer_name in get_registered_representer_names()) self.assert_true(XmlMime in get_registered_mime_types()) self.assert_true( get_registered_mime_type_for_string(XmlMime.mime_type_string) is XmlMime) self.assert_true( get_registered_mime_type_for_name(XmlMime.representer_name) is XmlMime) self.assert_equal( get_registered_mime_type_for_extension(XmlMime.file_extension), XmlMime)
def __add_resource_view(self, rc, view, name, renderer, request_methods, default_content_type, default_response_content_type, enable_messaging, options): for request_method in request_methods: opts = options.copy() vw = view if vw is None \ or (isinstance(view, type) and issubclass(view, RepresentingResourceView)): register_sub_views = name == '' kw = dict(default_content_type=default_content_type, default_response_content_type= default_response_content_type, enable_messaging=enable_messaging, convert_response=renderer is None) if view is None: # Attempt to guess a default view. We register a factory # so we can pass additional constructor arguments. if provides_member_resource(rc): if request_method == RequestMethods.GET: vw = self.__make_view_factory(GetMemberView, kw) elif request_method == RequestMethods.PUT: vw = self.__make_view_factory(PutMemberView, kw) elif request_method == RequestMethods.PATCH: vw = self.__make_view_factory(PatchMemberView, kw) elif request_method == RequestMethods.DELETE: # The DELETE view is special as it does not have # to deal with representations. vw = DeleteMemberView register_sub_views = False elif request_method == RequestMethods.FAKE_PUT: request_method = RequestMethods.POST opts['header'] = 'X-HTTP-Method-Override:PUT' vw = self.__make_view_factory(PutMemberView, kw) elif request_method == RequestMethods.FAKE_PATCH: request_method = RequestMethods.POST opts['header'] = 'X-HTTP-Method-Override:PATCH' vw = self.__make_view_factory(PatchMemberView, kw) elif request_method == RequestMethods.FAKE_DELETE: request_method = RequestMethods.POST opts['header'] = 'X-HTTP-Method-Override:DELETE' vw = DeleteMemberView register_sub_views = False else: mb_req_methods = [rm for rm in RequestMethods if not rm == 'POST'] raise ValueError('Autodetection for member ' 'resource views requires ' 'one of %s as request method.' % str(mb_req_methods)) else: if request_method == RequestMethods.GET: vw = \ self.__make_view_factory(GetCollectionView, kw) elif request_method == RequestMethods.POST: vw = \ self.__make_view_factory(PostCollectionView, kw) else: coll_req_methods = [RequestMethods.GET, RequestMethods.POST] raise ValueError('Autodetection for collectioon ' 'resource views requires ' 'one of %s as request method.' % str(coll_req_methods)) else: vw = self.__make_view_factory(view, kw) else: register_sub_views = False vnames = set([name]) if register_sub_views: # Add sub-views for registered representer names if this view # uses representers (and is not a named view itself). vnames.update(get_registered_representer_names()) for vname in vnames: self.add_view(context=rc, view=vw, renderer=renderer, request_method=request_method, name=vname, **opts)
def __setup_everest(self, filter_specification_factory, order_specification_factory, service, cql_filter_specification_visitor, sql_filter_specification_visitor, eval_filter_specification_visitor, cql_order_specification_visitor, sql_order_specification_visitor, eval_order_specification_visitor, url_converter): # These are core initializations which should only be done once. if self.query_registered_utilities(IRepositoryManager) is None: # Set up the repository class utilities. mem_repo_class = self.query_registered_utilities( IRepository, name=REPOSITORY_TYPES.MEMORY) if mem_repo_class is None: self._register_utility(MemoryRepository, IRepository, name=REPOSITORY_TYPES.MEMORY) mem_repo_class = MemoryRepository if self.query_registered_utilities( IRepository, name=REPOSITORY_TYPES.FILE_SYSTEM) is None: self._register_utility(FileSystemRepository, IRepository, name=REPOSITORY_TYPES.FILE_SYSTEM) if self.query_registered_utilities( IRepository, name=REPOSITORY_TYPES.RDB) is None: self._register_utility(RdbRepository, IRepository, name=REPOSITORY_TYPES.RDB) # Set up the repository manager. repo_mgr = RepositoryManager() self._register_utility(repo_mgr, IRepositoryManager) self.add_subscriber(repo_mgr.on_app_created, IApplicationCreated) # Set up the root MEMORY repository and set it as the default # for all resources that do not specify a repository. self.add_repository(REPOSITORY_DOMAINS.ROOT, REPOSITORY_TYPES.MEMORY, mem_repo_class, None, True, None) # Create representer registry and register builtin # representer classes. rpr_reg = RepresenterRegistry() rpr_reg.register_representer_class(CsvResourceRepresenter) rpr_reg.register_representer_class(JsonResourceRepresenter) rpr_reg.register_representer_class(XmlResourceRepresenter) rpr_reg.register_representer_class(AtomResourceRepresenter) self._register_utility(rpr_reg, IRepresenterRegistry) if self.query_registered_utilities(IPluginManager) is None: plugin_mgr = PluginManager(self) self._register_utility(plugin_mgr, IPluginManager) # Register renderer factories for registered representers. for reg_rnd_name in get_registered_representer_names(): rnd = self.query_registered_utilities(IRendererFactory, reg_rnd_name) if not isinstance(rnd, RendererFactory): PyramidConfigurator.add_renderer(self, reg_rnd_name, RendererFactory) # Register data traversal proxy factory and adapters. trv_prx_fac = DataTraversalProxyFactory() self._register_utility(trv_prx_fac, IDataTraversalProxyFactory) self._register_adapter(DomainDataTraversalProxyAdapter, (IEntity,), IDataTraversalProxyAdapter) self._register_adapter(DataElementDataTraversalProxyAdapter, (IMemberDataElement,), IDataTraversalProxyAdapter) self._register_adapter(DataElementDataTraversalProxyAdapter, (ICollectionDataElement,), IDataTraversalProxyAdapter) self._register_adapter(LinkedDomainDataTraversalProxyAdapter, (ILinkedDataElement,), IDataTraversalProxyAdapter) # if not filter_specification_factory is None: self._set_filter_specification_factory( filter_specification_factory) if not order_specification_factory is None: self._set_order_specification_factory(order_specification_factory) if not service is None: self._set_service(service) if not cql_filter_specification_visitor is None: self._set_cql_filter_specification_visitor( cql_filter_specification_visitor) if not sql_filter_specification_visitor is None: self._set_sql_filter_specification_visitor( sql_filter_specification_visitor) if not eval_filter_specification_visitor is None: self._set_eval_filter_specification_visitor( eval_filter_specification_visitor) if not cql_order_specification_visitor is None: self._set_cql_order_specification_visitor( cql_order_specification_visitor) if not sql_order_specification_visitor is None: self._set_sql_order_specification_visitor( sql_order_specification_visitor) if not eval_order_specification_visitor is None: self._set_eval_order_specification_visitor( eval_order_specification_visitor) if not url_converter is None: self._set_url_converter(url_converter)
def __add_resource_view(self, rc, view, name, renderer, request_methods, default_content_type, default_response_content_type, options): for request_method in request_methods: opts = options.copy() vw = view if vw is None \ or (isinstance(view, type) and issubclass(view, RepresentingResourceView)): register_sub_views = name == '' kw = dict( default_content_type=default_content_type, default_response_content_type=default_response_content_type, convert_response=renderer is None) if view is None: # Attempt to guess a default view. We register a factory # so we can pass additional constructor arguments. if provides_member_resource(rc): if request_method == 'GET': vw = self.__make_view_factory(GetMemberView, kw) elif request_method == 'PUT': vw = self.__make_view_factory(PutMemberView, kw) elif request_method == 'DELETE': # The DELETE view is special as it does not have # to deal with representations. vw = DeleteMemberView register_sub_views = False elif request_method == 'FAKE_PUT': request_method = 'POST' opts['header'] = 'X-HTTP-Method-Override:PUT' vw = self.__make_view_factory(PutMemberView, kw) elif request_method == 'FAKE_DELETE': request_method = 'POST' opts['header'] = 'X-HTTP-Method-Override:DELETE' vw = DeleteMemberView register_sub_views = False else: raise ValueError('Autodetection for member ' 'resource views requires ' '"GET", "PUT", "DELETE", ' '"FAKE_PUT", or "FAKE_DELETE" ' 'as request method.') else: if request_method == 'GET': vw = \ self.__make_view_factory(GetCollectionView, kw) elif request_method == 'POST': vw = \ self.__make_view_factory(PostCollectionView, kw) else: raise ValueError('Autodetection for collectioon ' 'resource views requires ' '"GET" or "POST" ' 'as request method.') else: vw = self.__make_view_factory(view, kw) else: register_sub_views = False vnames = set([name]) if register_sub_views: # Add sub-views for registered representer names if this view # uses representers (and is not a named view itself). vnames.update(get_registered_representer_names()) for vname in vnames: self.add_view(context=rc, view=vw, renderer=renderer, request_method=request_method, name=vname, **opts)
def __setup_everest(self, filter_specification_factory, order_specification_factory, service, cql_filter_specification_visitor, sql_filter_specification_visitor, eval_filter_specification_visitor, cql_order_specification_visitor, sql_order_specification_visitor, eval_order_specification_visitor, url_converter): if self.query_registered_utilities(IRepositoryManager) is None: # These are core initializations which should only be done once. # Set up the repository manager. repo_mgr = RepositoryManager() self._register_utility(repo_mgr, IRepositoryManager) self.add_subscriber(repo_mgr.on_app_created, IApplicationCreated) # Set up the root MEMORY repository and set it as the default # for all resources that do not specify a repository. self.__add_repository(REPOSITORY_DOMAINS.ROOT, REPOSITORY_TYPES.MEMORY, None, None, True, None) # Create representer registry and register builtin representer classes. rpr_reg = RepresenterRegistry() rpr_reg.register_representer_class(CsvResourceRepresenter) rpr_reg.register_representer_class(JsonResourceRepresenter) rpr_reg.register_representer_class(XmlResourceRepresenter) rpr_reg.register_representer_class(AtomResourceRepresenter) self._register_utility(rpr_reg, IRepresenterRegistry) # Register renderer factories for registered representers. for reg_rnd_name in get_registered_representer_names(): rnd = self.query_registered_utilities(IRendererFactory, reg_rnd_name) if not isinstance(rnd, RendererFactory): self.add_renderer(reg_rnd_name, RendererFactory) if not filter_specification_factory is None: self._set_filter_specification_factory( filter_specification_factory) if not order_specification_factory is None: self._set_order_specification_factory(order_specification_factory) if not service is None: self._set_service(service) if not cql_filter_specification_visitor is None: self._set_cql_filter_specification_visitor( cql_filter_specification_visitor) if not sql_filter_specification_visitor is None: self._set_sql_filter_specification_visitor( sql_filter_specification_visitor) if not eval_filter_specification_visitor is None: self._set_eval_filter_specification_visitor( eval_filter_specification_visitor) if not cql_order_specification_visitor is None: self._set_cql_order_specification_visitor( cql_order_specification_visitor) if not sql_order_specification_visitor is None: self._set_sql_order_specification_visitor( sql_order_specification_visitor) if not eval_order_specification_visitor is None: self._set_eval_order_specification_visitor( eval_order_specification_visitor) if not url_converter is None: self._set_url_converter(url_converter)