Skip to main content

Mutable variants of tuple and collections.namedtuple, which support assignments

Project description

# RECORDCLASS

**recordclass** is [MIT Licensed](http://opensource.org/licenses/MIT) 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 `tuple`-like type, which supports assignment operations.
* `recordclass` is a factory function that create a "mutable" analog of
`collection.namedtuple`. It produce a subclass of `memoryslots`. Attribute
access is provided on the base of specially defined desciptors (`memoryslots.getsetitem`).
* `structclass` is analog of `recordclass`. It produce 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 suuport cyclic garbage collection by default. But `structclass` can support
any of them.
* `arrayclass` is factory function. It also produce a class with same memory footprint as class
instances with `__slots__`. It implements array of object.

This library starts as a "proof of concept" for the problem of fast "mutable"
alternative of `namedtuple` (see [question](https://stackoverflow.com/questions/29290359/existence-of-mutable-named-tuple-in-python) on stackoverflow).

Main repository for `recordclass`
is on [bitbucket](https://bitbucket.org/intellimath/recordclass).

Here is also a simple [example](http://nbviewer.ipython.org/urls/bitbucket.org/intellimath/recordclass/raw/default/examples/what_is_recordclass.ipynb).

## 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

>>> 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 unswer to [question](https://stackoverflow.com/questions/29290359/existence-of-mutable-named-tuple-in-python/29419745#29419745) on `stackoverflow.com`.

`Recordclass` was designed and implemented as a type that, by api, memory footprint, and speed, would be completely identical to` namedtuple`, except that it would support assignments that could replace any element without creating a new instance, as in ` namedtuple`, i.e. it would be almost identical to `namedtuple` and
would support in addition 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, we had to create the type `memoryslots`. It's structure (`PyMemorySlotsObject`) is identical to the structure` 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:

``` python
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 {typename}({arg_list})'
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.

## Recordclass2

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:

``` python
from recordclass.arrayclass import RecordClass, ArrayClassGetSet, arrayclasstype

class C(ArrayClass):
__metaclass__ = arrayclasstype

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

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

def __new__(cls, attr_1, ..., attr_m):
'Create new instance of {typename}({arg_list})'
return ArrayClass.__new__(cls, attr_1, ..., attr_m)
```
etc. following the definition scheme of `recordclass`.

As a result, `recordclass2`-created 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:

``` python
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
```


### Changes:

#### 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.tar.gz (107.0 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.8-cp37-cp37m-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.7mWindows x86-64

recordclass-0.8-cp37-cp37m-win32.whl (69.2 kB view details)

Uploaded CPython 3.7mWindows x86

recordclass-0.8-cp37-cp37m-macosx_10_9_x86_64.whl (86.5 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

recordclass-0.8-cp36-cp36m-win_amd64.whl (78.6 kB view details)

Uploaded CPython 3.6mWindows x86-64

recordclass-0.8-cp36-cp36m-win32.whl (68.9 kB view details)

Uploaded CPython 3.6mWindows x86

recordclass-0.8-cp36-cp36m-macosx_10_9_x86_64.whl (87.3 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

recordclass-0.8-cp35-cp35m-win_amd64.whl (75.4 kB view details)

Uploaded CPython 3.5mWindows x86-64

recordclass-0.8-cp35-cp35m-win32.whl (65.5 kB view details)

Uploaded CPython 3.5mWindows x86

recordclass-0.8-cp35-cp35m-macosx_10_6_intel.whl (142.9 kB view details)

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

recordclass-0.8-cp34-cp34m-win_amd64.whl (71.1 kB view details)

Uploaded CPython 3.4mWindows x86-64

recordclass-0.8-cp34-cp34m-win32.whl (64.2 kB view details)

Uploaded CPython 3.4mWindows x86

recordclass-0.8-cp34-cp34m-macosx_10_6_intel.whl (143.0 kB view details)

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

recordclass-0.8-cp27-cp27m-win_amd64.whl (71.8 kB view details)

Uploaded CPython 2.7mWindows x86-64

recordclass-0.8-cp27-cp27m-win32.whl (63.8 kB view details)

Uploaded CPython 2.7mWindows x86

recordclass-0.8-cp27-cp27m-macosx_10_9_x86_64.whl (83.5 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: recordclass-0.8.tar.gz
  • Upload date:
  • Size: 107.0 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.tar.gz
Algorithm Hash digest
SHA256 811dc98f93c4cb6497168b4b6a5ca0a8506226a521f4ed9f3d1b4c9614e452c8
MD5 7297941e19e43fbf819a8392dbca4918
BLAKE2b-256 8ef112866dd0949b8aed9b62236afb12c5d286dc99dc9abf713d1aa3da024e5b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 79.0 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-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4c36ab922494e4bfff6788bf0e872017da57d2b6172234d0c9306f42cf909347
MD5 398de0e906b74d7b8c774e52308b851e
BLAKE2b-256 254e13bff0f81593afec0acfba268386d3bfe50b02f60f946dc2f8ae1796bdb8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 69.2 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-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 c9e7bfbfb5975a33ac569ecf3daca0a896e447f2fde84c913b4c8cd226acba60
MD5 f504701fc7eb9efecde1a37b2e2c1c86
BLAKE2b-256 cc3925b6addf66656286cc47337d0d6215a87f91725cb8e7cbd25a4705076f20

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 86.5 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-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a4378cb2451521b2d88a43e38f44bf9776725a692486d9000d7c133a0cf56370
MD5 526c810fbe45ba504929a1f9529794f6
BLAKE2b-256 ba0e38c506cded184136a73563547e563826d480af9575b6f1835212ae69582c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 78.6 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-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 a6fb32d5f4a94ea532280deeab5136cc0270cd38e97d13ca2d3e8260afd865f2
MD5 6f752090e4e7f5f0098da9827ba67f8c
BLAKE2b-256 569eaa52d3a6121cd597904e4bc1ce9b6a243d92060253390d9f061baa027fe6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 68.9 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-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 54c8b0e5d87e0da4714aa522b973dbdaa650f3b577a1c1fc1f143b0b667bd917
MD5 a3d5c3f193db2daa7e28ad105bb665e1
BLAKE2b-256 e655d69ebbcc308991bd9203ad6bc7d01b3329a5fb7071bc42c2a37a746d104b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 87.3 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-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4f4d009c5e558162b55c696560fb37aaee2ad05ab35013059fd8f28795b087ea
MD5 3ff4b743cf99ff14806ea3a5f84027f1
BLAKE2b-256 efeed67bbea83865a94194e4f6ec9e29d66d06a112017063bd299e2388dba7cb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 75.4 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-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 bcdd9e7402d76d0a738e74eaa0834684b6539712703c967712866f6cb813aec3
MD5 19852414c0e32ec5017bfeb713e4ab9a
BLAKE2b-256 198fe141fd148b09c049362d744915af0d8e406b9cec0c5db3896b31158ee228

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 65.5 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-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 df8a45c1926b72b9fe7efcff18e7f0c1ebae52ba8fe4bb716dd03fea883348fd
MD5 762dd1d13e6459da404c58e745485bb4
BLAKE2b-256 d68ef54fe34fdea167c10356a2c1e80cc6483e9de6ba4111e418fd1185d424b3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 142.9 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-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 08daa9f7edf2f4525830587e3ca5fdb148a15680689b653f383a7f2de37202db
MD5 3d3673a3c3f77ff047fd8215dca51634
BLAKE2b-256 98afc795993c4fa0fb21ad1f9413118b3c99fa9402afad2c52f64e96139e081b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 71.1 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-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 aa118e33ac109420f60a0bc62a61a4c0f8d05d562fd25a54a478c7df7315cf98
MD5 134db819fe781daa4bad99c9c7b79d0f
BLAKE2b-256 633e6d95e9f1ac56a91a11721ed987522ac77bd14b0e58000b0cf6c83232b506

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 64.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-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 62d1c81fc4f0782d3520c491162c202f864c936292d81a962a853370652d8d67
MD5 c8159efdefa314fb4c01c4db78727b64
BLAKE2b-256 29cc5f13bcc1784e415b7aa2aba6786daab06120c77accef7b5fbcafbac75fc3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp34-cp34m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 143.0 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-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 2758bfb135034033c5edfc3c4533eeb2ae169e9332527a8c7987db89f849f6ad
MD5 b8d8ae576ac9e8ac57742f5de377c87f
BLAKE2b-256 c47f0eccbe31195fdd80212d53cfa708cfeb9cf851acb40d2a6cdf9b75db3650

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 71.8 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-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 219285fbf6d030971423580c061eb8aa85d91903d000a510eb9906ca284679c9
MD5 58d14a1914bb7d6786448674c9dc10f2
BLAKE2b-256 899e3daaed397833247b99443e4610a1c3fcdeb569ff0b72fb2b679b22309550

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 63.8 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-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 7f92de51312a11ffdb37e90f961ef3e8d4a4451e76129a53d9f20e219d13bb14
MD5 1eab1afcfa6faf6acfbe4e18e83daf1f
BLAKE2b-256 2384ad564c1ee3e454d9ffcd83877b3b786e74826f00e5fb2ab27696d770a128

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 83.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e84687f45a21715950af7d169f0858af52bb98e3ac14049167bc2000fbde1952
MD5 4f700be12426622ffac4f3b513ca4bd8
BLAKE2b-256 b4c76447cbd9b09cd97c71073a55ec53735adff18d93adf5bf2ba31e125cf65b

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