ProxyΒΆ

door.utilities.Proxy is a protection proxy around any desired object to facilitate enforcement of sound access. This class is used by doors.

A sample usage of door.utilities.Proxy is shown below:

First, create a resource.

>>> from dataclasses import dataclass
>>> @dataclass
... class Resource:
...     key: str = 'value'
...
>>> resource = Resource()
>>> resource
Resource(key='value')
>>> resource.key
'value'

Next, wrap it in a proxy. Let us do read-only first.

>>> from door.utilities import Proxy
>>> proxy = Proxy(resource, Proxy.Mode.READ)
>>> proxy.key
'value'
>>> proxy.key = 'VALUE'
Traceback (most recent call last):
    ...
ValueError: no write permission
>>> proxy.close()

When closed, all operations are forbidden.

>>> proxy.key
Traceback (most recent call last):
    ...
ValueError: no read permission
>>> proxy.key = 'VALUE'
Traceback (most recent call last):
    ...
ValueError: no write permission

Again, wrap it in a proxy, this time, write-only.

>>> proxy = Proxy(resource, Proxy.Mode.WRITE)
>>> proxy.key = 'VALUE'
>>> proxy.key
Traceback (most recent call last):
    ...
ValueError: no read permission
>>> proxy.close()

Finally, wrap it read-write proxy.

>>> proxy = Proxy(resource, Proxy.Mode.READ | Proxy.Mode.WRITE)
>>> proxy.key
'VALUE'
>>> proxy.key = 'value'
>>> proxy.key
'value'
>>> proxy.close()

Check the final value.

>>> resource
Resource(key='value')
>>> resource.key
'value'