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.2

  • Fix error with dataobject's copy.
  • Fix error with pickling of recordclasses and structclasses, which was appeared since 0.8.5 (Thanks to Connor Wolf).

0.10.1

  • Now by default sequence protocol is not supported by default if dataobject has fields, but iteration is supported.
  • By default argsonly=False for usability reasons.

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.2.tar.gz (139.2 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.2-cp37-cp37m-win_amd64.whl (114.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

recordclass-0.10.2-cp37-cp37m-win32.whl (101.7 kB view details)

Uploaded CPython 3.7mWindows x86

recordclass-0.10.2-cp37-cp37m-macosx_10_9_x86_64.whl (118.2 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

recordclass-0.10.2-cp36-cp36m-win_amd64.whl (114.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

recordclass-0.10.2-cp36-cp36m-win32.whl (102.0 kB view details)

Uploaded CPython 3.6mWindows x86

recordclass-0.10.2-cp36-cp36m-macosx_10_9_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

recordclass-0.10.2-cp35-cp35m-win_amd64.whl (106.7 kB view details)

Uploaded CPython 3.5mWindows x86-64

recordclass-0.10.2-cp35-cp35m-win32.whl (93.6 kB view details)

Uploaded CPython 3.5mWindows x86

recordclass-0.10.2-cp35-cp35m-macosx_10_6_intel.whl (191.5 kB view details)

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

recordclass-0.10.2-cp34-cp34m-win_amd64.whl (100.8 kB view details)

Uploaded CPython 3.4mWindows x86-64

recordclass-0.10.2-cp34-cp34m-win32.whl (91.2 kB view details)

Uploaded CPython 3.4mWindows x86

recordclass-0.10.2-cp34-cp34m-macosx_10_6_intel.whl (190.8 kB view details)

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

recordclass-0.10.2-cp27-cp27m-win_amd64.whl (102.6 kB view details)

Uploaded CPython 2.7mWindows x86-64

recordclass-0.10.2-cp27-cp27m-win32.whl (91.1 kB view details)

Uploaded CPython 2.7mWindows x86

recordclass-0.10.2-cp27-cp27m-macosx_10_9_x86_64.whl (111.5 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: recordclass-0.10.2.tar.gz
  • Upload date:
  • Size: 139.2 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.2.tar.gz
Algorithm Hash digest
SHA256 3da72731757d45d81ebfa2c0047e34af55f44dbb7c88ee096e27276e62c39885
MD5 0bc8f7586123a3793dccf0923e98d40b
BLAKE2b-256 137d5b581855b56f34ee3c51b719a9db0f083d1ccfa920cb49ac05fdb7e9ae33

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 114.8 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.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 10cf16916f828d627aec376f52cce29bee9c311eb517b2448222d64cda32279c
MD5 9a293d34f6cf0275fe3ac4a20acd46d2
BLAKE2b-256 e1e72be20aa44606d1ac70cf29faa4892e90319e3c9d95eb360830a0e0057b56

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 101.7 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.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 3fae952cda8dde6dea14ab16dc604ec030294bc97d3398fdb065fda7a1ee2300
MD5 63959520f0618d6d691845a2086008eb
BLAKE2b-256 da22cc6ecacb94519273379b101681d6de55ab2456bc37e83290e05bc30557a3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 118.2 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.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2e9f8c164cdd30941bb057d10fdae0729504d33f581122122d450582cf8e7f56
MD5 e71c5a81486a154d15894acec2a08c02
BLAKE2b-256 0497a94ac647e1725f7328ace5e668182c55c790c62582d5142828fe9bc2d4a8

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for recordclass-0.10.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7a58fa36d603a83dd5fd2b96689baf1d558eaec3a0c705479f0189480d282b5b
MD5 d1d16ce01a92c5d07d9935c8c15f2908
BLAKE2b-256 52959b786874061a29e4d7289f9685b13f1713ddbf9e655e0e5440122f684dac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 102.0 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.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 5eb6f7f36bba1d0e679da8ad0967c0ba56c9f9f999cf6cb5ac7f04f923b9dcaf
MD5 9aab57b5de3cb4f13dafe0c2ed064dab
BLAKE2b-256 29eff3a322546a8c7b98a0b6d64568ff8935d3047a5197d422bedd9317cc71f1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 120.5 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.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d137e99d3017a6ebb4bb2ca391be545917204a7cd060cd91e38acb74acdef932
MD5 2f54a1345dfcfc61a2ffc1d74fff1145
BLAKE2b-256 b433b2dfa8730a9e59c88591a2a121d24fa1950dc772f4037de3fc75cd0d5c15

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 106.7 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.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 2ce3fd3fee852f17bab5d2bed1ea96013349d16ec6a2cfaa313120aa8727504a
MD5 18a77a7b263c2ab6056996071091d73d
BLAKE2b-256 91e329d999da37d6403ffe179971149360cae0acc4de1a4fbb0e9f1fc0b75560

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 93.6 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.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 c8aee15590728a5975969d4ea7e6641b415d5aa1637f7335910f5eb6877a5ea3
MD5 b00ec1ce3131c7c0431a4912879c754c
BLAKE2b-256 e6efd4d15f84b99932a3a26df3751636230e63261481aafad5876523710050a8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 191.5 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.2-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 9c2b1807b3570526561d4d4ab158e1160b94e598cf1dd21a812f7c85d056a5ab
MD5 5d5f5e207268b9e3494c6957b5b2b3a2
BLAKE2b-256 3b495083ace7dc8fe65cf449fdef3dcfd6bcaaaca348805a8faa6c97ebc266d2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 100.8 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.2-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 79c19f477ae96eea3ae3ca5a6d046cfe3b8940bd127c9b2881edd84bc30bb516
MD5 7ada4921bf631658b722a2652ce54090
BLAKE2b-256 d548b5eb2e097e5314727a7febce0d2e93d33406489018a1339b984993cc0788

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for recordclass-0.10.2-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 a3d7fe8bc57e67d35c5abd0049023921a2f2dd642d29c531af7d0eb82292e30b
MD5 901a164167eae91cd07a04e8485f2655
BLAKE2b-256 1bacf0876752e6192824b7c6debd8ed76a994886fde89daa4211c0a63b6516d4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp34-cp34m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 190.8 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.2-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 48ea81ef8513e0bae388fb08b62a4d75508620cde5633536d23eb7b722d021b1
MD5 a3c2ea14e707925f334cb3883bdc0c3a
BLAKE2b-256 2995e824b07054c2fdb2f0f8a45273e34c48e1df2263d903a40c9052cf118a1a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 102.6 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.2-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 707fc7b94cdade8a9b868335c144f1ba6cbfe3c9940f4d42bfc6f91d27f5176a
MD5 8c4ffa75851cd86c68ddd0cf0587c570
BLAKE2b-256 2f88571ace1416abd0548627ec416e9d498279bb433b43061e0a782a9bf8e458

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for recordclass-0.10.2-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 d0b54cd47579a6707006585144d40af6f105aeb75d31faa08284d4f35f64365a
MD5 ad59a9d53b17fa77a8674f7a1e139b26
BLAKE2b-256 6e6ff0bd70bf74cbed0372a6857079888872e39b1b7c09209b24196a425a3ea8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.10.2-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 111.5 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.2-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e5e90dd87e35f4cd63d33f5d52959e0a8854a124e5ffc604af9b5e4debf1e9e0
MD5 1b450483d73179ea1095bb5205f34187
BLAKE2b-256 6eb425038530e3fe1f61ad2e68b696e7aa094251481e6ab6eab2996ad0df0cc1

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