omlish 0.0.0.dev327__py3-none-any.whl → 0.0.0.dev328__py3-none-any.whl
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.
- omlish/__about__.py +3 -3
- omlish/collections/__init__.py +1 -1
- omlish/collections/identity.py +72 -36
- omlish/dataclasses/api/classes/decorator.py +2 -0
- omlish/dataclasses/api/classes/make.py +2 -0
- omlish/dataclasses/concerns/frozen.py +26 -5
- omlish/dataclasses/specs.py +1 -0
- omlish/lang/objects.py +5 -0
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/METADATA +3 -3
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/RECORD +14 -14
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev327.dist-info → omlish-0.0.0.dev328.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev328'
|
2
|
+
__revision__ = '80b9ed17dd2aefd7dd86d4aa2f14fac4281cf8d6'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -113,7 +113,7 @@ class Project(ProjectBase):
|
|
113
113
|
],
|
114
114
|
|
115
115
|
'testing': [
|
116
|
-
'pytest ~= 8.
|
116
|
+
'pytest ~= 8.4',
|
117
117
|
],
|
118
118
|
}
|
119
119
|
|
omlish/collections/__init__.py
CHANGED
omlish/collections/identity.py
CHANGED
@@ -13,29 +13,6 @@ V = ta.TypeVar('V')
|
|
13
13
|
##
|
14
14
|
|
15
15
|
|
16
|
-
class IdentityWrapper(ta.Generic[T]):
|
17
|
-
def __init__(self, value: T) -> None:
|
18
|
-
super().__init__()
|
19
|
-
|
20
|
-
self._value = value
|
21
|
-
|
22
|
-
def __repr__(self) -> str:
|
23
|
-
return lang.attr_repr(self, 'value')
|
24
|
-
|
25
|
-
@property
|
26
|
-
def value(self) -> T:
|
27
|
-
return self._value
|
28
|
-
|
29
|
-
def __eq__(self, other):
|
30
|
-
return isinstance(other, IdentityWrapper) and other._value is self._value
|
31
|
-
|
32
|
-
def __ne__(self, other):
|
33
|
-
return not (self == other)
|
34
|
-
|
35
|
-
def __hash__(self):
|
36
|
-
return id(self._value)
|
37
|
-
|
38
|
-
|
39
16
|
class IdentityKeyDict(ta.MutableMapping[K, V]):
|
40
17
|
def __init__(self, *args, **kwargs) -> None:
|
41
18
|
super().__init__()
|
@@ -115,31 +92,90 @@ class IdentitySet(ta.MutableSet[T]):
|
|
115
92
|
return iter(self._dict.values())
|
116
93
|
|
117
94
|
|
95
|
+
##
|
96
|
+
|
97
|
+
|
98
|
+
class IdentityWeakKeyDictionary(ta.MutableMapping[K, V]):
|
99
|
+
"""
|
100
|
+
https://ideone.com/G4iIri
|
101
|
+
https://stackoverflow.com/questions/75314250/python-weakkeydictionary-for-unhashable-types#comment135919973_77100606
|
102
|
+
|
103
|
+
See also:
|
104
|
+
https://github.com/python-trio/trio/blob/efd785a20721707b52a6e2289a65e25722b30c96/src/trio/_core/_ki.py#L81
|
105
|
+
"""
|
106
|
+
|
107
|
+
def __init__(self, *args: ta.Any, **kwargs: ta.Any) -> None:
|
108
|
+
super().__init__()
|
109
|
+
|
110
|
+
self._keys: ta.MutableMapping[IdentityWeakKeyDictionary._Id[K], K] = weakref.WeakValueDictionary()
|
111
|
+
self._values: ta.MutableMapping[IdentityWeakKeyDictionary._Id[K], V] = weakref.WeakKeyDictionary()
|
112
|
+
|
113
|
+
for k, v in lang.yield_dict_init(*args, **kwargs):
|
114
|
+
self[k] = v
|
115
|
+
|
116
|
+
def __len__(self) -> int:
|
117
|
+
return len(self._keys)
|
118
|
+
|
119
|
+
def __iter__(self) -> ta.Iterator[K]:
|
120
|
+
return iter(self._keys.values())
|
121
|
+
|
122
|
+
class _Id(ta.Generic[T]):
|
123
|
+
def __init__(self, key: T) -> None:
|
124
|
+
super().__init__()
|
125
|
+
|
126
|
+
self._id = id(key)
|
127
|
+
self._key_ref = weakref.ref(key)
|
128
|
+
|
129
|
+
def __repr__(self) -> str:
|
130
|
+
return f'{self.__class__.__name__}<id={self._id}>'
|
131
|
+
|
132
|
+
def __hash__(self) -> int:
|
133
|
+
return self._id
|
134
|
+
|
135
|
+
def __eq__(self, other: object) -> bool:
|
136
|
+
return (
|
137
|
+
type(other) is type(self) and
|
138
|
+
self._id == other._id and # type: ignore # noqa
|
139
|
+
self._key_ref() is other._key_ref() # type: ignore # noqa
|
140
|
+
)
|
141
|
+
|
142
|
+
def __ne__(self, other: object) -> bool:
|
143
|
+
return not (self == other)
|
144
|
+
|
145
|
+
def __getitem__(self, key: K) -> V:
|
146
|
+
return self._values.__getitem__(self._Id(key))
|
147
|
+
|
148
|
+
def __setitem__(self, key: K, value: V) -> None:
|
149
|
+
id_obj = self._Id(key)
|
150
|
+
self._keys.__setitem__(id_obj, key)
|
151
|
+
self._values.__setitem__(id_obj, value)
|
152
|
+
|
153
|
+
def __delitem__(self, key: K) -> None:
|
154
|
+
self._values.__delitem__(self._Id(key))
|
155
|
+
self._keys.__delitem__(self._Id(key))
|
156
|
+
|
157
|
+
|
118
158
|
class IdentityWeakSet(ta.MutableSet[T]):
|
119
159
|
def __init__(self, init: ta.Iterable[T] | None = None) -> None:
|
120
160
|
super().__init__()
|
121
161
|
|
122
|
-
self._dict:
|
162
|
+
self._dict: IdentityWeakKeyDictionary[T, None] = IdentityWeakKeyDictionary()
|
163
|
+
|
164
|
+
if init is not None:
|
165
|
+
for e in init:
|
166
|
+
self._dict[e] = None
|
123
167
|
|
124
168
|
def add(self, value):
|
125
|
-
|
126
|
-
self._dict[id(value)] = value
|
169
|
+
self._dict[value] = None
|
127
170
|
|
128
171
|
def discard(self, value):
|
129
|
-
|
130
|
-
del self._dict[id(value)]
|
131
|
-
except KeyError:
|
132
|
-
pass
|
172
|
+
del self._dict[value]
|
133
173
|
|
134
174
|
def __contains__(self, x):
|
135
|
-
|
136
|
-
o = self._dict[id(x)]
|
137
|
-
except KeyError:
|
138
|
-
return False
|
139
|
-
return x is o
|
175
|
+
return x in self._dict
|
140
176
|
|
141
177
|
def __len__(self):
|
142
178
|
return len(self._dict)
|
143
179
|
|
144
180
|
def __iter__(self):
|
145
|
-
return self._dict.
|
181
|
+
return self._dict.keys()
|
@@ -49,6 +49,7 @@ def dataclass(
|
|
49
49
|
cache_hash: bool | None = None,
|
50
50
|
generic_init: bool | None = None,
|
51
51
|
override: bool | None = None,
|
52
|
+
allow_dynamic_dunder_attrs: bool | None = None,
|
52
53
|
|
53
54
|
repr_id: bool | None = None,
|
54
55
|
terse_repr: bool | None = None,
|
@@ -153,6 +154,7 @@ def dataclass(
|
|
153
154
|
cache_hash=cache_hash,
|
154
155
|
generic_init=generic_init,
|
155
156
|
override=override,
|
157
|
+
allow_dynamic_dunder_attrs=allow_dynamic_dunder_attrs,
|
156
158
|
|
157
159
|
repr_id=repr_id,
|
158
160
|
terse_repr=terse_repr,
|
@@ -39,6 +39,7 @@ def make_dataclass( # noqa
|
|
39
39
|
cache_hash: bool | None = None,
|
40
40
|
generic_init: bool | None = None,
|
41
41
|
override: bool | None = None,
|
42
|
+
allow_dynamic_dunder_attrs: bool | None = None,
|
42
43
|
|
43
44
|
repr_id: bool | None = None,
|
44
45
|
terse_repr: bool | None = None,
|
@@ -109,6 +110,7 @@ def make_dataclass( # noqa
|
|
109
110
|
cache_hash=cache_hash,
|
110
111
|
generic_init=generic_init,
|
111
112
|
override=override,
|
113
|
+
allow_dynamic_dunder_attrs=allow_dynamic_dunder_attrs,
|
112
114
|
|
113
115
|
repr_id=repr_id,
|
114
116
|
terse_repr=terse_repr,
|
@@ -65,9 +65,10 @@ def check_frozen_bases(cls: type, frozen: bool) -> None:
|
|
65
65
|
##
|
66
66
|
|
67
67
|
|
68
|
-
@dc.dataclass(frozen=True)
|
68
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
69
69
|
class FrozenPlan(Plan):
|
70
70
|
fields: tuple[str, ...]
|
71
|
+
allow_dynamic_dunder_attrs: bool
|
71
72
|
|
72
73
|
|
73
74
|
@register_generator_type(FrozenPlan)
|
@@ -78,7 +79,10 @@ class FrozenGenerator(Generator[FrozenPlan]):
|
|
78
79
|
if not ctx.cs.frozen:
|
79
80
|
return None
|
80
81
|
|
81
|
-
return PlanResult(FrozenPlan(
|
82
|
+
return PlanResult(FrozenPlan(
|
83
|
+
fields=tuple(f.name for f in ctx.cs.fields),
|
84
|
+
allow_dynamic_dunder_attrs=ctx.cs.allow_dynamic_dunder_attrs,
|
85
|
+
))
|
82
86
|
|
83
87
|
def _generate_one(
|
84
88
|
self,
|
@@ -88,8 +92,20 @@ class FrozenGenerator(Generator[FrozenPlan]):
|
|
88
92
|
exc_args: str,
|
89
93
|
) -> AddMethodOp:
|
90
94
|
preamble = []
|
95
|
+
condition = []
|
96
|
+
|
91
97
|
# https://github.com/python/cpython/commit/ee6f8413a99d0ee4828e1c81911e203d3fff85d5
|
92
|
-
|
98
|
+
base_condition = f'type(self) is {CLS_IDENT}'
|
99
|
+
|
100
|
+
if plan.allow_dynamic_dunder_attrs:
|
101
|
+
condition.extend([
|
102
|
+
f'(',
|
103
|
+
f' {base_condition}',
|
104
|
+
f' and not (len(name) > 4 and name[:2] == name[-2:] == "__")',
|
105
|
+
f')',
|
106
|
+
])
|
107
|
+
else:
|
108
|
+
condition.append(base_condition)
|
93
109
|
|
94
110
|
if plan.fields:
|
95
111
|
set_ident = f'{IDENT_PREFIX}_{mth}_frozen_fields'
|
@@ -102,14 +118,19 @@ class FrozenGenerator(Generator[FrozenPlan]):
|
|
102
118
|
f'}}',
|
103
119
|
f'',
|
104
120
|
])
|
105
|
-
condition
|
121
|
+
condition.append(f' or name in {set_ident}')
|
106
122
|
|
107
123
|
return AddMethodOp(
|
108
124
|
f'__{mth}__',
|
109
125
|
'\n'.join([
|
110
126
|
*preamble,
|
111
127
|
f'def __{mth}__(self, {", ".join(params)}):',
|
112
|
-
f' if
|
128
|
+
f' if (',
|
129
|
+
*[
|
130
|
+
f' {l}'
|
131
|
+
for l in condition
|
132
|
+
],
|
133
|
+
f' ):',
|
113
134
|
f' raise {FROZEN_INSTANCE_ERROR_GLOBAL.ident}{exc_args}',
|
114
135
|
f' super({CLS_IDENT}, self).__{mth}__({", ".join(params)})',
|
115
136
|
]),
|
omlish/dataclasses/specs.py
CHANGED
omlish/lang/objects.py
CHANGED
@@ -250,3 +250,8 @@ class Identity(ta.Generic[T]):
|
|
250
250
|
if type(other) is not type(self):
|
251
251
|
return NotImplemented
|
252
252
|
return self._obj is other._obj # noqa
|
253
|
+
|
254
|
+
def __ne__(self, other):
|
255
|
+
if type(other) is not type(self):
|
256
|
+
return NotImplemented
|
257
|
+
return self._obj is not other._obj # noqa
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev328
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -44,7 +44,7 @@ Requires-Dist: sqlean.py~=3.49; extra == "all"
|
|
44
44
|
Requires-Dist: duckdb~=1.3; extra == "all"
|
45
45
|
Requires-Dist: markupsafe~=3.0; extra == "all"
|
46
46
|
Requires-Dist: jinja2~=3.1; extra == "all"
|
47
|
-
Requires-Dist: pytest~=8.
|
47
|
+
Requires-Dist: pytest~=8.4; extra == "all"
|
48
48
|
Requires-Dist: anyio~=4.9; extra == "all"
|
49
49
|
Requires-Dist: sniffio~=1.3; extra == "all"
|
50
50
|
Requires-Dist: asttokens~=3.0; extra == "all"
|
@@ -94,7 +94,7 @@ Provides-Extra: templates
|
|
94
94
|
Requires-Dist: markupsafe~=3.0; extra == "templates"
|
95
95
|
Requires-Dist: jinja2~=3.1; extra == "templates"
|
96
96
|
Provides-Extra: testing
|
97
|
-
Requires-Dist: pytest~=8.
|
97
|
+
Requires-Dist: pytest~=8.4; extra == "testing"
|
98
98
|
Provides-Extra: plus
|
99
99
|
Requires-Dist: anyio~=4.9; extra == "plus"
|
100
100
|
Requires-Dist: sniffio~=1.3; extra == "plus"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=0MrPN5vIAd-Q-O4VVWJF_WDLWv-jHeJBNJZTsBJ_214,3478
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
|
5
5
|
omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
|
@@ -76,14 +76,14 @@ omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
|
|
76
76
|
omlish/codecs/registry.py,sha256=2FnO5YP7ui1LzkguwESY0MP3WIdwgPTIJTM_4RyTOEg,3896
|
77
77
|
omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
|
78
78
|
omlish/codecs/text.py,sha256=JzrdwMpQPo2NBBg3K1EZszzQy5vEWmd82SIerJd4yeQ,5723
|
79
|
-
omlish/collections/__init__.py,sha256=
|
79
|
+
omlish/collections/__init__.py,sha256=_7sct5tPAzV3BadIGYRdz6KzazntZIws9e8fEDlUwsU,2404
|
80
80
|
omlish/collections/abc.py,sha256=ikTJlJ5dhXjU6tlNsI0Wm0_7GaIEpe3mftpvdGY_nc8,2620
|
81
81
|
omlish/collections/bimap.py,sha256=3szDCscPJlFRtkpyVQNWneg4s50mr6Rd0jdTzVEIcnE,1661
|
82
82
|
omlish/collections/coerce.py,sha256=tAls15v_7p5bUN33R7Zbko87KW5toWHl9fRialCqyNY,7030
|
83
83
|
omlish/collections/errors.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
|
84
84
|
omlish/collections/frozen.py,sha256=LMbAHYDENIQk1hvjCTvpnx66m1TalrHa4CSn8n_tsXQ,4142
|
85
85
|
omlish/collections/hasheq.py,sha256=uHypfZlHhicQPvx9OOlpT9MSLwfc_mFil-WaxF9dTOo,3732
|
86
|
-
omlish/collections/identity.py,sha256=
|
86
|
+
omlish/collections/identity.py,sha256=S_W508EkU-AW0TZ7cv1wWUc6EG54vww4XbcfGjDFTgg,4793
|
87
87
|
omlish/collections/mappings.py,sha256=iXb7oq1rCQak0KgzblgrzWCJLrkfJAYHFvl9lprOVUI,2804
|
88
88
|
omlish/collections/ordered.py,sha256=7zTbrAt12rf6i33XHkQERKar258fJacaw_WbtGEBgWo,2338
|
89
89
|
omlish/collections/ranked.py,sha256=McB8C2UQfUvrbmxGTpBz1-EZuyCLkBFtktzncMdt8_Y,2287
|
@@ -141,13 +141,13 @@ omlish/dataclasses/errors.py,sha256=tyv3WR6az66uGGiq9FIuCHvy1Ef-G7zeMY7mMG6hy2Y,
|
|
141
141
|
omlish/dataclasses/inspect.py,sha256=BlpPghVCU3w_YDnONEqqE99YHzJM2q3eoqe39YX25Ko,4596
|
142
142
|
omlish/dataclasses/internals.py,sha256=vIGCZnStgD3ef4drYRtVOrxhxmAPa0vJpo4pXcDcQvM,3073
|
143
143
|
omlish/dataclasses/reflection.py,sha256=FSSTiS7pGTmDrYNkS6fZzaMSe8qtSvDv5Pgz0T55qXg,2404
|
144
|
-
omlish/dataclasses/specs.py,sha256=
|
144
|
+
omlish/dataclasses/specs.py,sha256=JFpMILJhxiWYmfTD4TDl03O13o1i0Rwgf14WpI7U9go,6193
|
145
145
|
omlish/dataclasses/utils.py,sha256=gv6za6oJYBr1VaeGd7oXqq9lhBs_sxkpC27XYzJggno,1870
|
146
146
|
omlish/dataclasses/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUTp00u11kIPM,455
|
147
147
|
omlish/dataclasses/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
148
148
|
omlish/dataclasses/api/classes/conversion.py,sha256=U3g5S-HefJrg4to1BF8XnlEWqMxFeGEqVt8o5OTQK-U,902
|
149
|
-
omlish/dataclasses/api/classes/decorator.py,sha256=
|
150
|
-
omlish/dataclasses/api/classes/make.py,sha256=
|
149
|
+
omlish/dataclasses/api/classes/decorator.py,sha256=swqe6wZ3nAb9kZaYvxXJNhr-KiOPkEERCCV4Zu2SlfA,4060
|
150
|
+
omlish/dataclasses/api/classes/make.py,sha256=qcsELy9tpwMLr0RJmvlSgR0deh40nvxgy7RaG3SJ_nw,2939
|
151
151
|
omlish/dataclasses/api/classes/metadata.py,sha256=ocUu75VWOdZA8-R7K95yPhQtS0sFZB1NtqCdzXyDNeQ,2769
|
152
152
|
omlish/dataclasses/api/classes/params.py,sha256=GmLJotHT4BuXcK9lAwP00boR0_mfM0xITWBFKrk0brY,1994
|
153
153
|
omlish/dataclasses/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -161,7 +161,7 @@ omlish/dataclasses/concerns/copy.py,sha256=U8kSHEvVupvXArS3OPB7GK_M7aPO9R3_Uk1nq
|
|
161
161
|
omlish/dataclasses/concerns/doc.py,sha256=SL0hj4EzXrVOhaDzHVDGnzylkOU7mcXtr9Tm3wuZnQQ,1344
|
162
162
|
omlish/dataclasses/concerns/eq.py,sha256=PI0KKzJyIziRLgcjl8efjapf8baaRCdcuyGW83bCpEo,1720
|
163
163
|
omlish/dataclasses/concerns/fields.py,sha256=-VnI7al9sKRs0xTCy-IUhl3EgCKBX5vczDUZNu72_KY,3311
|
164
|
-
omlish/dataclasses/concerns/frozen.py,sha256=
|
164
|
+
omlish/dataclasses/concerns/frozen.py,sha256=_skp52Rknas_WaSm2UAzHPX44L2dtM1CMq1478GNz8M,4506
|
165
165
|
omlish/dataclasses/concerns/hash.py,sha256=ouX8zyae_IUAMEd-0dvUAPO9bbp5AM1evumyUSr5inY,4815
|
166
166
|
omlish/dataclasses/concerns/init.py,sha256=_Yv4g7paBtkxnm3CgglBSAOQnoRAULv9HwvZg_od3WM,14542
|
167
167
|
omlish/dataclasses/concerns/matchargs.py,sha256=maHlfPCcHvAOGuXoLGu66ZizHdizU-UIrFCYbNMPR5g,748
|
@@ -418,7 +418,7 @@ omlish/lang/functions.py,sha256=qNqzWF6vI6PGTzKhgkhnNXP8e1gSerb8GsHG3_wVBP8,6386
|
|
418
418
|
omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,5197
|
419
419
|
omlish/lang/imports.py,sha256=y9W9Y-d_cQ35QCLuSIPoa6vnEqSErFCz8b-34IH128U,10552
|
420
420
|
omlish/lang/iterables.py,sha256=StoGp9yaP3njdLKHoWYcEevO3eE8SHEPYl5_avZob24,2149
|
421
|
-
omlish/lang/objects.py,sha256=
|
421
|
+
omlish/lang/objects.py,sha256=ZsibJwNp1EXorbaObm9TlCNtuuM65snCmVb7H4_llqI,6116
|
422
422
|
omlish/lang/outcomes.py,sha256=mpFy_VoM-b74L1aCFsjsZVUHx_icZ1AHMOKeVesjOp4,8628
|
423
423
|
omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
|
424
424
|
omlish/lang/params.py,sha256=sfbNoGrKCsAtubFufj_uh_WKshIgA8fqJ4PmLH1PH00,6639
|
@@ -857,9 +857,9 @@ omlish/typedvalues/holder.py,sha256=ZTnHiw-K38ciOBLEdwgrltr7Xp8jjEs_0Lp69DH-G-o,
|
|
857
857
|
omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
|
858
858
|
omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
|
859
859
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
860
|
-
omlish-0.0.0.
|
861
|
-
omlish-0.0.0.
|
862
|
-
omlish-0.0.0.
|
863
|
-
omlish-0.0.0.
|
864
|
-
omlish-0.0.0.
|
865
|
-
omlish-0.0.0.
|
860
|
+
omlish-0.0.0.dev328.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
861
|
+
omlish-0.0.0.dev328.dist-info/METADATA,sha256=j4SbGhFfYtXvAosOCJp8sZ1zRExSDAF3wT4rhu7TCQw,4416
|
862
|
+
omlish-0.0.0.dev328.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
863
|
+
omlish-0.0.0.dev328.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
864
|
+
omlish-0.0.0.dev328.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
865
|
+
omlish-0.0.0.dev328.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|