| :mod:`Bastion` --- Restricting access to objects | |
| ================================================ | |
| .. module:: Bastion | |
| :synopsis: Providing restricted access to objects. | |
| :deprecated: | |
| .. deprecated:: 2.6 | |
| The :mod:`Bastion` module has been removed in Python 3. | |
| .. moduleauthor:: Barry Warsaw <bwarsaw@python.org> | |
| .. versionchanged:: 2.3 | |
| Disabled module. | |
| .. note:: | |
| The documentation has been left in place to help in reading old code that uses | |
| the module. | |
| According to the dictionary, a bastion is "a fortified area or position", or | |
| "something that is considered a stronghold." It's a suitable name for this | |
| module, which provides a way to forbid access to certain attributes of an | |
| object. It must always be used with the :mod:`rexec` module, in order to allow | |
| restricted-mode programs access to certain safe attributes of an object, while | |
| denying access to other, unsafe attributes. | |
| .. I'm concerned that the word 'bastion' won't be understood by people | |
| .. for whom English is a second language, making the module name | |
| .. somewhat mysterious. Thus, the brief definition... --amk | |
| .. I've punted on the issue of documenting keyword arguments for now. | |
| .. function:: Bastion(object[, filter[, name[, class]]]) | |
| Protect the object *object*, returning a bastion for the object. Any attempt to | |
| access one of the object's attributes will have to be approved by the *filter* | |
| function; if the access is denied an :exc:`AttributeError` exception will be | |
| raised. | |
| If present, *filter* must be a function that accepts a string containing an | |
| attribute name, and returns true if access to that attribute will be permitted; | |
| if *filter* returns false, the access is denied. The default filter denies | |
| access to any function beginning with an underscore (``'_'``). The bastion's | |
| string representation will be ``<Bastion for name>`` if a value for *name* is | |
| provided; otherwise, ``repr(object)`` will be used. | |
| *class*, if present, should be a subclass of :class:`BastionClass`; see the | |
| code in :file:`bastion.py` for the details. Overriding the default | |
| :class:`BastionClass` will rarely be required. | |
| .. class:: BastionClass(getfunc, name) | |
| Class which actually implements bastion objects. This is the default class used | |
| by :func:`Bastion`. The *getfunc* parameter is a function which returns the | |
| value of an attribute which should be exposed to the restricted execution | |
| environment when called with the name of the attribute as the only parameter. | |
| *name* is used to construct the :func:`repr` of the :class:`BastionClass` | |
| instance. | |