Add documentation for RequestViewerHook
This commit is contained in:
		| @@ -84,3 +84,183 @@ the app and browse the application from our web browser:: | ||||
|     response: 	 200 OK | ||||
|  | ||||
|  | ||||
| Included Pecan Hooks | ||||
| ==================== | ||||
| Pecan includes some hooks in its core and are very simple to start using them | ||||
| away. This section will describe their different uses, how to configure them | ||||
| and examples of common scenarios. | ||||
|  | ||||
| .. _requestviewerhook: | ||||
|  | ||||
| RequestViewerHook | ||||
| ================= | ||||
| This hooks is very useful for debugging purposes. It has access to every | ||||
| attribute the ``response`` object has plus a few others that are specific to | ||||
| the framework. | ||||
|  | ||||
| There are two main ways that this hook can provide information about a request: | ||||
|  | ||||
| #. Terminal or logging output (via an file-like stream like `stdout`) | ||||
| #. Custom header keys in the actual response. | ||||
|  | ||||
| By default, both outputs are on if they are not configured. | ||||
|  | ||||
| For the actual object reference, please see :ref:`pecan_hooks`. | ||||
|  | ||||
| Automatically Enabled | ||||
| --------------------- | ||||
| This hook can be automatically added to the application itself if a certain key | ||||
| exists in the configuration used for the app. This key is:: | ||||
|  | ||||
|     requestviewer | ||||
|  | ||||
| It does not need to contain anything (could be an empty dictionary), and this | ||||
| is enough to force Pecan to load this hook when the WSGI application is | ||||
| created. | ||||
|  | ||||
| Configuration | ||||
| ------------- | ||||
| There are a few ways to get this hook properly configured and running. However, | ||||
| it is useful to know that no actual configuration is needed to have it up and | ||||
| running.  | ||||
|  | ||||
| By default it will output information about these items: | ||||
|  | ||||
| * path       : Displays the url that was used to generate this response | ||||
| * status     : The response from the server (e.g. '200 OK') | ||||
| * method     : The method for the request (e.g. 'GET', 'POST', 'PUT or 'DELETE') | ||||
| * controller : The actual controller method in Pecan responsible for the response | ||||
| * params     : A list of tuples for the params passed in at request time | ||||
| * hooks      : Any hooks that are used in the app will be listed here. | ||||
|  | ||||
| No configuration will show those values in the terminal via `stdout` and it | ||||
| will also add them to the response headers (in the form of | ||||
| `X-Pecan-item_name`). | ||||
|  | ||||
| This is how the terminal output look for a `/favicon.ico` request :: | ||||
|  | ||||
|     path         - /favicon.ico | ||||
|     status       - 404 Not Found | ||||
|     method       - GET | ||||
|     controller   - The resource could not be found. | ||||
|     params       - [] | ||||
|     hooks        - ['RequestViewerHook'] | ||||
|  | ||||
| In the above case, the file was not found, and the information was properly | ||||
| gathered and returned via `stdout`. | ||||
|  | ||||
| And this is how those same values would be seen in the response headers:: | ||||
|  | ||||
|     X-Pecan-path	/favicon.ico | ||||
|     X-Pecan-status	404 Not Found | ||||
|     X-Pecan-method	GET | ||||
|     X-Pecan-controller	The resource could not be found. | ||||
|     X-Pecan-params	[] | ||||
|     X-Pecan-hooks	['RequestViewerHook'] | ||||
|  | ||||
| The hook can be configured via a dictionary (or Config object from Pecan) when | ||||
| adding it to the application or via the `requestviewer` key in the actual | ||||
| configuration being passed to the application. | ||||
|  | ||||
| The configuration dictionary is flexible (none of the keys are required) and | ||||
| can hold two keys: `items` and `blacklist`. | ||||
|  | ||||
| This is how the hook would look if configured directly when using `make_app` | ||||
| (shortened for brevity):: | ||||
|  | ||||
|     ... | ||||
|     hooks = [ | ||||
|         RequestViewerHook({'items':['path']}) | ||||
|     ] | ||||
|  | ||||
| And the same configuration could be set in the config file like:: | ||||
|  | ||||
|     requestviewer = {'items:['path']} | ||||
|  | ||||
| Specifying items | ||||
| ---------------- | ||||
| Items are the actual information objects that the hook will use to return | ||||
| information. Sometimes you will need a specific piece of information or | ||||
| a certain bunch of them according to the development need so the defaults will | ||||
| need to be changed and a list of items specified. | ||||
|  | ||||
| .. :note: | ||||
|     When specifying a list of items, this list overrides completely the | ||||
|     defaults, so if a single item is listed, only that item will be returned by | ||||
|     the hook. | ||||
|  | ||||
| Remember, the hook has access to every single attribute the request object has | ||||
| and not only to the default ones that are displayed, so you can fine tune the | ||||
| information displayed. | ||||
|  | ||||
| These is a list containing all the possible attributes the hook has access to | ||||
| (directly from `webob`): | ||||
|  | ||||
| accept                       make_body_seekable  | ||||
| accept_charset               make_tempfile       | ||||
| accept_encoding              max_forwards        | ||||
| accept_language              method              | ||||
| application_url              params              | ||||
| as_string                    path                | ||||
| authorization                path_info           | ||||
| blank                        path_info_peek      | ||||
| body                         path_info_pop          | ||||
| body_file                    path_qs                       | ||||
| body_file_raw                path_url                      | ||||
| body_file_seekable           postvars                      | ||||
| cache_control                pragma                        | ||||
| call_application             query_string                  | ||||
| charset                      queryvars                     | ||||
| content_length               range                         | ||||
| content_type                 referer                       | ||||
| cookies                      referrer                      | ||||
| copy                         relative_url                  | ||||
| copy_body                    remote_addr                   | ||||
| copy_get                     remote_user                   | ||||
| date                         remove_conditional_headers    | ||||
| decode_param_names           request_body_tempfile_limit   | ||||
| environ                      scheme                        | ||||
| from_file                    script_name                   | ||||
| from_string                  server_name                   | ||||
| get_response                 server_port                   | ||||
| headers                      str_GET                       | ||||
| host                         str_POST                      | ||||
| host_url                     str_cookies                   | ||||
| http_version                 str_params                    | ||||
| if_match                     str_postvars                  | ||||
| if_modified_since            str_queryvars                 | ||||
| if_none_match                unicode_errors                | ||||
| if_range                     upath_info                    | ||||
| if_unmodified_since          url                           | ||||
| is_body_readable             urlargs                       | ||||
| is_body_seekable             urlvars                       | ||||
| is_xhr                       uscript_name                  | ||||
|                              user_agent                  | ||||
|  | ||||
| And these are the specific ones from Pecan and the hook: | ||||
|  | ||||
|  * controller | ||||
|  * hooks  | ||||
|  * params (params is actually available from `webob` but it is parsed  | ||||
|    by the hook for redability) | ||||
|  | ||||
| Blacklisting | ||||
| ------------ | ||||
| Sometimes is annoying to get information about *every* single request. For this | ||||
| purpose, there is a matching list of url paths that you can pass into the hook | ||||
| so that paths that do not match are returned. | ||||
|  | ||||
| The matching is done at the start of the url path, so be careful when using | ||||
| this feature. For example, if you pass a configuration like this one:: | ||||
|  | ||||
|     { 'blacklist': ['/f'] } | ||||
|  | ||||
| It would not show *any* url that starts with `f`, effectively behaving like | ||||
| a globbing regular expression (but not quite as powerful). | ||||
|  | ||||
| For any number of blocking you may need, just add as many items as wanted:: | ||||
|  | ||||
|     { 'blacklist' : ['/favicon.ico', '/javascript', '/images'] } | ||||
|  | ||||
| Again, the `blacklist` key can be used along with the `items` key or not (it is | ||||
| not required). | ||||
|   | ||||
| @@ -182,10 +182,10 @@ class RequestViewerHook(PecanHook): | ||||
|     Valid items are *any* item that the ``request`` object holds, by default it uses | ||||
|     the following: | ||||
|  | ||||
|     * url | ||||
|     * path | ||||
|     * status | ||||
|     * method | ||||
|     * response | ||||
|     * context | ||||
|     * controller | ||||
|     * params | ||||
|     * hooks | ||||
|  | ||||
| @@ -206,6 +206,7 @@ class RequestViewerHook(PecanHook): | ||||
|     .. :note:: | ||||
|         This key should always use a ``list`` of items to use. | ||||
|  | ||||
|     For more detailed documentation about this hook, please see :ref:`requestviewerhook` | ||||
|     ''' | ||||
|  | ||||
|     available = ['path', 'status', 'method', 'controller', 'params', 'hooks'] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alfredo Deza
					Alfredo Deza