cli2 4.0.5__tar.gz → 4.0.7__tar.gz

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 (56) hide show
  1. {cli2-4.0.5/cli2.egg-info → cli2-4.0.7}/PKG-INFO +1 -1
  2. {cli2-4.0.5 → cli2-4.0.7}/cli2/cli.py +2 -0
  3. {cli2-4.0.5 → cli2-4.0.7}/cli2/client.py +16 -0
  4. {cli2-4.0.5 → cli2-4.0.7/cli2.egg-info}/PKG-INFO +1 -1
  5. {cli2-4.0.5 → cli2-4.0.7}/setup.py +1 -1
  6. {cli2-4.0.5 → cli2-4.0.7}/tests/test_client.py +10 -0
  7. {cli2-4.0.5 → cli2-4.0.7}/tests/test_group.py +14 -2
  8. {cli2-4.0.5 → cli2-4.0.7}/MANIFEST.in +0 -0
  9. {cli2-4.0.5 → cli2-4.0.7}/README.rst +0 -0
  10. {cli2-4.0.5 → cli2-4.0.7}/classifiers.txt +0 -0
  11. {cli2-4.0.5 → cli2-4.0.7}/cli2/__init__.py +0 -0
  12. {cli2-4.0.5 → cli2-4.0.7}/cli2/ansible/__init__.py +0 -0
  13. {cli2-4.0.5 → cli2-4.0.7}/cli2/ansible/action.py +0 -0
  14. {cli2-4.0.5 → cli2-4.0.7}/cli2/ansible/playbook.py +0 -0
  15. {cli2-4.0.5 → cli2-4.0.7}/cli2/ansible/pytest.py +0 -0
  16. {cli2-4.0.5 → cli2-4.0.7}/cli2/ansible/variables.py +0 -0
  17. {cli2-4.0.5 → cli2-4.0.7}/cli2/asyncio.py +0 -0
  18. {cli2-4.0.5 → cli2-4.0.7}/cli2/cli2.py +0 -0
  19. {cli2-4.0.5 → cli2-4.0.7}/cli2/colors.py +0 -0
  20. {cli2-4.0.5 → cli2-4.0.7}/cli2/configuration.py +0 -0
  21. {cli2-4.0.5 → cli2-4.0.7}/cli2/decorators.py +0 -0
  22. {cli2-4.0.5 → cli2-4.0.7}/cli2/display.py +0 -0
  23. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/__init__.py +0 -0
  24. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/client.py +0 -0
  25. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/conf.py +0 -0
  26. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/example.py +0 -0
  27. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/example_obj.py +0 -0
  28. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/nesting.py +0 -0
  29. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/obj.py +0 -0
  30. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/obj2.py +0 -0
  31. {cli2-4.0.5 → cli2-4.0.7}/cli2/examples/test.py +0 -0
  32. {cli2-4.0.5 → cli2-4.0.7}/cli2/lock.py +0 -0
  33. {cli2-4.0.5 → cli2-4.0.7}/cli2/log.py +0 -0
  34. {cli2-4.0.5 → cli2-4.0.7}/cli2/node.py +0 -0
  35. {cli2-4.0.5 → cli2-4.0.7}/cli2/sphinx.py +0 -0
  36. {cli2-4.0.5 → cli2-4.0.7}/cli2/table.py +0 -0
  37. {cli2-4.0.5 → cli2-4.0.7}/cli2/test.py +0 -0
  38. {cli2-4.0.5 → cli2-4.0.7}/cli2.egg-info/SOURCES.txt +0 -0
  39. {cli2-4.0.5 → cli2-4.0.7}/cli2.egg-info/dependency_links.txt +0 -0
  40. {cli2-4.0.5 → cli2-4.0.7}/cli2.egg-info/entry_points.txt +0 -0
  41. {cli2-4.0.5 → cli2-4.0.7}/cli2.egg-info/requires.txt +0 -0
  42. {cli2-4.0.5 → cli2-4.0.7}/cli2.egg-info/top_level.txt +0 -0
  43. {cli2-4.0.5 → cli2-4.0.7}/setup.cfg +0 -0
  44. {cli2-4.0.5 → cli2-4.0.7}/tests/test_ansible.py +0 -0
  45. {cli2-4.0.5 → cli2-4.0.7}/tests/test_ansible_variables.py +0 -0
  46. {cli2-4.0.5 → cli2-4.0.7}/tests/test_cli.py +0 -0
  47. {cli2-4.0.5 → cli2-4.0.7}/tests/test_command.py +0 -0
  48. {cli2-4.0.5 → cli2-4.0.7}/tests/test_configuration.py +0 -0
  49. {cli2-4.0.5 → cli2-4.0.7}/tests/test_decorators.py +0 -0
  50. {cli2-4.0.5 → cli2-4.0.7}/tests/test_display.py +0 -0
  51. {cli2-4.0.5 → cli2-4.0.7}/tests/test_entry_point.py +0 -0
  52. {cli2-4.0.5 → cli2-4.0.7}/tests/test_inject.py +0 -0
  53. {cli2-4.0.5 → cli2-4.0.7}/tests/test_lock.py +0 -0
  54. {cli2-4.0.5 → cli2-4.0.7}/tests/test_node.py +0 -0
  55. {cli2-4.0.5 → cli2-4.0.7}/tests/test_restful.py +0 -0
  56. {cli2-4.0.5 → cli2-4.0.7}/tests/test_table.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cli2
3
- Version: 4.0.5
3
+ Version: 4.0.7
4
4
  Summary: image:: https://yourlabs.io/oss/cli2/badges/master/pipeline.svg
5
5
  Home-page: https://yourlabs.io/oss/cli2
6
6
  Author: James Pic
@@ -308,6 +308,8 @@ class Group(EntryPoint, dict):
308
308
  for name in dir(obj):
309
309
  if name.startswith('_'):
310
310
  continue
311
+ if not callable(getattr(type(obj), name)):
312
+ continue
311
313
  self.load_method(obj, getattr(obj, name))
312
314
 
313
315
  def load_method(self, obj, method):
@@ -956,6 +956,8 @@ class ClientMetaclass(type):
956
956
  self=dict(factory=lambda: cls())
957
957
  ),
958
958
  )
959
+ if new_kwargs := getattr(cls, 'cli2', None):
960
+ cli_kwargs.update(new_kwargs)
959
961
  cli_kwargs.update(cls.__dict__.get('cli_kwargs', dict()))
960
962
  cls.cli = Group(**cli_kwargs)
961
963
  cls.cli.load(cls)
@@ -1204,6 +1206,20 @@ class Client(metaclass=ClientMetaclass):
1204
1206
 
1205
1207
  List of keys to mask in logging, ie.: ``['password', 'secret']``
1206
1208
 
1209
+ .. py:attribute:: cli
1210
+
1211
+ Generated :py:class:`~cli2.cli.Group` for this client.
1212
+
1213
+ .. py:attribute:: cli2
1214
+
1215
+ Dict of overrides for the generated :py:class:`~cli2.cli.Group`.
1216
+ Example:
1217
+
1218
+ .. code-block:: python
1219
+
1220
+ class YourClient(cli2.Client):
1221
+ cli2 = dict(cmdclass=YourCommandClass)
1222
+
1207
1223
  .. py:attribute:: debug
1208
1224
 
1209
1225
  Enforce full logging: quiet requests are logged, masking does not
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cli2
3
- Version: 4.0.5
3
+ Version: 4.0.7
4
4
  Summary: image:: https://yourlabs.io/oss/cli2/badges/master/pipeline.svg
5
5
  Home-page: https://yourlabs.io/oss/cli2
6
6
  Author: James Pic
@@ -3,7 +3,7 @@ from setuptools import setup
3
3
 
4
4
  setup(
5
5
  name='cli2',
6
- version='4.0.5',
6
+ version='4.0.7',
7
7
  setup_requires='setupmeta',
8
8
  install_requires=[
9
9
  'docstring_parser',
@@ -1135,3 +1135,13 @@ async def test_client_token_apply(client_class, httpx_mock):
1135
1135
  await client.client_reset()
1136
1136
  assert client.token == 2
1137
1137
  assert client.client.token == 2
1138
+
1139
+
1140
+ def test_client_kwargs(client_class):
1141
+ class TestCmd(cli2.Command):
1142
+ pass
1143
+
1144
+ class TestClient(client_class):
1145
+ cli2 = dict(cmdclass=TestCmd)
1146
+
1147
+ assert TestClient.cli.cmdclass == TestCmd
@@ -1,4 +1,5 @@
1
1
  import cli2
2
+ import functools
2
3
  import cli2.test
3
4
 
4
5
 
@@ -188,9 +189,12 @@ def test_overrides():
188
189
 
189
190
 
190
191
  def test_load():
191
- import cli2
192
+ class BarMetaclass(type):
193
+ @property
194
+ def fails3(self):
195
+ raise Exception('fails')
192
196
 
193
- class Bar:
197
+ class Bar(metaclass=BarMetaclass):
194
198
  @cli2.cmd
195
199
  def test(self):
196
200
  pass
@@ -212,6 +216,14 @@ def test_load():
212
216
  def exclude(self):
213
217
  pass
214
218
 
219
+ @property
220
+ def fails(self):
221
+ raise Exception('Loading should not eval properties')
222
+
223
+ @functools.cached_property
224
+ def fails2(self):
225
+ raise Exception('Loading should not eval properties')
226
+
215
227
  group = cli2.Group()
216
228
  group.load(Foo)
217
229
  assert list(group.keys()) == ['help', 'test', 'classmeth', 'test2']
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes