A minimal Python environment abstraction with privacy controls and async βnextβ subscriptions.
pip install microenvor
python -m pip install microenvor
python3 -m pip install microenvimport asyncio
from microenv import microenv
# Define initial data and optional descriptor
data = {"public": 1, "secret": "s3cr3t"}
descriptor = {
"children": [
{"key": "public", "type": "number"},
{"key": "secret", "type": "string", "private": True},
]
}
# Create the environment
env = microenv(obj=data, descriptor=descriptor)
face = env.face
# Basic get / set via the face
print(face.public) # β 1
face.public = 42
print(env.data["public"]) # β 42
# Privacy: direct .secret bypasses privacy checks on the face
print(face.secret) # β "s3cr3t"
face.secret = "new!"
print(env.data["secret"]) # β "new!"
# Async βnextβ subscription: await the next update to a key
async def wait_for_update():
fut = env.get("public", next_=True)
print("waiting for next publicβ¦")
val = await fut
print("new public value:", val)
# Schedule waiter and then update
loop = asyncio.get_event_loop()
loop.create_task(wait_for_update())
loop.call_soon(lambda: setattr(face, "public", 99))
loop.run_forever()microenv(obj: dict, descriptor: dict = None) β MicroEnvenv.face: proxy for getting/setting properties.env.get(key, caller=None, next_=False): synchronous read or, ifnext_=True, a Future resolving on nextset.env.set(key, value, caller=None): update a property, resolving any pending βnextβ futures.
This project is licensed under the MIT License.
See LICENSE for details.