summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
AgeCommit message (Collapse)Author
2009-06-21Make urldispatch put matchdict into environ.Chris McDonough
Traverser no longer returns matchdict.
2009-06-21- Make Routes mapper responsible for doing magic to fix up PATH_INFOChris McDonough
and SCRIPT_NAME when a ``path_info`` key exists in the matchdict. This used to be done in the traverser, which made no sense.
2009-06-21Make views that do not have a route_name match when any route is used.Chris McDonough
2009-06-19Fix strange test breakage.Tres Seaver
2009-06-19Move pushpage support out into separate distribution.Tres Seaver
2009-06-19- Move BBB logic for registering anChris McDonough
IAuthenticationPolicy/IForbiddenView/INotFoundView based on older concepts from the router module's ``make_app`` function into the ``repoze.bfg.zcml.zcml_configure`` callable, to service compatibility with scripts that use "zope.configuration.xmlconfig" (replace with ``repoze.bfg.zml.zcml_configure`` as necessary to get BBB logic)
2009-06-19- A new ZCML directive was added named ``notfound``. This ZCMLChris McDonough
directive can be used to name a view that should be invoked when the request can't otherwise be resolved to a view callable. For example:: <notfound view="helloworld.views.notfound_view"/> - A new ZCML directive was added named ``forbidden``. This ZCML directive can be used to name a view that should be invoked when a view callable for a request is found, but cannot be invoked due to an authorization failure. For example:: <forbidden view="helloworld.views.forbidden_view"/>
2009-06-18Move view derivation code into a function.Chris McDonough
2009-06-18Coverage.Chris McDonough
2009-06-18Add path module tests.Chris McDonough
2009-06-18- Allow views to be *optionally* defined as callables that accept onlyChris McDonough
a request object, instead of both a context and a request (which still works, and always will). The following types work as views in this style: - functions that accept a single argument ``request``, e.g.:: def aview(request): pass - new and old-style classes that have an ``__init__`` method that accepts ``self, request``, e.g.:: def View(object): __init__(self, request): pass - Arbitrary callables that have a ``__call__`` method that accepts ``self, request``, e.g.:: def AView(object): def __call__(self, request): pass view = AView() This likely should have been the calling convention all along, as the request has ``context`` as an attribute already, and with views called as a result of URL dispatch, having the context in the arguments is not very useful. C'est la vie.
2009-06-18- Add ``reissue_time`` and ``timeout`` parameters toChris McDonough
``repoze.bfg.authentication.AuthTktAuthenticationPolicy`` constructor. If these are passed, cookies will be reset every so often (cadged from the same change to repoze.who lately).
2009-06-18repoze.bfg.request.get_request -> repoze.bfg.threadlocal.get_current_requestChris McDonough
repoze.bfg.registry.get_registry -> repoze.bfg.threadlocal.get_current_registry Remove getSiteManager from registry module.
2009-06-18- The matchdict related to the matching of a Routes route is availableChris McDonough
on the request as the ``matchdict`` attribute: ``request.matchdict``. If no route matched, this attribute will be None.
2009-06-15- Make 404 responses slightly cheaper by showingChris McDonough
``environ["PATH_INFO"]`` on the notfound result page rather than the fullly computed URL.
2009-06-15- Move LRU cache implementation into a separate packageChris McDonough
(``repoze.lru``).
2009-06-11# provide backwards compatibility for applications whichChris McDonough
# used routes (at least apps without any custom "context # factory") in BFG 0.9.X and before
2009-06-11Microspeedups.Chris McDonough
2009-06-11Merge unifyroutesandtraversal branch into trunkChris McDonough
2009-06-03Revert urldispatch-context-as-dict-subclass committed in r5175. Let's not ↵Chris McDonough
make that promise yet.
2009-06-03- The default routes contextChris McDonough
(``repoze.bfg.urldispatch.DefaultRoutesContext``) object now subclasses from ``dict``. This means you can use the mapping protocol in views against it.
2009-06-02- Add API named ``repoze.bfg.settings.get_settings`` which retrieves aChris McDonough
derivation of values passed as the ``options`` value of ``repoze.bfg.router.make_app``. This API should be preferred instead of using getUtility(ISettings). I added a new ``repoze.bfg.settings`` API document as well.
2009-06-02- The ``repoze.bfg.location.locate`` API was removed: it didn't doChris McDonough
enough to be very helpful and had a misleading name.
2009-06-02- Add ``repoze.bfg.request.current_request`` function. This functionChris McDonough
should be used (**very sparingly**) to retrieve the "current" request. See the ``repoze.bfg.request`` API documentation for more information.
2009-06-01- It was not possible to register a custom ``IRoutesContextFactory``Chris McDonough
for use as a default context factory as documented in the "Hooks" chapter.
2009-05-31- The ``route`` ZCML directive now accepts ``request_type`` as anChris McDonough
alias for its ``condition_method`` argument for symmetry with the ``view`` directive.
2009-05-31Test string request type in bfg_view decorators.Chris McDonough
2009-05-31- The ``request_type`` argument of ZCML ``view`` declarations andChris McDonough
``bfg_view`` decorators can now be one of the strings ``GET``, ``POST``, ``PUT``, ``DELETE``, or ``HEAD`` instead of a reference to the respective interface type imported from ``repoze.bfg.interfaces``.
2009-05-31- Remove ``repoze.bfg.wsgi.HTTPException``,Chris McDonough
``repoze.bfg.wsgi.NotFound``, and ``repoze.bfg.wsgi.Unauthorized``. These classes were disused with the introduction of the ``IUnauthorizedView`` and ``INotFoundView`` machinery.
2009-05-31- Remove ``repoze.bfg.threadlocal.setManager``. It was only used inChris McDonough
unit tests.
2009-05-31- The error presented when a view invoked by the router returns aChris McDonough
non-response object now includes the view's name for troubleshooting purposes. - A "new response" event is emitted for forbiden and notfound views.
2009-05-31FeaturesChris McDonough
-------- - It is now possible to register a custom ``repoze.bfg.interfaces.INotFoundView`` for a given application. This feature replaces the ``repoze.bfg.interfaces.INotFoundAppFactory`` feature previously described in the Hooks chapter. The INotFoundView will be called when the framework detects that a view lookup done as a result of a reqest fails; it should accept a context object and a request object; it should return an IResponse object (a webob response, basically). See the Hooks narrative chapter of the BFG docs for more info. Deprecations ------------ - The ``repoze.bfg.interfaces.IUnauthorizedAppFactory`` interface has been deprecated in favor of using the new ``repoze.bfg.interfaces.IForbiddenResponseFactory`` mechanism.
2009-05-31- Renamed ``repoze.bfg.interfaces.IForbiddenResponseFactory`` toChris McDonough
``repoze.bfg.interfaces.IForbiddenView``.
2009-05-30- Remove "context" argument from ``effective_principals`` andChris McDonough
``authenticated_userid`` function APIs in ``repoze.bfg.security``, effectively a doing reversion to 0.8 and before behavior. Both functions now again accept only the ``request`` parameter.
2009-05-30- Add an AuthTktAuthenticationPolicy. This policy retrievesChris McDonough
credentials from an auth_tkt cookie managed by the application itself (instead of relying on an upstream data source for authentication data). See the Security API chapter of the documentation for more info. - Allow RemoteUserAuthenticationPolicy and RepozeWho1AuthenticationPolicy to accept various constructor arguments. See the Security API chapter of the documentation for more info.
2009-05-28- Add a ``get_app`` API functions to the ``paster`` module. ThisChris McDonough
obtains a WSGI application from a config file given a config file name and a section name. See the ``repoze.bfg.paster`` API docs for more information. - Add a new module named ``scripting``. It contains a ``get_root`` API function, which, provided a Router instance, returns a traversal root object and a "closer". See the ``repoze.bfg.scripting`` API docs for more info.
2009-05-27- Remove ``repoze.bfg.template`` module. All imports from thisChris McDonough
package have been deprecated since version 0.3.8. Instead, import ``get_template``, ``render_template``, and ``render_template_to_response`` from the ``repoze.bfg.chameleon_zpt``module.
2009-05-27Coverage.Chris McDonough
2009-05-27- A paster command has been added named "bfgshell". This command canChris McDonough
be used to get an interactive prompt with your BFG root object in the global namespace. E.g.:: bin/paster bfgshell /path/to/myapp.ini myapp See the ``Project`` chapter in the BFG documentation for more information.
2009-05-27Provide b/c for scripts which used ``registry_manager``Chris McDonough
2009-05-27Merge authchanges branch to trunk.Chris McDonough
2009-05-26Revert all work towards creating a "forbidden" API on the security policy; ↵Chris McDonough
I'll do this work on the authchanges branch first.
2009-05-25Make sure the default forbidden response (when a secpol has no ↵Chris McDonough
``forbidden``) works properly.
2009-05-25IForbiddenAppFactory -> IForbiddenResponseFactory.Chris McDonough
2009-05-25Change the semantics of IForbiddenAppFactory.Chris McDonough
2009-05-24FeaturesChris McDonough
-------- - It is now possible to write a custom security policy that returns a customized ``Forbidden`` WSGI application when BFG cannot authorize an invocation of a view. To this end, ISecurityPolicy objects must now have a ``forbidden`` method. This method should return a WSGI application. The returned WSGI application should generate a response which is appropriate when access to a view resource was forbidden by the security policy (e.g. perhaps a login page). ``repoze.bfg`` is willing to operate with a custom security policy that does not have a ``forbidden`` method, but it will issue a warning; eventually security policies without a ``forbidden`` method will cease to work under ``repoze.bfg``. Note that the ``forbidden`` WSGI application returned by the security policy is not used if a developer has registered an IForbiddenAppFactory (see the "Hooks" narrative chapter); the explicitly registered IForbiddenAppFactory will be preferred over the (more general) security policy forbidden app factory. - All default security policies now have a ``forbidden`` callable attached to them. This particular callable returns a WSGI application which generates a ``401 Unauthorized`` response for backwards compatibility (had backwards compatibility not been an issue, this callable would have returned a WSGI app that generated a ``403 Forbidden`` response). Backwards Incompatibilities --------------------------- - Custom NotFound and Forbidden (nee' Unauthorized) WSGI applications (registered a a utility for INotFoundAppFactory and IUnauthorizedAppFactory) could rely on an environment key named ``message`` describing the circumstance of the response. This key has been renamed to ``repoze.bfg.message`` (as per the WSGI spec, which requires environment extensions to contain dots). Deprecations ------------ - The ``repoze.bfg.interfaces.IUnauthorizedAppFactory`` interface has been renamed to ``repoze.bfg.interfaces.IForbiddenAppFactory``.
2009-05-21- Class objects may now be used as view callables (both via ZCML andChris McDonough
via use of the ``bfg_view`` decorator in Python 2.6 as a class decorator). The calling semantics when using a class as a view callable is similar to that of using a class as a Zope "browser view": the class' ``__init__`` must accept two positional parameters (conventionally named ``context``, and ``request``). The resulting instance must be callable (it must have a ``__call__`` method). When called, the instance should return a response. For example:: from webob import Response class MyView(object): def __init__(self, context, request): self.context = context self.request = request def __call__(self): return Response('hello from %s!' % self.context) See the "Views" chapter in the documentation and the ``repoze.bfg.view`` API documentation for more information.
2009-05-21Remove cacheability voodoo.Chris McDonough
2009-05-21- Removed the pickling of ZCML actions (the code that wroteChris McDonough
``configure.zcml.cache`` next to ``configure.zcml`` files in projects). The code which managed writing and reading of the cache file was a source of subtle bugs when users switched between imperative (e.g. ``@bfg_view``) registrations and declarative registrations (e.g. the ``view`` directive in ZCML) on the same project. On a moderately-sized project (535 ZCML actions and 15 ZCML files), executing actions read from the pickle was saving us only about 200ms (2.5 sec vs 2.7 sec average). On very small projects (1 ZCML file and 4 actions), startup time was comparable, and sometimes even slower when reading from the pickle, and both ways were so fast that it really just didn't matter anyway.
2009-05-18FeaturesChris McDonough
-------- - Added a ``traverse`` function to the ``repoze.bfg.traversal`` module. This function may be used to retrieve certain values computed during path resolution. See the Traversal API chapter of the documentation for more information about this function. Deprecations ------------ - Internal: ``ITraverser`` callables should now return a dictionary rather than a tuple. Up until 0.7.0, all ITraversers were assumed to return a 3-tuple. In 0.7.1, ITraversers were assumed to return a 6-tuple. As (by evidence) it's likely we'll need to add further information to the return value of an ITraverser callable, 0.8 assumes that an ITraverser return a dictionary with certain elements in it. See the ``repoze.bfg.interfaces.ITraverser`` interface for the list of keys that should be present in the dictionary. ``ITraversers`` which return tuples will still work, although a deprecation warning will be issued. Backwards Incompatibilities --------------------------- - If your code used the ITraverser interface directly (not via an API function such as ``find_model``) via an adapter lookup, you'll need to change your code to expect a dictionary rather than a 3- or 6-tuple if your code ever gets return values from the default ModelGraphTraverser or RoutesModelTraverser adapters.