Skip to main content

Pyton basic datatypes as a references.

Project description

refdatatypes

Pyton basic datatypes as a references. Solve problems with static class immutable datatypes.

Installation

pip3 install refdatatypes

Problem

class A:
    static = 1


class B(A):
    pass


print(f"int {A.static}")  # get 1 correctly
print(f"int {B.static}")  # get 1 correctly

A.static = 5
print(f"int {A.static}")  # get 5 correctly
print(f"int {B.static}")  # get 5 correctly

B.static = 6
print(f"int {A.static}")  # expected 6, but get 5 incorrectly
print(f"int {B.static}")  # get 6 correctly

A.static = 7
print(f"int {A.static}")  # get 7 correctly
print(f"int {B.static}")  # expected 7, but get unchanged 6, incorrectly

Solution

from refdatatypes.refint import RefInt


class AAA:
    static = RefInt(1)


class BBB(AAA):
    pass


print(f"refint {AAA.static.value}")  # get 1 correctly
print(f"refint {BBB.static.value}")  # get 1 correctly

AAA.static.value = 5
print(f"refint {AAA.static.value}")  # get 5 correctly
print(f"refint {BBB.static.value}")  # get 5 correctly

BBB.static.value = 6
print(f"refint {AAA.static.value}")  # get 6 correctly
print(f"refint {BBB.static.value}")  # get 6 correctly

AAA.static.value = 7
print(f"refint {AAA.static.value}")  # get 7 correctly
print(f"refint {BBB.static.value}")  # get 7 correctly

More details you can find in included examples static_class_attribute_problem.py and static_class_attribute_solution.py .

Safe datatypes

safedatatypes is simple set of function and classes which enables you to work safely with base python datatypes without error falls during convert or item access.

example

from refdatatypes.safedatatypes import safe_int

my_int = safe_int("None")  # no error
print(my_int)  # prints: `0`

example 2

from refdatatypes.safedatatypes import SafeDict

my_dict = SafeDict()
my_dict["a"] = 1

print(my_dict["a"])  # prints: `1` 
print(my_dict["b"])  # prints: `None` with no error
print(my_dict)  # prints: `{'a': 1}`

my_dict = SafeDict({"a": 1}, default_value=-1, autoset=True)
print(my_dict["a"])  # prints: `1` 
print(my_dict["b"])  # prints: `-1` with no error
print(my_dict)  # prints: `{'a': 1, 'b': -1}`

example 3

# expected dict structure
my_dict = {"a": 1, "b": {"bb": 2}}
# but structure like this occured
my_dict = {"a": 1, "b": None}
# safe handle of this structure
result = my_dict.get("b") or {}
result = result.get("bb") or 0
print(result)  # prints: `0` with no error

Solution with SafeDict

from refdatatypes.safedatatypes import SafeDict

# expected dict structure
my_dict = SafeDict({"a": 1, "b": {"bb": 2}})
# but structure like this occured
my_dict = SafeDict({"a": 1, "b": None})
# safe handle of this structure
result = my_dict.get("b", SafeDict(), if_none=True).get("bb", 0)
print(result)  # prints: `0` with no error

Utils

dict_item_must_be_list

This utility checks if item in combined structure of lists and dicts is realy list. If not, it converts it to list. This utility is useful when you are working with xmltodict library. You expect list in some dict structure place, but if there is only one item, it is converted to dict not into list, because for xmltodict is not possible know it should be list.

from refdatatypes.utils import dict_item_must_be_list

d = {
    "a": 1,
    "b": {
        "bb": [
            {"ccc": {"ddd": 4}},
            {"ccc": [{"ddd": 4}, {"ddd": 4}]},
            {"ccc": 4},
            {"ccc": None},
            {"ccc": [1, 2, [11, 22]]},
        ]
    },
}
dict_item_must_be_list(d, "b.bb.ccc")
print(d)
{
    'a': 1,
    'b': {
        'bb': [
            {'ccc': [{'ddd': 4}]},
            {'ccc': [{'ddd': 4}, {'ddd': 4}]},
            {'ccc': [4]},
            {'ccc': []},
            {'ccc': [1, 2, [11, 22]]}
        ]
    }
}

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

refdatatypes-1.4.0.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

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

refdatatypes-1.4.0-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file refdatatypes-1.4.0.tar.gz.

File metadata

  • Download URL: refdatatypes-1.4.0.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.9

File hashes

Hashes for refdatatypes-1.4.0.tar.gz
Algorithm Hash digest
SHA256 c90de03c13eb71fbf8dfbd6ec0e5ec7ab0fbc3c46b1e97387f6a0b259cc7f5ea
MD5 13f6e29fa73770d415cdb7a04acf1886
BLAKE2b-256 c7e37942956b38006cf53fc50f02209e1863b253379085a02a185492963da6a6

See more details on using hashes here.

File details

Details for the file refdatatypes-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: refdatatypes-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.9

File hashes

Hashes for refdatatypes-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1c23726bfb003f9cf0ef6174fd8296efca00078dcfd23b3fdcb4eef39ae22cee
MD5 82b9607a1596bc95250794f4bee63b85
BLAKE2b-256 44c75a938c5db447d4a9969a9ad5aec6861131a1b0ec6c5d87f658d571c812ed

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