Skip to main content

Mutable variants of tuple (memoryslots) and collections.namedtuple (recordclass), which support assignments and more memory saving variants (arrayclass and structclass)

Project description

Recordclass library

What is all about?

Recordclass is MIT Licensed python library. From the begining it implements the type memoryslots and factory function recordclass in order to create record-like classes -- mutable variant of collection.namedtuple. Later more memory saving variant structclass is added.

  • memoryslots is mutable variant of the tuple, which supports assignment operations.
  • recordclass is a factory function that create a "mutable" analog of collection.namedtuple. It produces a subclass of memoryslots.
  • structclass is an analog of recordclass. It produces a class with less memory footprint (same as class instances with __slots__) and namedtuple-like API. It's instances has no __dict__, __weakref__ and don't support cyclic garbage collection by default. But structclass-created classes can support any of them.
  • arrayclass is factory function. It also produces a class with same memory footprint as structclass-created class instances. It implements an array of object. By default created class has no __dict__, __weakref__ and don't support cyclic garbage collection. But it can add support any of them.

This library starts as a "proof of concept" for the problem of fast "mutable" alternative of namedtuple (see question on stackoverflow). It was evolved further in order to provide more memory saving, fast and flexible types for representation of data objects.

Main repository for recordclass is on bitbucket.

Here is also a simple example.

Quick start:

First load inventory:

>>> from recordclass import recordclass, RecordClass

Simple example with recordclass:

>>> Point = recordclass('Point', 'x y')
>>> p = Point(1,2)
>>> print(p)
Point(1, 2)
>>> print(p.x, p.y)
1 2
>>> p.x, p.y = 10, 20
>>> print(p)
Point(10, 20)

Simple example with RecordClass and typehints::

class Point(RecordClass):
   x: int
   y: int

>>> ptint(Point.__annotations__)
{'x': <class 'int'>, 'y': <class 'int'>}
>>> p = Point(1, 2)
>>> print(p)
Point(1, 2)
>>> print(p.x, p.y)
1 2
>>> p.x, p.y = 10, 20
>>> print(p)
Point(10, 20)

Recordclass

Recorclass was created as answer to question on stackoverflow.com.

Recordclass was designed and implemented as a type that, by api, memory footprint, and speed, would be almost identical to namedtuple, except that it would support assignments that could replace any element without creating a new instance, as in namedtuple (support assignments __setitem__ / setslice__).

The effectiveness of a namedtuple is based on the effectiveness of the tuple type in python. In order to achieve the same efficiency, it was created the type memoryslots. The structure (PyMemorySlotsObject) is identical to the structure of the tuple (PyTupleObject) and therefore occupies the same amount of memory as tuple.

Recordclass is defined on top of memoryslots in the same way as namedtuple defined on top of tuple. Attributes are accessed via a descriptor (itemgetset), which provides quick access and assignment by attribute index.

The class generated by recordclass looks like:

from recordclass import memoryslots, itemgetset

class C(memoryslots):
    __slots__ = ()

    _fields = ('attr_1',...,'attr_m')

    attr_1 = itemgetset(0)
    ...
    attr_m = itemgetset(m-1)

    def __new__(cls, attr_1, ..., attr_m):
        'Create new instance of C(attr_1, ..., attr_m)'
        return memoryslots.__new__(cls, attr_1, ..., attr_m)

etc. following the definition scheme of namedtuple.

As a result, recordclass takes up as much memory as namedtuple, supports fast access by __getitem__ / __setitem__ and by the name of the attribute through the descriptor protocol.

Structclass

In the discussion, it was correctly noted that instances of classes with __slots__ also support fast access to the object fields and take up less memory than tuple and instances of classes created using the factory function recordclass. This happens because instances of classes with __slots__ do not store the number of elements, like tuple and others (PyObjectVar), but they store the number of elements and the list of attributes in their type ( PyHeapTypeObject).

Therefore, a special class prototype was created from which, using a special metaclass of arrayclasstype, classes can be created, instances of which can occupy as much in memory as instances of classes with __slots__, but do not use __slots__ at all. Based on this, the factory function recordclass2 can create classes, instances of which are all similar to instances created using recordclass, but taking up less memory space.

The class generated by recordclass looks like:

from recordclass.arrayclass import RecordClass, dataobject, dataobjectgetset, structclasstype

class C(dataobject):
    __metaclass__ = structclasstype

    __attrs__ = ('attr_1',...,'attr_m')

    attr_1 = dataobjectgetset(0)
    ...
    attr_m = dataobjectgetset(m-1)

    def __new__(cls, attr_1, ..., attr_m):
        'Create new instance of C(attr_1, ..., attr_m)'
        return dataobject.__new__(cls, attr_1, ..., attr_m)

etc. following the definition scheme of recordclass.

As a result, structclass-based objects takes up as much memory as __slots__-based instances and also have same functionality as recordclass-created instances.

Comparisons

The following table explain memory footprints of recordclass-, recordclass2-base objects:

namedtuple class/__slots__ recordclass structclass
b+s+n*p b+n*p b+s+n*p b+n*p-g

where:

  • b = sizeof(PyObject)
  • s = sizeof(Py_ssize_t)
  • n = number of items
  • p = sizeof(PyObject*)
  • g = sizeof(PyGC_Head)

Special option gc=False (by default) of structclass allows to disable support of the cyclic garbage collection. This is useful in that case when you absolutely sure that reference cycle isn't possible. For example, when all field values are instances of atomic types. As a result the size of the instance is decreased by 24 bytes:

    class S:
        __slots__ = ('a','b','c')
        def __init__(self, a, b, c):
            self.a = a
            self.b = b
            self.c = c

    R_gc = recordclass2('R_gc', 'a b c', gc=True)
    R_nogc = recordclass2('R_nogc', 'a b c')

    s = S(1,2,3)
    r_gc = R_gc(1,2,3) 
    r_nogc = R_nogc(1,2,3)
    for o in (s, r_gc, r_nogc):
        print(sys.getsizeof(o))
    64 64 40

Here are also table with some performance counters:

namedtuple class/__slots__ recordclass structclass
new 739±24 ns 915±35 ns 763±21 ns 889±34 ns
getattr 84.0±1.7 ns 42.8±1.5 ns 39.5±1.0 ns 41.7±1.1 ns
setattr 50.5±1.7 ns 50.9±1.5 ns 48.8±1.0 ns

Changes:

0.8.5

  • Make arrayclass-based objects support setitem/getitem and structclass-based objects able to not support them. By default, as before structclass-based objects support setitem/getitem protocol.
  • Now only instances of dataobject are comparable to 'arrayclass'-based and structclass-based instances.
  • Now generated classes can be hashable.

0.8.4

  • Improve support for readonly mode for structclass and arrayclass.
  • Add tests for arrayclass.

0.8.3

  • Add typehints support to structclass-based classes.

0.8.2

  • Remove usedict, gc, weaklist from the class __dict__.

0.8.1

  • Remove Cython dependence by default for building recordclass from the sources [Issue #7].

0.8

  • Add structclass factory function. It's analog of recordclass but with less memory footprint for it's instances (same as for instances of classes with __slots__) in the camparison with recordclass and namedtuple (it currently implemented with Cython).
  • Add arrayclass factory function which produce a class for creation fixed size array. The benefit of such approach is also less memory footprint (it currently currently implemented with Cython).
  • structclass factory has argument gc now. If gc=False (by default) support of cyclic garbage collection will switched off for instances of the created class.
  • Add function join(C1, C2) in order to join two structclass-based classes C1 and C2.
  • Add sequenceproxy function for creation of immutable and hashable proxy object from class instances, which implement access by index (it currently currently implemented with Cython).
  • Add support for access to recordclass object attributes by idiom: ob['attrname'] (Issue #5).
  • Add argument readonly to recordclass factory to produce immutable namedtuple. In contrast to collection.namedtuple it use same descriptors as for regular recordclasses for performance increasing.

0.7

  • Make memoryslots objects creation faster. As a side effect: when number of fields >= 8 recordclass instance creation time is not biger than creation time of instaces of dataclasses with __slots__.
  • Recordclass factory function now create new recordclass classes in the same way as namedtuple in 3.7 (there is no compilation of generated python source of class).

0.6

  • Add support for default values in recordclass factory function in correspondence to same addition to namedtuple in python 3.7.

0.5

  • Change version to 0.5

0.4.4

  • Add support for default values in RecordClass (patches from Pedro von Hertwig)
  • Add tests for RecorClass (adopted from python tests for NamedTuple)

0.4.3

  • Add support for typing for python 3.6 (patches from Vladimir Bolshakov).
  • Resolve memory leak issue.

0.4.2

  • Fix memory leak in property getter/setter

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

recordclass-0.8.5.tar.gz (113.1 kB view details)

Uploaded Source

Built Distributions

recordclass-0.8.5-cp37-cp37m-win_amd64.whl (89.9 kB view details)

Uploaded CPython 3.7mWindows x86-64

recordclass-0.8.5-cp37-cp37m-win32.whl (79.1 kB view details)

Uploaded CPython 3.7mWindows x86

recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl (94.3 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

recordclass-0.8.5-cp36-cp36m-win_amd64.whl (89.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

recordclass-0.8.5-cp36-cp36m-win32.whl (79.2 kB view details)

Uploaded CPython 3.6mWindows x86

recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl (96.9 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

recordclass-0.8.5-cp35-cp35m-win_amd64.whl (83.9 kB view details)

Uploaded CPython 3.5mWindows x86-64

recordclass-0.8.5-cp35-cp35m-win32.whl (73.1 kB view details)

Uploaded CPython 3.5mWindows x86

recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl (155.1 kB view details)

Uploaded CPython 3.5mmacOS 10.6+ Intel (x86-64, i386)

recordclass-0.8.5-cp34-cp34m-win_amd64.whl (80.3 kB view details)

Uploaded CPython 3.4mWindows x86-64

recordclass-0.8.5-cp34-cp34m-win32.whl (72.2 kB view details)

Uploaded CPython 3.4mWindows x86

recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl (153.6 kB view details)

Uploaded CPython 3.4mmacOS 10.6+ Intel (x86-64, i386)

recordclass-0.8.5-cp27-cp27m-win_amd64.whl (81.2 kB view details)

Uploaded CPython 2.7mWindows x86-64

recordclass-0.8.5-cp27-cp27m-win32.whl (72.1 kB view details)

Uploaded CPython 2.7mWindows x86

recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl (89.4 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

Details for the file recordclass-0.8.5.tar.gz.

File metadata

  • Download URL: recordclass-0.8.5.tar.gz
  • Upload date:
  • Size: 113.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5.tar.gz
Algorithm Hash digest
SHA256 259e85608743ea17b69dcfab7810c70ff6d68d1433134ab0bb4a4756d28b3672
MD5 2fb640974abc72bf24fb50a090c78ab1
BLAKE2b-256 924864ea5d4d0aa7266a4715411099bd0cfaa0e13e8f8e60592f9c8733dbdb44

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 89.9 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 2b1d7d1b49df74b580bd248e04a8935a977c8aa2e7287ef25d76d90d5a699ece
MD5 7a9a69b9fa7edd4df7dea902d72a33a5
BLAKE2b-256 b92862976557bda09a7df8a1e86d76c27e59467512f5bd77b6abac27cedfc0bc

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp37-cp37m-win32.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 79.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 e6bfa3f5056f94b396f84e6ded9ce7c6f972a0c98cf94ff48a77a940786bf016
MD5 9fb753b42edc2b515f5428aa9aeff971
BLAKE2b-256 08ff38a0851b89ca43d5efc44c2921733557b78c11aa4caca858979c8d8f8561

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 94.3 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6670bfeb968731d01631a6d3e21c754554e67fb66507c8869bbd564b4e633dba
MD5 724bf373c7795a8a3977a1512713fd19
BLAKE2b-256 e5a2bfd4d81bec1feabdbb72094a17bbb66e81890cb7ba6db953e898c1ccdd18

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 89.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 1c4d8537a1664a2d74c2475b5e4753009c11f96e280a37def82a73fb116d3008
MD5 a1a619c72351859a768d4223e5ad190f
BLAKE2b-256 e5b1c2c02bd77d3e7fb5f739275a9a2ec15379d64c349684abc3fc9a1c0c3118

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp36-cp36m-win32.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 79.2 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 4b1ed97c7046f82fa4e354f72a424add02c0772011dab93302bd090bf8aedc4d
MD5 a137663ce4990f003c381dc07d4c93a7
BLAKE2b-256 37a104c91f3854a99179ac41eb8eb634d4c56baca2aa4c1b8bbbca340f25b718

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 96.9 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ec0dbd1b3389f6210172eff2a512cd1bc432835c9fff7d8f89304499c4c4da23
MD5 15a2f93a9f2ce3a31321f8622163922e
BLAKE2b-256 60153d0d1b4ec6df150f7f47138aa2e0a727c7a8ef0d4d5391ee0618e2885b3a

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 83.9 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 c718c1e19a6e745fbebe12cbfdcc9300cf8ec349b0da55cfb1218f4b36130457
MD5 768f98b12328086d61d98c2138e3f2c7
BLAKE2b-256 6d67f7e35b4791b406c787d6aacaa97a63678ec319ec57bd937445694bfe4286

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp35-cp35m-win32.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 73.1 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 b4fbc44d819c54536ee464a78d068a9a3533d575535113232e13740dc6310bec
MD5 372a2616241a0a42c28c7fd593288ace
BLAKE2b-256 70a714da06ad99525a6c5a4d079aebc4d6e4452729c64f5a2b1c1ef699725347

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 155.1 kB
  • Tags: CPython 3.5m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 0605ad37f0a62d4b0dec2865e0100ff2f88e36360b1f24fa194871d244eea078
MD5 62452e1ce0899a984842271ba9b95944
BLAKE2b-256 5721de15fc6d3fc71553c32201b921f2aa11a925708f3d5d47e53c756b28be0c

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp34-cp34m-win_amd64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 80.3 kB
  • Tags: CPython 3.4m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 8c5950b76d197854f88ace810c8b58c3ee446c08e3746df2f36f74b86152010c
MD5 9338249f4ce2913535c667b44095eb6e
BLAKE2b-256 77034e07de4ca99f2ab0bb9097eb6e92fbf92b3476d539f31c55d1d33f132cc5

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp34-cp34m-win32.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 72.2 kB
  • Tags: CPython 3.4m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 daf6a74d40ec0274780fad6f91555f252e3c8e7899895041156b3c6be57d20ce
MD5 0192d637e21457c72280182468346db0
BLAKE2b-256 2c32ad739aeef02ec3363d37cd5608b2163a40edc4a65b3a1064a67cf68b53bb

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 153.6 kB
  • Tags: CPython 3.4m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 b67cf67efcd3b39f39ef50cd773c6d732e4027712e15da5a1248fc08321ab2cb
MD5 924bb2f1f88b93df4d362131d9cb04c8
BLAKE2b-256 c8a4f64b8136bdd8c69f1aa519063b41d92fc3459bb78a744a15f4e4196267e5

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 81.2 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 b70692f1cee6ffcdd2a1b990990266a8e186f2731ff2ed8e6cbfd0564b1658cd
MD5 8e1a79114944a99e4294dd83507c93f9
BLAKE2b-256 d5405391cd895d04b7d7abd67147512795273a4e1a65533524fa24d3aee3ff71

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp27-cp27m-win32.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 72.1 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 92989faacf76d2b09fad748409d1c87bcc2e1a6aa05342ddbd69da71f81acdc4
MD5 b728ea0289a3409169accf2b449b1aff
BLAKE2b-256 06a79e59404ba4b272c5ca9c89a6b8895989b065fe2e424ab8d225e5a75d32df

See more details on using hashes here.

File details

Details for the file recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 89.4 kB
  • Tags: CPython 2.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 553c9830add9ac7a223d7f1eb7fbdccdbe5ca3e5896aa1168bd3cae83dcae43b
MD5 f20081bfabdf3df92b8276bc5467bfb1
BLAKE2b-256 e16718ea40667a7917f4ffad65936ce6bcc828eca605dbc1a2162f93e743112b

See more details on using hashes here.

Supported by

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