summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
AgeCommit message (Collapse)Author
2009-02-20- Make it possible to have ``testing.DummyTemplateRenderer`` returnChris McDonough
some nondefault string representation.
2009-02-16- Using ``model_url`` or ``model_path`` against a broken model graphChris McDonough
(one with models that had a non-root model with a ``__name__`` of ``None``) caused an inscrutable error to be thrown: ( if not ``_must_quote[cachekey].search(s): TypeError: expected string or buffer``). Now URLs and paths generated against graphs that have None names in intermediate nodes will replace the None with the empty string, and, as a result, the error won't be raised. Of course the URL or path will still be bogus.
2009-02-07Bug FixesChris McDonough
--------- - Empty location names in model paths when generating a URL using ``repoze.bfg.model_url`` based on a model obtained via traversal are no longer ignored in the generated URL. This means that if a non-root model object has a ``__name__`` of ``''``, the URL will reflect it (e.g. ``model_url`` will generate ``http://foo/bar//baz`` if an object with the ``__name__`` of ``''`` is a child of bar and the parent of baz). URLs generated with empty path segments are, however, still irresolveable by the model graph traverser on request ingress (the traverser strips empty path segment names). Features -------- - Microspeedups of ``repoze.bfg.traversal.model_path``, ``repoze.bfg.traversal.model_path_tuple``, and ``repoze.bfg.url.urlencode``. Documentation ------------- - Add a note to the ``repoze.bfg.traversal.quote_path_segment`` API docs about caching of computed values. Implementation Changes ---------------------- - Simplification of ``repoze.bfg.traversal.TraversalContextURL.__call__`` (it now uses ``repoze.bfg.traversal.model_path`` instead of rolling its own path-generation).
2009-02-06Revert my decision to make ``model_path`` return a tuple; itChris McDonough
now still returns a string; albeit a quoted one. An additional API (model_path_tuple) now also exists which can be used to get a model path as a tuple. - The ``repoze.bfg.traversal.model_path`` API now returns a *quoted* string rather than a string represented by series of unquoted elements joined via ``/`` characters. Previously it returned a string or unicode object representing the model path, with each segment name in the path joined together via ``/`` characters, e.g. ``/foo /bar``. Now it returns a string, where each segment is a UTF-8 encoded and URL-quoted element e.g. ``/foo%20/bar``. This change was (as discussed briefly on the repoze-dev maillist) necessary to accomodate model objects which themselves have ``__name__`` attributes that contain the ``/`` character. For people that have no models that have high-order Unicode ``__name__`` attributes or ``__name__`` attributes with values that require URL-quoting with in their model graphs, this won't cause any issue. However, if you have code that currently expects ``model_path`` to return an unquoted string, or you have an existing application with data generated via the old method, and you're too lazy to change anything, you may wish replace the BFG-imported ``model_path`` in your code with this function (this is the code of the "old" ``model_path`` implementation):: from repoze.bfg.location import lineage def i_am_too_lazy_to_move_to_the_new_model_path(model, *elements): rpath = [] for location in lineage(model): if location.__name__: rpath.append(location.__name__) path = '/' + '/'.join(reversed(rpath)) if elements: suffix = '/'.join(elements) path = '/'.join([path, suffix]) return path - The ``repoze.bfg.traversal.find_model`` API no longer implicitly converts unicode representations of a full path passed to it as a Unicode object into a UTF-8 string. Callers should either use prequoted path strings returned by ``repoze.bfg.traversal.model_path``, or tuple values returned by the result of ``repoze.bfg.traversal.model_path_tuple`` or they should use the guidelines about passing a string ``path`` argument described in the ``find_model`` API documentation. - Each argument contained in ``elements`` passed to ``repoze.bfg.traversal.model_path`` will now have any ``/`` characters contained within quoted to ``%2F`` in the returned string. Previously, ``/`` characters in elements were left unquoted (a bug). - A ``repoze.bfg.traversal.model_path_tuple`` API was added. This API is an alternative to ``model_path`` (which returns a string); ``model_path_tuple`` returns a model path as a tuple (much like Zope's ``getPhysicalPath``). - A ``repoze.bfg.traversal.quote_path_segment`` API was added. This API will quote an individual path segment (string or unicode object). See the ``repoze.bfg.traversal`` API documentation for more information.
2009-02-05Backwards IncompatibilitiesChris McDonough
--------------------------- - The ``repoze.bfg.traversal.model_path`` API now returns a tuple instead of a string. Previously it returned a string representing the model path, with each segment name in the path joined together via ``/`` characters, e.g. ``/foo/bar``. Now it returns a tuple, where each segment is an element in the tuple e.g. ``('', 'foo', 'bar')`` (the leading empty element indicates that this path is absolute). This change was (as discussed on the repoze-dev maillist) necessary to accomodate model objects which themselves have names that contain the ``/`` character. See the API documentation for ``repoze.bfg.traversal.model_path`` for more information. - The ``repoze.bfg.traversal.find_model`` API no longer implicitly converts unicode path representations into a UTF-8 string. Callers should either use path tuples or use the guidelines about passing a string ``path`` argument described in its API documentation. Features -------- - The ``find_model`` API now accepts "path tuples" (see the above note regarding ``model_path``) as well as string path representations as a ``path`` argument.
2009-02-03Test coverage.Chris McDonough
2009-02-03- Add ` `renderer`` argument (defaulting to None) toChris McDonough
``repoze.bfg.testing.registerDummyRenderer``. This makes it possible, for instance, to register a custom renderer that raises an exception in a unit test.
2009-01-28Use lstrip and rstrip; traverser now has no "locatable".Chris McDonough
2009-01-28Microtweak and bwcompat code.Chris McDonough
2009-01-27Whoops, wasn't quite done adding vhost support to traverser yet.Chris McDonough
2009-01-27FeaturesChris McDonough
-------- - The ``repoze.bfg.url.model_url`` API now works against contexts derived from Routes URL dispatch (``Routes.util.url_for`` is called under the hood). - "Virtual root" support for traversal-based applications has been added. Virtual root support is useful when you'd like to host some model in a :mod:`repoze.bfg` model graph as an application under a URL pathname that does not include the model path itself. For more information, see the (new) "Virtual Hosting" chapter in the documentation. - A ``repoze.bfg.traversal.virtual_root`` API has been added. When called, it returns the virtual root object (or the physical root object if no virtual root has been specified). Implementation Changes ---------------------- - ``repoze.bfg.traversal.RoutesModelTraverser`` has been moved to ``repoze.bfg.urldispatch``. - ``model_url`` URL generation is now performed via an adapter lookup based on the context and the request. - ZCML which registers two adapters for the ``IContextURL`` interface has been added to the configure.zcml in ``repoze.bfg.includes``.
2009-01-27- There is an indirection in ``repoze.bfg.url.model_url`` now thatChris McDonough
consults a utility to generate the base model url (without extra elements or a query string). Eventually this will service virtual hosting; for now it's undocumented and should not be hooked.
2009-01-26- Added a ``traversal_path`` API to the traversal module; see theChris McDonough
"traversal" API chapter in the docs. This was a function previously known as ``split_path`` that was not an API but people were using it anyway. Unlike ``split_path`` it now returns a tuple instead of a list (as its values are cached).
2009-01-26Coverage.Chris McDonough
2009-01-26Cache tuples (immutable), not lists; others were using this function and ↵Chris McDonough
were baffled when they mutated the value.
2009-01-25- The ``repoze.bfg.urldispatch.RoutesRootFactory`` now injects theChris McDonough
``wsgiorg.routing_args`` environment variable into the environ when a route matches. This is a tuple of ((), routing_args) where routing_args is the value that comes back from the routes mapper match (the "match dict"). - The ``repoze.bfg.traversal.RoutesModelTraverser`` class now wants to obtain the ``view_name`` and ``subpath`` from the ``wsgiorgs.routing_args`` environment variable. It falls back to obtaining these from the context for backwards compatibility.
2009-01-25- It is no longer permissible for a security ACE to contain a "nested"Chris McDonough
list of permissions (e.g. ``(Allow, Everyone, ['read', ['view', ['write', 'manage']]])`)`. The list must instead be fully expanded (e.g. ``(Allow, Everyone, ['read', 'view', 'write', 'manage])``). This feature was never documented, and was never an API, so it's not a backwards incompatibility.
2009-01-25Minor speed tweaks.Chris McDonough
2009-01-25- Get rid of ``repoze.bfg.security.ACLAuthorizer``: theChris McDonough
``ACLSecurityPolicy`` now does what it did inline. - Get rid of ``repoze.bfg.interfaces.NoAuthorizationInformation`` exception: it was used only by ``ACLAuthorizer``.
2009-01-25- It is no longer permissible to pass a "nested" list of principals toChris McDonough
``repoze.bfg.ACLAuthorizer.permits`` (e.g. ['fred', ['larry', 'bob']). The principals list must be fully expanded. This feature was never documented, and was never an API, so it's not a backwards incompatibility.
2009-01-25Optimize flatten a bit.Chris McDonough
2009-01-25Do an end-run around webob.Request.__setitem__ until it gets sped up.Chris McDonough
2009-01-25Test coverage.Chris McDonough
2009-01-24Behavior ChangesChris McDonough
---------------- - The ``repoze.bfg.view.render_view_to_response`` API will no longer raise a ValueError if an object returned by a view function it calls does not possess certain attributes (``headerlist``, ``app_iter``, ``status``). This API used to attempt to perform a check using the ``is_response`` function in ``repoze.bfg.view``, and raised a ``ValueError`` if the ``is_response`` check failed. The responsibility is now the caller's to ensure that the return value from a view function is a "real" response. - WSGI environ dicts passed to ``repoze.bfg`` 's Router must now contain a REQUEST_METHOD key/value; if they do not, a KeyError will be raised (speed). Implementation Changes ---------------------- - Various speed micro-tweaks.
2009-01-24- ``repoze.bfg.testing.DummyModel`` did not have a ``get`` method;Chris McDonough
it now does.
2009-01-22- ``repoze.bfg.traversal.split_path`` now also handles decodingChris McDonough
path segments to unicode (for speed, because its results are LRU cached). - ``repoze.bfg.traversal.step`` was made a method of the ModelGraphTraverser.
2009-01-22- The ``unicode_path_segments`` configuration variable and theChris McDonough
``BFG_UNICODE_PATH_SEGMENTS`` configuration variable have been removed. Path segments are now always passed to model ``__getitem__`` methods as unicode. "True" has been the default for this setting since 0.5.4, but changing this configuration setting to false allowed you to go back to passing raw path element strings to model ``__getitem__`` methods. This services a speed goal (we get about +80 req/s by removing the check), and it's clearer just to always expect unicode path segments in model ``__getitem__`` methods.
2009-01-22Coverage.Chris McDonough
2009-01-22Coverage.Chris McDonough
2009-01-22- ``repoze.bfg.lru`` implements an LRU cache class and a decorator forChris McDonough
internal use.
2009-01-22 If no subscribers are registered via ``registerHandler`` orChris McDonough
``registerSubscriptionAdapter``, ``notify`` is a noop for speed.
2009-01-20- Tease out an extra 4% performance boost by changing the Router;Chris McDonough
instead of using imported ZCA APIs, use the same APIs directly against the registry that is an attribute of the Router. As a result, the registry used by BFG is now a subclass of ``zope.component.registry.Components`` (defined as ``repoze.bfg.registry.Registry``); it has a ``notify`` method.
2009-01-20Make tests pass on laguna.Chris McDonough
2009-01-19view_name attr.Chris McDonough
2009-01-18context_factory -> factoryChris McDonough
context_interfaces -> provides
2009-01-18Merge "routesmapper branch" to trunk.Chris McDonough
2009-01-18grok -> scan to prevent confusion.Chris McDonough
2009-01-17- Allow the ``repoze.bfg.view.static`` helper to be passed a relativeChris McDonough
``root_path`` name; it will be considered relative to the file in which it was called.
2009-01-16- The ``repoze.bfg.view.static`` helper now usesChris McDonough
``webob.Request.get_response`` to do its work rather than relying on howgrown WSGI code.
2009-01-16FeaturesChris McDonough
-------- - The functionality of ``repoze.bfg.convention`` has been merged into the core. Applications which make use of ``repoze.bfg.convention`` will continue to work indefinitely, but it is recommended that apps stop depending upon it. To do so, substitute imports of ``repoze.bfg.convention.bfg_view`` with imports of ``repoze.bfg.view.bfg_view``, and change the stanza in ZCML from ``<convention package=".">`` to ``<grok package=".">``. As a result of the merge, bfg has grown a new dependency: ``martian``. - View functions which use the pushpage decorator are now pickleable (meaning their use won't prevent a ``configure.zcml.cache`` file from being written to disk). Implementation Changes ---------------------- - The ``wsgiapp`` decorator now uses ``webob.Request.get_response`` to do its work rather than relying on howgrown WSGI code.
2009-01-15Add dead chickens to suppress spurious coverage output.Chris McDonough
2009-01-15Get rid of PlacelessSetup.Chris McDonough
2009-01-15Get rid of _getFUT.Chris McDonough
2009-01-15Get rid of _getFUT.Chris McDonough
2009-01-15Get rid of _getFUT.Chris McDonough
2009-01-15Get rid of _getFUT.Chris McDonough
2009-01-15Remove more unused stuff.Chris McDonough
2009-01-15Clean up unused stuff.Chris McDonough
2009-01-15Test coverage.Chris McDonough
2009-01-15- Instead of invariably using ``webob.Request`` as the "requestChris McDonough
factory" (e.g. in the ``Router`` class) and ``webob.Response`` and the "response factory" (e.g. in ``render_template_to_response``), allow both to be overridden via a ZCML utility hook. See the "Using ZCML Hooks" chapter of the documentation for more information.