Skip to main content

Dynamically immutable objects

Project description

PyPI version Documentation Status GitHub license

Freezable: Dynamically Immutable Objects

NOTICE: This project is in Alpha; you may encounter bugs.

Freezable is a package that allows you to implement "freezable" types in Python, which can either be "frozen" or "unfrozen." When frozen, all operations and methods that mutate the object are disabled.

Here is an example of a "freezable" stack and its usage:

from freezable import Freezable, FrozenError, enabled_when_unfrozen

class FreezableStack(Freezable):
    
    def __init__(self):
        self._data = []  # data of the stack
    
    @enabled_when_unfrozen
    def push(self, x):  # pushes to the top of stack
        self._data.append(x)

    def top(self):  # returns top of stack, if any
        return self._data[-1] if self._data else None

# We can use the stack as normal.
stk = FreezableStack()
assert stk.top() is None
stk.push(1)
assert stk.top() == 1
stk.push(2)
assert stk.top() == 2

# Once we freeze it, all mutating methods/operations are disabled.
stk.freeze()
try:
    stk.push(3)  # error because stk is frozen
except FrozenError:
    pass
assert stk.top() == 2  # push did not happen

# We can unfreeze it to use the stack mutably again.
stk.unfreeze()
stk.push(3)
assert stk.top() == 3

This package can be useful in finding logical errors in which objects are mutated when they are not supposed to.

Links

Documentation @ReadTheDocs (on most recent stable release)

PyPI Page

Installation

This package can be installed using Pip:

pip install freezable

Bug Reports and Feature Requests

You can report a bug or suggest a feature on the Github repo.

Contributions

Contributions to this project are welcome. :)

See the pull requests page on Github.

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

freezable-0.1.9.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freezable-0.1.9-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file freezable-0.1.9.tar.gz.

File metadata

  • Download URL: freezable-0.1.9.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.0 Windows/10

File hashes

Hashes for freezable-0.1.9.tar.gz
Algorithm Hash digest
SHA256 13142b3ae4f46b71435d64fa0daa9c8f6906373afea0a681e2d82fd6aed3e726
MD5 dab03fffd3625f36206d395b04dd59eb
BLAKE2b-256 2f8ef5055017152e823535ff714f82ef5c70049bad2b93d98918d40664c3d3ba

See more details on using hashes here.

File details

Details for the file freezable-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: freezable-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.0 Windows/10

File hashes

Hashes for freezable-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 adc65bbb0b24775db16c6f45e9757736a459bcf63522283ab367d01e54537523
MD5 4a482c17bdd2088ede633603741016d5
BLAKE2b-256 9bb8452b0f265bc5a92ea7897cd7cd734bf9669a2f8ee1a993982f33791ade42

See more details on using hashes here.

Supported by

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