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.
@@ -36,4 +36,4 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
36
  POSSIBILITY OF SUCH DAMAGE.
37
37
  '''.strip()
38
38
 
39
- __version__ = '0.2.0-dev1'
39
+ __version__ = '0.2.0-dev2'
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lockss-pybasic
3
- Version: 0.2.0.dev1
3
+ Version: 0.2.0.dev2
4
4
  Summary: Basic Python utilities
5
5
  License: BSD-3-Clause
6
6
  Author: Thib Guicherd-Callin
@@ -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,,