datahold 4.0.0.dev4__tar.gz → 4.0.0.dev6__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 (34) hide show
  1. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/PKG-INFO +1 -1
  2. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/pyproject.toml +1 -1
  3. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold/__init__.py +33 -96
  4. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold.egg-info/PKG-INFO +1 -1
  5. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_testdata.py +35 -0
  6. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/testdata.toml +50 -0
  7. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/LICENSE.txt +0 -0
  8. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/MANIFEST.in +0 -0
  9. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/README.rst +0 -0
  10. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v1.1.rst +0 -0
  11. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v1.2.rst +0 -0
  12. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v2.0.rst +0 -0
  13. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v2.1.rst +0 -0
  14. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v2.2.rst +0 -0
  15. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v2.3.rst +0 -0
  16. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v3.0.rst +0 -0
  17. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/docs/v4.0.rst +0 -0
  18. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/run_tests.py +0 -0
  19. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/setup.cfg +0 -0
  20. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold/py.typed +0 -0
  21. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold.egg-info/SOURCES.txt +0 -0
  22. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold.egg-info/dependency_links.txt +0 -0
  23. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold.egg-info/requires.txt +0 -0
  24. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/src/datahold.egg-info/top_level.txt +0 -0
  25. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_FrozenHoldDict.py +0 -0
  26. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_FrozenHoldList.py +0 -0
  27. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_FrozenHoldSet.py +0 -0
  28. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_HoldDict.py +0 -0
  29. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_HoldList.py +0 -0
  30. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_HoldSet.py +0 -0
  31. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_datahold_TestCopy.py +0 -0
  32. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_datahold_TestDataAttribute.py +0 -0
  33. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_datahold_TestFrozenMutability.py +0 -0
  34. {datahold-4.0.0.dev4 → datahold-4.0.0.dev6}/tests/test_datahold_TestMutableBehavior.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev4
3
+ Version: 4.0.0.dev6
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
@@ -34,7 +34,7 @@ license-files = [
34
34
  name = "datahold"
35
35
  readme = "README.rst"
36
36
  requires-python = ">=3.12"
37
- version = "4.0.0.dev4"
37
+ version = "4.0.0.dev6"
38
38
 
39
39
  [project.urls]
40
40
  Download = "https://pypi.org/project/datahold/#files"
@@ -134,15 +134,19 @@ class BaseDataSet[Item: abc.Hashable](BaseDataAbstractSet[Item]):
134
134
 
135
135
  @abstractmethod
136
136
  @setdoc.basic
137
- def __init__(self: Self, data: Init[Item] = (), /) -> None: ...
137
+ def __fget__(self: Self) -> Data[Item]: ...
138
138
 
139
+ @abstractmethod
139
140
  @setdoc.basic
140
- def __repr__(self: Self, /) -> str:
141
- return f"{type(self).__name__}({set(self.__fget__())!r})"
141
+ def __fset__(self: Self, data: Data[Item], /) -> None: ...
142
+
143
+ @setdoc.basic
144
+ def __init__(self: Self, data: Init[Item] = (), /) -> None:
145
+ self.__fset__(set(data))
142
146
 
143
- @abstractmethod
144
147
  @setdoc.basic
145
- def __fget__(self: Self) -> set[Item]: ...
148
+ def __repr__(self: Self, /) -> str:
149
+ return f"{type(self).__name__}({set(self.__fget__())!r})"
146
150
 
147
151
  @setdoc.basic
148
152
  def difference(self: Self, /, *others: abc.Iterable[abc.Hashable]) -> Self:
@@ -201,10 +205,6 @@ class FrozenHoldSet[Item: abc.Hashable](
201
205
  def __fset__(self: Self, data: FrozenHoldSet.Data[Item], /) -> None:
202
206
  self._data: FrozenHoldSet.Data[Item] = data
203
207
 
204
- @setdoc.basic
205
- def __init__(self: Self, data: FrozenHoldSet.Init[Item] = (), /) -> None:
206
- self.__fset__(set(data))
207
-
208
208
 
209
209
  class DataSet[Item: abc.Hashable](
210
210
  BaseDataSet[Item],
@@ -214,22 +214,6 @@ class DataSet[Item: abc.Hashable](
214
214
 
215
215
  __slots__ = ()
216
216
 
217
- @abstractmethod
218
- @setdoc.basic
219
- def __fget__(self: Self) -> DataSet.Data[Item]: ...
220
-
221
- @abstractmethod
222
- @setdoc.basic
223
- def __fset__(
224
- self: Self,
225
- value: DataSet.Data[Item],
226
- /,
227
- ) -> None: ...
228
-
229
- @setdoc.basic
230
- def __init__(self: Self, data: abc.Iterable[Item] = (), /) -> None:
231
- self.__fset__(set(data))
232
-
233
217
  @setdoc.basic
234
218
  def add(self: Self, item: Item, /) -> None:
235
219
  self.__fset__(self.__fget__() | {item})
@@ -342,13 +326,26 @@ class BaseDataDict[Key: abc.Hashable, Value](
342
326
  )
343
327
 
344
328
  @abstractmethod
329
+ @setdoc.basic
330
+ def __fget__(self: Self) -> Data[Key, Value]: ...
331
+
332
+ @abstractmethod
333
+ @setdoc.basic
334
+ def __fset__(self: Self, data: Data[Key, Value], /) -> None: ...
335
+
345
336
  @setdoc.basic
346
337
  def __init__(
347
338
  self: Self,
348
339
  data: Init[Key, Value] = (),
349
340
  /,
350
341
  **kwargs: Optional[Value],
351
- ) -> None: ...
342
+ ) -> None:
343
+ data_: BaseDataDict.Data[Key, Value]
344
+ data_ = dict( # type: ignore[assignment]
345
+ data, # type: ignore[arg-type]
346
+ **kwargs,
347
+ )
348
+ self.__fset__(data_)
352
349
 
353
350
  @setdoc.basic
354
351
  def __or__(
@@ -364,10 +361,6 @@ class BaseDataDict[Key: abc.Hashable, Value](
364
361
 
365
362
  # __ror__ is unnecessary because of how __or__ is defined
366
363
 
367
- @abstractmethod
368
- @setdoc.basic
369
- def __fget__(self: Self) -> Data[Key, Value]: ...
370
-
371
364
  @classmethod
372
365
  @setdoc.basic
373
366
  def fromkeys(
@@ -400,20 +393,6 @@ class FrozenHoldDict[Key: abc.Hashable, Value](
400
393
 
401
394
  __slots__ = ()
402
395
 
403
- @setdoc.basic
404
- def __init__(
405
- self: Self,
406
- data: FrozenHoldDict.Init[Key, Value] = (),
407
- /,
408
- **kwargs: Optional[Value],
409
- ) -> None:
410
- self.__fset__(
411
- dict(
412
- data, # type: ignore[arg-type]
413
- **kwargs,
414
- )
415
- )
416
-
417
396
  @setdoc.basic
418
397
  def __fget__(self: Self) -> FrozenHoldDict.Data[Key, Value]:
419
398
  return dict(self._data)
@@ -438,28 +417,6 @@ class DataDict[Key: abc.Hashable, Value](
438
417
  del data[key]
439
418
  self.__fset__(data)
440
419
 
441
- @abstractmethod
442
- @setdoc.basic
443
- def __fget__(self: Self) -> DataDict.Data[Key, Value]: ...
444
-
445
- @abstractmethod
446
- @setdoc.basic
447
- def __fset__(self: Self, data: DataDict.Data[Key, Value], /) -> None: ...
448
-
449
- @setdoc.basic
450
- def __init__(
451
- self: Self,
452
- data: BaseDataDict.Init[Key, Value] = (),
453
- /,
454
- **kwargs: Optional[Value],
455
- ) -> None:
456
- self.__fset__(
457
- dict(
458
- data, # type: ignore[arg-type]
459
- **kwargs,
460
- )
461
- )
462
-
463
420
  @setdoc.basic
464
421
  def __ior__(
465
422
  self: Self,
@@ -589,6 +546,14 @@ class BaseDataList[Item](BaseDataSequence[Item]):
589
546
  else:
590
547
  return NotImplemented
591
548
 
549
+ @abstractmethod
550
+ @setdoc.basic
551
+ def __fget__(self: Self) -> Data[Item]: ...
552
+
553
+ @abstractmethod
554
+ @setdoc.basic
555
+ def __fset__(self: Self, data: Data[Item], /) -> None: ...
556
+
592
557
  @setdoc.basic
593
558
  def __ge__(self: Self, other: object, /) -> NotImplementedType | bool:
594
559
  if isinstance(other, BaseDataList):
@@ -620,9 +585,9 @@ class BaseDataList[Item](BaseDataSequence[Item]):
620
585
  else:
621
586
  return NotImplemented
622
587
 
623
- @abstractmethod
624
588
  @setdoc.basic
625
- def __init__(self: Self, data: Init[Item] = (), /) -> None: ...
589
+ def __init__(self: Self, data: Init[Item] = (), /) -> None:
590
+ self.__fset__(list(data))
626
591
 
627
592
  @setdoc.basic
628
593
  def __le__(self: Self, other: object, /) -> NotImplementedType | bool:
@@ -648,10 +613,6 @@ class BaseDataList[Item](BaseDataSequence[Item]):
648
613
 
649
614
  __rmul__ = __mul__
650
615
 
651
- @abstractmethod
652
- @setdoc.basic
653
- def __fget__(self: Self) -> Data[Item]: ...
654
-
655
616
 
656
617
  class FrozenDataList[Item](
657
618
  BaseDataList[Item],
@@ -682,10 +643,6 @@ class FrozenHoldList[Item](
682
643
  def __fset__(self: Self, data: FrozenHoldList.Data[Item], /) -> None:
683
644
  self._data: FrozenHoldList.Data[Item] = data
684
645
 
685
- @setdoc.basic
686
- def __init__(self: Self, data: FrozenHoldList.Init[Item] = (), /) -> None:
687
- self.__fset__(list(data))
688
-
689
646
 
690
647
  class DataList[Item](
691
648
  BaseDataList[Item],
@@ -704,31 +661,11 @@ class DataList[Item](
704
661
  del data[other]
705
662
  self.__fset__(data)
706
663
 
707
- @abstractmethod
708
- @setdoc.basic
709
- def __fget__(self: Self) -> DataList.Data[Item]: ...
710
-
711
- @abstractmethod
712
- @setdoc.basic
713
- def __fset__(
714
- self: Self,
715
- value: DataList.Data[Item],
716
- /,
717
- ) -> None: ...
718
-
719
664
  @setdoc.basic
720
665
  def __imul__(self: Self, other: SupportsIndex, /) -> Self:
721
666
  self.__fset__(self.__fget__() * other)
722
667
  return self
723
668
 
724
- @setdoc.basic
725
- def __init__(
726
- self: Self,
727
- data: abc.Iterable[Item] = (),
728
- /,
729
- ) -> None:
730
- self.__fset__(list(data))
731
-
732
669
  @overload
733
670
  @setdoc.basic
734
671
  def __setitem__(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev4
3
+ Version: 4.0.0.dev6
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
@@ -3,6 +3,7 @@ __all__: list[str] = [
3
3
  "TestCollection",
4
4
  "TestConstructor",
5
5
  "TestData",
6
+ "TestDirData",
6
7
  "TestGeneric",
7
8
  "TestHasCopy",
8
9
  "TestParents",
@@ -169,6 +170,40 @@ class TestData(unittest.TestCase):
169
170
  obj.foo = 42
170
171
 
171
172
 
173
+ class TestDirData(unittest.TestCase):
174
+ def go_dirData(self: Self, x: Any, /, **y: Any) -> None:
175
+ cls = getattr(datahold, x)
176
+ dirData = y.get("dirData")
177
+ if dirData is None:
178
+ return
179
+ for z in dirData:
180
+ self.assertTrue(hasattr(cls.Data, z))
181
+
182
+ def go_init(self: Self, x: str, /) -> None:
183
+ cls: Any
184
+ cls = getattr(datahold, x)
185
+ self.assertEqual(
186
+ "__fget__" in cls.__dict__,
187
+ "Data" in cls.__dict__ or not ins.isabstract(cls),
188
+ )
189
+ if "__fset__" in cls.__dict__:
190
+ self.assertIn("__fget__", cls.__dict__)
191
+ self.assertEqual(
192
+ "Init" in cls.__dict__,
193
+ "__init__" in cls.__dict__,
194
+ )
195
+ self.assertNotEqual(
196
+ hasattr(cls, "Init"),
197
+ cls.__init__ is object.__init__,
198
+ )
199
+
200
+ def test_types(self: Self) -> None:
201
+ for x, y in Lazy.lazy.types.items():
202
+ with self.subTest(type=x):
203
+ self.go_dirData(x, **y)
204
+ self.go_init(x)
205
+
206
+
172
207
  class TestGeneric(unittest.TestCase):
173
208
  def go_assert_is_generic(
174
209
  self: Self,
@@ -4,40 +4,73 @@ METHODS = [
4
4
  "__str__",
5
5
  ]
6
6
 
7
+ [types.BaseDataAbstractSet]
8
+ dirData = [
9
+ "__contains__",
10
+ "__iter__",
11
+ "__len__",
12
+ ]
13
+
7
14
  [types.BaseDataAbstractSet.parents]
8
15
  BaseDataCollection = true
9
16
  Hashable = false
10
17
 
18
+ [types.BaseDataCollection]
19
+ dirData = [
20
+ "__contains__",
21
+ "__iter__",
22
+ "__len__",
23
+ ]
24
+
11
25
  [types.BaseDataCollection.parents]
12
26
  Collection = true
13
27
  Hashable = true
14
28
 
29
+ [types.BaseDataDict]
30
+ dirData = []
31
+
15
32
  [types.BaseDataDict.parents]
16
33
  Hashable = false
17
34
  Mapping = true
18
35
 
36
+ [types.BaseDataList]
37
+ dirData = []
38
+
19
39
  [types.BaseDataList.parents]
20
40
  Hashable = false
21
41
  Sequence = true
22
42
 
43
+ [types.BaseDataMapping]
44
+ dirData = []
45
+
23
46
  [types.BaseDataMapping.parents]
24
47
  BaseDataCollection = true
25
48
  Hashable = false
26
49
 
50
+ [types.BaseDataSequence]
51
+ dirData = []
52
+
27
53
  [types.BaseDataSequence.parents]
28
54
  BaseDataCollection = true
29
55
  Hashable = true
30
56
 
57
+ [types.BaseDataSet]
58
+ dirData = []
59
+
31
60
  [types.BaseDataSet.parents]
32
61
  Hashable = false
33
62
  Set = true
34
63
 
64
+ [types.BaseHoldCollection]
65
+ dirData = []
66
+
35
67
  [types.BaseHoldCollection.parents]
36
68
  BaseDataCollection = true
37
69
  Hashable = true
38
70
 
39
71
  [types.DataDict]
40
72
  Data = "frozendict"
73
+ dirData = []
41
74
  isabstract = true
42
75
  n_type_params = 2
43
76
 
@@ -50,6 +83,7 @@ MutableMapping = true
50
83
 
51
84
  [types.DataList]
52
85
  Data = "tuple"
86
+ dirData = []
53
87
  isabstract = true
54
88
  n_type_params = 1
55
89
 
@@ -63,6 +97,7 @@ Sequence = true
63
97
 
64
98
  [types.DataSet]
65
99
  Data = "frozenset"
100
+ dirData = []
66
101
  isabstract = true
67
102
  n_type_params = 1
68
103
 
@@ -76,22 +111,28 @@ Set = true
76
111
 
77
112
  [types.FrozenDataDict]
78
113
  Data = "frozendict"
114
+ dirData = []
79
115
  isabstract = true
80
116
 
81
117
  [types.FrozenDataDict.parents]
82
118
 
83
119
  [types.FrozenDataList]
84
120
  Data = "tuple"
121
+ dirData = []
85
122
  isabstract = true
86
123
 
87
124
  [types.FrozenDataList.parents]
88
125
 
89
126
  [types.FrozenDataSet]
90
127
  Data = "frozenset"
128
+ dirData = []
91
129
  isabstract = true
92
130
 
93
131
  [types.FrozenDataSet.parents]
94
132
 
133
+ [types.FrozenHoldDict]
134
+ dirData = []
135
+
95
136
  [types.FrozenHoldDict.constructor.concrete]
96
137
  args = [
97
138
  { a = 1 },
@@ -104,6 +145,9 @@ a = 1
104
145
  Mapping = true
105
146
  MutableMapping = false
106
147
 
148
+ [types.FrozenHoldList]
149
+ dirData = []
150
+
107
151
  [types.FrozenHoldList.constructor.concrete]
108
152
  args = [
109
153
  [
@@ -118,6 +162,9 @@ FrozenDataList = true
118
162
  MutableSequence = false
119
163
  Sequence = true
120
164
 
165
+ [types.FrozenHoldSet]
166
+ dirData = []
167
+
121
168
  [types.FrozenHoldSet.constructor.concrete]
122
169
  args = [
123
170
  [
@@ -133,6 +180,7 @@ Set = true
133
180
 
134
181
  [types.HoldDict]
135
182
  Data = "frozendict"
183
+ dirData = []
136
184
  n_type_params = 2
137
185
 
138
186
  [types.HoldDict.constructor.concrete.kwargs]
@@ -149,6 +197,7 @@ MutableMapping = true
149
197
 
150
198
  [types.HoldList]
151
199
  Data = "tuple"
200
+ dirData = []
152
201
  n_type_params = 1
153
202
 
154
203
  [types.HoldList.constructor.empty]
@@ -178,6 +227,7 @@ Sequence = true
178
227
 
179
228
  [types.HoldSet]
180
229
  Date = "frozenset"
230
+ dirData = []
181
231
  n_type_params = 1
182
232
 
183
233
  [types.HoldSet.constructor.empty]
File without changes
File without changes
File without changes
File without changes