omdev 0.0.0.dev440__py3-none-any.whl → 0.0.0.dev441__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.
@@ -227,6 +227,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
227
227
  return _AsyncCachedNullary(fn)
228
228
 
229
229
 
230
+ ##
231
+
232
+
233
+ cached_property = functools.cached_property
234
+
235
+
236
+ class _cached_property: # noqa
237
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
238
+
239
+ def __init__(self, func):
240
+ self.func = func
241
+ self.attrname = None # noqa
242
+ self.__doc__ = func.__doc__
243
+ self.__module__ = func.__module__
244
+
245
+ _NOT_FOUND = object()
246
+
247
+ def __set_name__(self, owner, name):
248
+ if self.attrname is None:
249
+ self.attrname = name # noqa
250
+ elif name != self.attrname:
251
+ raise TypeError(
252
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
253
+ )
254
+
255
+ def __get__(self, instance, owner=None):
256
+ if instance is None:
257
+ return self
258
+ if self.attrname is None:
259
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
260
+
261
+ try:
262
+ cache = instance.__dict__
263
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
264
+ raise TypeError(
265
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
266
+ ) from None
267
+
268
+ val = cache.get(self.attrname, self._NOT_FOUND)
269
+
270
+ if val is self._NOT_FOUND:
271
+ val = self.func(instance)
272
+ try:
273
+ cache[self.attrname] = val
274
+ except TypeError:
275
+ raise TypeError(
276
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
277
+ f"assignment for caching {self.attrname!r} property.",
278
+ ) from None
279
+
280
+ return val
281
+
282
+
283
+ globals()['cached_property'] = _cached_property
284
+
285
+
230
286
  ########################################
231
287
  # ../../../omlish/lite/check.py
232
288
  """
omdev/scripts/ci.py CHANGED
@@ -670,6 +670,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
670
670
  return _AsyncCachedNullary(fn)
671
671
 
672
672
 
673
+ ##
674
+
675
+
676
+ cached_property = functools.cached_property
677
+
678
+
679
+ class _cached_property: # noqa
680
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
681
+
682
+ def __init__(self, func):
683
+ self.func = func
684
+ self.attrname = None # noqa
685
+ self.__doc__ = func.__doc__
686
+ self.__module__ = func.__module__
687
+
688
+ _NOT_FOUND = object()
689
+
690
+ def __set_name__(self, owner, name):
691
+ if self.attrname is None:
692
+ self.attrname = name # noqa
693
+ elif name != self.attrname:
694
+ raise TypeError(
695
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
696
+ )
697
+
698
+ def __get__(self, instance, owner=None):
699
+ if instance is None:
700
+ return self
701
+ if self.attrname is None:
702
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
703
+
704
+ try:
705
+ cache = instance.__dict__
706
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
707
+ raise TypeError(
708
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
709
+ ) from None
710
+
711
+ val = cache.get(self.attrname, self._NOT_FOUND)
712
+
713
+ if val is self._NOT_FOUND:
714
+ val = self.func(instance)
715
+ try:
716
+ cache[self.attrname] = val
717
+ except TypeError:
718
+ raise TypeError(
719
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
720
+ f"assignment for caching {self.attrname!r} property.",
721
+ ) from None
722
+
723
+ return val
724
+
725
+
726
+ globals()['cached_property'] = _cached_property
727
+
728
+
673
729
  ########################################
674
730
  # ../../../omlish/lite/check.py
675
731
  """
@@ -1366,6 +1422,17 @@ aclosing = AsyncClosingManager
1366
1422
  ##
1367
1423
 
1368
1424
 
1425
+ def dataclass_shallow_astuple(o: ta.Any) -> ta.Tuple[ta.Any, ...]:
1426
+ return tuple(getattr(o, f.name) for f in dc.fields(o))
1427
+
1428
+
1429
+ def dataclass_shallow_asdict(o: ta.Any) -> ta.Dict[str, ta.Any]:
1430
+ return {f.name: getattr(o, f.name) for f in dc.fields(o)}
1431
+
1432
+
1433
+ ##
1434
+
1435
+
1369
1436
  def is_immediate_dataclass(cls: type) -> bool:
1370
1437
  if not isinstance(cls, type):
1371
1438
  raise TypeError(cls)
@@ -3254,6 +3321,70 @@ class ArgparseCli:
3254
3321
  return fn()
3255
3322
 
3256
3323
 
3324
+ ########################################
3325
+ # ../../../omlish/http/coro/io.py
3326
+
3327
+
3328
+ ##
3329
+
3330
+
3331
+ class CoroHttpIo:
3332
+ def __new__(cls, *args, **kwargs): # noqa
3333
+ raise TypeError
3334
+
3335
+ def __init_subclass__(cls, **kwargs): # noqa
3336
+ raise TypeError
3337
+
3338
+ #
3339
+
3340
+ MAX_LINE: ta.ClassVar[int] = 65536
3341
+
3342
+ #
3343
+
3344
+ class Io(Abstract):
3345
+ pass
3346
+
3347
+ #
3348
+
3349
+ class AnyLogIo(Io, Abstract):
3350
+ pass
3351
+
3352
+ #
3353
+
3354
+ @dc.dataclass(frozen=True)
3355
+ class ConnectIo(Io):
3356
+ args: ta.Tuple[ta.Any, ...]
3357
+ kwargs: ta.Optional[ta.Dict[str, ta.Any]] = None
3358
+
3359
+ #
3360
+
3361
+ class CloseIo(Io):
3362
+ pass
3363
+
3364
+ #
3365
+
3366
+ class AnyReadIo(Io): # noqa
3367
+ pass
3368
+
3369
+ @dc.dataclass(frozen=True)
3370
+ class ReadIo(AnyReadIo):
3371
+ sz: ta.Optional[int]
3372
+
3373
+ @dc.dataclass(frozen=True)
3374
+ class ReadLineIo(AnyReadIo):
3375
+ sz: int
3376
+
3377
+ @dc.dataclass(frozen=True)
3378
+ class PeekIo(AnyReadIo):
3379
+ sz: int
3380
+
3381
+ #
3382
+
3383
+ @dc.dataclass(frozen=True)
3384
+ class WriteIo(Io):
3385
+ data: bytes
3386
+
3387
+
3257
3388
  ########################################
3258
3389
  # ../../../omlish/http/parsing.py
3259
3390
  # PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
@@ -9247,48 +9378,21 @@ class CoroHttpServer:
9247
9378
 
9248
9379
  #
9249
9380
 
9250
- class Io(Abstract):
9251
- pass
9252
-
9253
- #
9254
-
9255
- class AnyLogIo(Io):
9256
- pass
9257
-
9258
9381
  @dc.dataclass(frozen=True)
9259
- class ParsedRequestLogIo(AnyLogIo):
9382
+ class ParsedRequestLogIo(CoroHttpIo.AnyLogIo):
9260
9383
  request: ParsedHttpRequest
9261
9384
 
9262
9385
  @dc.dataclass(frozen=True)
9263
- class ErrorLogIo(AnyLogIo):
9386
+ class ErrorLogIo(CoroHttpIo.AnyLogIo):
9264
9387
  error: 'CoroHttpServer.Error'
9265
9388
 
9266
9389
  #
9267
9390
 
9268
- class AnyReadIo(Io): # noqa
9269
- pass
9270
-
9271
- @dc.dataclass(frozen=True)
9272
- class ReadIo(AnyReadIo):
9273
- sz: int
9274
-
9275
- @dc.dataclass(frozen=True)
9276
- class ReadLineIo(AnyReadIo):
9277
- sz: int
9278
-
9279
- #
9280
-
9281
- @dc.dataclass(frozen=True)
9282
- class WriteIo(Io):
9283
- data: bytes
9284
-
9285
- #
9286
-
9287
9391
  @dc.dataclass(frozen=True)
9288
9392
  class CoroHandleResult:
9289
9393
  close_reason: ta.Literal['response', 'internal', None] = None
9290
9394
 
9291
- def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9395
+ def coro_handle(self) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
9292
9396
  return self._coro_run_handler(self._coro_handle_one())
9293
9397
 
9294
9398
  class Close(Exception): # noqa
@@ -9297,20 +9401,20 @@ class CoroHttpServer:
9297
9401
  def _coro_run_handler(
9298
9402
  self,
9299
9403
  gen: ta.Generator[
9300
- ta.Union[AnyLogIo, AnyReadIo, _Response],
9404
+ ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
9301
9405
  ta.Optional[bytes],
9302
9406
  None,
9303
9407
  ],
9304
- ) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9408
+ ) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
9305
9409
  i: ta.Optional[bytes]
9306
9410
  o: ta.Any = next(gen)
9307
9411
  while True:
9308
9412
  try:
9309
- if isinstance(o, self.AnyLogIo):
9413
+ if isinstance(o, CoroHttpIo.AnyLogIo):
9310
9414
  i = None
9311
9415
  yield o
9312
9416
 
9313
- elif isinstance(o, self.AnyReadIo):
9417
+ elif isinstance(o, CoroHttpIo.AnyReadIo):
9314
9418
  i = check.isinstance((yield o), bytes)
9315
9419
 
9316
9420
  elif isinstance(o, self._Response):
@@ -9318,10 +9422,10 @@ class CoroHttpServer:
9318
9422
 
9319
9423
  r = self._preprocess_response(o)
9320
9424
  hb = self._build_response_head_bytes(r)
9321
- check.none((yield self.WriteIo(hb)))
9425
+ check.none((yield CoroHttpIo.WriteIo(hb)))
9322
9426
 
9323
9427
  for b in self._yield_response_data(r):
9324
- yield self.WriteIo(b)
9428
+ yield CoroHttpIo.WriteIo(b)
9325
9429
 
9326
9430
  o.close()
9327
9431
  if o.close_connection:
@@ -9349,7 +9453,7 @@ class CoroHttpServer:
9349
9453
  raise
9350
9454
 
9351
9455
  def _coro_handle_one(self) -> ta.Generator[
9352
- ta.Union[AnyLogIo, AnyReadIo, _Response],
9456
+ ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
9353
9457
  ta.Optional[bytes],
9354
9458
  None,
9355
9459
  ]:
@@ -9359,7 +9463,7 @@ class CoroHttpServer:
9359
9463
  sz = next(gen)
9360
9464
  while True:
9361
9465
  try:
9362
- line = check.isinstance((yield self.ReadLineIo(sz)), bytes)
9466
+ line = check.isinstance((yield CoroHttpIo.ReadLineIo(sz)), bytes)
9363
9467
  sz = gen.send(line)
9364
9468
  except StopIteration as e:
9365
9469
  parsed = e.value
@@ -9398,7 +9502,7 @@ class CoroHttpServer:
9398
9502
 
9399
9503
  request_data: ta.Optional[bytes]
9400
9504
  if (cl := parsed.headers.get('Content-Length')) is not None:
9401
- request_data = check.isinstance((yield self.ReadIo(int(cl))), bytes)
9505
+ request_data = check.isinstance((yield CoroHttpIo.ReadIo(int(cl))), bytes)
9402
9506
  else:
9403
9507
  request_data = None
9404
9508
 
@@ -11443,7 +11547,7 @@ class CoroHttpServerSocketHandler(SocketHandler_):
11443
11547
  server_factory: CoroHttpServerFactory,
11444
11548
  *,
11445
11549
  keep_alive: bool = False,
11446
- log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpServer.AnyLogIo], None]] = None,
11550
+ log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpIo.AnyLogIo], None]] = None,
11447
11551
  ) -> None:
11448
11552
  super().__init__()
11449
11553
 
@@ -11472,18 +11576,18 @@ class CoroHttpServerSocketHandler(SocketHandler_):
11472
11576
 
11473
11577
  o = next(gen)
11474
11578
  while True:
11475
- if isinstance(o, CoroHttpServer.AnyLogIo):
11579
+ if isinstance(o, CoroHttpIo.AnyLogIo):
11476
11580
  i = None
11477
11581
  if self._log_handler is not None:
11478
11582
  self._log_handler(server, o)
11479
11583
 
11480
- elif isinstance(o, CoroHttpServer.ReadIo):
11481
- i = fp.r.read(o.sz)
11584
+ elif isinstance(o, CoroHttpIo.ReadIo):
11585
+ i = fp.r.read(check.not_none(o.sz))
11482
11586
 
11483
- elif isinstance(o, CoroHttpServer.ReadLineIo):
11587
+ elif isinstance(o, CoroHttpIo.ReadLineIo):
11484
11588
  i = fp.r.readline(o.sz)
11485
11589
 
11486
- elif isinstance(o, CoroHttpServer.WriteIo):
11590
+ elif isinstance(o, CoroHttpIo.WriteIo):
11487
11591
  i = None
11488
11592
  fp.w.write(o.data)
11489
11593
  fp.w.flush()
omdev/scripts/interp.py CHANGED
@@ -686,6 +686,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
686
686
  return _AsyncCachedNullary(fn)
687
687
 
688
688
 
689
+ ##
690
+
691
+
692
+ cached_property = functools.cached_property
693
+
694
+
695
+ class _cached_property: # noqa
696
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
697
+
698
+ def __init__(self, func):
699
+ self.func = func
700
+ self.attrname = None # noqa
701
+ self.__doc__ = func.__doc__
702
+ self.__module__ = func.__module__
703
+
704
+ _NOT_FOUND = object()
705
+
706
+ def __set_name__(self, owner, name):
707
+ if self.attrname is None:
708
+ self.attrname = name # noqa
709
+ elif name != self.attrname:
710
+ raise TypeError(
711
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
712
+ )
713
+
714
+ def __get__(self, instance, owner=None):
715
+ if instance is None:
716
+ return self
717
+ if self.attrname is None:
718
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
719
+
720
+ try:
721
+ cache = instance.__dict__
722
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
723
+ raise TypeError(
724
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
725
+ ) from None
726
+
727
+ val = cache.get(self.attrname, self._NOT_FOUND)
728
+
729
+ if val is self._NOT_FOUND:
730
+ val = self.func(instance)
731
+ try:
732
+ cache[self.attrname] = val
733
+ except TypeError:
734
+ raise TypeError(
735
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
736
+ f"assignment for caching {self.attrname!r} property.",
737
+ ) from None
738
+
739
+ return val
740
+
741
+
742
+ globals()['cached_property'] = _cached_property
743
+
744
+
689
745
  ########################################
690
746
  # ../../../omlish/lite/check.py
691
747
  """
@@ -2121,6 +2121,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
2121
2121
  return _AsyncCachedNullary(fn)
2122
2122
 
2123
2123
 
2124
+ ##
2125
+
2126
+
2127
+ cached_property = functools.cached_property
2128
+
2129
+
2130
+ class _cached_property: # noqa
2131
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
2132
+
2133
+ def __init__(self, func):
2134
+ self.func = func
2135
+ self.attrname = None # noqa
2136
+ self.__doc__ = func.__doc__
2137
+ self.__module__ = func.__module__
2138
+
2139
+ _NOT_FOUND = object()
2140
+
2141
+ def __set_name__(self, owner, name):
2142
+ if self.attrname is None:
2143
+ self.attrname = name # noqa
2144
+ elif name != self.attrname:
2145
+ raise TypeError(
2146
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
2147
+ )
2148
+
2149
+ def __get__(self, instance, owner=None):
2150
+ if instance is None:
2151
+ return self
2152
+ if self.attrname is None:
2153
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
2154
+
2155
+ try:
2156
+ cache = instance.__dict__
2157
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
2158
+ raise TypeError(
2159
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
2160
+ ) from None
2161
+
2162
+ val = cache.get(self.attrname, self._NOT_FOUND)
2163
+
2164
+ if val is self._NOT_FOUND:
2165
+ val = self.func(instance)
2166
+ try:
2167
+ cache[self.attrname] = val
2168
+ except TypeError:
2169
+ raise TypeError(
2170
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
2171
+ f"assignment for caching {self.attrname!r} property.",
2172
+ ) from None
2173
+
2174
+ return val
2175
+
2176
+
2177
+ globals()['cached_property'] = _cached_property
2178
+
2179
+
2124
2180
  ########################################
2125
2181
  # ../../../omlish/lite/check.py
2126
2182
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev440
3
+ Version: 0.0.0.dev441
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev440
17
+ Requires-Dist: omlish==0.0.0.dev441
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -184,7 +184,7 @@ omdev/magic/prepare.py,sha256=SEOK-bl4zDxq0aphYXsEI-hCjbkV908VNnJt-dk0kL4,594
184
184
  omdev/magic/styles.py,sha256=6LAL7XR3fkkH2rh-8nwUvdCYVHBkQxCfP0oEuPuw1Bg,670
185
185
  omdev/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
186
  omdev/manifests/__main__.py,sha256=JqyVDyV7_jo-NZ3wSs5clDU_xCMlxzJv-XFohoZWQ7E,174
187
- omdev/manifests/_dumping.py,sha256=H0nFCPDg8ooiDFKv435XcW3iz-j9sd2hz-klt9K_DeA,52553
187
+ omdev/manifests/_dumping.py,sha256=Y2zGFyRUwqqMHAvPpOsrHJhvlAz3oRl3Y7uqIT5J_Cg,54355
188
188
  omdev/manifests/building.py,sha256=M3IHQljk0ca0J32-xNTOcFVvW07s_7fHQ7sGsCJeurU,13908
189
189
  omdev/manifests/dumping.py,sha256=WUIZDvOyO25AhnCPn5Nxj2OkMcZa1LRjGuCnpyx8AL8,4506
190
190
  omdev/manifests/main.py,sha256=mYb8iM5bdwaO8jSd9_hIBSoYLf2h7e0iLb9aCCbgJ6c,2175
@@ -273,9 +273,9 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
273
273
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
274
274
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
275
275
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
276
- omdev/scripts/ci.py,sha256=HEUtidJSab083K7rlHArWgRDhura6Vc1rOBKxlcF1x0,423618
277
- omdev/scripts/interp.py,sha256=-mZ0RUnDiq-798F_HDt1OQG8k0hiWbSmaR8iepuwfyo,166643
278
- omdev/scripts/pyproject.py,sha256=YAM8FbJ6dV0gAGFchRajPqmL0gpQc1S8uKxdQjaIay8,330699
276
+ omdev/scripts/ci.py,sha256=FfWskduSL49ktSMNd-e8eUn7K9BmmUtelP8S7g3DIbA,426405
277
+ omdev/scripts/interp.py,sha256=xS894dtPAhB0Dbd4aPfSX5FK6OC2mZLD2N3pPZU4Xoo,168445
278
+ omdev/scripts/pyproject.py,sha256=dMRhPLTKegqIha8ERBmZjdVYgIo57pokpGuXTZt2Zs4,332501
279
279
  omdev/scripts/slowcat.py,sha256=PwdT-pg62imEEb6kcOozl9_YUi-4KopvjvzWT1OmGb0,2717
280
280
  omdev/scripts/tmpexec.py,sha256=t0nErDRALjTk7H0X8ADjZUIDFjlPNzOOokmjCjBHdzs,1431
281
281
  omdev/scripts/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -323,9 +323,9 @@ omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_b
323
323
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
324
324
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
325
325
  omdev/tools/pawk/pawk.py,sha256=ao5mdrpiSU4AZ8mBozoEaV3UVlmVTnRG9wD9XP70MZE,11429
326
- omdev-0.0.0.dev440.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
327
- omdev-0.0.0.dev440.dist-info/METADATA,sha256=iSk_Y92ViTLXb1ii15UV_optF83PC_Khd0wWaub0dGM,5100
328
- omdev-0.0.0.dev440.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
329
- omdev-0.0.0.dev440.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
330
- omdev-0.0.0.dev440.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
331
- omdev-0.0.0.dev440.dist-info/RECORD,,
326
+ omdev-0.0.0.dev441.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
327
+ omdev-0.0.0.dev441.dist-info/METADATA,sha256=FTG4PsStGupIrFeNgYOgsFRaoF11I53zW83x4oB0pus,5100
328
+ omdev-0.0.0.dev441.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
329
+ omdev-0.0.0.dev441.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
330
+ omdev-0.0.0.dev441.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
331
+ omdev-0.0.0.dev441.dist-info/RECORD,,