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 (only reference counting). 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.

Since 0.10

  • dataobject is new base class for creating subclasses, which are support the following properties by default 1) no __dict__ and __weakref__; 2) GC support disabled; 3) instances have less memory size than class instances with __slots__.
  • make_class is factory function for creation of dataobject subclasses described above.

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

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)

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)

Since 0.10 there is new base class dataobject. It's not following namedtuple API. It follows more attrs/dataclasses-like API. By default, subclasses of dataobject doesn't support cyclic GC, but only reference counting. As the result the instance of such class need less memory. The difference is equal to the size of PyGC_Head.

Subclasses of the dataobject are reasonable when reference cycles are not provided. For example, when all fields have values of atomic types (integer, float, strings, date and time, etc.). The field's value also may be the instance of a subclass of dataobject (i.e. without GC support). As an exception, the value of a field can be any object if our instance is not contained in this object and in its sub-objects.

Here example::

>>> from recordclass import dataobject, asdict

class Point(dataobject):
    x: int
    y: int
    
>>> print(Point.__annotations__)
{'x': <class 'int'>, 'y': <class 'int'>}

>>> p = Point(1,2)
>>> print(p)
Point(x=1, y=2)

>>> sys.getsizeof() # the output below is for 64bit python
32
>>> p.__sizeof__() == sys.getsizeof(p) # no additional space used by GC
True    

>>> p.x, p.y = 10, 20
>>> print(p)
Point(x=10, y=20)

>>> print(iter(p))
[1, 2]
    
>>> asdict(p)
{'x':1, 'y':2}

Default values are also supported::

class CPoint(dataobject):
    x: int
    y: int
    color: str = 'white'

>>> p = CPoint(1,2)
>>> print(p.x, p.y, p.color)
1 2 'white'
>>> print(p)
Point(x=1, y=2, color='white')

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, metaclass=recordclass):
    
    __attrs__ = ('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 discussions, 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 structclasstype, 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 cyclic_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', cyclic_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.10

  • Invent new factory function make_class for creation of different kind of dataobject classes without GC support by default.
  • Invent new metaclass datatype and new base class dataobject for creation dataobject class using class statement. It have disabled GC support, but could be enabled by decorator dataobject.enable_gc. It support type hints (for python >= 3.6) and default values. It may not specify sequence of field names in __fields__ when type hints are applied to all data attributes (for python >= 3.6).
  • Now recordclass-based classes may not support cyclic garbage collection too. This reduces the memory footprint by the size of PyGC_Head. Now by default recordclass-based classes doesn't support cyclic garbage collection.

0.9

  • Change version to 0.9 to indicate a step forward.
  • Cleanup dataobject.__cinit__.

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.10.tar.gz (139.6 kB view details)

Uploaded Source

Built Distributions

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

recordclass-0.10-cp37-cp37m-win_amd64.whl (113.6 kB view details)

Uploaded CPython 3.7mWindows x86-64

recordclass-0.10-cp37-cp37m-win32.whl (100.4 kB view details)

Uploaded CPython 3.7mWindows x86

recordclass-0.10-cp37-cp37m-macosx_10_9_x86_64.whl (116.7 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

recordclass-0.10-cp36-cp36m-win_amd64.whl (113.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

recordclass-0.10-cp36-cp36m-win32.whl (100.7 kB view details)

Uploaded CPython 3.6mWindows x86

recordclass-0.10-cp36-cp36m-macosx_10_9_x86_64.whl (119.0 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

recordclass-0.10-cp35-cp35m-win_amd64.whl (105.8 kB view details)

Uploaded CPython 3.5mWindows x86-64

recordclass-0.10-cp35-cp35m-win32.whl (92.7 kB view details)

Uploaded CPython 3.5mWindows x86

recordclass-0.10-cp35-cp35m-macosx_10_6_intel.whl (189.7 kB view details)

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

recordclass-0.10-cp34-cp34m-win_amd64.whl (99.9 kB view details)

Uploaded CPython 3.4mWindows x86-64

recordclass-0.10-cp34-cp34m-win32.whl (90.3 kB view details)

Uploaded CPython 3.4mWindows x86

recordclass-0.10-cp34-cp34m-macosx_10_6_intel.whl (188.9 kB view details)

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

recordclass-0.10-cp27-cp27m-win_amd64.whl (101.7 kB view details)

Uploaded CPython 2.7mWindows x86-64

recordclass-0.10-cp27-cp27m-win32.whl (90.3 kB view details)

Uploaded CPython 2.7mWindows x86

recordclass-0.10-cp27-cp27m-macosx_10_9_x86_64.whl (110.4 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for recordclass-0.10.tar.gz
Algorithm Hash digest
SHA256 9191ada17b798c5cf5616fc0b01c39abbcd3270240eb11b85393a40ca5e782dc
MD5 fbf2c1a5f84305571ce850ffaa545a06
BLAKE2b-256 6d7150a418d74b51623df185f5770d2e892ad65f1b97a2e81472517904899e83

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 113.6 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d6e7416c1f3970c2642cc58258cebbcfbf214cc902480076d680b899c12f669e
MD5 2820f72d412cff0920c811e835f32a3c
BLAKE2b-256 32c89eb88c1b3e3ddea4e69a633caa4eca93fb91878ae366d026f2fe94d7e602

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 100.4 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 d165d82a9d44c5b6bd4436704529e7eb6c4a12ced89b2f236c9963bb710f0949
MD5 85b6db664dd006c2afb91218043fbed2
BLAKE2b-256 e8d8bcb7d2e3c23ad12546b48246fef7fc22ce6c865ba3d313ef3a616fccef87

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 116.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dcf084b92f521b8e0fda0e3252ead1d056489c98c402d2fcbef231d4d2dd67a2
MD5 183c43f471054b83994b99a563914ff0
BLAKE2b-256 98f8c16603f35550aed59df3d5dd008213d81002e1deb53bef0cee76a9eadce6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 113.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7f2a8be30b2058de1a2cb6864d9cb4e838cb9d3fbad4636e86e11d59fee8d062
MD5 47cf68b6d07d6d9b912982a55ef27172
BLAKE2b-256 15a18a67c990539d328c9b053173de16fc3186e25e73756f5dcf8c7b4c509284

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 100.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 5e65815ebef8f3938aae1c3555ef41ad110d2fadce601e14ffdc48022b49210c
MD5 84a8cf84871a9ddb9501bac6a69f9d87
BLAKE2b-256 2aecca509400fc4feb997122f4b993d2deea7e68929ed958aa61076a6584c820

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 119.0 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 620ba5913112da61ebdb98b5043955a32d4d24f7819e1619df1284fa8e1a8068
MD5 b611156c62345ede45360f39b35f5ade
BLAKE2b-256 31ec4c2fc31a045c94eea473ca50efecc9e8acd217735347b2d37d90cec28b3e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 105.8 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 f75bb7ea17841444a47d10cf201c32cc61b26aa577766112f92fff79f6896113
MD5 42634baea14f068c10b9fc29008c63e0
BLAKE2b-256 f93039021ebda37916be64ac12f5eac8e000967df3c75f8a6d304f7e50a78ab7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 92.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 99e5d5cdfc11fa2d2996ca026d668a6e2437868426ef086fda660574e009c9b3
MD5 b12b52d2235a87c84aff13ac5f079184
BLAKE2b-256 e66dfc94dd016ae0836bfc67cf4a6c2bb580fa65a3584fe517796c033072c3c8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 189.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 6f810e366799f9aa19b9471cca70cc6402e57a6ac8602dd698276b4670d8484a
MD5 c2e3bef0c028b6e5a6cab415d2c1b7f5
BLAKE2b-256 eba6c064c4057b9553544ef6f52ffb5bdd11be8a4f3fd5bb096745c535f51115

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 99.9 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 76bd44f505b81eb72749cd5fa3b8cb96fec444b32db9fd7c6bbf216a9603d513
MD5 76311d424ec8374cd35b35ce299f4697
BLAKE2b-256 2fb7a40397f8d7252beefd6e11858b556bff570b977c4a2c6ac3f1ae3a61272f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 90.3 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 d02393705f3d20599534eec71f5685fc8289dea8b7f19ca63b638302372fd0ad
MD5 e14e075eddb0bc812e51155339415610
BLAKE2b-256 fe03973a9276d96faecf627a491aa0e4d9b0958b16d57d40317ca6a11f7ae7bf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp34-cp34m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 188.9 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 13380bd1b3576b20d0cc396785b2f5704c25869567a1265626e482e708c31f08
MD5 92cbc41b47d263a65e90e656dd23e3ee
BLAKE2b-256 608763bd3a9a3b4946412eb33dfba6d249e91d815637745d82c51e43445ad444

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 101.7 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 95ae5c1c7340157703186807dfaa02b07727b5bfa99656f0569ee4ed11d63d96
MD5 684c3dd5660d4dfbdcc19269f266466b
BLAKE2b-256 fd588e115ea85f7ffcc4529651c346a115f3e156bdf02b11605203e70ec8ce01

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 90.3 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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 943b84c4e31d413817546832650c326e9e9be80d66a562ec61c755e4dbf21fc8
MD5 483d5c5d29ce475811d57eb35b98d600
BLAKE2b-256 a795dc4690f243d4c32fcc5cac5080952802ccc31087a868d9d9f7e14eeab547

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 110.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.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

File hashes

Hashes for recordclass-0.10-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1827fb58c4de5b4b4c616db4cf71414a9b28fb7a15ec4780d4ed31387e5f70f1
MD5 4d6b904c78f135864fb889e72734f1e0
BLAKE2b-256 624a4053c9b8512028a3568a726979b4a550f3baaa1e18615fa6f65511c143b4

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