Skip to main content

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.

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.

Metadata

Release files for freezable 0.1.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for freezable 0.1.9
File Size Uploaded
freezable-0.1.9.tar.gz 5.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for freezable 0.1.9
File Interpreter ABI Platform
freezable-0.1.9-py3-none-any.whl Python 3 none any Details

Total release size: 10.2 kB

Release files / freezable-0.1.9.tar.gz

Download URL freezable-0.1.9.tar.gz
Size 5.2 kB
Tags Source
SHA-256 checksum
How to use checksums
13142b3ae4f46b71435d64fa0daa9c8f6906373afea0a681e2d82fd6aed3e726
BLAKE2b-256 checksum
How to use checksums
2f8ef5055017152e823535ff714f82ef5c70049bad2b93d98918d40664c3d3ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.0 Windows/10

Release files / freezable-0.1.9-py3-none-any.whl

Download URL freezable-0.1.9-py3-none-any.whl
Size 5.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
adc65bbb0b24775db16c6f45e9757736a459bcf63522283ab367d01e54537523
BLAKE2b-256 checksum
How to use checksums
9bb8452b0f265bc5a92ea7897cd7cd734bf9669a2f8ee1a993982f33791ade42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.0 Windows/10

Release history Release notifications | RSS feed

This release

0.1.9 This release

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page