Skip to main content

Immutable struct built on top of collections.namedtuple with sane defaults

Goals

  • Immutable, dictionary-like data structure (Note: istruct is not an immutable version of the existing struct in Python)

  • Minimal

  • Support required and optional fields (with default values)

  • Strictly disallow positional arguments

Installation

pip install istruct

Quick Start

First, create an istruct object called person where first_name and last_name are required whereas middle_name, dob and email are optional (with default values specified).

>>> from istruct import istruct
>>> person = istruct("first_name", "last_name", middle_name="", dob="2000-01-01", email=None)

Then, create an instance of person with first_name, last_name and middle_name.

>>> p = person(first_name="Jim", last_name="Raynor", middle_name="Eugene")
>>> p
istruct(first_name='Jim', last_name='Raynor', email=None, dob='2000-01-01', middle_name='Eugene')

You can retrieve field values like you would normally do.

>>> p.first_name
'Jim'
>>> p.dob
'2000-01-01'

p is immutable, meaning that it cannot be modified after created. Thus, set/delete operations like below would fail, raising an AttributeError.

>>> p.first_name = "James"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
>>> del p.email
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't delete attribute

istruct only accepts named/keyword arguments. It strictly disallows positional arguments by design.

>>> p = person("Jim", "Raynor")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 52, in _istruct
    "(%d found)" % (len(positional),))
TypeError: No positional arguments are allowed in istruct (2 found)

istruct would raise a TypeError when one or more required fields are omitted.

>>> p = person(last_name="Raynor")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 56, in _istruct
    return nt(**merge_dicts(kwargs, attrs))
TypeError: __new__() missing 1 required positional argument: 'first_name'

Versions Tested

  • Python 2.7

  • Python 3.2

  • Python 3.3

  • Python 3.4

  • Python 3.5

  • Python 3.6

  • PyPy

  • PyPy3

TODO

  • Find ways to annotate types

License

MIT

Download files

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

Source Distribution

istruct-0.1.6.tar.gz (2.8 kB view details)

Uploaded Source

File details

Details for the file istruct-0.1.6.tar.gz.

File metadata

  • Download URL: istruct-0.1.6.tar.gz
  • Upload date:
  • Size: 2.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for istruct-0.1.6.tar.gz
Algorithm Hash digest
SHA256 d20576560a3cf26f5a29035f74ed8b4621ad692fdb08ef3a1c07e48112af6782
MD5 d9915847a386b4868d9c85b0068f4586
BLAKE2b-256 37a671bd4d1b14a5b6827e12ce66bc8397d4a75d60c5ecfd708af2be1be1df97

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.6 This release

1 file

0.1.5

1 file

0.1.3

0.1.2

0.1.1

0.1

Supported by

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