lockss-pybasic 0.2.0.dev1__py3-none-any.whl → 0.2.0.dev2__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.
- lockss/pybasic/__init__.py +1 -1
- lockss/pybasic/cliutil.py +14 -10
- {lockss_pybasic-0.2.0.dev1.dist-info → lockss_pybasic-0.2.0.dev2.dist-info}/METADATA +1 -1
- lockss_pybasic-0.2.0.dev2.dist-info/RECORD +9 -0
- lockss_pybasic-0.2.0.dev1.dist-info/RECORD +0 -9
- {lockss_pybasic-0.2.0.dev1.dist-info → lockss_pybasic-0.2.0.dev2.dist-info}/LICENSE +0 -0
- {lockss_pybasic-0.2.0.dev1.dist-info → lockss_pybasic-0.2.0.dev2.dist-info}/WHEEL +0 -0
lockss/pybasic/__init__.py
CHANGED
lockss/pybasic/cliutil.py
CHANGED
|
@@ -147,7 +147,7 @@ class BaseCli(Generic[BaseModelT]):
|
|
|
147
147
|
if callable(func):
|
|
148
148
|
func(base_model) # FIXME?
|
|
149
149
|
else:
|
|
150
|
-
self._parser.exit(1, f'internal error: no {func_name} callable for the {" ".join(sub for sub in subcommands)}')
|
|
150
|
+
self._parser.exit(1, f'internal error: no {func_name} callable for the {" ".join(sub for sub in subcommands)} command')
|
|
151
151
|
|
|
152
152
|
def _initialize_rich_argparse(self) -> None:
|
|
153
153
|
"""
|
|
@@ -179,7 +179,7 @@ class BaseCli(Generic[BaseModelT]):
|
|
|
179
179
|
})
|
|
180
180
|
|
|
181
181
|
|
|
182
|
-
def at_most_one_from_enum(model_cls, values: Dict[str, Any], enum_cls) -> Dict[str, Any]:
|
|
182
|
+
def at_most_one_from_enum(model_cls: type[BaseModel], values: Dict[str, Any], enum_cls) -> Dict[str, Any]:
|
|
183
183
|
"""
|
|
184
184
|
Among the fields of a Pydantic-Argparse model whose ``Field`` definition is
|
|
185
185
|
tagged with the ``enum`` keyword set to the given ``Enum`` type, ensures
|
|
@@ -195,7 +195,7 @@ def at_most_one_from_enum(model_cls, values: Dict[str, Any], enum_cls) -> Dict[s
|
|
|
195
195
|
enum_names = [field_name for field_name, model_field in model_cls.__fields__.items() if model_field.field_info.extra.get('enum') == enum_cls]
|
|
196
196
|
ret = [field_name for field_name in enum_names if values.get(field_name)]
|
|
197
197
|
if (length := len(ret)) > 1:
|
|
198
|
-
raise ValueError(f'at most one of {', '.join([option_name(enum_name) for enum_name in enum_names])} is allowed, got {length} ({', '.join([option_name(enum_name) for enum_name in ret])})')
|
|
198
|
+
raise ValueError(f'at most one of {', '.join([option_name(model_cls, enum_name) for enum_name in enum_names])} is allowed, got {length} ({', '.join([option_name(enum_name) for enum_name in ret])})')
|
|
199
199
|
return values
|
|
200
200
|
|
|
201
201
|
|
|
@@ -219,25 +219,29 @@ def get_from_enum(model_inst, enum_cls, default=None):
|
|
|
219
219
|
return default
|
|
220
220
|
|
|
221
221
|
|
|
222
|
-
def at_most_one(values: Dict[str, Any], *names: str):
|
|
222
|
+
def at_most_one(model_cls: type[BaseModel], values: Dict[str, Any], *names: str):
|
|
223
223
|
if (length := _matchy_length(values, *names)) > 1:
|
|
224
|
-
raise ValueError(f'at most one of {', '.join([option_name(name) for name in names])} is allowed, got {length}')
|
|
224
|
+
raise ValueError(f'at most one of {', '.join([option_name(model_cls, name) for name in names])} is allowed, got {length}')
|
|
225
225
|
return values
|
|
226
226
|
|
|
227
227
|
|
|
228
|
-
def exactly_one(values: Dict[str, Any], *names: str):
|
|
228
|
+
def exactly_one(model_cls: type[BaseModel], values: Dict[str, Any], *names: str):
|
|
229
229
|
if (length := _matchy_length(values, *names)) != 1:
|
|
230
|
-
raise ValueError(f'exactly one of {', '.join([option_name(name) for name in names])} is required, got {length}')
|
|
230
|
+
raise ValueError(f'exactly one of {', '.join([option_name(model_cls, name) for name in names])} is required, got {length}')
|
|
231
231
|
return values
|
|
232
232
|
|
|
233
233
|
|
|
234
|
-
def one_or_more(values: Dict[str, Any], *names: str):
|
|
234
|
+
def one_or_more(model_cls: type[BaseModel], values: Dict[str, Any], *names: str):
|
|
235
235
|
if _matchy_length(values, *names) == 0:
|
|
236
|
-
raise ValueError(f'one or more of {', '.join([option_name(name) for name in names])} is required')
|
|
236
|
+
raise ValueError(f'one or more of {', '.join([option_name(model_cls, name) for name in names])} is required')
|
|
237
237
|
return values
|
|
238
238
|
|
|
239
239
|
|
|
240
|
-
def option_name(name: str) -> str:
|
|
240
|
+
def option_name(model_cls: type[BaseModel], name: str) -> str:
|
|
241
|
+
if (info := model_cls.__fields__.get(name)) is None:
|
|
242
|
+
raise RuntimeError(f'invalid name: {name}')
|
|
243
|
+
if alias := info.alias:
|
|
244
|
+
name = alias
|
|
241
245
|
return f'{('-' if len(name) == 1 else '--')}{name.replace('_', '-')}'
|
|
242
246
|
|
|
243
247
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
lockss/pybasic/__init__.py,sha256=5Oqd-wtsasL0pAV0ZY1gPORFhc5DQCAVD4eJgG0J_z8,1678
|
|
2
|
+
lockss/pybasic/cliutil.py,sha256=oJ1j3y816i9Y6VlufP45I2h_k_bgCI51gehkPkuu_jQ,10842
|
|
3
|
+
lockss/pybasic/errorutil.py,sha256=XI84PScZ851_-gfoazivJ8ceieMYWaxQr7qih5ltga0,1951
|
|
4
|
+
lockss/pybasic/fileutil.py,sha256=BpdoPWL70xYTuhyQRBEurScRVnPQg0mX-XW8yyKPGjw,2958
|
|
5
|
+
lockss/pybasic/outpututil.py,sha256=JyXKXlkaCcCGvonUvmDGRdI6PxwN5t7DPVIk64S8-2g,2345
|
|
6
|
+
lockss_pybasic-0.2.0.dev2.dist-info/LICENSE,sha256=O9ONND4uDxY_jucI4jZDf2liAk05ScEJaYu-Al7EOdQ,1506
|
|
7
|
+
lockss_pybasic-0.2.0.dev2.dist-info/METADATA,sha256=PTqTPK5-cGs_NNTcyO6XnsFq4_GFoWeBsYMMvgZ-MdM,4247
|
|
8
|
+
lockss_pybasic-0.2.0.dev2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
9
|
+
lockss_pybasic-0.2.0.dev2.dist-info/RECORD,,
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
lockss/pybasic/__init__.py,sha256=eYuJo1k0n0klLe8HFPzmjJvcMcHS7FXQ9JdfQ4WaJVU,1678
|
|
2
|
-
lockss/pybasic/cliutil.py,sha256=gC-Iy2lZX_PNU0GhtSiyPYPokFFjzF9OkMSxGEoB8_c,10503
|
|
3
|
-
lockss/pybasic/errorutil.py,sha256=XI84PScZ851_-gfoazivJ8ceieMYWaxQr7qih5ltga0,1951
|
|
4
|
-
lockss/pybasic/fileutil.py,sha256=BpdoPWL70xYTuhyQRBEurScRVnPQg0mX-XW8yyKPGjw,2958
|
|
5
|
-
lockss/pybasic/outpututil.py,sha256=JyXKXlkaCcCGvonUvmDGRdI6PxwN5t7DPVIk64S8-2g,2345
|
|
6
|
-
lockss_pybasic-0.2.0.dev1.dist-info/LICENSE,sha256=O9ONND4uDxY_jucI4jZDf2liAk05ScEJaYu-Al7EOdQ,1506
|
|
7
|
-
lockss_pybasic-0.2.0.dev1.dist-info/METADATA,sha256=zowTdcLSf79LdOc2wFBKX2966D41kV02RYTZ8syhla4,4247
|
|
8
|
-
lockss_pybasic-0.2.0.dev1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
9
|
-
lockss_pybasic-0.2.0.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|