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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
|
.. _request_module:
:mod:`pyramid.request`
---------------------------
.. module:: pyramid.request
.. autoclass:: Request
:members:
:inherited-members:
:exclude-members: add_response_callback, add_finished_callback,
route_url, route_path, current_route_url,
current_route_path, static_url, static_path,
model_url, resource_url, resource_path, set_property,
effective_principals, authenticated_userid,
unauthenticated_userid, has_permission,
invoke_exception_view, localizer, response, session
.. attribute:: context
The :term:`context` will be available as the ``context``
attribute of the :term:`request` object. It will be the context
object implied by the current request. See
:ref:`traversal_chapter` for information about context objects.
.. attribute:: registry
The :term:`application registry` will be available as the
``registry`` attribute of the :term:`request` object. See
:ref:`zca_chapter` for more information about the application
registry.
.. attribute:: root
The :term:`root` object will be available as the ``root``
attribute of the :term:`request` object. It will be the resource
object at which traversal started (the root). See
:ref:`traversal_chapter` for information about root objects.
.. attribute:: subpath
The traversal :term:`subpath` will be available as the
``subpath`` attribute of the :term:`request` object. It will
be a sequence containing zero or more elements (which will be
Unicode objects). See :ref:`traversal_chapter` for information
about the subpath.
.. attribute:: traversed
The "traversal path" will be available as the ``traversed``
attribute of the :term:`request` object. It will be a sequence
representing the ordered set of names that were used to
traverse to the :term:`context`, not including the view name or
subpath. If there is a virtual root associated with the
request, the virtual root path is included within the traversal
path. See :ref:`traversal_chapter` for more information.
.. attribute:: view_name
The :term:`view name` will be available as the ``view_name``
attribute of the :term:`request` object. It will be a single
string (possibly the empty string if we're rendering a default
view). See :ref:`traversal_chapter` for information about view
names.
.. attribute:: virtual_root
The :term:`virtual root` will be available as the
``virtual_root`` attribute of the :term:`request` object. It
will be the virtual root object implied by the current request.
See :ref:`vhosting_chapter` for more information about virtual
roots.
.. attribute:: virtual_root_path
The :term:`virtual root` *path* will be available as the
``virtual_root_path`` attribute of the :term:`request` object.
It will be a sequence representing the ordered set of names
that were used to traverse to the virtual root object. See
:ref:`vhosting_chapter` for more information about virtual
roots.
.. attribute:: exception
If an exception was raised by a :term:`root factory` or a
:term:`view callable`, or at various other points where
:app:`Pyramid` executes user-defined code during the
processing of a request, the exception object which was caught
will be available as the ``exception`` attribute of the request
within a :term:`exception view`, a :term:`response callback` or a
:term:`finished callback`. If no exception occurred, the value
of ``request.exception`` will be ``None`` within response and
finished callbacks.
.. attribute:: exc_info
If an exception was raised by a :term:`root factory` or a :term:`view
callable`, or at various other points where :app:`Pyramid` executes
user-defined code during the processing of a request, result of
``sys.exc_info()`` will be available as the ``exc_info`` attribute of
the request within a :term:`exception view`, a :term:`response callback`
or a :term:`finished callback`. If no exception occurred, the value of
``request.exc_info`` will be ``None`` within response and finished
callbacks.
.. attribute:: response
This attribute is actually a "reified" property which returns an
instance of the :class:`pyramid.response.Response` class. The response
object returned does not exist until this attribute is accessed. Once
it is accessed, subsequent accesses to this request object will return
the same :class:`~pyramid.response.Response` object.
The ``request.response`` API can is used by renderers. A render obtains
the response object it will return from a view that uses that renderer
by accessing ``request.response``. Therefore, it's possible to use the
``request.response`` API to set up a response object with "the right"
attributes (e.g. by calling ``request.response.set_cookie(...)`` or
``request.response.content_type = 'text/plain'``, etc) within a view
that uses a renderer. For example, within a view that uses a
:term:`renderer`::
response = request.response
response.set_cookie('mycookie', 'mine, all mine!')
return {'text':'Value that will be used by the renderer'}
Mutations to this response object will be preserved in the response sent
to the client after rendering. For more information about using
``request.response`` in conjunction with a renderer, see
:ref:`request_response_attr`.
Non-renderer code can also make use of request.response instead of
creating a response "by hand". For example, in view code::
response = request.response
response.body = 'Hello!'
response.content_type = 'text/plain'
return response
Note that the response in this circumstance is not "global"; it still
must be returned from the view code if a renderer is not used.
.. attribute:: session
If a :term:`session factory` has been configured, this attribute
will represent the current user's :term:`session` object. If a
session factory *has not* been configured, requesting the
``request.session`` attribute will cause a
:class:`pyramid.exceptions.ConfigurationError` to be raised.
.. attribute:: matchdict
If a :term:`route` has matched during this request, this attribute will
be a dictionary containing the values matched by the URL pattern
associated with the route. If a route has not matched during this
request, the value of this attribute will be ``None``. See
:ref:`matchdict`.
.. attribute:: matched_route
If a :term:`route` has matched during this request, this attribute will
be an object representing the route matched by the URL pattern
associated with the route. If a route has not matched during this
request, the value of this attribute will be ``None``. See
:ref:`matched_route`.
.. attribute:: authenticated_userid
A property which returns the :term:`userid` of the currently
authenticated user or ``None`` if there is no :term:`security policy` in
effect or there is no currently authenticated user.
.. attribute:: unauthenticated_userid
.. deprecated:: 2.0
``unauthenticated_userid`` has been deprecated in version 2.0. Use
:attr:`authenticated_userid` or :attr:`authenticated_identity`
instead. See :ref:`upgrading_auth` for more information.
A property which returns a value which represents the *claimed* (not
verified) :term:`userid` of the credentials present in the
request. ``None`` if there is no :term:`authentication policy` in effect
or there is no user data associated with the current request. This
differs from :attr:`~pyramid.request.Request.authenticated_userid`,
because the effective authentication policy will not ensure that a
record associated with the :term:`userid` exists in persistent storage.
Even if the :term:`userid` does not exist in persistent storage, this
value will be the value of the :term:`userid` *claimed* by the request
data.
.. attribute:: effective_principals
.. deprecated:: 2.0
The new security policy has removed the concept of principals. See
:ref:`upgrading_auth` for more information.
A property which returns the list of 'effective' :term:`principal`
identifiers for this request. This list typically includes the
:term:`userid` of the currently authenticated user if a user is
currently authenticated, but this depends on the
:term:`authentication policy` in effect. If no :term:`authentication
policy` is in effect, this will return a sequence containing only the
:attr:`pyramid.authorization.Everyone` principal.
.. method:: invoke_subrequest(request, use_tweens=False)
.. versionadded:: 1.4a1
Obtain a response object from the Pyramid application based on
information in the ``request`` object provided. The ``request`` object
must be an object that implements the Pyramid request interface (such
as a :class:`pyramid.request.Request` instance). If ``use_tweens`` is
``True``, the request will be sent to the :term:`tween` in the tween
stack closest to the request ingress. If ``use_tweens`` is ``False``,
the request will be sent to the main router handler, and no tweens will
be invoked.
This function also:
- manages the threadlocal stack (so that
:func:`~pyramid.threadlocal.get_current_request` and
:func:`~pyramid.threadlocal.get_current_registry` work during a
request)
- Adds a ``registry`` attribute (the current Pyramid registry) and a
``invoke_subrequest`` attribute (a callable) to the request object it's
handed.
- sets request extensions (such as those added via
:meth:`~pyramid.config.Configurator.add_request_method`) on the
request it's passed.
- causes a :class:`~pyramid.events.NewRequest` event to be sent at the
beginning of request processing.
- causes a :class:`~pyramid.events.ContextFound` event to be sent
when a context resource is found.
- Ensures that the user implied by the request passed has the necessary
authorization to invoke view callable before calling it.
- Calls any :term:`response callback` functions defined within the
request's lifetime if a response is obtained from the Pyramid
application.
- causes a :class:`~pyramid.events.NewResponse` event to be sent if a
response is obtained.
- Calls any :term:`finished callback` functions defined within the
request's lifetime.
``invoke_subrequest`` isn't *actually* a method of the Request object;
it's a callable added when the Pyramid router is invoked, or when a
subrequest is invoked. This means that it's not available for use on a
request provided by e.g. the ``pshell`` environment.
.. seealso::
See also :ref:`subrequest_chapter`.
.. automethod:: invoke_exception_view
.. automethod:: has_permission
.. automethod:: add_response_callback
.. automethod:: add_finished_callback
.. automethod:: route_url
.. automethod:: route_path
.. automethod:: current_route_url
.. automethod:: current_route_path
.. automethod:: static_url
.. automethod:: static_path
.. automethod:: resource_url
.. automethod:: resource_path
.. method:: set_property(callable, name=None, reify=False)
Add a callable or a property descriptor to the request instance.
Properties, unlike attributes, are lazily evaluated by executing
an underlying callable when accessed. They can be useful for
adding features to an object without any cost if those features
go unused.
A property may also be reified via the
:class:`pyramid.decorator.reify` decorator by setting
``reify=True``, allowing the result of the evaluation to be
cached. Thus the value of the property is only computed once for
the lifetime of the object.
``callable`` can either be a callable that accepts the request as
its single positional parameter, or it can be a property
descriptor.
If the ``callable`` is a property descriptor a ``ValueError``
will be raised if ``name`` is ``None`` or ``reify`` is ``True``.
If ``name`` is None, the name of the property will be computed
from the name of the ``callable``.
.. code-block:: python
:linenos:
def _connect(request):
conn = request.registry.dbsession()
def cleanup(request):
# since version 1.5, request.exception is no
# longer eagerly cleared
if request.exception is not None:
conn.rollback()
else:
conn.commit()
conn.close()
request.add_finished_callback(cleanup)
return conn
@subscriber(NewRequest)
def new_request(event):
request = event.request
request.set_property(_connect, 'db', reify=True)
The subscriber doesn't actually connect to the database, it just
provides the API which, when accessed via ``request.db``, will
create the connection. Thanks to reify, only one connection is
made per-request even if ``request.db`` is accessed many times.
This pattern provides a way to augment the ``request`` object
without having to subclass it, which can be useful for extension
authors.
.. versionadded:: 1.3
.. attribute:: localizer
A :term:`localizer` which will use the current locale name to
translate values.
.. versionadded:: 1.5
.. attribute:: locale_name
The locale name of the current request as computed by the
:term:`locale negotiator`.
.. versionadded:: 1.5
.. note::
For information about the API of a :term:`multidict` structure (such as
that used as ``request.GET``, ``request.POST``, and ``request.params``),
see :class:`pyramid.interfaces.IMultiDict`.
.. autofunction:: apply_request_extensions(request)
.. autoclass:: RequestLocalCache
:members:
|