omdev 0.0.0.dev221__py3-none-any.whl → 0.0.0.dev223__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.
Files changed (40) hide show
  1. omdev/ci/cache.py +40 -23
  2. omdev/ci/ci.py +49 -109
  3. omdev/ci/cli.py +24 -23
  4. omdev/ci/docker/__init__.py +0 -0
  5. omdev/ci/docker/buildcaching.py +69 -0
  6. omdev/ci/docker/cache.py +57 -0
  7. omdev/ci/{docker.py → docker/cmds.py} +1 -44
  8. omdev/ci/docker/imagepulling.py +64 -0
  9. omdev/ci/docker/inject.py +37 -0
  10. omdev/ci/docker/utils.py +48 -0
  11. omdev/ci/github/cache.py +15 -5
  12. omdev/ci/github/inject.py +30 -0
  13. omdev/ci/inject.py +61 -0
  14. omdev/dataserver/__init__.py +1 -0
  15. omdev/dataserver/handlers.py +198 -0
  16. omdev/dataserver/http.py +69 -0
  17. omdev/dataserver/routes.py +49 -0
  18. omdev/dataserver/server.py +90 -0
  19. omdev/dataserver/targets.py +89 -0
  20. omdev/oci/__init__.py +0 -0
  21. omdev/oci/building.py +221 -0
  22. omdev/oci/compression.py +8 -0
  23. omdev/oci/data.py +151 -0
  24. omdev/oci/datarefs.py +138 -0
  25. omdev/oci/dataserver.py +61 -0
  26. omdev/oci/loading.py +142 -0
  27. omdev/oci/media.py +179 -0
  28. omdev/oci/packing.py +381 -0
  29. omdev/oci/repositories.py +159 -0
  30. omdev/oci/tars.py +144 -0
  31. omdev/pyproject/resources/python.sh +1 -1
  32. omdev/scripts/ci.py +1841 -384
  33. omdev/scripts/interp.py +100 -22
  34. omdev/scripts/pyproject.py +122 -28
  35. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/METADATA +2 -2
  36. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/RECORD +40 -15
  37. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/LICENSE +0 -0
  38. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/WHEEL +0 -0
  39. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/entry_points.txt +0 -0
  40. {omdev-0.0.0.dev221.dist-info → omdev-0.0.0.dev223.dist-info}/top_level.txt +0 -0
omdev/scripts/interp.py CHANGED
@@ -3848,7 +3848,51 @@ class BaseSubprocesses(abc.ABC): # noqa
3848
3848
  ##
3849
3849
 
3850
3850
 
3851
+ @dc.dataclass(frozen=True)
3852
+ class SubprocessRun:
3853
+ cmd: ta.Sequence[str]
3854
+ input: ta.Any = None
3855
+ timeout: ta.Optional[float] = None
3856
+ check: bool = False
3857
+ capture_output: ta.Optional[bool] = None
3858
+ kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
3859
+
3860
+
3861
+ @dc.dataclass(frozen=True)
3862
+ class SubprocessRunOutput(ta.Generic[T]):
3863
+ proc: T
3864
+
3865
+ returncode: int # noqa
3866
+
3867
+ stdout: ta.Optional[bytes] = None
3868
+ stderr: ta.Optional[bytes] = None
3869
+
3870
+
3851
3871
  class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
3872
+ @abc.abstractmethod
3873
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
3874
+ raise NotImplementedError
3875
+
3876
+ def run(
3877
+ self,
3878
+ *cmd: str,
3879
+ input: ta.Any = None, # noqa
3880
+ timeout: ta.Optional[float] = None,
3881
+ check: bool = False,
3882
+ capture_output: ta.Optional[bool] = None,
3883
+ **kwargs: ta.Any,
3884
+ ) -> SubprocessRunOutput:
3885
+ return self.run_(SubprocessRun(
3886
+ cmd=cmd,
3887
+ input=input,
3888
+ timeout=timeout,
3889
+ check=check,
3890
+ capture_output=capture_output,
3891
+ kwargs=kwargs,
3892
+ ))
3893
+
3894
+ #
3895
+
3852
3896
  @abc.abstractmethod
3853
3897
  def check_call(
3854
3898
  self,
@@ -3912,6 +3956,25 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
3912
3956
 
3913
3957
 
3914
3958
  class Subprocesses(AbstractSubprocesses):
3959
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput[subprocess.CompletedProcess]:
3960
+ proc = subprocess.run(
3961
+ run.cmd,
3962
+ input=run.input,
3963
+ timeout=run.timeout,
3964
+ check=run.check,
3965
+ capture_output=run.capture_output or False,
3966
+ **(run.kwargs or {}),
3967
+ )
3968
+
3969
+ return SubprocessRunOutput(
3970
+ proc=proc,
3971
+
3972
+ returncode=proc.returncode,
3973
+
3974
+ stdout=proc.stdout, # noqa
3975
+ stderr=proc.stderr, # noqa
3976
+ )
3977
+
3915
3978
  def check_call(
3916
3979
  self,
3917
3980
  *cmd: str,
@@ -3937,6 +4000,30 @@ subprocesses = Subprocesses()
3937
4000
 
3938
4001
 
3939
4002
  class AbstractAsyncSubprocesses(BaseSubprocesses):
4003
+ @abc.abstractmethod
4004
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
4005
+ raise NotImplementedError
4006
+
4007
+ def run(
4008
+ self,
4009
+ *cmd: str,
4010
+ input: ta.Any = None, # noqa
4011
+ timeout: ta.Optional[float] = None,
4012
+ check: bool = False,
4013
+ capture_output: ta.Optional[bool] = None,
4014
+ **kwargs: ta.Any,
4015
+ ) -> ta.Awaitable[SubprocessRunOutput]:
4016
+ return self.run_(SubprocessRun(
4017
+ cmd=cmd,
4018
+ input=input,
4019
+ timeout=timeout,
4020
+ check=check,
4021
+ capture_output=capture_output,
4022
+ kwargs=kwargs,
4023
+ ))
4024
+
4025
+ #
4026
+
3940
4027
  @abc.abstractmethod
3941
4028
  async def check_call(
3942
4029
  self,
@@ -4204,41 +4291,32 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
4204
4291
 
4205
4292
  #
4206
4293
 
4207
- @dc.dataclass(frozen=True)
4208
- class RunOutput:
4209
- proc: asyncio.subprocess.Process
4210
- stdout: ta.Optional[bytes]
4211
- stderr: ta.Optional[bytes]
4294
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput[asyncio.subprocess.Process]:
4295
+ kwargs = dict(run.kwargs or {})
4212
4296
 
4213
- async def run(
4214
- self,
4215
- *cmd: str,
4216
- input: ta.Any = None, # noqa
4217
- timeout: ta.Optional[float] = None,
4218
- check: bool = False, # noqa
4219
- capture_output: ta.Optional[bool] = None,
4220
- **kwargs: ta.Any,
4221
- ) -> RunOutput:
4222
- if capture_output:
4297
+ if run.capture_output:
4223
4298
  kwargs.setdefault('stdout', subprocess.PIPE)
4224
4299
  kwargs.setdefault('stderr', subprocess.PIPE)
4225
4300
 
4226
4301
  proc: asyncio.subprocess.Process
4227
- async with self.popen(*cmd, **kwargs) as proc:
4228
- stdout, stderr = await self.communicate(proc, input, timeout)
4302
+ async with self.popen(*run.cmd, **kwargs) as proc:
4303
+ stdout, stderr = await self.communicate(proc, run.input, run.timeout)
4229
4304
 
4230
4305
  if check and proc.returncode:
4231
4306
  raise subprocess.CalledProcessError(
4232
4307
  proc.returncode,
4233
- cmd,
4308
+ run.cmd,
4234
4309
  output=stdout,
4235
4310
  stderr=stderr,
4236
4311
  )
4237
4312
 
4238
- return self.RunOutput(
4239
- proc,
4240
- stdout,
4241
- stderr,
4313
+ return SubprocessRunOutput(
4314
+ proc=proc,
4315
+
4316
+ returncode=check.isinstance(proc.returncode, int),
4317
+
4318
+ stdout=stdout,
4319
+ stderr=stderr,
4242
4320
  )
4243
4321
 
4244
4322
  #
@@ -5353,18 +5353,34 @@ class ObjMarshalerManager:
5353
5353
  return reg
5354
5354
 
5355
5355
  if abc.ABC in ty.__bases__:
5356
- impls = [ity for ity in deep_subclasses(ty) if abc.ABC not in ity.__bases__] # type: ignore
5357
- if all(ity.__qualname__.endswith(ty.__name__) for ity in impls):
5358
- ins = {ity: snake_case(ity.__qualname__[:-len(ty.__name__)]) for ity in impls}
5359
- else:
5360
- ins = {ity: ity.__qualname__ for ity in impls}
5356
+ tn = ty.__name__
5357
+ impls: ta.List[ta.Tuple[type, str]] = [ # type: ignore[var-annotated]
5358
+ (ity, ity.__name__)
5359
+ for ity in deep_subclasses(ty)
5360
+ if abc.ABC not in ity.__bases__
5361
+ ]
5362
+
5363
+ if all(itn.endswith(tn) for _, itn in impls):
5364
+ impls = [
5365
+ (ity, snake_case(itn[:-len(tn)]))
5366
+ for ity, itn in impls
5367
+ ]
5368
+
5369
+ dupe_tns = sorted(
5370
+ dn
5371
+ for dn, dc in collections.Counter(itn for _, itn in impls).items()
5372
+ if dc > 1
5373
+ )
5374
+ if dupe_tns:
5375
+ raise KeyError(f'Duplicate impl names for {ty}: {dupe_tns}')
5376
+
5361
5377
  return PolymorphicObjMarshaler.of([
5362
5378
  PolymorphicObjMarshaler.Impl(
5363
5379
  ity,
5364
5380
  itn,
5365
5381
  rec(ity),
5366
5382
  )
5367
- for ity, itn in ins.items()
5383
+ for ity, itn in impls
5368
5384
  ])
5369
5385
 
5370
5386
  if issubclass(ty, enum.Enum):
@@ -6088,7 +6104,51 @@ class BaseSubprocesses(abc.ABC): # noqa
6088
6104
  ##
6089
6105
 
6090
6106
 
6107
+ @dc.dataclass(frozen=True)
6108
+ class SubprocessRun:
6109
+ cmd: ta.Sequence[str]
6110
+ input: ta.Any = None
6111
+ timeout: ta.Optional[float] = None
6112
+ check: bool = False
6113
+ capture_output: ta.Optional[bool] = None
6114
+ kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
6115
+
6116
+
6117
+ @dc.dataclass(frozen=True)
6118
+ class SubprocessRunOutput(ta.Generic[T]):
6119
+ proc: T
6120
+
6121
+ returncode: int # noqa
6122
+
6123
+ stdout: ta.Optional[bytes] = None
6124
+ stderr: ta.Optional[bytes] = None
6125
+
6126
+
6091
6127
  class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
6128
+ @abc.abstractmethod
6129
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
6130
+ raise NotImplementedError
6131
+
6132
+ def run(
6133
+ self,
6134
+ *cmd: str,
6135
+ input: ta.Any = None, # noqa
6136
+ timeout: ta.Optional[float] = None,
6137
+ check: bool = False,
6138
+ capture_output: ta.Optional[bool] = None,
6139
+ **kwargs: ta.Any,
6140
+ ) -> SubprocessRunOutput:
6141
+ return self.run_(SubprocessRun(
6142
+ cmd=cmd,
6143
+ input=input,
6144
+ timeout=timeout,
6145
+ check=check,
6146
+ capture_output=capture_output,
6147
+ kwargs=kwargs,
6148
+ ))
6149
+
6150
+ #
6151
+
6092
6152
  @abc.abstractmethod
6093
6153
  def check_call(
6094
6154
  self,
@@ -6152,6 +6212,25 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
6152
6212
 
6153
6213
 
6154
6214
  class Subprocesses(AbstractSubprocesses):
6215
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput[subprocess.CompletedProcess]:
6216
+ proc = subprocess.run(
6217
+ run.cmd,
6218
+ input=run.input,
6219
+ timeout=run.timeout,
6220
+ check=run.check,
6221
+ capture_output=run.capture_output or False,
6222
+ **(run.kwargs or {}),
6223
+ )
6224
+
6225
+ return SubprocessRunOutput(
6226
+ proc=proc,
6227
+
6228
+ returncode=proc.returncode,
6229
+
6230
+ stdout=proc.stdout, # noqa
6231
+ stderr=proc.stderr, # noqa
6232
+ )
6233
+
6155
6234
  def check_call(
6156
6235
  self,
6157
6236
  *cmd: str,
@@ -6177,6 +6256,30 @@ subprocesses = Subprocesses()
6177
6256
 
6178
6257
 
6179
6258
  class AbstractAsyncSubprocesses(BaseSubprocesses):
6259
+ @abc.abstractmethod
6260
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
6261
+ raise NotImplementedError
6262
+
6263
+ def run(
6264
+ self,
6265
+ *cmd: str,
6266
+ input: ta.Any = None, # noqa
6267
+ timeout: ta.Optional[float] = None,
6268
+ check: bool = False,
6269
+ capture_output: ta.Optional[bool] = None,
6270
+ **kwargs: ta.Any,
6271
+ ) -> ta.Awaitable[SubprocessRunOutput]:
6272
+ return self.run_(SubprocessRun(
6273
+ cmd=cmd,
6274
+ input=input,
6275
+ timeout=timeout,
6276
+ check=check,
6277
+ capture_output=capture_output,
6278
+ kwargs=kwargs,
6279
+ ))
6280
+
6281
+ #
6282
+
6180
6283
  @abc.abstractmethod
6181
6284
  async def check_call(
6182
6285
  self,
@@ -6490,41 +6593,32 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
6490
6593
 
6491
6594
  #
6492
6595
 
6493
- @dc.dataclass(frozen=True)
6494
- class RunOutput:
6495
- proc: asyncio.subprocess.Process
6496
- stdout: ta.Optional[bytes]
6497
- stderr: ta.Optional[bytes]
6596
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput[asyncio.subprocess.Process]:
6597
+ kwargs = dict(run.kwargs or {})
6498
6598
 
6499
- async def run(
6500
- self,
6501
- *cmd: str,
6502
- input: ta.Any = None, # noqa
6503
- timeout: ta.Optional[float] = None,
6504
- check: bool = False, # noqa
6505
- capture_output: ta.Optional[bool] = None,
6506
- **kwargs: ta.Any,
6507
- ) -> RunOutput:
6508
- if capture_output:
6599
+ if run.capture_output:
6509
6600
  kwargs.setdefault('stdout', subprocess.PIPE)
6510
6601
  kwargs.setdefault('stderr', subprocess.PIPE)
6511
6602
 
6512
6603
  proc: asyncio.subprocess.Process
6513
- async with self.popen(*cmd, **kwargs) as proc:
6514
- stdout, stderr = await self.communicate(proc, input, timeout)
6604
+ async with self.popen(*run.cmd, **kwargs) as proc:
6605
+ stdout, stderr = await self.communicate(proc, run.input, run.timeout)
6515
6606
 
6516
6607
  if check and proc.returncode:
6517
6608
  raise subprocess.CalledProcessError(
6518
6609
  proc.returncode,
6519
- cmd,
6610
+ run.cmd,
6520
6611
  output=stdout,
6521
6612
  stderr=stderr,
6522
6613
  )
6523
6614
 
6524
- return self.RunOutput(
6525
- proc,
6526
- stdout,
6527
- stderr,
6615
+ return SubprocessRunOutput(
6616
+ proc=proc,
6617
+
6618
+ returncode=check.isinstance(proc.returncode, int),
6619
+
6620
+ stdout=stdout,
6621
+ stderr=stderr,
6528
6622
  )
6529
6623
 
6530
6624
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev221
3
+ Version: 0.0.0.dev223
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev221
15
+ Requires-Dist: omlish==0.0.0.dev223
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -71,22 +71,30 @@ omdev/cexts/_distutils/compilers/options.py,sha256=H7r5IcLvga5Fs3jjXWIT-6ap3JBdu
71
71
  omdev/cexts/_distutils/compilers/unixccompiler.py,sha256=o1h8QuyupLntv4F21_XjzAZmCiwwxJuTmOirvBSL-Qw,15419
72
72
  omdev/ci/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
73
73
  omdev/ci/__main__.py,sha256=Jsrv3P7LX2Cg08W7ByZfZ1JQT4lgLDPW1qNAmShFuMk,75
74
- omdev/ci/cache.py,sha256=hHV7ovvOwkSRcIF49ovb1A7s43mUl0IWXi1iIQeRMdA,3643
75
- omdev/ci/ci.py,sha256=lEP5wgX0rInvkLJtGZQ-NSLO1Fc0CdQjVaUoMmeRCjQ,8110
76
- omdev/ci/cli.py,sha256=0KBGKxaKzhSbhk3YFDOgzrb_OVOY22a4qpIaTu5zBeA,6243
74
+ omdev/ci/cache.py,sha256=kJkQJPW3fvZ6oERToMeTtqp6SF9x7clVavgmV3LqhTg,4132
75
+ omdev/ci/ci.py,sha256=Itu2kAKL8bih8zJiB7EEPI15Mb6SXlJnS12KlKX79cg,6330
76
+ omdev/ci/cli.py,sha256=URmYwsvNSb4w_kwluLB4Em4ooTpiLG4Bh8Anjx0IVIE,6013
77
77
  omdev/ci/compose.py,sha256=vHLuXO5e2paafBC0Kf-OUGoamtIJmQ19r2U3_oikk_g,4541
78
78
  omdev/ci/consts.py,sha256=1puYfksvGOaVWEnbARM_sdMqs8oTn_VvsevsOtLsFno,21
79
- omdev/ci/docker.py,sha256=d3wQyL-N4mmzkIVbSgNx2Xd-K6RniFQN8nR-THKuDZs,3770
79
+ omdev/ci/inject.py,sha256=ZZWaT_GT4SE_lO8st2Y2IjKmeAtL3LD7KjEVr-E6Zzo,1514
80
80
  omdev/ci/requirements.py,sha256=iKAINTDyVQaqESGlfE9OXkKiW_CZ9kP70PEc121Ix-Q,2100
81
81
  omdev/ci/shell.py,sha256=cBPLMKiAJuNpPGj3ou6hpl88Xw7r99xpL91KJBQ0rqw,835
82
82
  omdev/ci/utils.py,sha256=mnf6yZmholvj0s_7JGbaO0Q1EWCn_saSv6BKMQQUCoQ,1450
83
+ omdev/ci/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ omdev/ci/docker/buildcaching.py,sha256=h22WabBqTojCyvPMmHlCrquDss9K3gTR8pGj7_8Wxpc,1775
85
+ omdev/ci/docker/cache.py,sha256=ku9S3UWsfbJ582GXsRYRYfWUPAB3Tp6Q3ZVUzHQcvlM,1534
86
+ omdev/ci/docker/cmds.py,sha256=ZRRfQS9FcsDM2CWtNH9WpcpjS1IMGdR2Yg-zSYx8vps,2719
87
+ omdev/ci/docker/imagepulling.py,sha256=pUbEd-HqLGkOcc9O0Ki8dnR34F_ta1a8vrv5eKFcP9Y,1757
88
+ omdev/ci/docker/inject.py,sha256=LzzmbOidzVHoZbFUGZep1udElkmgHm0AU0LdmPFUK5M,1174
89
+ omdev/ci/docker/utils.py,sha256=URioGRzqyqdJBZyOfzsrUwv5hSJ3WM23_sLHES9vamc,1129
83
90
  omdev/ci/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
91
  omdev/ci/github/api.py,sha256=Vqza7Hm1OCSfZYgdXF4exkjneqNjFcdO1pl8qmODskU,5198
85
92
  omdev/ci/github/bootstrap.py,sha256=9OuftAz7CUd7uf2Or3sJFVozQQiwu0RGAlTOQNpLQIY,430
86
- omdev/ci/github/cache.py,sha256=cXbPPMIWK-qjGyuCScEJGe-l4QKLwGBkW0GxOhGO_8E,1801
93
+ omdev/ci/github/cache.py,sha256=_fnh_KpsgixUE6V6FezW3B-FiuAwg46Jm5Ko88pItAY,2053
87
94
  omdev/ci/github/cli.py,sha256=6mG0CllwrOoC7MDzKfKDqBHAjfF0gEI6aT5UAGMmuss,1114
88
95
  omdev/ci/github/client.py,sha256=cSewCoHC4cDM4BMQObcrf5g2wwD6rTlil_h2repAkf8,14341
89
96
  omdev/ci/github/env.py,sha256=FQFjP_m7JWM7es9I51U-6UgJTwAt_UCVHFIYKTd9NKM,394
97
+ omdev/ci/github/inject.py,sha256=fw-74VG074dkUQsr5OjcISxsGM_YO9VI09JpcJXE6LM,705
90
98
  omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
91
99
  omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
92
100
  omdev/cli/_pathhack.py,sha256=kxqb2kHap68Lkh8b211rDbcgj06hidBiAKA3f9posyc,2119
@@ -99,6 +107,12 @@ omdev/clipboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
107
  omdev/clipboard/clipboard.py,sha256=9HFpcijpn0XDTI89ZRm2WA1G7O4HsTdVXZHqMULu3N0,1630
100
108
  omdev/clipboard/darwin_cf.py,sha256=SDUMfQtT_IJeDEwmsnxe6YyrZS5tPh_7ujkk1dg65Hg,7688
101
109
  omdev/clipboard/linux_x11.py,sha256=oa-mxMRNaZJOdBAZ8Nki-CAGIb63X8OFUTXKjmiwfSo,6718
110
+ omdev/dataserver/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
111
+ omdev/dataserver/handlers.py,sha256=rCptrmV2RnutmGE5MAgjLDYW1QncqsSHhyRBL4H5bsg,5440
112
+ omdev/dataserver/http.py,sha256=Vfdiri-AX7wNV1ASabU_JNmcKRpwLprWc9FyMUw4FDI,1707
113
+ omdev/dataserver/routes.py,sha256=7Jai21x5z1t1zbS4mC-Sv2g0uogMJnCAX47WR81QVfI,996
114
+ omdev/dataserver/server.py,sha256=ySEITCOxOmCXutsfYaFP46gENsg5w9jMeCySUSNUKmE,2333
115
+ omdev/dataserver/targets.py,sha256=uuewOBIS3x6NM79-xPtQFRlj0-hldP2SLJLTV9Y3J2M,2418
102
116
  omdev/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
117
  omdev/git/revisions.py,sha256=1YY3Kf2WSalNVE2TgLXmOETct8HfiVEOqfV-qcvMVr4,1161
104
118
  omdev/git/shallow.py,sha256=WwCujIfEzaUpCRjVEVgkjvV3gLF-O1AuQoXLtm00yU4,2525
@@ -140,6 +154,17 @@ omdev/manifests/build.py,sha256=yX0QM6c60aauiF-8oDxrXhkrhhwHcRw_qft_IIW6LD8,8767
140
154
  omdev/manifests/main.py,sha256=7zRlyE0BDPqITEbChlTBRGulAvG1nUZPHXrerNExriE,2126
141
155
  omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
156
  omdev/mypy/debug.py,sha256=WcZw-3Z1njg_KFGqi3DB6RuqbBa3dLArJnjVCuY1Mn0,3003
157
+ omdev/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
+ omdev/oci/building.py,sha256=g1TY-a2eHgEamYv0mt1L6rOevwOgdp_cW1xdVdjDzTw,5695
159
+ omdev/oci/compression.py,sha256=5hs7u0hImsm22GcQBHGYnP6g9dr-lBZ3E_PzdNVD4WY,134
160
+ omdev/oci/data.py,sha256=1vTTicKXlZskopCkbOwEuj2QUZpBiZclZKHr7I7IAD4,4339
161
+ omdev/oci/datarefs.py,sha256=3o1yNqw2z8_-rsk7-w1c3Xz8d23zVYhEcfMivs1bmXo,2762
162
+ omdev/oci/dataserver.py,sha256=ezZlrCxajMgvDR5Gt_rJbCd0kWDHjt62wsrwNYnCNz8,1864
163
+ omdev/oci/loading.py,sha256=iDMr7JGYRS6CeVrc-LUVjvUA4a49tpgwpJ3y0IImW54,3855
164
+ omdev/oci/media.py,sha256=PM2w1P3YxyvpfaHEDMD8iyBNJa18oVMOLF7KNb2R-DQ,5351
165
+ omdev/oci/packing.py,sha256=5cXsBjv6yrch-vXleo8IGoS9GrZ8l2-JJ_jiQQgdhmE,11195
166
+ omdev/oci/repositories.py,sha256=hOFNMSd5eI3-OQhuUC4x8hczCJko_oW8xvnLUPeZW0k,4321
167
+ omdev/oci/tars.py,sha256=ijy27sJ0r3TtQGvEIk5ol4-kuHDktVQ88-75pvjSnds,3434
143
168
  omdev/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
169
  omdev/packaging/marshal.py,sha256=c4Mdy5-s4O51eEKMWWBwkhTGQ1FoxVI2lD6CxI_cF3k,2379
145
170
  omdev/packaging/names.py,sha256=-a7AykFPVR1i6EYJepbe3ABRrZQ_tPPmK5olzbn9HLI,2528
@@ -171,15 +196,15 @@ omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
171
196
  omdev/pyproject/venvs.py,sha256=GUurjC7qzGlFL-su4C0YPO_pxbwDAyl1CqyLOB3WLCA,1911
172
197
  omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
198
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
174
- omdev/pyproject/resources/python.sh,sha256=jvrwddYw2KNttpuImLbdCdJK0HsUNMrHtTnmLvhxQxg,757
199
+ omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
175
200
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
176
201
  omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,1064
177
- omdev/scripts/ci.py,sha256=2bMl2vCMHdKQf2AmbcWV9Syv6RdizibYRDlT5Vg6q3E,110397
202
+ omdev/scripts/ci.py,sha256=jiYvMe1qhfwQDZkKK_nj7CiGJfB9S1XgXLOJwQNbquw,147744
178
203
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
179
204
  omdev/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
180
205
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
181
- omdev/scripts/interp.py,sha256=40KDm-mW8v7Mmhi4WByV9XzWPgwvTfKYsFKlojXR4k0,143362
182
- omdev/scripts/pyproject.py,sha256=TG3Ne6h1W2rwT8nBG9E7QCmN_adPIO24QYaSJ7JGreU,247106
206
+ omdev/scripts/interp.py,sha256=5xf2pqXWWCslLfje8owc1lWu7t0ovs5fis2pF9Tm25M,145436
207
+ omdev/scripts/pyproject.py,sha256=Wkefak-zcAT6vBS-OYcvufIVVPBosa8lXYKzSa_3qLg,249601
183
208
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
184
209
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
185
210
  omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -211,9 +236,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
211
236
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
237
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
213
238
  omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
214
- omdev-0.0.0.dev221.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
215
- omdev-0.0.0.dev221.dist-info/METADATA,sha256=6CDNUfEdq1eSOHa4-gjzue31lW2sERzgtp70n8fecpk,1638
216
- omdev-0.0.0.dev221.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
217
- omdev-0.0.0.dev221.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
218
- omdev-0.0.0.dev221.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
219
- omdev-0.0.0.dev221.dist-info/RECORD,,
239
+ omdev-0.0.0.dev223.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
240
+ omdev-0.0.0.dev223.dist-info/METADATA,sha256=5p-9tifCELoH4S5_4ezh2SBXGvh-St_aakL8c1LCaFA,1638
241
+ omdev-0.0.0.dev223.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
242
+ omdev-0.0.0.dev223.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
243
+ omdev-0.0.0.dev223.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
244
+ omdev-0.0.0.dev223.dist-info/RECORD,,