Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)