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 support 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.1.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.1-cp37-cp37m-win_amd64.whl (78.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

recordclass-0.8.1-cp37-cp37m-win32.whl (68.9 kB view details)

Uploaded CPython 3.7mWindows x86

recordclass-0.8.1-cp37-cp37m-macosx_10_9_x86_64.whl (83.4 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

recordclass-0.8.1-cp36-cp36m-win_amd64.whl (78.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

recordclass-0.8.1-cp36-cp36m-win32.whl (69.0 kB view details)

Uploaded CPython 3.6mWindows x86

recordclass-0.8.1-cp36-cp36m-macosx_10_9_x86_64.whl (84.2 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

recordclass-0.8.1-cp35-cp35m-win_amd64.whl (75.5 kB view details)

Uploaded CPython 3.5mWindows x86-64

recordclass-0.8.1-cp35-cp35m-win32.whl (65.6 kB view details)

Uploaded CPython 3.5mWindows x86

recordclass-0.8.1-cp35-cp35m-macosx_10_6_intel.whl (139.7 kB view details)

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

recordclass-0.8.1-cp34-cp34m-win_amd64.whl (71.3 kB view details)

Uploaded CPython 3.4mWindows x86-64

recordclass-0.8.1-cp34-cp34m-win32.whl (64.4 kB view details)

Uploaded CPython 3.4mWindows x86

recordclass-0.8.1-cp34-cp34m-macosx_10_6_intel.whl (139.8 kB view details)

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

recordclass-0.8.1-cp27-cp27m-win_amd64.whl (72.0 kB view details)

Uploaded CPython 2.7mWindows x86-64

recordclass-0.8.1-cp27-cp27m-win32.whl (64.0 kB view details)

Uploaded CPython 2.7mWindows x86

recordclass-0.8.1-cp27-cp27m-macosx_10_9_x86_64.whl (80.3 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: recordclass-0.8.1.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.1.tar.gz
Algorithm Hash digest
SHA256 4297fffda72626c54aef174424a74305799876b43fa7958a9dae682c57d48fb7
MD5 092a44bb6864e8086dd41193dc6f9cf5
BLAKE2b-256 d417651ee0463c6e8bf70cf07b1dd5b85fadf380b0c92d9179523b2dfd5b1c76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 78.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e94a7ddb4fe45983bdb7d83d42bf80a79d161757cab3785cb9de2dbbbda4d44d
MD5 82768788169599e7fbbf49b51673bab6
BLAKE2b-256 ef95d98278893732bc9dcc09c4bc0de41f2a4f1c0359f610d50e6eba32f82f1d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 68.9 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.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 55ec51108fd393031266dfbcae9cb0ea7767d2015afbac80367de0d4225679ab
MD5 d37fec8de5574c5750f5712cb75c7213
BLAKE2b-256 f1a221e2b059441b681eb9647f0068e997d4e952a7d101e7873d6d3709c8aa99

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 83.4 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.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 266020aedac016d825a371c4ff6819295c008b1b9b0b82c033fe993f5e380397
MD5 591edb403232dbdc46fc2660ae8d69aa
BLAKE2b-256 b9777e28a19b570796d437fc7392f6ab6933479cc09697b1c9b0af60ba66eb1c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 78.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 6d76ed9b64b3da1bfa04a60e7e034ab220ba80c98c423cbcb051386512f5e6d9
MD5 857cfd7d32b270f3924609526aff6bcd
BLAKE2b-256 ce2c20a827ec53c2350542f9e953c12f216f4cece52488a61e257618caf89c80

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 69.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 372c002a569651f5e96fb7823f7882136e6a047a0dc48963bc428a709ead6c9b
MD5 743bc934a2c39ceac5c5c5f90df84755
BLAKE2b-256 afbf0deb0209c2f5cc54d13f3e5dcf032085ccd9d191ae6d0e372b567d1b942a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 84.2 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.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a075ed256073fa927de0d95e6770cc54b052d0ff78491435bc4feb4883e96ed3
MD5 d8eafc3bafdb0d379ef5fb43a90ea77e
BLAKE2b-256 db1031bf152d4f98418fc3a57df56e26293a343eb34d1b063ede0284ae06b5c7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 75.5 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.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 494f78b0ca68fb2b99982ef6ef7e253df1fd6f78723ddd57543a76bb8862e046
MD5 936e1708472f7eeb44cf3c65e202693b
BLAKE2b-256 5511756708df50d4f6f42d3689fd96a7ba25b330ea36ae0f983fbb2a7b4db7e4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 65.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 a889846d93a504b8ca3ada0be5c418d4d78671fe7f5459aa56e4856f3c74e596
MD5 b42fa0c607c99697bdffcc668ae7bd44
BLAKE2b-256 4e190f16df96a1cb2317cbf93b626a8382ae3dc56b4eabd3312a8c4a8b30d481

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 139.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 1b9146d45706e357648b95c38b6c7646547db5274843fd7c20b643d04971f607
MD5 c61c750d2c35693c56a097a3ff60f380
BLAKE2b-256 1b08ddaec41f87d6481e3ff58298922096bc0f34b8de52e510cef6d2e73cf4b4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 71.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.1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 1de443be5580543c6349e38c05c76464a4fe85aed205259759986858d49596da
MD5 bbd3651f55ed9a1cbb49b8756cf308c3
BLAKE2b-256 2232bef084ee6bf83b255ae3cc0970aed1d9bd2ba61e606fb63cf5fa5603c995

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 64.4 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.1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 c5eb31c1b220739d40aeeae6426bd4c9905f0345ee3ad835ac4c1466d14d8b98
MD5 1587b2b6735ea49f4431f9c112d24592
BLAKE2b-256 aa0efaeba4799e4551665c1891ce0f48f0a1b387cbe91f5a25360671ffd822f5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp34-cp34m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 139.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.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for recordclass-0.8.1-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 99a5965167388e0fef7de8885f02cedc88daf97412f7b14cdcffeba8c6fd7775
MD5 a9f22c050d5cb926544a030540bdf6c4
BLAKE2b-256 771b0e384622af6cc83633a43dd615c8983b65dcd5309e70d4f49771d75be904

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 72.0 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.1-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 f538d5dfda2114031c67e980d7040c52e1a2d3dc64e9fef269e45ae1e5559237
MD5 0414757c6d6edde1c1b69574ad0d3164
BLAKE2b-256 0e0c2951c9056c30058cc54c103f5a8575ef763378a9aede065acb1c385fdc65

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 64.0 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.1-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 44546826ebb120da472a6fbbf72652f54a9de5fbad03cbc805954ea70e8034c8
MD5 07cbd1c183cb1dd154917af8974d7043
BLAKE2b-256 164c95fefc8eb8cbbf3d4b103c2a0760b896ac8f17e423bbc44f395b59068568

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recordclass-0.8.1-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 80.3 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.1-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 87b6e50081c6d0da3300a159e57036ad4a7ab05f5bcbb8e13e369c2325ff0faf
MD5 6feb948bde112774b576583027f39bd1
BLAKE2b-256 2ae2dc244c13373e72efbc7e9905502eb3566237fb56e7c25b98ba43c7bda6d6

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