Pyramid TODOs
=============

Should-Have
-----------

- Example of using paste prefix middleware to fix https-vs-http when
  deploying via proxy:
  https://docs.pylonsproject.org/projects/pyramid_cookbook/dev/deployment/nginx.html#step-2-starting-paster

Nice-to-Have
------------

- Flesh out "paste" chapter.

- Move config-related stuff from "renderers" to config/rendering, and
  possibly mako/chameleon rendering stuff to config/rendering.

- _fix_registry should dictify the registry being fixed.

- Make "localizer" a property of request (instead of requiring
  "get_localizer(request)"?

- Deprecate pyramid.security.view_execution_permitted (it only works for
  traversal).

- Merge Michael's route group work (maybe a 1.3 thing).

- Some sort of API for rendering a view callable object to a response from
  within another view callable.

- Eliminate non-deployment-non-scaffold-related Paste dependencies:
  ``paste.urlparser.StaticURLParser``, ``paste.auth.auth_tkt`` (cutnpaste or
  reimplement both).

- Alias the stupid long default session factory name.

- Add narrative docs for wsgiapp and wsgiapp2.

- Provide a ``has_view`` function.

- Debug option to print view matching decision (e.g. debug_viewlookup or so).

- Speed up startup time (defer _bootstrap and registerCommonDirectives()
  until needed by ZCML, as well as unfound speedups).

- Better "Extending" chapter.

- Try to make test suite pass on IronPython.

- Non-bwcompat use of threadlocals that need to be documented or ameliorated:

  security.principals_allowed_by_permission

  resource.OverrideProvider._get_overrides: can't credibly be removed,
  because it stores an overrideprovider as a module-scope global.

  traversal.traverse: this API is a stepchild, and needs to be changed.

  Configurator.add_translation_dirs: not passed any context but a message,
  can't credibly be removed.

- Supply ``X-Vhm-Host`` support.

- Basic WSGI documentation (pipeline / app / server).

- Change docs about creating a venusian decorator to not use ZCA.

- Try to better explain the relationship between a renderer and a
  template in the templates chapter and elsewhere.  Scan the
  documentation for reference to a renderer as *only* view
  configuration (it's a larger concept now).

- Create a ``render_view`` that works by using config.derive_view
  against an existing view instead of querying the registry.

- Create a function which performs a recursive request.

- Update App engine chapter with less creaky directions.

Future
------

- 1.5: turn ``pyramid.settings.Settings`` into a function that returns the
  original dict (after ``__getattr__`` deprecation period, it was deprecated
  in 1.2).

- 1.3: Kill off ``bfg.routes`` envvars in router.

- 1.3: Kill off dependencies on Paste for non-deployment-related features.

- 1.3: use zope.registry rather than zope.component.

- 1.3: get rid of zope.configuration dependency.

Probably Bad Ideas
------------------

- Add functionality that mocks the behavior of ``repoze.browserid``.

- Consider implementing the API outlined in
  http://plope.com/pyramid_auth_design_api_postmortem, phasing out the
  current auth-n-auth abstractions in a backwards compatible way.

- Maybe add ``add_renderer_globals`` method to Configurator.

