omlish 0.0.0.dev287__py3-none-any.whl → 0.0.0.dev289__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 CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev287'
2
- __revision__ = 'b5569962801bfa1ab3457339502eb364ee51bb0e'
1
+ __version__ = '0.0.0.dev289'
2
+ __revision__ = 'a15065b33f3bb10b44da2a9c680deade2370d3b9'
3
3
 
4
4
 
5
5
  #
@@ -0,0 +1,7 @@
1
+ """
2
+ TODO:
3
+ - inline polymorph: 'ami: foo' -> 'image: {'ami': {'name': 'foo'}}
4
+ - parse duration and size settings, "512k" or "10 seconds"
5
+ - includes
6
+ - substitutions ("foo" : ${bar}, "foo" : Hello ${who})
7
+ """
@@ -2,9 +2,11 @@ import collections
2
2
  import dataclasses as dc
3
3
  import typing as ta
4
4
 
5
+ from .... import lang
5
6
  from ...specs import CoerceFn
6
7
  from ...specs import ReprFn
7
8
  from ...specs import ValidateFn
9
+ from .metadata import _ExtraFieldParamsMetadata
8
10
  from .metadata import extra_field_params
9
11
 
10
12
 
@@ -29,14 +31,17 @@ def field(
29
31
  repr_fn: ReprFn | None = None,
30
32
  repr_priority: int | None = None,
31
33
  ) -> ta.Any:
32
- efp = extra_field_params(
33
- coerce=coerce,
34
- validate=validate,
35
- check_type=check_type,
36
- override=override,
37
- repr_fn=repr_fn,
38
- repr_priority=repr_priority,
39
- )
34
+ efp = extra_field_params(**{
35
+ **(metadata.get(_ExtraFieldParamsMetadata) or {} if metadata is not None else {}),
36
+ **lang.opt_kw(
37
+ coerce=coerce,
38
+ validate=validate,
39
+ check_type=check_type,
40
+ override=override,
41
+ repr_fn=repr_fn,
42
+ repr_priority=repr_priority,
43
+ ),
44
+ })
40
45
 
41
46
  md: ta.Any = metadata
42
47
  if md is None:
omlish/diag/pycharm.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import dataclasses as dc
2
2
  import json
3
3
  import os.path
4
- import plistlib
5
4
  import re
6
5
  import shutil
7
6
  import subprocess
@@ -13,10 +12,15 @@ from .. import lang
13
12
 
14
13
 
15
14
  if ta.TYPE_CHECKING:
16
- docker = lang.proxy_import('..docker')
17
- else:
15
+ import plistlib
16
+
18
17
  from .. import docker
19
18
 
19
+ else:
20
+ plistlib = lang.proxy_import('plistlib')
21
+
22
+ docker = lang.proxy_import('..docker')
23
+
20
24
 
21
25
  ##
22
26
 
@@ -186,7 +186,12 @@ def method(func=None, /, *, installable=False): # noqa
186
186
  return Method(func, **kw)
187
187
 
188
188
 
189
- def install_method(mth: ta.Any, *, name: str | None = None) -> ta.Callable[[T], T]:
189
+ def install_method(
190
+ mth: ta.Any,
191
+ *,
192
+ name: str | None = None,
193
+ on: type | None = None,
194
+ ) -> ta.Callable[[T], T]:
190
195
  mth = check.isinstance(mth, Method)
191
196
  if not mth._installable: # noqa
192
197
  raise TypeError(f'Method not installable: {mth}')
@@ -196,7 +201,12 @@ def install_method(mth: ta.Any, *, name: str | None = None) -> ta.Callable[[T],
196
201
  if a is None:
197
202
  a = fn.__name__
198
203
 
199
- cls: type = check.not_none(mth._owner) # noqa
204
+ owner: type = check.not_none(mth._owner) # noqa
205
+ if on is None:
206
+ cls = owner
207
+ else:
208
+ cls = check.issubclass(on, owner)
209
+
200
210
  check.arg(not hasattr(cls, a))
201
211
  setattr(cls, a, fn)
202
212
 
omlish/metadata.py CHANGED
@@ -125,7 +125,7 @@ class DecoratorObjectMetadata(ObjectMetadata, lang.Abstract):
125
125
  tts = tuple(object_metadata_target_types)
126
126
  for tt in tts:
127
127
  check.issubclass(tt, _VALID_OBJECT_METADATA_TARGET_TYPES)
128
- setattr(cls, '_OBJECT_METADATA_TARGET_TYPES', tts)
128
+ cls._OBJECT_METADATA_TARGET_TYPES = tts
129
129
 
130
130
  def __call__(self, obj: T) -> T:
131
131
  tgt: ta.Any = obj
omlish/text/minja.py CHANGED
@@ -18,19 +18,6 @@ from ..lite.maybes import Maybe
18
18
  ##
19
19
 
20
20
 
21
- class MinjaTemplate:
22
- def __init__(self, fn: ta.Callable) -> None:
23
- super().__init__()
24
-
25
- self._fn = fn
26
-
27
- def __call__(self, **kwargs: ta.Any) -> str:
28
- return self._fn(**kwargs)
29
-
30
-
31
- ##
32
-
33
-
34
21
  @dc.dataclass(frozen=True)
35
22
  class MinjaTemplateParam:
36
23
  name: str
@@ -59,6 +46,28 @@ class MinjaTemplateParam:
59
46
  return cls(name, dfl)
60
47
 
61
48
 
49
+ class MinjaTemplate:
50
+ def __init__(
51
+ self,
52
+ fn: ta.Callable,
53
+ params: ta.Sequence[MinjaTemplateParam],
54
+ ) -> None:
55
+ super().__init__()
56
+
57
+ self._fn = fn
58
+ self._params = params
59
+
60
+ @property
61
+ def params(self) -> ta.Sequence[MinjaTemplateParam]:
62
+ return self._params
63
+
64
+ def __call__(self, **kwargs: ta.Any) -> str:
65
+ return self._fn(**kwargs)
66
+
67
+
68
+ ##
69
+
70
+
62
71
  class MinjaTemplateCompiler:
63
72
  """
64
73
  Compiles a template string into a Python function. The returned function takes a dictionary 'context' and returns
@@ -261,7 +270,10 @@ class MinjaTemplateCompiler:
261
270
  rendered.ns,
262
271
  )
263
272
 
264
- return MinjaTemplate(render_fn)
273
+ return MinjaTemplate(
274
+ render_fn,
275
+ self._params,
276
+ )
265
277
 
266
278
 
267
279
  ##
omlish/text/templating.py CHANGED
@@ -1,3 +1,7 @@
1
+ """
2
+ TODO:
3
+ - find_vars
4
+ """
1
5
  import abc
2
6
  import dataclasses as dc
3
7
  import string
@@ -94,7 +98,7 @@ class MinjaTemplater(Templater):
94
98
 
95
99
  @dc.dataclass(frozen=True)
96
100
  class JinjaTemplater(Templater):
97
- tmpl: jinja2.Template
101
+ tmpl: 'jinja2.Template'
98
102
 
99
103
  def render(self, ctx: Templater.Context) -> str:
100
104
  return self.tmpl.render(**(ctx.env or {}))
@@ -104,7 +108,7 @@ class JinjaTemplater(Templater):
104
108
  cls,
105
109
  src: str,
106
110
  *,
107
- env: jinja2.Environment | None = None,
111
+ env: ta.Optional['jinja2.Environment'] = None,
108
112
  **kwargs: ta.Any,
109
113
  ) -> 'JinjaTemplater':
110
114
  if env is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev287
3
+ Version: 0.0.0.dev289
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=pjGUyLHaoWpPqRP3jz2u1fC1qoRc2lvrEcpU_Ax2tdg,8253
2
- omlish/__about__.py,sha256=i-F-KstjC74KdNV4E5DhZUVUlbu5XeNyaWrDZaDrQtw,3444
2
+ omlish/__about__.py,sha256=HbhZmTysZ2WI-rCErh6ZBDj_chq-_Q4au1A12QYY1v4,3444
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
@@ -8,7 +8,7 @@ omlish/datetimes.py,sha256=iFqCki3MKmBq_ZX-03cW4KE6AsR_pUJCWML2ifBLtdU,2157
8
8
  omlish/defs.py,sha256=-4UuZoJUUNO_bZ6eSSdhR4CK4NKN2Wwr1FfUvfTF--8,4918
9
9
  omlish/dynamic.py,sha256=zy0oO70_Vlh5dW8Nwav_O9bhIzQ6L16UgSuKR6y43VU,6526
10
10
  omlish/libc.py,sha256=8K4c66YV1ziJerl5poAAYCmsV-VSsHkT3EHhPW04ufg,15639
11
- omlish/metadata.py,sha256=HvZ6ItMpEmnE-X2d5Q6J17sBiG_qOyWB8DJrS9RFZpY,3604
11
+ omlish/metadata.py,sha256=-noAyXT-7wV0SXul6wV1fPe7EYKxluuuYh1VmM39IPk,3593
12
12
  omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
13
13
  omlish/shlex.py,sha256=rlbgHWxjwpkCBRphOPqSIN_KD6qWJMLldNJUILulKT0,253
14
14
  omlish/sync.py,sha256=-2gVJZFl8hvp7jvrnX8GcZVOecqAym6AcyK1QtMR9Ic,2979
@@ -185,7 +185,7 @@ omlish/configs/formats.py,sha256=RJw4Rzp7vlTd5YyAvpAoruQnk45v8dGPtPWwqH7aYyE,530
185
185
  omlish/configs/nginx.py,sha256=XuX9yyb0_MwkJ8esKiMS9gFkqHUPza_uCprhnWykNy8,2051
186
186
  omlish/configs/shadow.py,sha256=-R5nbevC4pFgqDPYOCCIqNcusgXsMWlRIUOEG0HBoJg,2228
187
187
  omlish/configs/types.py,sha256=t5_32MVRSKxbxor1hl1wRGKYm75F6Atisd_RYsN5ELU,103
188
- omlish/configs/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
+ omlish/configs/processing/__init__.py,sha256=eUBm0L6oZuwwM4vEuYx0pcCNdSTXaF7luur7jQz1qoc,210
189
189
  omlish/configs/processing/all.py,sha256=L23FOGn24As3jcB3B11R7PcHWXbYjkItrNq5ZEylPjA,784
190
190
  omlish/configs/processing/flattening.py,sha256=1duZH5zbrGuoYqaJco5LN5qx6e76QP5pHbIyItkQsFY,5021
191
191
  omlish/configs/processing/inheritance.py,sha256=lFD8eWRE0cG0Z3-eCu7pMsP2skWhUNaoAtWi9fNfn8k,1218
@@ -219,7 +219,7 @@ omlish/dataclasses/api/classes/metadata.py,sha256=2YafXunxqbqnHIdp5gsiGLyH7cWg9F
219
219
  omlish/dataclasses/api/classes/params.py,sha256=qmHuGC4vB8o-7cnRXllVz_WNprx2fsyrNzPY2mYC5FM,1680
220
220
  omlish/dataclasses/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
221
  omlish/dataclasses/api/fields/building.py,sha256=YVAJZ2c318vK0YWz9VU8_MdjA5qNjqsI3N85K-bD0TI,3314
222
- omlish/dataclasses/api/fields/constructor.py,sha256=dRnVR5srD-8nNaMxdkWh0oFPINwOu-D7n4QItI6AWPs,1310
222
+ omlish/dataclasses/api/fields/constructor.py,sha256=T2GeczTz9uy2EOTDlU4VJoiXp-I6jvlxnYXChvQqHxk,1533
223
223
  omlish/dataclasses/api/fields/conversion.py,sha256=Pye4KOON78CBgDzwTqNb5fx8wE7uvlKcwVfQ2nhDzrM,5134
224
224
  omlish/dataclasses/api/fields/metadata.py,sha256=4hGRvG96qPNeipbnHlnbDNWqCANGCuE9BmjKUzTEzRQ,1689
225
225
  omlish/dataclasses/concerns/__init__.py,sha256=4Goga5wAOAbK6KcoHWC8jDC8M9ywgH7PfmXXxgCYCC8,208
@@ -277,7 +277,7 @@ omlish/diag/lsof.py,sha256=DnowqvKYah-WCuBHS3DAcZCvlsWJdM9kYNFq97UZDDA,9127
277
277
  omlish/diag/procfs.py,sha256=KaGTAA2Gj8eEEp7MjClRe4aimwzd-HDABThFzvq2cBQ,9684
278
278
  omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
279
279
  omlish/diag/ps.py,sha256=b7ai9O4mGZliNFvBu6PdQfMmct4qpcMTygEf1ISHBLQ,1666
280
- omlish/diag/pycharm.py,sha256=7-r_F-whXt8v-0dehxAX-MeMFPM3iZXX9IfeL0GfUtk,4643
280
+ omlish/diag/pycharm.py,sha256=Z2W-Viqw5xq08ZC4z36skpozfYw_qNNhWQx_GYr2D0k,4695
281
281
  omlish/diag/pydevd.py,sha256=UN55ZjkWLCVyHxE2CNRRYamuvSKfzWsn0D5oczRTXO4,7536
282
282
  omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
283
283
  omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -292,7 +292,7 @@ omlish/dispatch/_dispatch3.py,sha256=9Zjd7bINAC3keiaBdssc4v5dY0-8OI6XooV2DR9U7Z0
292
292
  omlish/dispatch/dispatch.py,sha256=KA5l49AiGLRjp4J7RDJW9RiDp9WUD1ewR1AOPEF8g38,3062
293
293
  omlish/dispatch/functions.py,sha256=cwNzGIg2ZIalEgn9I03cnJVbMTHjWloyDTaowlO3UPs,1524
294
294
  omlish/dispatch/impls.py,sha256=K_okKvpZml4NkTHJmTVyMQSrIaIJcqTEgkreGwukaOw,1895
295
- omlish/dispatch/methods.py,sha256=7jNKvwGNW9CJRTMDZyedmrWJN7Y9-ToI7YOAQ8VJu5Q,6786
295
+ omlish/dispatch/methods.py,sha256=K5w9Bb4jjCEpz3H95VMsv8ITXSO_7F6Jp5K5Fcd4gjQ,6955
296
296
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
297
297
  omlish/docker/all.py,sha256=xXRgJgLGPwAtr7bDMJ_Dp9jTfOwfGvohNhc6LsoELJc,514
298
298
  omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
@@ -816,10 +816,10 @@ omlish/text/glyphsplit.py,sha256=HI8TWDUaF_tJG5RnIdIjtUH_lYnjYZ7KZBANSxOXGZc,380
816
816
  omlish/text/indent.py,sha256=LOQgHskHMLVrRC6HLL9uIWay517dpvPEYQK0Igm-wm8,1341
817
817
  omlish/text/linecache.py,sha256=hRYlEhD63ZfA6_ZOTkQIcnON-3W56QMAhcG3vEJqj9M,1858
818
818
  omlish/text/mangle.py,sha256=d7j2_HPxoxF5VrLD1TShOSfnhBLH_-lQe_OH2kl0yHg,2790
819
- omlish/text/minja.py,sha256=e7XiY8IvF4Df-7hxhdC_qizHm9T4SIbFJR7enUg_Zmc,7252
819
+ omlish/text/minja.py,sha256=FH2xcZUby-yB1CQwCUGmpvHmE1nCmfNX1h0Nm6ix8ck,7515
820
820
  omlish/text/parts.py,sha256=Q9NvoyEGQKIWgiPD4D_Qc66cWAuyEKE033dT9m7c3Wk,6662
821
821
  omlish/text/random.py,sha256=8feS5JE_tSjYlMl-lp0j93kCfzBae9AM2cXlRLebXMA,199
822
- omlish/text/templating.py,sha256=UyYIs0wMigCDws0XfO3mYkJFH0-tO1IBaxWL7v2J3pw,2417
822
+ omlish/text/templating.py,sha256=azhKpvkDR2uby8k3AJ8Y6GpdKVQUb7Xt_cGbDz6dkTM,2454
823
823
  omlish/text/go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
824
824
  omlish/text/go/quoting.py,sha256=N9EYdnFdEX_A8fOviH-1w4jwV3XOQ7VU2WsoUNubYVY,9137
825
825
  omlish/typedvalues/__init__.py,sha256=c3IQmRneMmH6JRcafprqmBILWD89b-IyIll6MgahGCI,562
@@ -830,9 +830,9 @@ omlish/typedvalues/holder.py,sha256=4SwRezsmuDDEO5gENGx8kTm30pblF5UktoEAu02i-Gk,
830
830
  omlish/typedvalues/marshal.py,sha256=Rr-4DZ90BoD5Z9gT18QhZH2yMA3-gPJBK8GUrGkp8VA,4245
831
831
  omlish/typedvalues/reflect.py,sha256=y_7IY8_4cLVRvD3ug-_-cDaO5RtzC1rLVFzkeAPALf8,683
832
832
  omlish/typedvalues/values.py,sha256=Q_5IiQM3Vka4wGVd-scaslb4-oCMjFcIOksIrKE-JIM,1229
833
- omlish-0.0.0.dev287.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
834
- omlish-0.0.0.dev287.dist-info/METADATA,sha256=2lOtfXV-sPk2hcxlOFk_TruhqdiAsg_MTdrhMSxI0o0,4316
835
- omlish-0.0.0.dev287.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
836
- omlish-0.0.0.dev287.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
837
- omlish-0.0.0.dev287.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
838
- omlish-0.0.0.dev287.dist-info/RECORD,,
833
+ omlish-0.0.0.dev289.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
834
+ omlish-0.0.0.dev289.dist-info/METADATA,sha256=qBFa2LeCS8dTuxmfIIrmiUFQBzIm5bR_MqfY2GlweLc,4316
835
+ omlish-0.0.0.dev289.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
836
+ omlish-0.0.0.dev289.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
837
+ omlish-0.0.0.dev289.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
838
+ omlish-0.0.0.dev289.dist-info/RECORD,,