omdev 0.0.0.dev222__py3-none-any.whl → 0.0.0.dev224__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 (48) hide show
  1. omdev/ci/cache.py +148 -23
  2. omdev/ci/ci.py +50 -110
  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/cacheserved.py +262 -0
  8. omdev/ci/{docker.py → docker/cmds.py} +1 -44
  9. omdev/ci/docker/dataserver.py +204 -0
  10. omdev/ci/docker/imagepulling.py +65 -0
  11. omdev/ci/docker/inject.py +37 -0
  12. omdev/ci/docker/packing.py +72 -0
  13. omdev/ci/docker/repositories.py +40 -0
  14. omdev/ci/docker/utils.py +48 -0
  15. omdev/ci/github/cache.py +35 -6
  16. omdev/ci/github/client.py +9 -2
  17. omdev/ci/github/inject.py +30 -0
  18. omdev/ci/inject.py +61 -0
  19. omdev/ci/utils.py +0 -49
  20. omdev/dataserver/__init__.py +1 -0
  21. omdev/dataserver/handlers.py +198 -0
  22. omdev/dataserver/http.py +69 -0
  23. omdev/dataserver/routes.py +49 -0
  24. omdev/dataserver/server.py +90 -0
  25. omdev/dataserver/targets.py +121 -0
  26. omdev/oci/building.py +107 -9
  27. omdev/oci/compression.py +8 -0
  28. omdev/oci/data.py +43 -0
  29. omdev/oci/datarefs.py +90 -50
  30. omdev/oci/dataserver.py +64 -0
  31. omdev/oci/loading.py +20 -0
  32. omdev/oci/media.py +20 -0
  33. omdev/oci/pack/__init__.py +0 -0
  34. omdev/oci/pack/packing.py +185 -0
  35. omdev/oci/pack/repositories.py +162 -0
  36. omdev/oci/pack/unpacking.py +204 -0
  37. omdev/oci/repositories.py +84 -2
  38. omdev/oci/tars.py +144 -0
  39. omdev/pyproject/resources/python.sh +1 -1
  40. omdev/scripts/ci.py +2137 -512
  41. omdev/scripts/interp.py +119 -22
  42. omdev/scripts/pyproject.py +141 -28
  43. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/METADATA +2 -2
  44. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/RECORD +48 -23
  45. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/LICENSE +0 -0
  46. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/WHEEL +0 -0
  47. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/entry_points.txt +0 -0
  48. {omdev-0.0.0.dev222.dist-info → omdev-0.0.0.dev224.dist-info}/top_level.txt +0 -0
omdev/scripts/interp.py CHANGED
@@ -3848,7 +3848,70 @@ 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
+ @classmethod
3861
+ def of(
3862
+ cls,
3863
+ *cmd: str,
3864
+ input: ta.Any = None, # noqa
3865
+ timeout: ta.Optional[float] = None,
3866
+ check: bool = False,
3867
+ capture_output: ta.Optional[bool] = None,
3868
+ **kwargs: ta.Any,
3869
+ ) -> 'SubprocessRun':
3870
+ return cls(
3871
+ cmd=cmd,
3872
+ input=input,
3873
+ timeout=timeout,
3874
+ check=check,
3875
+ capture_output=capture_output,
3876
+ kwargs=kwargs,
3877
+ )
3878
+
3879
+
3880
+ @dc.dataclass(frozen=True)
3881
+ class SubprocessRunOutput(ta.Generic[T]):
3882
+ proc: T
3883
+
3884
+ returncode: int # noqa
3885
+
3886
+ stdout: ta.Optional[bytes] = None
3887
+ stderr: ta.Optional[bytes] = None
3888
+
3889
+
3851
3890
  class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
3891
+ @abc.abstractmethod
3892
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
3893
+ raise NotImplementedError
3894
+
3895
+ def run(
3896
+ self,
3897
+ *cmd: str,
3898
+ input: ta.Any = None, # noqa
3899
+ timeout: ta.Optional[float] = None,
3900
+ check: bool = False,
3901
+ capture_output: ta.Optional[bool] = None,
3902
+ **kwargs: ta.Any,
3903
+ ) -> SubprocessRunOutput:
3904
+ return self.run_(SubprocessRun(
3905
+ cmd=cmd,
3906
+ input=input,
3907
+ timeout=timeout,
3908
+ check=check,
3909
+ capture_output=capture_output,
3910
+ kwargs=kwargs,
3911
+ ))
3912
+
3913
+ #
3914
+
3852
3915
  @abc.abstractmethod
3853
3916
  def check_call(
3854
3917
  self,
@@ -3912,6 +3975,25 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
3912
3975
 
3913
3976
 
3914
3977
  class Subprocesses(AbstractSubprocesses):
3978
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput[subprocess.CompletedProcess]:
3979
+ proc = subprocess.run(
3980
+ run.cmd,
3981
+ input=run.input,
3982
+ timeout=run.timeout,
3983
+ check=run.check,
3984
+ capture_output=run.capture_output or False,
3985
+ **(run.kwargs or {}),
3986
+ )
3987
+
3988
+ return SubprocessRunOutput(
3989
+ proc=proc,
3990
+
3991
+ returncode=proc.returncode,
3992
+
3993
+ stdout=proc.stdout, # noqa
3994
+ stderr=proc.stderr, # noqa
3995
+ )
3996
+
3915
3997
  def check_call(
3916
3998
  self,
3917
3999
  *cmd: str,
@@ -3937,6 +4019,30 @@ subprocesses = Subprocesses()
3937
4019
 
3938
4020
 
3939
4021
  class AbstractAsyncSubprocesses(BaseSubprocesses):
4022
+ @abc.abstractmethod
4023
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
4024
+ raise NotImplementedError
4025
+
4026
+ def run(
4027
+ self,
4028
+ *cmd: str,
4029
+ input: ta.Any = None, # noqa
4030
+ timeout: ta.Optional[float] = None,
4031
+ check: bool = False,
4032
+ capture_output: ta.Optional[bool] = None,
4033
+ **kwargs: ta.Any,
4034
+ ) -> ta.Awaitable[SubprocessRunOutput]:
4035
+ return self.run_(SubprocessRun(
4036
+ cmd=cmd,
4037
+ input=input,
4038
+ timeout=timeout,
4039
+ check=check,
4040
+ capture_output=capture_output,
4041
+ kwargs=kwargs,
4042
+ ))
4043
+
4044
+ #
4045
+
3940
4046
  @abc.abstractmethod
3941
4047
  async def check_call(
3942
4048
  self,
@@ -4204,41 +4310,32 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
4204
4310
 
4205
4311
  #
4206
4312
 
4207
- @dc.dataclass(frozen=True)
4208
- class RunOutput:
4209
- proc: asyncio.subprocess.Process
4210
- stdout: ta.Optional[bytes]
4211
- stderr: ta.Optional[bytes]
4313
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput[asyncio.subprocess.Process]:
4314
+ kwargs = dict(run.kwargs or {})
4212
4315
 
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:
4316
+ if run.capture_output:
4223
4317
  kwargs.setdefault('stdout', subprocess.PIPE)
4224
4318
  kwargs.setdefault('stderr', subprocess.PIPE)
4225
4319
 
4226
4320
  proc: asyncio.subprocess.Process
4227
- async with self.popen(*cmd, **kwargs) as proc:
4228
- stdout, stderr = await self.communicate(proc, input, timeout)
4321
+ async with self.popen(*run.cmd, **kwargs) as proc:
4322
+ stdout, stderr = await self.communicate(proc, run.input, run.timeout)
4229
4323
 
4230
4324
  if check and proc.returncode:
4231
4325
  raise subprocess.CalledProcessError(
4232
4326
  proc.returncode,
4233
- cmd,
4327
+ run.cmd,
4234
4328
  output=stdout,
4235
4329
  stderr=stderr,
4236
4330
  )
4237
4331
 
4238
- return self.RunOutput(
4239
- proc,
4240
- stdout,
4241
- stderr,
4332
+ return SubprocessRunOutput(
4333
+ proc=proc,
4334
+
4335
+ returncode=check.isinstance(proc.returncode, int),
4336
+
4337
+ stdout=stdout,
4338
+ stderr=stderr,
4242
4339
  )
4243
4340
 
4244
4341
  #
@@ -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,70 @@ 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
+ @classmethod
6117
+ def of(
6118
+ cls,
6119
+ *cmd: str,
6120
+ input: ta.Any = None, # noqa
6121
+ timeout: ta.Optional[float] = None,
6122
+ check: bool = False,
6123
+ capture_output: ta.Optional[bool] = None,
6124
+ **kwargs: ta.Any,
6125
+ ) -> 'SubprocessRun':
6126
+ return cls(
6127
+ cmd=cmd,
6128
+ input=input,
6129
+ timeout=timeout,
6130
+ check=check,
6131
+ capture_output=capture_output,
6132
+ kwargs=kwargs,
6133
+ )
6134
+
6135
+
6136
+ @dc.dataclass(frozen=True)
6137
+ class SubprocessRunOutput(ta.Generic[T]):
6138
+ proc: T
6139
+
6140
+ returncode: int # noqa
6141
+
6142
+ stdout: ta.Optional[bytes] = None
6143
+ stderr: ta.Optional[bytes] = None
6144
+
6145
+
6091
6146
  class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
6147
+ @abc.abstractmethod
6148
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
6149
+ raise NotImplementedError
6150
+
6151
+ def run(
6152
+ self,
6153
+ *cmd: str,
6154
+ input: ta.Any = None, # noqa
6155
+ timeout: ta.Optional[float] = None,
6156
+ check: bool = False,
6157
+ capture_output: ta.Optional[bool] = None,
6158
+ **kwargs: ta.Any,
6159
+ ) -> SubprocessRunOutput:
6160
+ return self.run_(SubprocessRun(
6161
+ cmd=cmd,
6162
+ input=input,
6163
+ timeout=timeout,
6164
+ check=check,
6165
+ capture_output=capture_output,
6166
+ kwargs=kwargs,
6167
+ ))
6168
+
6169
+ #
6170
+
6092
6171
  @abc.abstractmethod
6093
6172
  def check_call(
6094
6173
  self,
@@ -6152,6 +6231,25 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
6152
6231
 
6153
6232
 
6154
6233
  class Subprocesses(AbstractSubprocesses):
6234
+ def run_(self, run: SubprocessRun) -> SubprocessRunOutput[subprocess.CompletedProcess]:
6235
+ proc = subprocess.run(
6236
+ run.cmd,
6237
+ input=run.input,
6238
+ timeout=run.timeout,
6239
+ check=run.check,
6240
+ capture_output=run.capture_output or False,
6241
+ **(run.kwargs or {}),
6242
+ )
6243
+
6244
+ return SubprocessRunOutput(
6245
+ proc=proc,
6246
+
6247
+ returncode=proc.returncode,
6248
+
6249
+ stdout=proc.stdout, # noqa
6250
+ stderr=proc.stderr, # noqa
6251
+ )
6252
+
6155
6253
  def check_call(
6156
6254
  self,
6157
6255
  *cmd: str,
@@ -6177,6 +6275,30 @@ subprocesses = Subprocesses()
6177
6275
 
6178
6276
 
6179
6277
  class AbstractAsyncSubprocesses(BaseSubprocesses):
6278
+ @abc.abstractmethod
6279
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput:
6280
+ raise NotImplementedError
6281
+
6282
+ def run(
6283
+ self,
6284
+ *cmd: str,
6285
+ input: ta.Any = None, # noqa
6286
+ timeout: ta.Optional[float] = None,
6287
+ check: bool = False,
6288
+ capture_output: ta.Optional[bool] = None,
6289
+ **kwargs: ta.Any,
6290
+ ) -> ta.Awaitable[SubprocessRunOutput]:
6291
+ return self.run_(SubprocessRun(
6292
+ cmd=cmd,
6293
+ input=input,
6294
+ timeout=timeout,
6295
+ check=check,
6296
+ capture_output=capture_output,
6297
+ kwargs=kwargs,
6298
+ ))
6299
+
6300
+ #
6301
+
6180
6302
  @abc.abstractmethod
6181
6303
  async def check_call(
6182
6304
  self,
@@ -6490,41 +6612,32 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
6490
6612
 
6491
6613
  #
6492
6614
 
6493
- @dc.dataclass(frozen=True)
6494
- class RunOutput:
6495
- proc: asyncio.subprocess.Process
6496
- stdout: ta.Optional[bytes]
6497
- stderr: ta.Optional[bytes]
6615
+ async def run_(self, run: SubprocessRun) -> SubprocessRunOutput[asyncio.subprocess.Process]:
6616
+ kwargs = dict(run.kwargs or {})
6498
6617
 
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:
6618
+ if run.capture_output:
6509
6619
  kwargs.setdefault('stdout', subprocess.PIPE)
6510
6620
  kwargs.setdefault('stderr', subprocess.PIPE)
6511
6621
 
6512
6622
  proc: asyncio.subprocess.Process
6513
- async with self.popen(*cmd, **kwargs) as proc:
6514
- stdout, stderr = await self.communicate(proc, input, timeout)
6623
+ async with self.popen(*run.cmd, **kwargs) as proc:
6624
+ stdout, stderr = await self.communicate(proc, run.input, run.timeout)
6515
6625
 
6516
6626
  if check and proc.returncode:
6517
6627
  raise subprocess.CalledProcessError(
6518
6628
  proc.returncode,
6519
- cmd,
6629
+ run.cmd,
6520
6630
  output=stdout,
6521
6631
  stderr=stderr,
6522
6632
  )
6523
6633
 
6524
- return self.RunOutput(
6525
- proc,
6526
- stdout,
6527
- stderr,
6634
+ return SubprocessRunOutput(
6635
+ proc=proc,
6636
+
6637
+ returncode=check.isinstance(proc.returncode, int),
6638
+
6639
+ stdout=stdout,
6640
+ stderr=stderr,
6528
6641
  )
6529
6642
 
6530
6643
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev222
3
+ Version: 0.0.0.dev224
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.dev222
15
+ Requires-Dist: omlish==0.0.0.dev224
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,34 @@ 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=ohgWIbefNNbqwFLzpdDzqWabogwXZugfJ2AL64U3xsw,6578
75
+ omdev/ci/ci.py,sha256=JNFDs3sYCs93NOrnQxKiZNVnOotOwOL1CIEB4TL--Fg,6342
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
- omdev/ci/utils.py,sha256=mnf6yZmholvj0s_7JGbaO0Q1EWCn_saSv6BKMQQUCoQ,1450
82
+ omdev/ci/utils.py,sha256=YxOT4S-YLDOAv27K0Q0SKzxncZrWFA_wNXlFOaJmQuI,304
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/cacheserved.py,sha256=4Sqq5vMMp6IIi2deHE5uMGb_oLuk0A8HVcoDNcL97lY,8382
87
+ omdev/ci/docker/cmds.py,sha256=ZRRfQS9FcsDM2CWtNH9WpcpjS1IMGdR2Yg-zSYx8vps,2719
88
+ omdev/ci/docker/dataserver.py,sha256=CiS2l0Ze9rOCKXc0qgdmHH0FRZJqunJbTxowVSqxtJw,5525
89
+ omdev/ci/docker/imagepulling.py,sha256=fePZOkEKsAoOU7AlHKKK8fhMVhtYhczIFC9QDFjWwmc,1769
90
+ omdev/ci/docker/inject.py,sha256=LzzmbOidzVHoZbFUGZep1udElkmgHm0AU0LdmPFUK5M,1174
91
+ omdev/ci/docker/packing.py,sha256=Bl0aBkkdwES5ePGE3nmyg1CAQzmMDCVP2KTdZUITpQE,2016
92
+ omdev/ci/docker/repositories.py,sha256=ZWfObYdZXPn4BBeg8TsYeNVmH1EVEBadfRuxehAhxMM,1223
93
+ omdev/ci/docker/utils.py,sha256=URioGRzqyqdJBZyOfzsrUwv5hSJ3WM23_sLHES9vamc,1129
83
94
  omdev/ci/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
95
  omdev/ci/github/api.py,sha256=Vqza7Hm1OCSfZYgdXF4exkjneqNjFcdO1pl8qmODskU,5198
85
96
  omdev/ci/github/bootstrap.py,sha256=9OuftAz7CUd7uf2Or3sJFVozQQiwu0RGAlTOQNpLQIY,430
86
- omdev/ci/github/cache.py,sha256=cXbPPMIWK-qjGyuCScEJGe-l4QKLwGBkW0GxOhGO_8E,1801
97
+ omdev/ci/github/cache.py,sha256=39n0H4KpRCryQeIGVJqL6coyg7q4IFpFZZyBkbOo6PM,2672
87
98
  omdev/ci/github/cli.py,sha256=6mG0CllwrOoC7MDzKfKDqBHAjfF0gEI6aT5UAGMmuss,1114
88
- omdev/ci/github/client.py,sha256=cSewCoHC4cDM4BMQObcrf5g2wwD6rTlil_h2repAkf8,14341
99
+ omdev/ci/github/client.py,sha256=fT8rQ5RO5MXyjpIt6UEFR7escofkBau73m8KYMzcZFo,14614
89
100
  omdev/ci/github/env.py,sha256=FQFjP_m7JWM7es9I51U-6UgJTwAt_UCVHFIYKTd9NKM,394
101
+ omdev/ci/github/inject.py,sha256=FnmAL9vcZSYKvbuNjYDYlrc-XiFPayR806pYUd4Dyao,689
90
102
  omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
91
103
  omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
92
104
  omdev/cli/_pathhack.py,sha256=kxqb2kHap68Lkh8b211rDbcgj06hidBiAKA3f9posyc,2119
@@ -99,6 +111,12 @@ omdev/clipboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
111
  omdev/clipboard/clipboard.py,sha256=9HFpcijpn0XDTI89ZRm2WA1G7O4HsTdVXZHqMULu3N0,1630
100
112
  omdev/clipboard/darwin_cf.py,sha256=SDUMfQtT_IJeDEwmsnxe6YyrZS5tPh_7ujkk1dg65Hg,7688
101
113
  omdev/clipboard/linux_x11.py,sha256=oa-mxMRNaZJOdBAZ8Nki-CAGIb63X8OFUTXKjmiwfSo,6718
114
+ omdev/dataserver/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
115
+ omdev/dataserver/handlers.py,sha256=rCptrmV2RnutmGE5MAgjLDYW1QncqsSHhyRBL4H5bsg,5440
116
+ omdev/dataserver/http.py,sha256=Vfdiri-AX7wNV1ASabU_JNmcKRpwLprWc9FyMUw4FDI,1707
117
+ omdev/dataserver/routes.py,sha256=7Jai21x5z1t1zbS4mC-Sv2g0uogMJnCAX47WR81QVfI,996
118
+ omdev/dataserver/server.py,sha256=ySEITCOxOmCXutsfYaFP46gENsg5w9jMeCySUSNUKmE,2333
119
+ omdev/dataserver/targets.py,sha256=oKINlau7-Dk0XFP81ujU43YxvM_VTT5OnEZYIhHv4Os,3299
102
120
  omdev/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
121
  omdev/git/revisions.py,sha256=1YY3Kf2WSalNVE2TgLXmOETct8HfiVEOqfV-qcvMVr4,1161
104
122
  omdev/git/shallow.py,sha256=WwCujIfEzaUpCRjVEVgkjvV3gLF-O1AuQoXLtm00yU4,2525
@@ -141,12 +159,19 @@ omdev/manifests/main.py,sha256=7zRlyE0BDPqITEbChlTBRGulAvG1nUZPHXrerNExriE,2126
141
159
  omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
160
  omdev/mypy/debug.py,sha256=WcZw-3Z1njg_KFGqi3DB6RuqbBa3dLArJnjVCuY1Mn0,3003
143
161
  omdev/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
- omdev/oci/building.py,sha256=dv3PgAC94GWUFt7vaUnRi_xavZpExi7Vfm6lPFQ-bhA,3557
145
- omdev/oci/data.py,sha256=NF3ZBCrDDZdcTkA7CT720rytgSvcH_iNHryWLO6n4ys,3501
146
- omdev/oci/datarefs.py,sha256=OUHhFy2TytGt2_YVzCOreOBBbFXmGHTpflUlj7oOz4A,2079
147
- omdev/oci/loading.py,sha256=CwUpCa_t52GJiwIpN2NlSGr4RawsOXpF9xH1j1U6ONQ,3350
148
- omdev/oci/media.py,sha256=CBViZlluiECS2A98zCWho8DJzB2utKvO4MSCT01qNOo,5052
149
- omdev/oci/repositories.py,sha256=oTwKQehGWTldaQy4CdR1GJz2DCCkB1q4NPDdkJeVox4,2188
162
+ omdev/oci/building.py,sha256=g1TY-a2eHgEamYv0mt1L6rOevwOgdp_cW1xdVdjDzTw,5695
163
+ omdev/oci/compression.py,sha256=5hs7u0hImsm22GcQBHGYnP6g9dr-lBZ3E_PzdNVD4WY,134
164
+ omdev/oci/data.py,sha256=raIJehDpDR2W55D_pnYH-NqEf439EcwaaLgfhqvL2yM,4908
165
+ omdev/oci/datarefs.py,sha256=3o1yNqw2z8_-rsk7-w1c3Xz8d23zVYhEcfMivs1bmXo,2762
166
+ omdev/oci/dataserver.py,sha256=QIiJUZQPxL_yDomBuy9UdH3nL1OE2BkP7JxNz4Q3BxE,1863
167
+ omdev/oci/loading.py,sha256=iDMr7JGYRS6CeVrc-LUVjvUA4a49tpgwpJ3y0IImW54,3855
168
+ omdev/oci/media.py,sha256=PM2w1P3YxyvpfaHEDMD8iyBNJa18oVMOLF7KNb2R-DQ,5351
169
+ omdev/oci/repositories.py,sha256=APNQoJxPlN6vaOmQg-MS6cHwGlpTCoVyG8WBjCIaEak,4513
170
+ omdev/oci/tars.py,sha256=ijy27sJ0r3TtQGvEIk5ol4-kuHDktVQ88-75pvjSnds,3434
171
+ omdev/oci/pack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
+ omdev/oci/pack/packing.py,sha256=K00GKBPGYYzFEK0CuQvoI7XRLULNld7_i7XcKdQ35zk,5413
173
+ omdev/oci/pack/repositories.py,sha256=EwCJlngKjqpNgcEeszOOnj3WxlQTgLOKo_rwe2PW8JM,4948
174
+ omdev/oci/pack/unpacking.py,sha256=gRwdhYNpLc2QHq2JndRx5unrSCtcaYUUZZyCTCsDIHo,5997
150
175
  omdev/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
176
  omdev/packaging/marshal.py,sha256=c4Mdy5-s4O51eEKMWWBwkhTGQ1FoxVI2lD6CxI_cF3k,2379
152
177
  omdev/packaging/names.py,sha256=-a7AykFPVR1i6EYJepbe3ABRrZQ_tPPmK5olzbn9HLI,2528
@@ -178,15 +203,15 @@ omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
178
203
  omdev/pyproject/venvs.py,sha256=GUurjC7qzGlFL-su4C0YPO_pxbwDAyl1CqyLOB3WLCA,1911
179
204
  omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
180
205
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
181
- omdev/pyproject/resources/python.sh,sha256=jvrwddYw2KNttpuImLbdCdJK0HsUNMrHtTnmLvhxQxg,757
206
+ omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
182
207
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
183
208
  omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,1064
184
- omdev/scripts/ci.py,sha256=2bMl2vCMHdKQf2AmbcWV9Syv6RdizibYRDlT5Vg6q3E,110397
209
+ omdev/scripts/ci.py,sha256=1E2mI61uHKyQUmZdyq3GEL0yHDoSC2sxbPYAhnjW71w,151975
185
210
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
186
211
  omdev/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
187
212
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
188
- omdev/scripts/interp.py,sha256=40KDm-mW8v7Mmhi4WByV9XzWPgwvTfKYsFKlojXR4k0,143362
189
- omdev/scripts/pyproject.py,sha256=TG3Ne6h1W2rwT8nBG9E7QCmN_adPIO24QYaSJ7JGreU,247106
213
+ omdev/scripts/interp.py,sha256=VBD2A-PVi1Y_kkwSR6V73JJBW_aQ4d1cJwp2ce-rN0w,145939
214
+ omdev/scripts/pyproject.py,sha256=9jRTjJlrxUIasRhZxcZ8w8KIe9wlKQwzjqGMa1kjl-0,250104
190
215
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
191
216
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
192
217
  omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -218,9 +243,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
218
243
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
244
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
220
245
  omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
221
- omdev-0.0.0.dev222.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
222
- omdev-0.0.0.dev222.dist-info/METADATA,sha256=Uah5orSjym-xXyFh9XtBqqKKl7RqRncHdTT6Amon83g,1638
223
- omdev-0.0.0.dev222.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
224
- omdev-0.0.0.dev222.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
225
- omdev-0.0.0.dev222.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
226
- omdev-0.0.0.dev222.dist-info/RECORD,,
246
+ omdev-0.0.0.dev224.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
247
+ omdev-0.0.0.dev224.dist-info/METADATA,sha256=bl3bBQIZTIIVMO-_DkgRiVudo5lGHmhqIi9kLHu0A1k,1638
248
+ omdev-0.0.0.dev224.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
249
+ omdev-0.0.0.dev224.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
250
+ omdev-0.0.0.dev224.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
251
+ omdev-0.0.0.dev224.dist-info/RECORD,,