Skip to main content

Reactive state management for python

Project description

Nuclear - Reactive state management for python

Atoms and Derives

The base element in nuclear is called an atom. You can create one with atom({starting value}).

To create a derivative of an atom (or of another derivative) you can user the derivative({source}) function.

To get or set any atoms or derivatives, you can use the .set() and .get() methods.

To add reactions to changed, you can use the .react() method.

Example program:

base = atom(10) #Creates an atom with value 10
derived = derive(lambda: base.get() * 2) #Creates a derive which will always be equal to base * 2
derived.react(lambda: print('The value of derived was changed))

print(base.get()) # prints 10
print(derived.get()) # prints 20

base.set(20) # prints 'The value of derived was changed'
print(derived.get()) # prints 40

Events and Messages

To allow nuclear to implicitly send events and message, you must initialise it with nuclear.init(globals()).

To create a class that can recieve and send messages, it needs to inherit from Receiver.

To respond to events or messages, you can add methods to your class that follow the format:

For events, on_{your event name}

For messages, receive_{your message name}

Then to send events and messages you can use:

For events, broadcast({your event name})

For messages, send({your message name}, {data})

Example program:

nuclear.init(globals())

class TestClass(Receiver):
    def __init__(self):
        pass
    def on_TestEvent(self):
        print('Test Event received')
    def receive_TestMessage(self, data):
        print(f'TestMessage sent data {data}')

test1 = TestClass()

broadcast('TestEvent') # prints 'Test Event received'
send('TestMessage', 200) # prints 'TestMessage sent data 200'

You can also change the format with nuclear.format({events}, {messages}).

Event Modes

The event mode can be changed with eventMode({chosen mode})

  • explicit: Best performance: If you use this mode, you must tag every object that will receive an event or message with nuclear.event_r({event name}, {object}) or nuclear.message_r({message name}, {object}).

  • described: Second best performance: If you use this mode, you must run the nuclear.scan() function after you have initialised your objects.

  • predicted: Second worst performance: Automatically calls the scan function when you call your first event or message. May not work if you're objects are initialised after the function is called.

  • implicit: Worst performance: The default option, will always work.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nuclearstate-0.1.1.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

nuclearstate-0.1.1-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file nuclearstate-0.1.1.tar.gz.

File metadata

  • Download URL: nuclearstate-0.1.1.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for nuclearstate-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6069870a255141aa43d6fa80866252d567dbcd969eaf9671db406e8c25fb7868
MD5 4ba44be91f4cdeedcf75625c3aa50d25
BLAKE2b-256 bc15a0b2c021c046c556864cd76a670115c64fecf19ae955ef03660334fde984

See more details on using hashes here.

File details

Details for the file nuclearstate-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: nuclearstate-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for nuclearstate-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 572f9627f03cd408066d18b70ada6f8e94292f3ca5bea922c2013d6ced2794ce
MD5 18b5deb80c58054c0fcc6fa91502d73e
BLAKE2b-256 010ac37a76ebd7f472275397ad366422867b2be266ec2713e025a35b936bf3a2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page