Skip to main content

Recordclass library

What is all about?

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

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

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

Main repository for recordclass is on bitbucket.

Here is also a simple example.

Quick start:

First load inventory:

>>> from recordclass import recordclass, RecordClass

Simple example with recordclass:

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

Simple example with RecordClass and typehints::

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

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

Recordclass

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

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

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

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

The class generated by recordclass looks like:

from recordclass import memoryslots, itemgetset

class C(memoryslots):
    __slots__ = ()

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

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

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

etc. following the definition scheme of namedtuple.

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

Structclass

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

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

The class generated by recordclass looks like:

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

class C(dataobject):
    __metaclass__ = structclasstype

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

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

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

etc. following the definition scheme of recordclass.

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

Comparisons

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

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

where:

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

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

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

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

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

Here are also table with some performance counters:

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

Changes:

0.8.5

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

0.8.4

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

0.8.3

  • Add typehints support to structclass-based classes.

0.8.2

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

0.8.1

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

0.8

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

0.7

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

0.6

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

0.5

  • Change version to 0.5

0.4.4

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

0.4.3

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

0.4.2

  • Fix memory leak in property getter/setter

Metadata

Release files for recordclass 0.8.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for recordclass 0.8.5
File Size Uploaded Provenance Actions
recordclass-0.8.5.tar.gz 113.1 kB Without provenance Details for recordclass-0.8.5.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for recordclass 0.8.5
File Actions
recordclass-0.8.5-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details for recordclass-0.8.5-cp37-cp37m-win_amd64.whl
recordclass-0.8.5-cp37-cp37m-win32.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-32 Details for recordclass-0.8.5-cp37-cp37m-win32.whl
recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64 Details for recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl
recordclass-0.8.5-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details for recordclass-0.8.5-cp36-cp36m-win_amd64.whl
recordclass-0.8.5-cp36-cp36m-win32.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-32 Details for recordclass-0.8.5-cp36-cp36m-win32.whl
recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl CPython 3.6 CPython 3.6 pymalloc macOS 10.9+ x86-64 Details for recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl
recordclass-0.8.5-cp35-cp35m-win_amd64.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-64 Details for recordclass-0.8.5-cp35-cp35m-win_amd64.whl
recordclass-0.8.5-cp35-cp35m-win32.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-32 Details for recordclass-0.8.5-cp35-cp35m-win32.whl
recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl CPython 3.5 CPython 3.5 pymalloc macOS 10.6+ Intel (x86-64, i386) Details for recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl
recordclass-0.8.5-cp34-cp34m-win_amd64.whl CPython 3.4 CPython 3.4 pymalloc Windows x86-64 Details for recordclass-0.8.5-cp34-cp34m-win_amd64.whl
recordclass-0.8.5-cp34-cp34m-win32.whl CPython 3.4 CPython 3.4 pymalloc Windows x86-32 Details for recordclass-0.8.5-cp34-cp34m-win32.whl
recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl CPython 3.4 CPython 3.4 pymalloc macOS 10.6+ Intel (x86-64, i386) Details for recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl
recordclass-0.8.5-cp27-cp27m-win_amd64.whl CPython 2.7 CPython 2.7 pymalloc Windows x86-64 Details for recordclass-0.8.5-cp27-cp27m-win_amd64.whl
recordclass-0.8.5-cp27-cp27m-win32.whl CPython 2.7 CPython 2.7 pymalloc Windows x86-32 Details for recordclass-0.8.5-cp27-cp27m-win32.whl
recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl CPython 2.7 CPython 2.7 pymalloc macOS 10.9+ x86-64 Details for recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl

Total release size: 1.5 MB

Release files / recordclass-0.8.5.tar.gz

Download URL recordclass-0.8.5.tar.gz
Size 113.1 kB
Tags Source
SHA-256 checksum
How to use checksums
259e85608743ea17b69dcfab7810c70ff6d68d1433134ab0bb4a4756d28b3672
BLAKE2b-256 checksum
How to use checksums
924864ea5d4d0aa7266a4715411099bd0cfaa0e13e8f8e60592f9c8733dbdb44
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp37-cp37m-win_amd64.whl

Download URL recordclass-0.8.5-cp37-cp37m-win_amd64.whl
Size 89.9 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
2b1d7d1b49df74b580bd248e04a8935a977c8aa2e7287ef25d76d90d5a699ece
BLAKE2b-256 checksum
How to use checksums
b92862976557bda09a7df8a1e86d76c27e59467512f5bd77b6abac27cedfc0bc
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp37-cp37m-win32.whl

Download URL recordclass-0.8.5-cp37-cp37m-win32.whl
Size 79.1 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
e6bfa3f5056f94b396f84e6ded9ce7c6f972a0c98cf94ff48a77a940786bf016
BLAKE2b-256 checksum
How to use checksums
08ff38a0851b89ca43d5efc44c2921733557b78c11aa4caca858979c8d8f8561
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl

Download URL recordclass-0.8.5-cp37-cp37m-macosx_10_9_x86_64.whl
Size 94.3 kB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
6670bfeb968731d01631a6d3e21c754554e67fb66507c8869bbd564b4e633dba
BLAKE2b-256 checksum
How to use checksums
e5a2bfd4d81bec1feabdbb72094a17bbb66e81890cb7ba6db953e898c1ccdd18
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp36-cp36m-win_amd64.whl

Download URL recordclass-0.8.5-cp36-cp36m-win_amd64.whl
Size 89.9 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
1c4d8537a1664a2d74c2475b5e4753009c11f96e280a37def82a73fb116d3008
BLAKE2b-256 checksum
How to use checksums
e5b1c2c02bd77d3e7fb5f739275a9a2ec15379d64c349684abc3fc9a1c0c3118
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp36-cp36m-win32.whl

Download URL recordclass-0.8.5-cp36-cp36m-win32.whl
Size 79.2 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
4b1ed97c7046f82fa4e354f72a424add02c0772011dab93302bd090bf8aedc4d
BLAKE2b-256 checksum
How to use checksums
37a104c91f3854a99179ac41eb8eb634d4c56baca2aa4c1b8bbbca340f25b718
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl

Download URL recordclass-0.8.5-cp36-cp36m-macosx_10_9_x86_64.whl
Size 96.9 kB
Tags CPython 3.6 CPython 3.6 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
ec0dbd1b3389f6210172eff2a512cd1bc432835c9fff7d8f89304499c4c4da23
BLAKE2b-256 checksum
How to use checksums
60153d0d1b4ec6df150f7f47138aa2e0a727c7a8ef0d4d5391ee0618e2885b3a
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp35-cp35m-win_amd64.whl

Download URL recordclass-0.8.5-cp35-cp35m-win_amd64.whl
Size 83.9 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
c718c1e19a6e745fbebe12cbfdcc9300cf8ec349b0da55cfb1218f4b36130457
BLAKE2b-256 checksum
How to use checksums
6d67f7e35b4791b406c787d6aacaa97a63678ec319ec57bd937445694bfe4286
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp35-cp35m-win32.whl

Download URL recordclass-0.8.5-cp35-cp35m-win32.whl
Size 73.1 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
b4fbc44d819c54536ee464a78d068a9a3533d575535113232e13740dc6310bec
BLAKE2b-256 checksum
How to use checksums
70a714da06ad99525a6c5a4d079aebc4d6e4452729c64f5a2b1c1ef699725347
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl

Download URL recordclass-0.8.5-cp35-cp35m-macosx_10_6_intel.whl
Size 155.1 kB
Tags CPython 3.5 CPython 3.5 pymalloc macOS 10.6+ Intel (x86-64, i386)
SHA-256 checksum
How to use checksums
0605ad37f0a62d4b0dec2865e0100ff2f88e36360b1f24fa194871d244eea078
BLAKE2b-256 checksum
How to use checksums
5721de15fc6d3fc71553c32201b921f2aa11a925708f3d5d47e53c756b28be0c
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp34-cp34m-win_amd64.whl

Download URL recordclass-0.8.5-cp34-cp34m-win_amd64.whl
Size 80.3 kB
Tags CPython 3.4 CPython 3.4 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
8c5950b76d197854f88ace810c8b58c3ee446c08e3746df2f36f74b86152010c
BLAKE2b-256 checksum
How to use checksums
77034e07de4ca99f2ab0bb9097eb6e92fbf92b3476d539f31c55d1d33f132cc5
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp34-cp34m-win32.whl

Download URL recordclass-0.8.5-cp34-cp34m-win32.whl
Size 72.2 kB
Tags CPython 3.4 CPython 3.4 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
daf6a74d40ec0274780fad6f91555f252e3c8e7899895041156b3c6be57d20ce
BLAKE2b-256 checksum
How to use checksums
2c32ad739aeef02ec3363d37cd5608b2163a40edc4a65b3a1064a67cf68b53bb
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl

Download URL recordclass-0.8.5-cp34-cp34m-macosx_10_6_intel.whl
Size 153.6 kB
Tags CPython 3.4 CPython 3.4 pymalloc macOS 10.6+ Intel (x86-64, i386)
SHA-256 checksum
How to use checksums
b67cf67efcd3b39f39ef50cd773c6d732e4027712e15da5a1248fc08321ab2cb
BLAKE2b-256 checksum
How to use checksums
c8a4f64b8136bdd8c69f1aa519063b41d92fc3459bb78a744a15f4e4196267e5
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp27-cp27m-win_amd64.whl

Download URL recordclass-0.8.5-cp27-cp27m-win_amd64.whl
Size 81.2 kB
Tags CPython 2.7 CPython 2.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
b70692f1cee6ffcdd2a1b990990266a8e186f2731ff2ed8e6cbfd0564b1658cd
BLAKE2b-256 checksum
How to use checksums
d5405391cd895d04b7d7abd67147512795273a4e1a65533524fa24d3aee3ff71
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp27-cp27m-win32.whl

Download URL recordclass-0.8.5-cp27-cp27m-win32.whl
Size 72.1 kB
Tags CPython 2.7 CPython 2.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
92989faacf76d2b09fad748409d1c87bcc2e1a6aa05342ddbd69da71f81acdc4
BLAKE2b-256 checksum
How to use checksums
06a79e59404ba4b272c5ca9c89a6b8895989b065fe2e424ab8d225e5a75d32df
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl

Download URL recordclass-0.8.5-cp27-cp27m-macosx_10_9_x86_64.whl
Size 89.4 kB
Tags CPython 2.7 CPython 2.7 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
553c9830add9ac7a223d7f1eb7fbdccdbe5ca3e5896aa1168bd3cae83dcae43b
BLAKE2b-256 checksum
How to use checksums
e16718ea40667a7917f4ffad65936ce6bcc828eca605dbc1a2162f93e743112b
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for recordclass 0.8.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.8.5 This release

16 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page