datahold 4.0.0.dev22__tar.gz → 4.0.0.dev23__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.
Files changed (37) hide show
  1. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/PKG-INFO +1 -1
  2. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/pyproject.toml +1 -1
  3. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold/__init__.py +5 -2
  4. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold.egg-info/PKG-INFO +1 -1
  5. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold.egg-info/SOURCES.txt +2 -2
  6. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_abstractmethods.py +5 -9
  7. datahold-4.0.0.dev23/tests/test_name.py +81 -0
  8. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/testdata.toml +7 -31
  9. datahold-4.0.0.dev22/tests/test_prefix.py +0 -41
  10. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/LICENSE.txt +0 -0
  11. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/MANIFEST.in +0 -0
  12. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/README.rst +0 -0
  13. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v1.1.rst +0 -0
  14. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v1.2.rst +0 -0
  15. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v2.0.rst +0 -0
  16. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v2.1.rst +0 -0
  17. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v2.2.rst +0 -0
  18. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v2.3.rst +0 -0
  19. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v3.0.rst +0 -0
  20. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/docs/v4.0.rst +0 -0
  21. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/run_tests.py +0 -0
  22. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/setup.cfg +0 -0
  23. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold/py.typed +0 -0
  24. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold.egg-info/dependency_links.txt +0 -0
  25. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold.egg-info/requires.txt +0 -0
  26. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/src/datahold.egg-info/top_level.txt +0 -0
  27. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_FrozenListSlot.py +0 -0
  28. /datahold-4.0.0.dev22/tests/test_MutableListHold.py → /datahold-4.0.0.dev23/tests/test_MutableListSlot.py +0 -0
  29. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_all.py +0 -0
  30. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_attributes.py +0 -0
  31. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_docs.py +0 -0
  32. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_generic.py +0 -0
  33. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_internal_comparison.py +0 -0
  34. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_issubclass.py +0 -0
  35. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_nested.py +0 -0
  36. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_sorted.py +0 -0
  37. {datahold-4.0.0.dev22 → datahold-4.0.0.dev23}/tests/test_variance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev22
3
+ Version: 4.0.0.dev23
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-Expression: MIT
@@ -31,7 +31,7 @@ license-files = [
31
31
  name = "datahold"
32
32
  readme = "README.rst"
33
33
  requires-python = ">=3.11"
34
- version = "4.0.0.dev22"
34
+ version = "4.0.0.dev23"
35
35
 
36
36
  [project.urls]
37
37
  Download = "https://pypi.org/project/datahold/#files"
@@ -219,7 +219,6 @@ class MutableSetLike[Item: abc.Hashable](SetLike[Item], MutableSet[Item]):
219
219
  with self.__mutate__() as mutable:
220
220
  return frozenset(mutable)
221
221
 
222
- @abstractmethod
223
222
  @setdoc.basic
224
223
  def __init__(self: Self, data: abc.Iterable[Item] = (), /) -> None:
225
224
  with self.__mutate__() as mutable:
@@ -287,7 +286,11 @@ class MutableSetSlot[Item](SetSlot[Item], MutableSetLike[Item]):
287
286
 
288
287
  @contextmanager
289
288
  @setdoc.basic
290
- def __mutate__(self: Self, /) -> abc.Generator[set[Item], None, None]:
289
+ def __mutate__(
290
+ self: Self,
291
+ /,
292
+ ) -> abc.Generator[MutableSetSlot.__Mutable__[Item], None, None]:
293
+ slot: MutableSetSlot.__Mutable__[Item]
291
294
  slot = set(getattr(self, "_slot", ()))
292
295
  yield slot
293
296
  self._slot = frozenset(slot)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev22
3
+ Version: 4.0.0.dev23
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-Expression: MIT
@@ -20,7 +20,7 @@ src/datahold.egg-info/dependency_links.txt
20
20
  src/datahold.egg-info/requires.txt
21
21
  src/datahold.egg-info/top_level.txt
22
22
  tests/test_FrozenListSlot.py
23
- tests/test_MutableListHold.py
23
+ tests/test_MutableListSlot.py
24
24
  tests/test_abstractmethods.py
25
25
  tests/test_all.py
26
26
  tests/test_attributes.py
@@ -28,8 +28,8 @@ tests/test_docs.py
28
28
  tests/test_generic.py
29
29
  tests/test_internal_comparison.py
30
30
  tests/test_issubclass.py
31
+ tests/test_name.py
31
32
  tests/test_nested.py
32
- tests/test_prefix.py
33
33
  tests/test_sorted.py
34
34
  tests/test_variance.py
35
35
  tests/testdata.toml
@@ -12,22 +12,18 @@ import datahold
12
12
 
13
13
 
14
14
  class TestAbstractmethods(unittest.TestCase):
15
- def _test(
16
- self: Self, name: str, abstractmethods: Optional[list[str]] = None, /
17
- ) -> None:
15
+ def _test(self: Self, name: str, abstractmethods: set[str], /) -> None:
18
16
  datatype: Any
19
- if abstractmethods is None:
20
- return
21
17
  datatype = getattr(datahold, name)
22
- self.assertSetEqual(datatype.__abstractmethods__, set(abstractmethods))
18
+ self.assertLessEqual(len(datatype.__abstractmethods__), 2)
19
+ self.assertSetEqual(datatype.__abstractmethods__, abstractmethods)
23
20
  self.assertEqual(ins.isabstract(datatype), bool(abstractmethods))
24
21
 
25
22
  def test_abstractmethods(self: Self, /) -> None:
26
- data: Any
27
23
  name: Any
28
- for name, data in Lazy.lazy.datatypes.items():
24
+ for name in Lazy.lazy.datatypes.keys():
29
25
  with self.subTest(datatype=name):
30
- self._test(name, data.get("abstractmethods"))
26
+ self._test(name, Lazy.get_abstractmethods(name))
31
27
 
32
28
 
33
29
  if __name__ == "__main__":
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+
3
+ __all__: list[str] = ["TestName"]
4
+
5
+ import unittest
6
+ from collections import abc
7
+ from typing import Self
8
+
9
+ from Lazy import Lazy
10
+
11
+ import datahold
12
+
13
+
14
+ class TestName(unittest.TestCase):
15
+
16
+ def _test_name(self: Self, name: str, /) -> None:
17
+ prefix: str
18
+ suffix: str
19
+ if name.startswith("Frozen"):
20
+ prefix = "Frozen"
21
+ elif name.startswith("Mutable"):
22
+ prefix = "Mutable"
23
+ else:
24
+ prefix = ""
25
+ if name.endswith("Like"):
26
+ suffix = "Like"
27
+ elif name.endswith("Slot"):
28
+ suffix = "Slot"
29
+ else:
30
+ suffix = ""
31
+ # all
32
+ datatype = getattr(datahold, name)
33
+ self.assertEqual(datatype.__name__, name)
34
+ self.assertTrue(hasattr(datatype, "__Frozen__"))
35
+ self.assertTrue(hasattr(datatype, "__frozen__"))
36
+ self.assertTrue(issubclass(datatype, datahold.Collection))
37
+ # frozen
38
+ if prefix == "Frozen":
39
+ self.assertIsNot(datatype.__hash__, object.__hash__)
40
+ self.assertTrue(issubclass(datatype, abc.Hashable))
41
+ self.assertFalse(hasattr(datatype, "__Mutable__"))
42
+ self.assertFalse(hasattr(datatype, "__mutate__"))
43
+ self.assertTrue(
44
+ issubclass(datatype, Lazy.get_import("datahold." + name[6:]))
45
+ )
46
+ # mutable
47
+ if prefix == "Mutable":
48
+ self.assertIn(datatype.__hash__, [None, object.__hash__])
49
+ self.assertTrue(hasattr(datatype, "__Mutable__"))
50
+ self.assertTrue(hasattr(datatype, "__mutate__"))
51
+ self.assertTrue(
52
+ issubclass(datatype, Lazy.get_import("datahold." + name[7:]))
53
+ )
54
+ # no prefix
55
+ if prefix == "":
56
+ self.assertIn(datatype.__hash__, [None, object.__hash__])
57
+ self.assertFalse(hasattr(datatype, "__Mutable__"))
58
+ self.assertFalse(hasattr(datatype, "__mutate__"))
59
+ # like
60
+ if suffix == "Like":
61
+ self.assertTrue(hasattr(datatype, "__init__"))
62
+ # slot
63
+ if suffix == "Slot":
64
+ self.assertTrue(hasattr(datatype, "__init__"))
65
+ self.assertTrue(
66
+ issubclass(
67
+ datatype, Lazy.get_import("datahold." + name[:-4] + "Like")
68
+ )
69
+ )
70
+ # no suffix
71
+ if suffix == "":
72
+ self.assertIs(datatype.__init__, object.__init__)
73
+
74
+ def test_name(self: Self, /) -> None:
75
+ for name in Lazy.lazy.datatypes.keys():
76
+ with self.subTest(datatype=name):
77
+ self._test_name(name)
78
+
79
+
80
+ if __name__ == "__main__":
81
+ unittest.main(verbosity=2)
@@ -1,5 +1,8 @@
1
1
  [datatypes.Collection]
2
2
 
3
+ [datatypes.DictLike.attributes]
4
+ __or__ = "datahold.DictLike"
5
+
3
6
  [datatypes.DictLike.issubclass]
4
7
  "collections.abc.Mapping" = true
5
8
  "datahold.Mapping" = true
@@ -16,12 +19,6 @@
16
19
  "collections.abc.Hashable" = true
17
20
  "datahold.FrozenDictLike" = true
18
21
 
19
- [datatypes.FrozenListLike]
20
- abstractmethods = [
21
- "__frozen__",
22
- "__init__",
23
- ]
24
-
25
22
  [datatypes.FrozenListLike.attributes]
26
23
  __frozen__ = "datahold.ListLike"
27
24
  __init__ = "datahold.ListLike"
@@ -40,9 +37,6 @@ __Mutable__ = ""
40
37
  [datatypes.FrozenListLike.varia]
41
38
  generic = 1
42
39
 
43
- [datatypes.FrozenListSlot]
44
- abstractmethods = []
45
-
46
40
  [datatypes.FrozenListSlot.TestInternalComparsion.ge.test_greater_value]
47
41
  a = "_1_3"
48
42
  b = "_1_2"
@@ -166,12 +160,6 @@ generic = 1
166
160
  "collections.abc.Set" = true
167
161
  "datahold.Collection" = true
168
162
 
169
- [datatypes.ListLike]
170
- abstractmethods = [
171
- "__frozen__",
172
- "__init__",
173
- ]
174
-
175
163
  [datatypes.ListLike.attributes]
176
164
  __frozen__ = "datahold.ListLike"
177
165
  __init__ = "datahold.ListLike"
@@ -194,11 +182,6 @@ __Mutable__ = ""
194
182
  [datatypes.ListLike.varia]
195
183
  generic = 1
196
184
 
197
- [datatypes.ListSlot]
198
- abstractmethods = [
199
- "__init__",
200
- ]
201
-
202
185
  [datatypes.ListSlot.nested]
203
186
  __Frozen__ = "builtins.tuple"
204
187
  __Mutable__ = ""
@@ -210,6 +193,10 @@ generic = 1
210
193
  "collections.abc.Mapping" = true
211
194
  "datahold.Collection" = true
212
195
 
196
+ [datatypes.MutableDictLike.attributes]
197
+ __ior__ = "datahold.MutableDictLike"
198
+ __or__ = "datahold.DictLike"
199
+
213
200
  [datatypes.MutableDictLike.issubclass]
214
201
  "collections.abc.Mapping" = true
215
202
  "collections.abc.MutableMapping" = true
@@ -221,11 +208,6 @@ generic = 1
221
208
  "datahold.MutableDictLike" = true
222
209
  "datahold.MutableMapping" = true
223
210
 
224
- [datatypes.MutableListLike]
225
- abstractmethods = [
226
- "__mutate__",
227
- ]
228
-
229
211
  [datatypes.MutableListLike.attributes]
230
212
  __add__ = "datahold.MutableListLike"
231
213
  __frozen__ = "datahold.MutableListLike"
@@ -259,9 +241,6 @@ __hash__ = ""
259
241
  [datatypes.MutableListLike.varia]
260
242
  generic = 1
261
243
 
262
- [datatypes.MutableListSlot]
263
- abstractmethods = []
264
-
265
244
  [datatypes.MutableListSlot.issubclass]
266
245
  "builtins.list" = false
267
246
  "datahold.ListLike" = true
@@ -312,9 +291,6 @@ sort = ""
312
291
  "datahold.SetSlot" = true
313
292
 
314
293
  [datatypes.Sequence]
315
- abstractmethods = [
316
- "__frozen__",
317
- ]
318
294
 
319
295
  [datatypes.Set.issubclass]
320
296
  "collections.abc.Set" = true
@@ -1,41 +0,0 @@
1
- from __future__ import annotations
2
-
3
- __all__: list[str] = ["TestPrefix"]
4
-
5
- import unittest
6
- from collections import abc
7
- from typing import Self
8
-
9
- from Lazy import Lazy
10
-
11
- import datahold
12
-
13
-
14
- class TestPrefix(unittest.TestCase):
15
- def _test_prefix(self: Self, name: str, /) -> None:
16
- datatype = getattr(datahold, name)
17
- self.assertEqual(datatype.__name__, name)
18
- self.assertTrue(hasattr(datatype, "__Frozen__"))
19
- self.assertTrue(hasattr(datatype, "__frozen__"))
20
- if name.startswith("Frozen"):
21
- self.assertIsNot(datatype.__hash__, object.__hash__)
22
- self.assertTrue(issubclass(datatype, abc.Hashable))
23
- self.assertFalse(hasattr(datatype, "__Mutable__"))
24
- self.assertFalse(hasattr(datatype, "__mutate__"))
25
- return
26
- self.assertIn(datatype.__hash__, [None, object.__hash__])
27
- if name.startswith("Mutable"):
28
- self.assertTrue(hasattr(datatype, "__Mutable__"))
29
- self.assertTrue(hasattr(datatype, "__mutate__"))
30
- return
31
- self.assertFalse(hasattr(datatype, "__Mutable__"))
32
- self.assertFalse(hasattr(datatype, "__mutate__"))
33
-
34
- def test_prefix(self: Self, /) -> None:
35
- for name in Lazy.lazy.datatypes.keys():
36
- with self.subTest(datatype=name):
37
- self._test_prefix(name)
38
-
39
-
40
- if __name__ == "__main__":
41
- unittest.main(verbosity=2)
File without changes