edge-containers-cli 5.2.0__tar.gz → 5.2.1__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 (109) hide show
  1. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/PKG-INFO +1 -1
  2. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/_version.py +3 -3
  3. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/argo_commands.py +8 -10
  4. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/utils.py +33 -2
  5. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/PKG-INFO +1 -1
  6. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.copier-answers.yml +0 -0
  7. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.devcontainer/devcontainer.json +0 -0
  8. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.dockerignore +0 -0
  9. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/CONTRIBUTING.md +0 -0
  10. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/ISSUE_TEMPLATE/issue.md +0 -0
  12. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
  13. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/pages/index.html +0 -0
  14. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/pages/make_switcher.py +0 -0
  15. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_container.yml +0 -0
  16. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_dist.yml +0 -0
  17. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_pypi.yml +0 -0
  18. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_release.yml +0 -0
  19. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_test.yml +0 -0
  20. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/_tox.yml +0 -0
  21. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.github/workflows/ci.yml +0 -0
  22. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.gitignore +0 -0
  23. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.gitleaks.toml +0 -0
  24. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.pre-commit-config.yaml +0 -0
  25. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.python-version +0 -0
  26. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.vscode/extensions.json +0 -0
  27. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.vscode/launch.json +0 -0
  28. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.vscode/settings.json +0 -0
  29. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/.vscode/tasks.json +0 -0
  30. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/Dockerfile +0 -0
  31. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/LICENSE +0 -0
  32. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/README.md +0 -0
  33. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/conf.py +0 -0
  34. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/explanations/decisions/0001-record-architecture-decisions.rst +0 -0
  35. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/explanations/decisions/0002-switched-to-pip-skeleton.rst +0 -0
  36. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/explanations/decisions.rst +0 -0
  37. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/build-docs.rst +0 -0
  38. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/contribute.rst +0 -0
  39. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/lint.rst +0 -0
  40. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/make-release.rst +0 -0
  41. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/pin-requirements.rst +0 -0
  42. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/run-tests.rst +0 -0
  43. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/static-analysis.rst +0 -0
  44. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/test-container.rst +0 -0
  45. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/how-to/update-tools.rst +0 -0
  46. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/index.rst +0 -0
  47. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/reference/standards.rst +0 -0
  48. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/developer/tutorials/dev-install.rst +0 -0
  49. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/genindex.rst +0 -0
  50. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/images/dls-favicon.ico +0 -0
  51. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/images/dls-logo.svg +0 -0
  52. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/images/ec-logs.png +0 -0
  53. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/images/ec-web.png +0 -0
  54. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/index.rst +0 -0
  55. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/user/explanations/docs-structure.rst +0 -0
  56. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/user/how-to/run-container.rst +0 -0
  57. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/user/index.rst +0 -0
  58. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/user/reference/api.rst +0 -0
  59. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/docs/user/tutorials/installation.rst +0 -0
  60. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/pyproject.toml +0 -0
  61. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/renovate.json +0 -0
  62. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/setup.cfg +0 -0
  63. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/__init__.py +0 -0
  64. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/__main__.py +0 -0
  65. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/autocomplete.py +0 -0
  66. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/backend.py +0 -0
  67. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cli.py +0 -0
  68. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/__init__.py +0 -0
  69. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/commands.py +0 -0
  70. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/demo_commands.py +0 -0
  71. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/helm.py +0 -0
  72. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/k8s_commands.py +0 -0
  73. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/monitor.py +0 -0
  74. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/cmds/monitor.tcss +0 -0
  75. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/definitions.py +0 -0
  76. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/git.py +0 -0
  77. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/globals.py +0 -0
  78. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/logging.py +0 -0
  79. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli/shell.py +0 -0
  80. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/SOURCES.txt +0 -0
  81. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/dependency_links.txt +0 -0
  82. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/entry_points.txt +0 -0
  83. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/requires.txt +0 -0
  84. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/src/edge_containers_cli.egg-info/top_level.txt +0 -0
  85. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/__init__.py +0 -0
  86. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/conftest.py +0 -0
  87. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/argocd.yaml +0 -0
  88. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-deployment/apps/values.yaml +0 -0
  89. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-01/Chart.yaml +0 -0
  90. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-01/config/ioc.db +0 -0
  91. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-01/config/ioc.yaml +0 -0
  92. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-01/templates/configmap.yaml +0 -0
  93. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-01/values.yaml +0 -0
  94. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-02/Chart.yaml +0 -0
  95. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/bl01t-ea-test-02/values.yaml +0 -0
  96. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/dls-aravis/Chart.yaml +0 -0
  97. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/dls-aravis/config/ioc.yaml +0 -0
  98. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/dls-aravis/templates/configmap.yaml +0 -0
  99. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/dls-aravis/values.yaml +0 -0
  100. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/bl01t-services/services/values.yaml +0 -0
  101. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/cli.yaml +0 -0
  102. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/k8s.yaml +0 -0
  103. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/data/yaml.yaml +0 -0
  104. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/test_argocd.py +0 -0
  105. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/test_cli.py +0 -0
  106. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/test_demo.py +0 -0
  107. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/test_k8s.py +0 -0
  108. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/tests/test_unit.py +0 -0
  109. {edge_containers_cli-5.2.0 → edge_containers_cli-5.2.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edge-containers-cli
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: CLI for deploying and managing epics containers IOCs and services
5
5
  Author-email: Giles Knap <giles.knap@gmail.com>
6
6
  License: Apache License
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '5.2.0'
22
- __version_tuple__ = version_tuple = (5, 2, 0)
21
+ __version__ = version = '5.2.1'
22
+ __version_tuple__ = version_tuple = (5, 2, 1)
23
23
 
24
- __commit_id__ = commit_id = 'g400995ffa'
24
+ __commit_id__ = commit_id = 'g51703ca8e'
@@ -203,13 +203,12 @@ class ArgoCommands(Commands):
203
203
  mani_resp = await shell.run_command(
204
204
  f"argocd app manifests {namespace}/{service_name} --source live",
205
205
  )
206
- for resource_manifest in mani_resp.split("---")[1:]:
207
- manifest = YAML(typ="safe").load(resource_manifest)
208
- if not manifest:
206
+ for manifest in YAML(typ="safe").load_all(mani_resp):
207
+ if not isinstance(manifest, dict):
209
208
  continue
210
- if manifest["kind"] not in ["StatefulSet", "Deployment"]:
209
+ if manifest.get("kind") not in ["StatefulSet", "Deployment"]:
211
210
  continue
212
- if manifest["metadata"]["name"] != service_name:
211
+ if manifest.get("metadata", {}).get("name") != service_name:
213
212
  continue
214
213
  return manifest
215
214
 
@@ -298,12 +297,11 @@ class ArgoCommands(Commands):
298
297
  mani_resp = await shell.run_command(
299
298
  f"argocd app manifests {namespace}/{name} --source live",
300
299
  )
301
- for resource_manifest in mani_resp.split("---")[1:]:
302
- manifest = YAML(typ="safe").load(resource_manifest)
303
- if not manifest:
300
+ for manifest in YAML(typ="safe").load_all(mani_resp):
301
+ if not isinstance(manifest, dict):
304
302
  continue
305
- kind = manifest["kind"]
306
- resource_name = manifest["metadata"]["name"]
303
+ kind = manifest.get("kind")
304
+ resource_name = manifest.get("metadata", {}).get("name")
307
305
  if kind in ["StatefulSet", "Deployment"] and resource_name == name:
308
306
  try:
309
307
  label = manifest["metadata"]["labels"]["description"]
@@ -5,6 +5,7 @@ utility functions
5
5
  import asyncio
6
6
  import contextlib
7
7
  import functools
8
+ import gc
8
9
  import json
9
10
  import os
10
11
  import shutil
@@ -234,15 +235,45 @@ def _run_async(coroutine: Coroutine):
234
235
  import concurrent.futures
235
236
 
236
237
  with concurrent.futures.ThreadPoolExecutor() as pool:
237
- future = pool.submit(asyncio.run, coroutine)
238
+ future = pool.submit(_run_on_new_loop, coroutine)
238
239
  ret = future.result() # blocks the worker thread, not the event loop thread
239
240
  except RuntimeError:
240
241
  # No running loop — safe to block here
241
- ret = asyncio.run(coroutine)
242
+ ret = _run_on_new_loop(coroutine)
242
243
 
243
244
  return ret
244
245
 
245
246
 
247
+ def _run_on_new_loop(coroutine: Coroutine):
248
+ """Run *coroutine* to completion on a fresh event loop, then tear the loop
249
+ down cleanly.
250
+
251
+ asyncio.Process / subprocess transports hold a reference cycle back to the
252
+ loop, so their __del__ only fires during a GC pass. If that pass happens
253
+ after the loop is closed (which is what asyncio.run() does on exit), the
254
+ finalizer schedules a callback on the closed loop and asyncio prints
255
+ "Event loop is closed" / "Loop ... that handles pid X is closed" spam.
256
+ Forcing gc.collect() while the loop is still open lets those finalizers
257
+ run against a live loop, so nothing fails.
258
+ """
259
+ loop = asyncio.new_event_loop()
260
+ try:
261
+ return loop.run_until_complete(coroutine)
262
+ finally:
263
+ try:
264
+ pending = asyncio.all_tasks(loop)
265
+ for task in pending:
266
+ task.cancel()
267
+ if pending:
268
+ loop.run_until_complete(
269
+ asyncio.gather(*pending, return_exceptions=True)
270
+ )
271
+ loop.run_until_complete(loop.shutdown_asyncgens())
272
+ gc.collect()
273
+ finally:
274
+ loop.close()
275
+
276
+
246
277
  def async_command(f):
247
278
  @functools.wraps(f)
248
279
  def wrapper(*args, **kwargs):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edge-containers-cli
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: CLI for deploying and managing epics containers IOCs and services
5
5
  Author-email: Giles Knap <giles.knap@gmail.com>
6
6
  License: Apache License