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'