experimaestro 1.7.0rc0__tar.gz → 1.7.0rc1__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.

Potentially problematic release.


This version of experimaestro might be problematic. Click here for more details.

Files changed (152) hide show
  1. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/PKG-INFO +1 -1
  2. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/pyproject.toml +5 -2
  3. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launcherfinder/registry.py +12 -1
  4. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/LICENSE +0 -0
  5. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/README.md +0 -0
  6. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/__init__.py +0 -0
  7. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/__main__.py +0 -0
  8. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/annotations.py +0 -0
  9. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/checkers.py +0 -0
  10. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/cli/__init__.py +0 -0
  11. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/cli/filter.py +0 -0
  12. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/cli/jobs.py +0 -0
  13. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/click.py +0 -0
  14. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/commandline.py +0 -0
  15. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/compat.py +0 -0
  16. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/connectors/__init__.py +0 -0
  17. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/connectors/local.py +0 -0
  18. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/connectors/ssh.py +0 -0
  19. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/__init__.py +0 -0
  20. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/arguments.py +0 -0
  21. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/context.py +0 -0
  22. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/objects.py +0 -0
  23. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/objects.pyi +0 -0
  24. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/serialization.py +0 -0
  25. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/serializers.py +0 -0
  26. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/types.py +0 -0
  27. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/core/utils.py +0 -0
  28. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/exceptions.py +0 -0
  29. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/experiments/__init__.py +0 -0
  30. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/experiments/cli.py +0 -0
  31. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/experiments/configuration.py +0 -0
  32. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/generators.py +0 -0
  33. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/huggingface.py +0 -0
  34. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/ipc.py +0 -0
  35. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launcherfinder/__init__.py +0 -0
  36. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launcherfinder/base.py +0 -0
  37. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launcherfinder/parser.py +0 -0
  38. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launcherfinder/specs.py +0 -0
  39. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launchers/__init__.py +0 -0
  40. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launchers/direct.py +0 -0
  41. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launchers/oar.py +0 -0
  42. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launchers/slurm/__init__.py +0 -0
  43. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/launchers/slurm/base.py +0 -0
  44. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/locking.py +0 -0
  45. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mkdocs/__init__.py +0 -0
  46. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mkdocs/annotations.py +0 -0
  47. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mkdocs/base.py +0 -0
  48. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mkdocs/metaloader.py +0 -0
  49. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mkdocs/style.css +0 -0
  50. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/mypy.py +0 -0
  51. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/notifications.py +0 -0
  52. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/py.typed +0 -0
  53. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/rpyc.py +0 -0
  54. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/run.py +0 -0
  55. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/__init__.py +0 -0
  56. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/base.py +0 -0
  57. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/dependencies.py +0 -0
  58. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/dynamic_outputs.py +0 -0
  59. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/services.py +0 -0
  60. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scheduler/workspace.py +0 -0
  61. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/scriptbuilder.py +0 -0
  62. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/__init__.py +0 -0
  63. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/016b4a6cdced82ab3aa1.ttf +0 -0
  64. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/0c35d18bf06992036b69.woff2 +0 -0
  65. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/1815e00441357e01619e.ttf +0 -0
  66. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/219aa9140e099e6c72ed.woff2 +0 -0
  67. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/2463b90d9a316e4e5294.woff2 +0 -0
  68. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/2582b0e4bcf85eceead0.ttf +0 -0
  69. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/3a4004a46a653d4b2166.woff +0 -0
  70. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/3baa5b8f3469222b822d.woff +0 -0
  71. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/4d73cb90e394b34b7670.woff +0 -0
  72. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/4ef4218c522f1eb6b5b1.woff2 +0 -0
  73. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/50701fbb8177c2dde530.ttf +0 -0
  74. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/5d681e2edae8c60630db.woff +0 -0
  75. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/6f420cf17cc0d7676fad.woff2 +0 -0
  76. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/878f31251d960bd6266f.woff2 +0 -0
  77. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/89999bdf5d835c012025.woff2 +0 -0
  78. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/914997e1bdfc990d0897.ttf +0 -0
  79. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/b041b1fa4fe241b23445.woff2 +0 -0
  80. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/b6879d41b0852f01ed5b.woff2 +0 -0
  81. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/c210719e60948b211a12.woff2 +0 -0
  82. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/c380809fd3677d7d6903.woff2 +0 -0
  83. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/d75e3fd1eb12e9bd6655.ttf +0 -0
  84. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/f882956fd323fd322f31.woff +0 -0
  85. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/favicon.ico +0 -0
  86. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/index.css +0 -0
  87. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/index.css.map +0 -0
  88. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/index.html +0 -0
  89. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/index.js +0 -0
  90. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/index.js.map +0 -0
  91. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/login.html +0 -0
  92. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/server/data/manifest.json +0 -0
  93. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/settings.py +0 -0
  94. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/sphinx/__init__.py +0 -0
  95. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
  96. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/taskglobals.py +0 -0
  97. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/__init__.py +0 -0
  98. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/conftest.py +0 -0
  99. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
  100. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/connectors/test_local.py +0 -0
  101. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/connectors/utils.py +0 -0
  102. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/definitions_types.py +0 -0
  103. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/__init__.py +0 -0
  104. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/bin/sacct +0 -0
  105. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/bin/sbatch +0 -0
  106. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/bin/test.py +0 -0
  107. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/common.py +0 -0
  108. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
  109. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/config_slurm/launchers.py +0 -0
  110. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/test_local.py +0 -0
  111. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
  112. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/restart.py +0 -0
  113. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/restart_main.py +0 -0
  114. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
  115. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
  116. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/task_tokens.py +0 -0
  117. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/tasks/__init__.py +0 -0
  118. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/tasks/all.py +0 -0
  119. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/tasks/foreign.py +0 -0
  120. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_checkers.py +0 -0
  121. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_dependencies.py +0 -0
  122. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_findlauncher.py +0 -0
  123. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_forward.py +0 -0
  124. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_identifier.py +0 -0
  125. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_instance.py +0 -0
  126. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_objects.py +0 -0
  127. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_outputs.py +0 -0
  128. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_param.py +0 -0
  129. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_progress.py +0 -0
  130. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_serializers.py +0 -0
  131. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_snippets.py +0 -0
  132. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_ssh.py +0 -0
  133. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_tags.py +0 -0
  134. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_tasks.py +0 -0
  135. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_tokens.py +0 -0
  136. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_types.py +0 -0
  137. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/test_validation.py +0 -0
  138. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/token_reschedule.py +0 -0
  139. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tests/utils.py +0 -0
  140. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tokens.py +0 -0
  141. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tools/__init__.py +0 -0
  142. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tools/diff.py +0 -0
  143. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tools/documentation.py +0 -0
  144. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/tools/jobs.py +0 -0
  145. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/typingutils.py +0 -0
  146. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/__init__.py +0 -0
  147. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/asyncio.py +0 -0
  148. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/jobs.py +0 -0
  149. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/jupyter.py +0 -0
  150. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/resources.py +0 -0
  151. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/utils/settings.py +0 -0
  152. {experimaestro-1.7.0rc0 → experimaestro-1.7.0rc1}/src/experimaestro/xpmutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: experimaestro
3
- Version: 1.7.0rc0
3
+ Version: 1.7.0rc1
4
4
  Summary: "Experimaestro is a computer science experiment manager"
5
5
  License: GPL-3
6
6
  Keywords: experiment manager
@@ -20,7 +20,7 @@ include = [
20
20
  "src/experimaestro/mkdocs/style.css",
21
21
  { path="src/experimaestro/server/data/*", format=['sdist', 'wheel']}
22
22
  ]
23
- version = "1.7.0-rc0"
23
+ version = "1.7.0-rc1"
24
24
  repository = "https://github.com/experimaestro/experimaestro-python"
25
25
  documentation = "https://experimaestro-python.readthedocs.io/"
26
26
 
@@ -29,7 +29,10 @@ enable = false
29
29
  vcs = "git"
30
30
  style = "semver"
31
31
  dirty = true
32
- format-jinja = """{{ serialize_semver(base, ["rc" + revision|string]) }}"""
32
+ format-jinja = """{%- set pre = [] -%}{%- set metadata = [] -%}
33
+ {%- if revision is not none -%}{{ pre.append("rc" + revision|string) or "" }}{%- endif -%}
34
+ {%- if distance > 0 -%}{{ metadata.append(distance|string) or "" }}{%- endif -%}
35
+ {{ serialize_semver(base, pre, metadata)}}"""
33
36
  [build-system]
34
37
  requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"]
35
38
  build-backend = "poetry_dynamic_versioning.backend"
@@ -1,5 +1,6 @@
1
1
  # Configuration registers
2
2
 
3
+ from contextlib import contextmanager
3
4
  from typing import ClassVar, Dict, Optional, Set, Type, Union
4
5
 
5
6
  from pathlib import Path
@@ -36,6 +37,16 @@ def load_yaml(schema, path: Path):
36
37
  )
37
38
 
38
39
 
40
+ @contextmanager
41
+ def ensure_enter(fp):
42
+ """Behaves as a resource, whether it is one or not"""
43
+ if hasattr(fp, "__enter__"):
44
+ with fp as _fp:
45
+ yield _fp
46
+ else:
47
+ yield fp
48
+
49
+
39
50
  class LauncherRegistry:
40
51
  INSTANCES: ClassVar[Dict[Path, "LauncherRegistry"]] = {}
41
52
  CURRENT_CONFIG_DIR: ClassVar[Optional[Path]] = None
@@ -78,7 +89,7 @@ class LauncherRegistry:
78
89
 
79
90
  from importlib import util
80
91
 
81
- with launchers_py.__fspath__() as fp:
92
+ with ensure_enter(launchers_py.__fspath__()) as fp:
82
93
  spec = util.spec_from_file_location("xpm_launchers_conf", fp)
83
94
  module = util.module_from_spec(spec)
84
95
  spec.loader.exec_module(module)