Michael Merickel
2018-10-17 e14661417e7ceb50d5cf83bbd6abd6b133e473ba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Pyramid TODOs
=============
 
Nice-to-Have
------------
 
- config.set_registry_attr with conflict detection... make sure the attr is
  added before a commit, but register an action so a conflict can be detected.
 
- Provide the presumed renderer name to the called view as an attribute of
  the request.
 
- Have action methods return their discriminators.
 
- Modify view mapper narrative docs to not use pyramid_handlers.
 
- Modify the urldispatch chapter examples to assume a scan rather than
  ``add_view``.
 
- Introspection:
 
  * ``default root factory`` category (prevent folks from needing to searh
    "root factories" category)?
 
  * ``default view mapper`` category (prevent folks from needing to search
    "view mappers" category)?
 
  * get rid of "tweens" category (can't sort properly?)
 
- Fix deployment recipes in cookbook (discourage proxying without changing
  server).
 
- Try "with transaction.manager" in an exception view with SQLA (preempt
  homina homina response about how to write "to the database" from within in
  an exception view).  Note: tried this and couldn't formulate the right
  situation where the database could not be written to within an exception
  view (but didn't try exhaustively).
 
- Add narrative docs for wsgiapp and wsgiapp2.
 
- Basic WSGI documentation (pipeline / app / server).
 
- Change docs about creating a venusian decorator to not use ZCA (use
  configurator methods instead).
 
- 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).
 
- Add better docs about what-to-do-when-behind-a-proxy: rutter ("/foo =
  app1" and "domain app1.localhost = app1"), ProxyPreserveHost and the nginx
  proxy_params, preserving HTTPS URLs.
 
- Debug option to print view matching decision (e.g. debug_viewlookup or so).
 
- 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.
 
- Deprecate pyramid.security.view_execution_permitted (it only works for
  traversal).
 
- Provide a ``has_view`` function.
 
- Update App engine chapter with less creaky directions.
 
- Idea from Zart:
 
  diff --git a/pyramid/paster.py b/pyramid/paster.py
  index b0e4d79..b3bd82a 100644
  --- a/pyramid/paster.py
  +++ b/pyramid/paster.py
  @@ -8,6 +8,7 @@ from paste.deploy import (
   from pyramid.compat import configparser
   from logging.config import fileConfig
   from pyramid.scripting import prepare
  +from pyramid.config import Configurator
   
   def get_app(config_uri, name=None, loadapp=loadapp):
       """ Return the WSGI application named ``name`` in the PasteDeploy
  @@ -111,3 +112,10 @@ def bootstrap(config_uri, request=None):
       env['app'] = app
       return env
   
  +def make_pyramid_app(global_conf, app=None, **settings):
  +    """Return pyramid application configured with provided settings"""
  +    config = Configurator(package='pyramid', settings=settings)
  +    if app:
  +        config.include(app)
  +    app = config.make_wsgi_app()
  +    return app
  diff --git a/setup.py b/setup.py
  index 03ebb42..91e0e21 100644
  --- a/setup.py
  +++ b/setup.py
  @@ -118,6 +118,8 @@ setup(name='pyramid',
           [paste.server_runner]
           wsgiref = pyramid.scripts.pserve:wsgiref_server_runner
           cherrypy = pyramid.scripts.pserve:cherrypy_server_runner
  +        [paster.app_factory]
  +        main = pyramid.paster:make_pyramid_app
         """
         )
 
 
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.
 
- Supply ``X-Vhm-Host`` support (probably better to do what paste#prefix
  middleware does).
 
- Have ``remember`` and ``forget`` actually set headers on the response using
  a response callback (and return the empty list)?
 
- http://pythonguy.wordpress.com/2011/06/22/dynamic-variables-revisited/
  instead of thread locals
 
- Context manager for creating a new configurator (replacing
  ``with_package``).  E.g.::
 
    with config.partial(package='bar') as c:
        c.add_view(...)
 
  or::
 
    with config.partial(introspection=False) as c:
        c.add_view(..)
 
- _fix_registry should dictify the registry being fixed.
 
- Apply a prefix to the userid principal to avoid poisoning the principal
  namespace. See https://github.com/Pylons/pyramid/issues/2060