datahold 3.0.2__tar.gz → 3.1.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datahold-3.0.2/src/datahold.egg-info → datahold-3.1.0.dev1}/PKG-INFO +3 -2
- {datahold-3.0.2 → datahold-3.1.0.dev1}/pyproject.toml +3 -2
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/__init__.py +6 -0
- datahold-3.1.0.dev1/src/datahold/core/BaseDataNaming.py +123 -0
- datahold-3.1.0.dev1/src/datahold/core/BaseHoldNaming.py +15 -0
- datahold-3.1.0.dev1/src/datahold/core/DataNaming.py +105 -0
- datahold-3.1.0.dev1/src/datahold/core/FrozenDataNaming.py +15 -0
- datahold-3.1.0.dev1/src/datahold/core/FrozenHoldNaming.py +21 -0
- datahold-3.1.0.dev1/src/datahold/core/HoldNaming.py +26 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_0.py +5 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestAbstractness.py +8 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestCopy.py +18 -1
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestDataAttribute.py +19 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestFrozenMutability.py +12 -3
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestInheritance.py +19 -2
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestMutableBehavior.py +11 -6
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestProtocols.py +16 -2
- {datahold-3.0.2 → datahold-3.1.0.dev1/src/datahold.egg-info}/PKG-INFO +3 -2
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold.egg-info/SOURCES.txt +6 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold.egg-info/requires.txt +1 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/LICENSE.txt +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/MANIFEST.in +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/README.rst +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/setup.cfg +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/_utils/__init__.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/_utils/wrapping.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseDataDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseDataList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseDataObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseDataSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseHoldDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseHoldList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseHoldObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/BaseHoldSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/DataDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/DataList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/DataObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/DataSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenDataDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenDataList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenDataObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenDataSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenHoldDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenHoldList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenHoldObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/FrozenHoldSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/HoldDict.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/HoldList.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/HoldObject.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/HoldSet.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/core/__init__.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/__init__.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_generic.py +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold.egg-info/dependency_links.txt +0 -0
- {datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datahold
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.1.0.dev1
|
|
4
4
|
Summary: This project wraps common mutable datastructures for inheritance with modification.
|
|
5
5
|
Author-email: Johannes <johannes.programming@gmail.com>
|
|
6
6
|
License: The MIT License (MIT)
|
|
@@ -28,7 +28,7 @@ Project-URL: Download, https://pypi.org/project/datahold/#files
|
|
|
28
28
|
Project-URL: Index, https://pypi.org/project/datahold/
|
|
29
29
|
Project-URL: Source, https://github.com/johannes-programming/datahold/
|
|
30
30
|
Project-URL: Website, http://datahold.johannes-programming.online/
|
|
31
|
-
Classifier: Development Status ::
|
|
31
|
+
Classifier: Development Status :: 3 - Alpha
|
|
32
32
|
Classifier: Intended Audience :: Developers
|
|
33
33
|
Classifier: License :: OSI Approved :: MIT License
|
|
34
34
|
Classifier: Natural Language :: English
|
|
@@ -44,6 +44,7 @@ Requires-Dist: cmp3<2,>=1.0
|
|
|
44
44
|
Requires-Dist: copyable<2,>=1.0
|
|
45
45
|
Requires-Dist: datarepr<2,>=1.0
|
|
46
46
|
Requires-Dist: frozendict<3,>=2.4.6
|
|
47
|
+
Requires-Dist: namings<2,>=1.0
|
|
47
48
|
Requires-Dist: setdoc<2,>=1.2.8
|
|
48
49
|
Dynamic: license-file
|
|
49
50
|
|
|
@@ -9,7 +9,7 @@ authors = [
|
|
|
9
9
|
{ email = "johannes.programming@gmail.com", name = "Johannes" },
|
|
10
10
|
]
|
|
11
11
|
classifiers = [
|
|
12
|
-
"Development Status ::
|
|
12
|
+
"Development Status :: 3 - Alpha",
|
|
13
13
|
"Intended Audience :: Developers",
|
|
14
14
|
"License :: OSI Approved :: MIT License",
|
|
15
15
|
"Natural Language :: English",
|
|
@@ -24,6 +24,7 @@ dependencies = [
|
|
|
24
24
|
"copyable>=1.0,<2",
|
|
25
25
|
"datarepr>=1.0,<2",
|
|
26
26
|
"frozendict>=2.4.6,<3",
|
|
27
|
+
"namings>=1.0,<2",
|
|
27
28
|
"setdoc>=1.2.8,<2",
|
|
28
29
|
]
|
|
29
30
|
description = "This project wraps common mutable datastructures for inheritance with modification."
|
|
@@ -31,7 +32,7 @@ keywords = []
|
|
|
31
32
|
name = "datahold"
|
|
32
33
|
readme = "README.rst"
|
|
33
34
|
requires-python = ">=3.11"
|
|
34
|
-
version = "3.0.
|
|
35
|
+
version = "3.1.0.dev1"
|
|
35
36
|
|
|
36
37
|
[project.license]
|
|
37
38
|
file = "LICENSE.txt"
|
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
from datahold.core.BaseDataDict import BaseDataDict
|
|
2
2
|
from datahold.core.BaseDataList import BaseDataList
|
|
3
|
+
from datahold.core.BaseDataNaming import BaseDataNaming
|
|
3
4
|
from datahold.core.BaseDataObject import BaseDataObject
|
|
4
5
|
from datahold.core.BaseDataSet import BaseDataSet
|
|
5
6
|
from datahold.core.BaseHoldDict import BaseHoldDict
|
|
6
7
|
from datahold.core.BaseHoldList import BaseHoldList
|
|
8
|
+
from datahold.core.BaseHoldNaming import BaseHoldNaming
|
|
7
9
|
from datahold.core.BaseHoldObject import BaseHoldObject
|
|
8
10
|
from datahold.core.BaseHoldSet import BaseHoldSet
|
|
9
11
|
from datahold.core.DataDict import DataDict
|
|
10
12
|
from datahold.core.DataList import DataList
|
|
13
|
+
from datahold.core.DataNaming import DataNaming
|
|
11
14
|
from datahold.core.DataObject import DataObject
|
|
12
15
|
from datahold.core.DataSet import DataSet
|
|
13
16
|
from datahold.core.FrozenDataDict import FrozenDataDict
|
|
14
17
|
from datahold.core.FrozenDataList import FrozenDataList
|
|
18
|
+
from datahold.core.FrozenDataNaming import FrozenDataNaming
|
|
15
19
|
from datahold.core.FrozenDataObject import FrozenDataObject
|
|
16
20
|
from datahold.core.FrozenDataSet import FrozenDataSet
|
|
17
21
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
18
22
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
23
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
19
24
|
from datahold.core.FrozenHoldObject import FrozenHoldObject
|
|
20
25
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
21
26
|
from datahold.core.HoldDict import HoldDict
|
|
22
27
|
from datahold.core.HoldList import HoldList
|
|
28
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
23
29
|
from datahold.core.HoldObject import HoldObject
|
|
24
30
|
from datahold.core.HoldSet import HoldSet
|
|
25
31
|
from datahold.tests import test
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import collections
|
|
2
|
+
from abc import abstractmethod
|
|
3
|
+
from typing import *
|
|
4
|
+
|
|
5
|
+
from namings import FrozenNaming, Naming
|
|
6
|
+
|
|
7
|
+
from datahold._utils.wrapping import wraps
|
|
8
|
+
|
|
9
|
+
from .BaseDataObject import BaseDataObject
|
|
10
|
+
|
|
11
|
+
__all__ = ["BaseDataNaming"]
|
|
12
|
+
|
|
13
|
+
Value = TypeVar("Value")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class BaseDataNaming(
|
|
17
|
+
BaseDataObject,
|
|
18
|
+
collections.abc.Mapping[str, Value],
|
|
19
|
+
):
|
|
20
|
+
data: FrozenNaming[Value]
|
|
21
|
+
__slots__ = ()
|
|
22
|
+
|
|
23
|
+
@wraps(Naming[Value])
|
|
24
|
+
def __contains__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
25
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
26
|
+
return Naming[Value](self.data).__contains__(*args, **kwargs)
|
|
27
|
+
|
|
28
|
+
@wraps(Naming[Value])
|
|
29
|
+
def __eq__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
30
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
31
|
+
return Naming[Value](self.data).__eq__(*args, **kwargs)
|
|
32
|
+
|
|
33
|
+
@wraps(Naming[Value])
|
|
34
|
+
def __format__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
35
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
36
|
+
return Naming[Value](self.data).__format__(*args, **kwargs)
|
|
37
|
+
|
|
38
|
+
@wraps(Naming[Value])
|
|
39
|
+
def __ge__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
40
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
41
|
+
return Naming[Value](self.data).__ge__(*args, **kwargs)
|
|
42
|
+
|
|
43
|
+
@wraps(Naming[Value])
|
|
44
|
+
def __getitem__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
45
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
46
|
+
return Naming[Value](self.data).__getitem__(*args, **kwargs)
|
|
47
|
+
|
|
48
|
+
@wraps(Naming[Value])
|
|
49
|
+
def __gt__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
50
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
51
|
+
return Naming[Value](self.data).__gt__(*args, **kwargs)
|
|
52
|
+
|
|
53
|
+
@abstractmethod
|
|
54
|
+
@wraps(Naming[Value])
|
|
55
|
+
def __init__(self: Self, *args: Any, **kwargs: Any) -> None:
|
|
56
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
@wraps(Naming[Value])
|
|
60
|
+
def __iter__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
61
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
62
|
+
return Naming[Value](self.data).__iter__(*args, **kwargs)
|
|
63
|
+
|
|
64
|
+
@wraps(Naming[Value])
|
|
65
|
+
def __le__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
66
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
67
|
+
return Naming[Value](self.data).__le__(*args, **kwargs)
|
|
68
|
+
|
|
69
|
+
@wraps(Naming[Value])
|
|
70
|
+
def __len__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
71
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
72
|
+
return Naming[Value](self.data).__len__(*args, **kwargs)
|
|
73
|
+
|
|
74
|
+
@wraps(Naming[Value])
|
|
75
|
+
def __lt__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
76
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
77
|
+
return Naming[Value](self.data).__lt__(*args, **kwargs)
|
|
78
|
+
|
|
79
|
+
@wraps(Naming[Value])
|
|
80
|
+
def __or__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
81
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
82
|
+
return Naming[Value](self.data).__or__(*args, **kwargs)
|
|
83
|
+
|
|
84
|
+
@wraps(Naming[Value])
|
|
85
|
+
def __repr__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
86
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
87
|
+
return Naming[Value](self.data).__repr__(*args, **kwargs)
|
|
88
|
+
|
|
89
|
+
@wraps(Naming[Value])
|
|
90
|
+
def __reversed__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
91
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
92
|
+
return Naming[Value](self.data).__reversed__(*args, **kwargs)
|
|
93
|
+
|
|
94
|
+
@wraps(Naming[Value])
|
|
95
|
+
def __str__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
96
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
97
|
+
return Naming[Value](self.data).__str__(*args, **kwargs)
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
@wraps(Naming[Value])
|
|
101
|
+
def fromkeys(cls: type[Self], *args: Any, **kwargs: Any) -> Any:
|
|
102
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
103
|
+
return cls[Value](Naming[Value].fromkeys(*args, **kwargs))
|
|
104
|
+
|
|
105
|
+
@wraps(Naming[Value])
|
|
106
|
+
def get(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
107
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
108
|
+
return Naming[Value](self.data).get(*args, **kwargs)
|
|
109
|
+
|
|
110
|
+
@wraps(Naming[Value])
|
|
111
|
+
def items(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
112
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
113
|
+
return Naming[Value](self.data).items(*args, **kwargs)
|
|
114
|
+
|
|
115
|
+
@wraps(Naming[Value])
|
|
116
|
+
def keys(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
117
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
118
|
+
return Naming[Value](self.data).keys(*args, **kwargs)
|
|
119
|
+
|
|
120
|
+
@wraps(Naming[Value])
|
|
121
|
+
def values(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
122
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
123
|
+
return Naming[Value](self.data).values(*args, **kwargs)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import *
|
|
2
|
+
|
|
3
|
+
from namings import FrozenNaming
|
|
4
|
+
|
|
5
|
+
from .BaseDataNaming import BaseDataNaming
|
|
6
|
+
from .BaseHoldObject import BaseHoldObject
|
|
7
|
+
|
|
8
|
+
__all__ = ["BaseHoldNaming"]
|
|
9
|
+
|
|
10
|
+
Value = TypeVar("Value")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BaseHoldNaming(BaseHoldObject, BaseDataNaming[Value]):
|
|
14
|
+
data: FrozenNaming[Value]
|
|
15
|
+
__slots__ = ()
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import collections
|
|
2
|
+
from typing import *
|
|
3
|
+
|
|
4
|
+
import setdoc
|
|
5
|
+
from namings import FrozenNaming, Naming
|
|
6
|
+
|
|
7
|
+
from datahold._utils.wrapping import wraps
|
|
8
|
+
|
|
9
|
+
from .BaseDataNaming import BaseDataNaming
|
|
10
|
+
from .DataObject import DataObject
|
|
11
|
+
|
|
12
|
+
__all__ = ["DataNaming"]
|
|
13
|
+
|
|
14
|
+
Value = TypeVar("Value")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class DataNaming(
|
|
18
|
+
DataObject, BaseDataNaming[Value], collections.abc.MutableMapping[str, Value]
|
|
19
|
+
):
|
|
20
|
+
data: FrozenNaming[Value]
|
|
21
|
+
__slots__ = ()
|
|
22
|
+
|
|
23
|
+
@wraps(Naming[Value])
|
|
24
|
+
def __delitem__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
25
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
26
|
+
ans: Any
|
|
27
|
+
data: Naming[Value]
|
|
28
|
+
data = Naming[Value](self.data)
|
|
29
|
+
ans = data.__delitem__(*args, **kwargs)
|
|
30
|
+
self.data = FrozenNaming[Value](data)
|
|
31
|
+
return ans
|
|
32
|
+
|
|
33
|
+
@setdoc.basic
|
|
34
|
+
def __init__(self: Self, data: Any = (), /, **kwargs: Any) -> None:
|
|
35
|
+
self.data = FrozenNaming[Value](data, **kwargs)
|
|
36
|
+
|
|
37
|
+
@wraps(Naming[Value])
|
|
38
|
+
def __ior__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
39
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
40
|
+
ans: Any
|
|
41
|
+
data: Naming[Value]
|
|
42
|
+
data = Naming[Value](self.data)
|
|
43
|
+
ans = data.__ior__(*args, **kwargs)
|
|
44
|
+
self.data = FrozenNaming[Value](data)
|
|
45
|
+
return ans
|
|
46
|
+
|
|
47
|
+
@wraps(Naming[Value])
|
|
48
|
+
def __setitem__(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
49
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
50
|
+
ans: Any
|
|
51
|
+
data: Naming[Value]
|
|
52
|
+
data = Naming[Value](self.data)
|
|
53
|
+
ans = data.__setitem__(*args, **kwargs)
|
|
54
|
+
self.data = FrozenNaming[Value](data)
|
|
55
|
+
return ans
|
|
56
|
+
|
|
57
|
+
@wraps(Naming[Value])
|
|
58
|
+
def clear(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
59
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
60
|
+
ans: Any
|
|
61
|
+
data: Naming[Value]
|
|
62
|
+
data = Naming[Value](self.data)
|
|
63
|
+
ans = data.clear(*args, **kwargs)
|
|
64
|
+
self.data = FrozenNaming[Value](data)
|
|
65
|
+
return ans
|
|
66
|
+
|
|
67
|
+
@wraps(Naming[Value])
|
|
68
|
+
def pop(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
69
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
70
|
+
ans: Any
|
|
71
|
+
data: Naming[Value]
|
|
72
|
+
data = Naming[Value](self.data)
|
|
73
|
+
ans = data.pop(*args, **kwargs)
|
|
74
|
+
self.data = FrozenNaming[Value](data)
|
|
75
|
+
return ans
|
|
76
|
+
|
|
77
|
+
@wraps(Naming[Value])
|
|
78
|
+
def popitem(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
79
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
80
|
+
ans: Any
|
|
81
|
+
data: Naming[Value]
|
|
82
|
+
data = Naming[Value](self.data)
|
|
83
|
+
ans = data.popitem(*args, **kwargs)
|
|
84
|
+
self.data = FrozenNaming[Value](data)
|
|
85
|
+
return ans
|
|
86
|
+
|
|
87
|
+
@wraps(Naming[Value])
|
|
88
|
+
def setdefault(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
89
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
90
|
+
ans: Any
|
|
91
|
+
data: Naming[Value]
|
|
92
|
+
data = Naming[Value](self.data)
|
|
93
|
+
ans = data.setdefault(*args, **kwargs)
|
|
94
|
+
self.data = FrozenNaming[Value](data)
|
|
95
|
+
return ans
|
|
96
|
+
|
|
97
|
+
@wraps(Naming[Value])
|
|
98
|
+
def update(self: Self, *args: Any, **kwargs: Any) -> Any:
|
|
99
|
+
"This doc string is overwritten together with the signature to match the original as closely as possible."
|
|
100
|
+
ans: Any
|
|
101
|
+
data: Naming[Value]
|
|
102
|
+
data = Naming[Value](self.data)
|
|
103
|
+
ans = data.update(*args, **kwargs)
|
|
104
|
+
self.data = FrozenNaming[Value](data)
|
|
105
|
+
return ans
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import *
|
|
2
|
+
|
|
3
|
+
from namings import FrozenNaming
|
|
4
|
+
|
|
5
|
+
from .BaseDataNaming import BaseDataNaming
|
|
6
|
+
from .FrozenDataObject import FrozenDataObject
|
|
7
|
+
|
|
8
|
+
__all__ = ["FrozenDataNaming"]
|
|
9
|
+
|
|
10
|
+
Value = TypeVar("Value")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FrozenDataNaming(FrozenDataObject, BaseDataNaming[Value]):
|
|
14
|
+
data: FrozenNaming[Value]
|
|
15
|
+
__slots__ = ()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from typing import *
|
|
2
|
+
|
|
3
|
+
import setdoc
|
|
4
|
+
from namings import FrozenNaming
|
|
5
|
+
|
|
6
|
+
from .BaseHoldNaming import BaseHoldNaming
|
|
7
|
+
from .FrozenDataNaming import FrozenDataNaming
|
|
8
|
+
from .FrozenHoldObject import FrozenHoldObject
|
|
9
|
+
|
|
10
|
+
__all__ = ["FrozenHoldNaming"]
|
|
11
|
+
|
|
12
|
+
Value = TypeVar("Value")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FrozenHoldNaming(FrozenHoldObject, FrozenDataNaming, BaseHoldNaming[Value]):
|
|
16
|
+
data: FrozenNaming[Value]
|
|
17
|
+
__slots__ = ()
|
|
18
|
+
|
|
19
|
+
@setdoc.basic
|
|
20
|
+
def __init__(self: Self, data: Any, /, **kwargs: Any) -> None:
|
|
21
|
+
self._data = FrozenNaming[Value](data, **kwargs)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import *
|
|
2
|
+
|
|
3
|
+
import setdoc
|
|
4
|
+
from namings import FrozenNaming
|
|
5
|
+
|
|
6
|
+
from .BaseHoldNaming import BaseHoldNaming
|
|
7
|
+
from .DataNaming import DataNaming
|
|
8
|
+
from .HoldObject import HoldObject
|
|
9
|
+
|
|
10
|
+
__all__ = ["HoldNaming"]
|
|
11
|
+
|
|
12
|
+
Value = TypeVar("Value")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class HoldNaming(HoldObject, DataNaming[Value], BaseHoldNaming[Value]):
|
|
16
|
+
data: FrozenNaming[Value]
|
|
17
|
+
__slots__ = ()
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
@setdoc.basic
|
|
21
|
+
def data(self: Self) -> FrozenNaming[Value]:
|
|
22
|
+
return self._data
|
|
23
|
+
|
|
24
|
+
@data.setter
|
|
25
|
+
def data(self: Self, value: Any) -> None:
|
|
26
|
+
self._data = FrozenNaming[Value](value)
|
|
@@ -4,6 +4,8 @@ from typing import *
|
|
|
4
4
|
from datahold import core
|
|
5
5
|
from datahold.core import *
|
|
6
6
|
|
|
7
|
+
__all__ = ["TestData"]
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
class TestData(unittest.TestCase):
|
|
9
11
|
def test_constructor_abc(self: Self) -> None:
|
|
@@ -11,12 +13,15 @@ class TestData(unittest.TestCase):
|
|
|
11
13
|
core.DataDict.DataDict()
|
|
12
14
|
with self.assertRaises(Exception):
|
|
13
15
|
core.DataList.DataList()
|
|
16
|
+
with self.assertRaises(Exception):
|
|
17
|
+
core.DataList.DataNaming()
|
|
14
18
|
with self.assertRaises(Exception):
|
|
15
19
|
core.DataSet.DataSet()
|
|
16
20
|
|
|
17
21
|
def test_constructor_core(self: Self) -> None:
|
|
18
22
|
core.HoldDict.HoldDict()
|
|
19
23
|
core.HoldList.HoldList()
|
|
24
|
+
core.HoldNaming.HoldNaming()
|
|
20
25
|
core.HoldSet.HoldSet()
|
|
21
26
|
|
|
22
27
|
def test_doc(self: Self) -> None:
|
|
@@ -6,18 +6,22 @@ from frozendict import frozendict
|
|
|
6
6
|
|
|
7
7
|
from datahold.core.DataDict import DataDict
|
|
8
8
|
from datahold.core.DataList import DataList
|
|
9
|
+
from datahold.core.DataNaming import DataNaming
|
|
9
10
|
from datahold.core.DataObject import DataObject
|
|
10
11
|
from datahold.core.DataSet import DataSet
|
|
11
12
|
from datahold.core.FrozenDataDict import FrozenDataDict
|
|
12
13
|
from datahold.core.FrozenDataList import FrozenDataList
|
|
14
|
+
from datahold.core.FrozenDataNaming import FrozenDataNaming
|
|
13
15
|
from datahold.core.FrozenDataObject import FrozenDataObject
|
|
14
16
|
from datahold.core.FrozenDataSet import FrozenDataSet
|
|
15
17
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
16
18
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
19
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
17
20
|
from datahold.core.FrozenHoldObject import FrozenHoldObject
|
|
18
21
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
19
22
|
from datahold.core.HoldDict import HoldDict
|
|
20
23
|
from datahold.core.HoldList import HoldList
|
|
24
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
21
25
|
from datahold.core.HoldSet import HoldSet
|
|
22
26
|
|
|
23
27
|
__all__ = ["TestAbstractness"]
|
|
@@ -29,11 +33,13 @@ class TestAbstractness(unittest.TestCase):
|
|
|
29
33
|
self.assertTrue(isabstract(DataObject))
|
|
30
34
|
self.assertTrue(isabstract(DataDict))
|
|
31
35
|
self.assertTrue(isabstract(DataList))
|
|
36
|
+
self.assertTrue(isabstract(DataNaming))
|
|
32
37
|
self.assertTrue(isabstract(DataSet))
|
|
33
38
|
|
|
34
39
|
self.assertTrue(isabstract(FrozenDataObject))
|
|
35
40
|
self.assertTrue(isabstract(FrozenDataDict))
|
|
36
41
|
self.assertTrue(isabstract(FrozenDataList))
|
|
42
|
+
self.assertTrue(isabstract(FrozenDataNaming))
|
|
37
43
|
self.assertTrue(isabstract(FrozenDataSet))
|
|
38
44
|
|
|
39
45
|
# hold
|
|
@@ -43,10 +49,12 @@ class TestAbstractness(unittest.TestCase):
|
|
|
43
49
|
def test_concrete_classes(self: Self) -> None:
|
|
44
50
|
FrozenHoldDict({"a": 1})
|
|
45
51
|
FrozenHoldList([1, 2])
|
|
52
|
+
FrozenHoldNaming({"a": 1}.items())
|
|
46
53
|
FrozenHoldSet({1, 2})
|
|
47
54
|
|
|
48
55
|
HoldDict({"a": 1})
|
|
49
56
|
HoldList([1, 2])
|
|
57
|
+
HoldNaming({"a": 1}.items())
|
|
50
58
|
HoldSet({1, 2})
|
|
51
59
|
|
|
52
60
|
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import unittest
|
|
2
2
|
from typing import Any, Self
|
|
3
3
|
|
|
4
|
-
from
|
|
4
|
+
from namings import Naming
|
|
5
5
|
|
|
6
6
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
7
7
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
8
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
8
9
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
9
10
|
from datahold.core.HoldDict import HoldDict
|
|
10
11
|
from datahold.core.HoldList import HoldList
|
|
12
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
11
13
|
from datahold.core.HoldSet import HoldSet
|
|
12
14
|
|
|
13
15
|
__all__ = ["TestCopy"]
|
|
@@ -17,6 +19,7 @@ class TestCopy(unittest.TestCase):
|
|
|
17
19
|
def test_frozen_have_no_copy(self: Self) -> None:
|
|
18
20
|
self.assertFalse(hasattr(FrozenHoldDict({"a": 1}), "copy"))
|
|
19
21
|
self.assertFalse(hasattr(FrozenHoldList([1, 2]), "copy"))
|
|
22
|
+
self.assertFalse(hasattr(FrozenHoldNaming({"a": 1}.items()), "copy"))
|
|
20
23
|
self.assertFalse(hasattr(FrozenHoldSet({1, 2}), "copy"))
|
|
21
24
|
|
|
22
25
|
def test_frozen_have_no_copy_2(self: Self) -> None:
|
|
@@ -31,6 +34,7 @@ class TestCopy(unittest.TestCase):
|
|
|
31
34
|
for cls, args in (
|
|
32
35
|
(FrozenHoldDict, ({"a": 1},)),
|
|
33
36
|
(FrozenHoldList, ([1, 2],)),
|
|
37
|
+
(FrozenHoldNaming, ({"a": 1}.items(),)),
|
|
34
38
|
(FrozenHoldSet, ({1, 2},)),
|
|
35
39
|
):
|
|
36
40
|
# They must not *define* copy themselves
|
|
@@ -56,6 +60,19 @@ class TestCopy(unittest.TestCase):
|
|
|
56
60
|
d["a"]["x"] = 2
|
|
57
61
|
self.assertEqual(d_copy["a"]["x"], 2)
|
|
58
62
|
|
|
63
|
+
def test_naming_copy(self: Self) -> None:
|
|
64
|
+
d: HoldNaming
|
|
65
|
+
d_copy: HoldNaming
|
|
66
|
+
d = HoldNaming({"a": {"x": 1}}.items())
|
|
67
|
+
d_copy = d.copy()
|
|
68
|
+
self.assertIsInstance(d_copy, HoldNaming)
|
|
69
|
+
self.assertIsNot(d_copy, d)
|
|
70
|
+
self.assertEqual(Naming(d_copy), Naming(d))
|
|
71
|
+
|
|
72
|
+
# shallow: inner object is shared
|
|
73
|
+
d["a"]["x"] = 2
|
|
74
|
+
self.assertEqual(d_copy["a"]["x"], 2)
|
|
75
|
+
|
|
59
76
|
def test_list_copy(self: Self) -> None:
|
|
60
77
|
lst: HoldList
|
|
61
78
|
lst_copy: HoldList
|
{datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestDataAttribute.py
RENAMED
|
@@ -2,14 +2,19 @@ import unittest
|
|
|
2
2
|
from typing import Any, Self
|
|
3
3
|
|
|
4
4
|
from frozendict import frozendict
|
|
5
|
+
from namings import FrozenNaming
|
|
5
6
|
|
|
6
7
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
7
8
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
9
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
8
10
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
9
11
|
from datahold.core.HoldDict import HoldDict
|
|
10
12
|
from datahold.core.HoldList import HoldList
|
|
13
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
11
14
|
from datahold.core.HoldSet import HoldSet
|
|
12
15
|
|
|
16
|
+
__all__ = ["TestDataAttribute"]
|
|
17
|
+
|
|
13
18
|
|
|
14
19
|
class TestDataAttribute(unittest.TestCase):
|
|
15
20
|
def test_dict_data_is_immutable_mapping(self: Self) -> None:
|
|
@@ -38,6 +43,20 @@ class TestDataAttribute(unittest.TestCase):
|
|
|
38
43
|
with self.assertRaises(Exception):
|
|
39
44
|
o.data.append(4)
|
|
40
45
|
|
|
46
|
+
def test_naming_data_is_immutable_mapping(self: Self) -> None:
|
|
47
|
+
f: FrozenHoldNaming
|
|
48
|
+
m: HoldNaming
|
|
49
|
+
obj: Any
|
|
50
|
+
f = FrozenHoldNaming({"a": 1}.items())
|
|
51
|
+
m = HoldNaming({"a": 1}.items())
|
|
52
|
+
|
|
53
|
+
for obj in (f, m):
|
|
54
|
+
self.assertIsInstance(obj.data, FrozenNaming)
|
|
55
|
+
|
|
56
|
+
# try to mutate underlying data
|
|
57
|
+
with self.assertRaises((TypeError, AttributeError)):
|
|
58
|
+
obj.data["b"] = 2
|
|
59
|
+
|
|
41
60
|
def test_set_data_is_frozenset(self: Self) -> None:
|
|
42
61
|
f: FrozenHoldSet
|
|
43
62
|
m: HoldSet
|
{datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestFrozenMutability.py
RENAMED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import unittest
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
4
|
-
from frozendict import frozendict
|
|
2
|
+
from typing import *
|
|
5
3
|
|
|
6
4
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
7
5
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
6
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
8
7
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
9
8
|
|
|
9
|
+
__all__ = ["TestFrozenMutability"]
|
|
10
|
+
|
|
10
11
|
|
|
11
12
|
class TestFrozenMutability(unittest.TestCase):
|
|
12
13
|
def test_frozen_dict_cannot_mutate(self: Self) -> None:
|
|
@@ -25,6 +26,14 @@ class TestFrozenMutability(unittest.TestCase):
|
|
|
25
26
|
with self.assertRaises((TypeError, AttributeError)):
|
|
26
27
|
f.pop()
|
|
27
28
|
|
|
29
|
+
def test_frozen_naming_cannot_mutate(self: Self) -> None:
|
|
30
|
+
f: FrozenHoldNaming
|
|
31
|
+
f = FrozenHoldNaming({"a": 1}.items())
|
|
32
|
+
with self.assertRaises((TypeError, AttributeError)):
|
|
33
|
+
f["b"] = 2
|
|
34
|
+
with self.assertRaises((TypeError, AttributeError)):
|
|
35
|
+
f.pop("a", None)
|
|
36
|
+
|
|
28
37
|
def test_frozen_set_cannot_mutate(self: Self) -> None:
|
|
29
38
|
f: FrozenHoldSet
|
|
30
39
|
f = FrozenHoldSet({1, 2, 3})
|
|
@@ -1,31 +1,37 @@
|
|
|
1
1
|
import unittest
|
|
2
2
|
from typing import Self
|
|
3
3
|
|
|
4
|
-
from frozendict import frozendict
|
|
5
|
-
|
|
6
4
|
from datahold.core.BaseDataDict import BaseDataDict
|
|
7
5
|
from datahold.core.BaseDataList import BaseDataList
|
|
6
|
+
from datahold.core.BaseDataNaming import BaseDataNaming
|
|
8
7
|
from datahold.core.BaseDataSet import BaseDataSet
|
|
9
8
|
from datahold.core.BaseHoldDict import BaseHoldDict
|
|
10
9
|
from datahold.core.BaseHoldList import BaseHoldList
|
|
10
|
+
from datahold.core.BaseHoldNaming import BaseHoldNaming
|
|
11
11
|
from datahold.core.BaseHoldSet import BaseHoldSet
|
|
12
12
|
from datahold.core.DataDict import DataDict
|
|
13
13
|
from datahold.core.DataList import DataList
|
|
14
|
+
from datahold.core.DataNaming import DataNaming
|
|
14
15
|
from datahold.core.DataObject import DataObject
|
|
15
16
|
from datahold.core.DataSet import DataSet
|
|
16
17
|
from datahold.core.FrozenDataDict import FrozenDataDict
|
|
17
18
|
from datahold.core.FrozenDataList import FrozenDataList
|
|
19
|
+
from datahold.core.FrozenDataNaming import FrozenDataNaming
|
|
18
20
|
from datahold.core.FrozenDataObject import FrozenDataObject
|
|
19
21
|
from datahold.core.FrozenDataSet import FrozenDataSet
|
|
20
22
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
21
23
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
24
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
22
25
|
from datahold.core.FrozenHoldObject import FrozenHoldObject
|
|
23
26
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
24
27
|
from datahold.core.HoldDict import HoldDict
|
|
25
28
|
from datahold.core.HoldList import HoldList
|
|
29
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
26
30
|
from datahold.core.HoldObject import HoldObject
|
|
27
31
|
from datahold.core.HoldSet import HoldSet
|
|
28
32
|
|
|
33
|
+
__all__ = ["TestInheritance"]
|
|
34
|
+
|
|
29
35
|
|
|
30
36
|
class TestInheritance(unittest.TestCase):
|
|
31
37
|
def test_dict_inheritance(self: Self) -> None:
|
|
@@ -48,6 +54,17 @@ class TestInheritance(unittest.TestCase):
|
|
|
48
54
|
self.assertTrue(issubclass(DataList, BaseDataList))
|
|
49
55
|
self.assertTrue(issubclass(HoldList, BaseHoldList))
|
|
50
56
|
|
|
57
|
+
def test_naming_inheritance(self: Self) -> None:
|
|
58
|
+
# base → concrete
|
|
59
|
+
self.assertTrue(issubclass(DataNaming, DataObject))
|
|
60
|
+
self.assertTrue(issubclass(FrozenDataNaming, FrozenDataObject))
|
|
61
|
+
self.assertTrue(issubclass(HoldNaming, HoldObject))
|
|
62
|
+
self.assertTrue(issubclass(FrozenHoldNaming, FrozenHoldObject))
|
|
63
|
+
|
|
64
|
+
# non-frozen data inherit from frozen
|
|
65
|
+
self.assertTrue(issubclass(DataNaming, BaseDataNaming))
|
|
66
|
+
self.assertTrue(issubclass(HoldNaming, BaseHoldNaming))
|
|
67
|
+
|
|
51
68
|
def test_set_inheritance(self: Self) -> None:
|
|
52
69
|
self.assertTrue(issubclass(DataSet, DataObject))
|
|
53
70
|
self.assertTrue(issubclass(FrozenDataSet, FrozenDataObject))
|
{datahold-3.0.2 → datahold-3.1.0.dev1}/src/datahold/tests/test_datahold_TestMutableBehavior.py
RENAMED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import unittest
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import *
|
|
3
3
|
|
|
4
|
-
from frozendict import frozendict
|
|
5
|
-
|
|
6
|
-
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
7
|
-
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
8
|
-
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
9
4
|
from datahold.core.HoldDict import HoldDict
|
|
10
5
|
from datahold.core.HoldList import HoldList
|
|
6
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
11
7
|
from datahold.core.HoldSet import HoldSet
|
|
12
8
|
|
|
9
|
+
__all__ = ["TestMutableBehavior"]
|
|
10
|
+
|
|
13
11
|
|
|
14
12
|
class TestMutableBehavior(unittest.TestCase):
|
|
15
13
|
def test_hold_dict_mutates_and_syncs_data(self: Self) -> None:
|
|
@@ -26,6 +24,13 @@ class TestMutableBehavior(unittest.TestCase):
|
|
|
26
24
|
self.assertEqual(list(x), [1, 2, 3])
|
|
27
25
|
self.assertEqual(x.data, (1, 2, 3))
|
|
28
26
|
|
|
27
|
+
def test_hold_naming_mutates_and_syncs_data(self: Self) -> None:
|
|
28
|
+
x: HoldNaming
|
|
29
|
+
x = HoldNaming({"a": 1}.items())
|
|
30
|
+
x["b"] = 2
|
|
31
|
+
self.assertEqual(x["b"], 2)
|
|
32
|
+
self.assertEqual(x.data["b"], 2)
|
|
33
|
+
|
|
29
34
|
def test_hold_set_mutates_and_syncs_data(self: Self) -> None:
|
|
30
35
|
s: HoldSet
|
|
31
36
|
s = HoldSet({1, 2})
|
|
@@ -9,13 +9,13 @@ from collections.abc import (
|
|
|
9
9
|
from collections.abc import Set as AbstractSet
|
|
10
10
|
from typing import Self
|
|
11
11
|
|
|
12
|
-
from frozendict import frozendict
|
|
13
|
-
|
|
14
12
|
from datahold.core.FrozenHoldDict import FrozenHoldDict
|
|
15
13
|
from datahold.core.FrozenHoldList import FrozenHoldList
|
|
14
|
+
from datahold.core.FrozenHoldNaming import FrozenHoldNaming
|
|
16
15
|
from datahold.core.FrozenHoldSet import FrozenHoldSet
|
|
17
16
|
from datahold.core.HoldDict import HoldDict
|
|
18
17
|
from datahold.core.HoldList import HoldList
|
|
18
|
+
from datahold.core.HoldNaming import HoldNaming
|
|
19
19
|
from datahold.core.HoldSet import HoldSet
|
|
20
20
|
|
|
21
21
|
__all__ = ["TestProtocols"]
|
|
@@ -49,6 +49,20 @@ class TestProtocols(unittest.TestCase):
|
|
|
49
49
|
self.assertIsInstance(m, Sequence)
|
|
50
50
|
self.assertIsInstance(m, MutableSequence)
|
|
51
51
|
|
|
52
|
+
def test_naming_protocols_x(self: Self) -> None:
|
|
53
|
+
x: FrozenHoldNaming
|
|
54
|
+
x = FrozenHoldNaming({"a": 1}.items())
|
|
55
|
+
|
|
56
|
+
self.assertIsInstance(x, Mapping)
|
|
57
|
+
self.assertNotIsInstance(x, MutableMapping)
|
|
58
|
+
|
|
59
|
+
def test_naming_protocols_y(self: Self) -> None:
|
|
60
|
+
y: HoldNaming
|
|
61
|
+
y = HoldNaming({"a": 1}.items())
|
|
62
|
+
|
|
63
|
+
self.assertIsInstance(y, Mapping)
|
|
64
|
+
self.assertIsInstance(y, MutableMapping)
|
|
65
|
+
|
|
52
66
|
def test_set_protocols(self: Self) -> None:
|
|
53
67
|
f: FrozenHoldSet
|
|
54
68
|
m: HoldSet
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datahold
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.1.0.dev1
|
|
4
4
|
Summary: This project wraps common mutable datastructures for inheritance with modification.
|
|
5
5
|
Author-email: Johannes <johannes.programming@gmail.com>
|
|
6
6
|
License: The MIT License (MIT)
|
|
@@ -28,7 +28,7 @@ Project-URL: Download, https://pypi.org/project/datahold/#files
|
|
|
28
28
|
Project-URL: Index, https://pypi.org/project/datahold/
|
|
29
29
|
Project-URL: Source, https://github.com/johannes-programming/datahold/
|
|
30
30
|
Project-URL: Website, http://datahold.johannes-programming.online/
|
|
31
|
-
Classifier: Development Status ::
|
|
31
|
+
Classifier: Development Status :: 3 - Alpha
|
|
32
32
|
Classifier: Intended Audience :: Developers
|
|
33
33
|
Classifier: License :: OSI Approved :: MIT License
|
|
34
34
|
Classifier: Natural Language :: English
|
|
@@ -44,6 +44,7 @@ Requires-Dist: cmp3<2,>=1.0
|
|
|
44
44
|
Requires-Dist: copyable<2,>=1.0
|
|
45
45
|
Requires-Dist: datarepr<2,>=1.0
|
|
46
46
|
Requires-Dist: frozendict<3,>=2.4.6
|
|
47
|
+
Requires-Dist: namings<2,>=1.0
|
|
47
48
|
Requires-Dist: setdoc<2,>=1.2.8
|
|
48
49
|
Dynamic: license-file
|
|
49
50
|
|
|
@@ -13,26 +13,32 @@ src/datahold/_utils/__init__.py
|
|
|
13
13
|
src/datahold/_utils/wrapping.py
|
|
14
14
|
src/datahold/core/BaseDataDict.py
|
|
15
15
|
src/datahold/core/BaseDataList.py
|
|
16
|
+
src/datahold/core/BaseDataNaming.py
|
|
16
17
|
src/datahold/core/BaseDataObject.py
|
|
17
18
|
src/datahold/core/BaseDataSet.py
|
|
18
19
|
src/datahold/core/BaseHoldDict.py
|
|
19
20
|
src/datahold/core/BaseHoldList.py
|
|
21
|
+
src/datahold/core/BaseHoldNaming.py
|
|
20
22
|
src/datahold/core/BaseHoldObject.py
|
|
21
23
|
src/datahold/core/BaseHoldSet.py
|
|
22
24
|
src/datahold/core/DataDict.py
|
|
23
25
|
src/datahold/core/DataList.py
|
|
26
|
+
src/datahold/core/DataNaming.py
|
|
24
27
|
src/datahold/core/DataObject.py
|
|
25
28
|
src/datahold/core/DataSet.py
|
|
26
29
|
src/datahold/core/FrozenDataDict.py
|
|
27
30
|
src/datahold/core/FrozenDataList.py
|
|
31
|
+
src/datahold/core/FrozenDataNaming.py
|
|
28
32
|
src/datahold/core/FrozenDataObject.py
|
|
29
33
|
src/datahold/core/FrozenDataSet.py
|
|
30
34
|
src/datahold/core/FrozenHoldDict.py
|
|
31
35
|
src/datahold/core/FrozenHoldList.py
|
|
36
|
+
src/datahold/core/FrozenHoldNaming.py
|
|
32
37
|
src/datahold/core/FrozenHoldObject.py
|
|
33
38
|
src/datahold/core/FrozenHoldSet.py
|
|
34
39
|
src/datahold/core/HoldDict.py
|
|
35
40
|
src/datahold/core/HoldList.py
|
|
41
|
+
src/datahold/core/HoldNaming.py
|
|
36
42
|
src/datahold/core/HoldObject.py
|
|
37
43
|
src/datahold/core/HoldSet.py
|
|
38
44
|
src/datahold/core/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|