hutch-python 1.23.1__tar.gz → 1.24.0__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 (152) hide show
  1. {hutch_python-1.23.1 → hutch_python-1.24.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -2
  2. hutch_python-1.24.0/.github/dependabot.yml +11 -0
  3. {hutch_python-1.23.1 → hutch_python-1.24.0}/.github/workflows/standard.yml +1 -1
  4. {hutch_python-1.23.1 → hutch_python-1.24.0}/.gitignore +3 -0
  5. {hutch_python-1.23.1 → hutch_python-1.24.0}/PKG-INFO +2 -2
  6. hutch_python-1.24.0/docs/source/releases.rst +4 -0
  7. hutch_python-1.24.0/hutch_python/_version.py +24 -0
  8. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cam_load.py +7 -2
  9. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cli.py +13 -2
  10. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/env_version.py +3 -4
  11. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_cli.py +2 -1
  12. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/PKG-INFO +2 -2
  13. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/SOURCES.txt +3 -5
  14. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/requires.txt +1 -1
  15. hutch_python-1.24.0/hutch_python.egg-info/scm_file_list.json +138 -0
  16. hutch_python-1.24.0/hutch_python.egg-info/scm_version.json +8 -0
  17. {hutch_python-1.23.1 → hutch_python-1.24.0}/requirements.txt +1 -1
  18. hutch_python-1.23.1/.github/ISSUE_TEMPLATE.md +0 -26
  19. hutch_python-1.23.1/docs/pre-release-notes.sh +0 -37
  20. hutch_python-1.23.1/docs/release_notes.py +0 -114
  21. hutch_python-1.23.1/docs/source/releases.rst +0 -801
  22. hutch_python-1.23.1/docs/source/upcoming_release_notes/template-full.rst +0 -36
  23. hutch_python-1.23.1/docs/source/upcoming_release_notes/template-short.rst +0 -22
  24. hutch_python-1.23.1/hutch_python/_version.py +0 -21
  25. {hutch_python-1.23.1 → hutch_python-1.24.0}/.coveragerc +0 -0
  26. {hutch_python-1.23.1 → hutch_python-1.24.0}/.flake8 +0 -0
  27. {hutch_python-1.23.1 → hutch_python-1.24.0}/.git_archival.txt +0 -0
  28. {hutch_python-1.23.1 → hutch_python-1.24.0}/.gitattributes +0 -0
  29. {hutch_python-1.23.1 → hutch_python-1.24.0}/.github/CODEOWNERS +0 -0
  30. {hutch_python-1.23.1 → hutch_python-1.24.0}/.landscape.yml +0 -0
  31. {hutch_python-1.23.1 → hutch_python-1.24.0}/.pre-commit-config.yaml +0 -0
  32. {hutch_python-1.23.1 → hutch_python-1.24.0}/AUTHORS.rst +0 -0
  33. {hutch_python-1.23.1 → hutch_python-1.24.0}/CONTRIBUTING.rst +0 -0
  34. {hutch_python-1.23.1 → hutch_python-1.24.0}/LICENSE +0 -0
  35. {hutch_python-1.23.1 → hutch_python-1.24.0}/MANIFEST.in +0 -0
  36. {hutch_python-1.23.1 → hutch_python-1.24.0}/README.rst +0 -0
  37. {hutch_python-1.23.1 → hutch_python-1.24.0}/bin/hutch-python +0 -0
  38. {hutch_python-1.23.1 → hutch_python-1.24.0}/conda-recipe/meta.yaml +0 -0
  39. {hutch_python-1.23.1 → hutch_python-1.24.0}/dev-requirements.txt +0 -0
  40. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/Makefile +0 -0
  41. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/hutch_python.ipynb +0 -0
  42. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/beamline.rst +0 -0
  43. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/bug.rst +0 -0
  44. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/cache.rst +0 -0
  45. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/cli.rst +0 -0
  46. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/conf.py +0 -0
  47. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/daq.rst +0 -0
  48. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/database.rst +0 -0
  49. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/debug.rst +0 -0
  50. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/environment.rst +0 -0
  51. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/experiment.rst +0 -0
  52. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/hutch_setup.rst +0 -0
  53. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/index.rst +0 -0
  54. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/ipython_log.rst +0 -0
  55. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/load_conf.rst +0 -0
  56. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/load_parts.rst +0 -0
  57. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/log_setup.rst +0 -0
  58. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/namespace.rst +0 -0
  59. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/object_configuration.rst +0 -0
  60. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/other_modules.rst +0 -0
  61. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/presets.rst +0 -0
  62. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/report.rst +0 -0
  63. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/start.rst +0 -0
  64. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/startup.rst +0 -0
  65. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/tips.rst +0 -0
  66. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/tutorial.ipynb +0 -0
  67. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/user_utils.rst +0 -0
  68. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/utils.rst +0 -0
  69. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs/source/yaml_files.rst +0 -0
  70. {hutch_python-1.23.1 → hutch_python-1.24.0}/docs-requirements.txt +0 -0
  71. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/__init__.py +0 -0
  72. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/__main__.py +0 -0
  73. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/bug.py +0 -0
  74. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cache.py +0 -0
  75. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/calc_defaults.py +0 -0
  76. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/constants.py +0 -0
  77. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/cookiecutter.json +0 -0
  78. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/.gitignore +0 -0
  79. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/README.md +0 -0
  80. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/conf.yml +0 -0
  81. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/experiments/__init__.py +0 -0
  82. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/set-dev +0 -0
  83. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}/__init__.py +0 -0
  84. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}/beamline.py +0 -0
  85. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}env +0 -0
  86. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}python +0 -0
  87. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/debug.py +0 -0
  88. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/epics_arch.py +0 -0
  89. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/exp_load.py +0 -0
  90. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/happi.py +0 -0
  91. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/ipython_log.py +0 -0
  92. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/ipython_session_timer.py +0 -0
  93. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/lcls.py +0 -0
  94. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/load_conf.py +0 -0
  95. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/log_setup.py +0 -0
  96. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/logging.yml +0 -0
  97. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/mpl_config.py +0 -0
  98. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/namespace.py +0 -0
  99. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/obj_config.py +0 -0
  100. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/ophyd_settings.py +0 -0
  101. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/options.py +0 -0
  102. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/plan_defaults.py +0 -0
  103. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/plan_wrappers.py +0 -0
  104. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/print_hint_banner.py +0 -0
  105. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/pt_app_config.py +0 -0
  106. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/qs_load.py +0 -0
  107. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/sim.py +0 -0
  108. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/startup_script.py +0 -0
  109. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/templates/issue.template +0 -0
  110. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/__init__.py +0 -0
  111. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/bad_script.py +0 -0
  112. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/camviewer.cfg +0 -0
  113. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/conf.yaml +0 -0
  114. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/conftest.py +0 -0
  115. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/envs/pcds-1.0.0 +0 -0
  116. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/envs/pcds-2.0.0 +0 -0
  117. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/envs/z-env +0 -0
  118. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/experiments/sample_expname.py +0 -0
  119. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/experiments/x010.py +0 -0
  120. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/experiments/x011.py +0 -0
  121. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/happi_db.json +0 -0
  122. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/sample_module_1.py +0 -0
  123. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/sample_module_2.py +0 -0
  124. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/script.py +0 -0
  125. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_bug.py +0 -0
  126. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_cache.py +0 -0
  127. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_cam_load.py +0 -0
  128. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_epics_arch.py +0 -0
  129. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_experiment.py +0 -0
  130. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_happi.py +0 -0
  131. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_ipython_log.py +0 -0
  132. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_ipython_session_timer.py +0 -0
  133. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_load_conf.py +0 -0
  134. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_log_setup.py +0 -0
  135. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_namespace.py +0 -0
  136. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_obj_config.py +0 -0
  137. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_plan_wrappers.py +0 -0
  138. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_questionnaire.py +0 -0
  139. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_tstpython.py +0 -0
  140. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_user_load.py +0 -0
  141. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/test_utils.py +0 -0
  142. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/tst/__init__.py +0 -0
  143. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/tst/beamline.py +0 -0
  144. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/tests/tstpython +0 -0
  145. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/user_load.py +0 -0
  146. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/utils.py +0 -0
  147. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python/version.py +0 -0
  148. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/dependency_links.txt +0 -0
  149. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/entry_points.txt +0 -0
  150. {hutch_python-1.23.1 → hutch_python-1.24.0}/hutch_python.egg-info/top_level.txt +0 -0
  151. {hutch_python-1.23.1 → hutch_python-1.24.0}/pyproject.toml +0 -0
  152. {hutch_python-1.23.1 → hutch_python-1.24.0}/setup.cfg +0 -0
@@ -25,5 +25,3 @@
25
25
  - [ ] New/changed functions and methods are covered in the test suite where possible
26
26
  - [ ] Test suite passes locally
27
27
  - [ ] Test suite passes on GitHub Actions
28
- - [ ] Ran ``docs/pre-release-notes.sh`` and created a pre-release documentation page
29
- - [ ] Pre-release docs include context, functional descriptions, and contributors as appropriate
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "monthly"
8
+ cooldown:
9
+ default-days: 7
10
+ exclude:
11
+ - pcdshub/pcds-ci-helpers/*
@@ -9,7 +9,7 @@ on:
9
9
 
10
10
  jobs:
11
11
  standard:
12
- uses: pcdshub/pcds-ci-helpers/.github/workflows/python-standard.yml@master
12
+ uses: pcdshub/pcds-ci-helpers/.github/workflows/python-standard.yml@52a413e9d77c09f9e7617c3a75fc19a7d6cf4e11
13
13
  secrets: inherit
14
14
  with:
15
15
  # The workflow needs to know the package name. This can be determined
@@ -121,3 +121,6 @@ hutch_python/tests/tst/db.txt
121
121
 
122
122
  # unit test artifacts
123
123
  *.sqlite
124
+
125
+ # setuptools-scm
126
+ _version.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hutch-python
3
- Version: 1.23.1
3
+ Version: 1.24.0
4
4
  Summary: Launcher and Config Reader for LCLS Interactive IPython Sessions
5
5
  Author: SLAC National Accelerator Laboratory
6
6
  License: Copyright (c) 2023, The Board of Trustees of the Leland Stanford Junior
@@ -55,7 +55,7 @@ Requires-Dist: bluesky>=1.8.0
55
55
  Requires-Dist: coloredlogs>=15.0.0
56
56
  Requires-Dist: cookiecutter>=1.7.0
57
57
  Requires-Dist: happi>=1.9.0
58
- Requires-Dist: ipython<9.0.0
58
+ Requires-Dist: ipython>=9.0.0
59
59
  Requires-Dist: jinja2>=2.11.0
60
60
  Requires-Dist: lightpath>=1.0.1
61
61
  Requires-Dist: matplotlib>=3.4.0
@@ -0,0 +1,4 @@
1
+ Release History
2
+ ###############
3
+
4
+ See the `releases page on GitHub <https://github.com/pcdshub/hutch-python/releases>`_
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '1.24.0'
22
+ __version_tuple__ = version_tuple = (1, 24, 0)
23
+
24
+ __commit_id__ = commit_id = 'g39d8f6346'
@@ -123,7 +123,11 @@ def load_cams(info):
123
123
  """
124
124
  # Any cam that needs the event loop has to have one set in the thread
125
125
  global main_thread_loop
126
- main_thread_loop = asyncio.get_event_loop()
126
+ try:
127
+ main_thread_loop = asyncio.get_event_loop()
128
+ except RuntimeError:
129
+ # No loop, no worries
130
+ main_thread_loop = None
127
131
 
128
132
  objs = {}
129
133
  logger.debug(info)
@@ -150,7 +154,8 @@ def build_and_log(info_part):
150
154
  The loaded detector, or None.
151
155
  """
152
156
  # We sync with the main thread's loop so that they work as expected later
153
- asyncio.set_event_loop(main_thread_loop)
157
+ if main_thread_loop is not None:
158
+ asyncio.set_event_loop(main_thread_loop)
154
159
  try:
155
160
  obj = build_cam(*info_part)
156
161
  logger.success('Loaded %s', obj.name)
@@ -85,6 +85,14 @@ def configure_tab_completion(ipy_config):
85
85
  """
86
86
  Disable Jedi and tweak IPython tab completion.
87
87
 
88
+ At some IPython version this became no longer needed due to fixed performance issues
89
+ stemming from no longer by default executing properties.
90
+
91
+ At some IPython version this became counterproductive because the non-jedi
92
+ completer no longer works properly for us.
93
+
94
+ This change happend somewhere between 8.4.0 and 8.36.0
95
+
88
96
  Parameters
89
97
  ----------
90
98
  ipy_config : traitlets.config.Config
@@ -135,8 +143,11 @@ def configure_ipython_session(args: HutchPythonArgs):
135
143
 
136
144
  # Disable reformatting input with black
137
145
  ipy_config.TerminalInteractiveShell.autoformatter = None
138
- # Set up tab completion modifications
139
- configure_tab_completion(ipy_config)
146
+
147
+ if IPython.version_info[:3] <= (8, 4, 0):
148
+ # Set up tab completion modifications
149
+ # The last IPython version we deployed that needed this is 8.4.0
150
+ configure_tab_completion(ipy_config)
140
151
 
141
152
  # disable default banner
142
153
  ipy_config.TerminalIPythonApp.display_banner = False
@@ -3,13 +3,12 @@ Utilities for getting relevant environment information.
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
+ import importlib.metadata
6
7
  import logging
7
8
  import os
8
9
  import os.path
9
10
  import pkgutil
10
11
 
11
- import pkg_resources
12
-
13
12
  logger = logging.getLogger(__name__)
14
13
 
15
14
  _dev_ignore_list = ['ami', 'pdsapp']
@@ -42,10 +41,10 @@ def log_env() -> None:
42
41
  def dump_env() -> list[str]:
43
42
  """
44
43
  Get all packages and versions from the current environment.
45
- conda list is slow, use pkg_resources instead
44
+ conda list is slow, use importlib.metadata.distributions instead
46
45
  this might miss dev overrides
47
46
  """
48
- return sorted(str(pkg) for pkg in pkg_resources.working_set)
47
+ return sorted(str(dist.name) for dist in importlib.metadata.distributions())
49
48
 
50
49
 
51
50
  def get_conda_env_name() -> str:
@@ -116,7 +116,7 @@ def test_hist_file_arg():
116
116
 
117
117
 
118
118
  @pytest.mark.timeout(30)
119
- @pytest.mark.parametrize("filepath,", (
119
+ @pytest.mark.parametrize("filepath", (
120
120
  (CFG_PATH.parent / "aesefiudh" / "history.sqlite").resolve(),
121
121
  ":memory:",
122
122
  ))
@@ -156,6 +156,7 @@ def test_run_script():
156
156
  main()
157
157
 
158
158
 
159
+ @pytest.mark.skipif(IPython.version_info[:3] > (8, 4, 0), reason="IPython completer API too unstable to test against")
159
160
  def test_ipython_tab_completion():
160
161
  class MyTest:
161
162
  THIS_SHOULD_NOT_BE_THERE = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hutch-python
3
- Version: 1.23.1
3
+ Version: 1.24.0
4
4
  Summary: Launcher and Config Reader for LCLS Interactive IPython Sessions
5
5
  Author: SLAC National Accelerator Laboratory
6
6
  License: Copyright (c) 2023, The Board of Trustees of the Leland Stanford Junior
@@ -55,7 +55,7 @@ Requires-Dist: bluesky>=1.8.0
55
55
  Requires-Dist: coloredlogs>=15.0.0
56
56
  Requires-Dist: cookiecutter>=1.7.0
57
57
  Requires-Dist: happi>=1.9.0
58
- Requires-Dist: ipython<9.0.0
58
+ Requires-Dist: ipython>=9.0.0
59
59
  Requires-Dist: jinja2>=2.11.0
60
60
  Requires-Dist: lightpath>=1.0.1
61
61
  Requires-Dist: matplotlib>=3.4.0
@@ -15,15 +15,13 @@ docs-requirements.txt
15
15
  pyproject.toml
16
16
  requirements.txt
17
17
  .github/CODEOWNERS
18
- .github/ISSUE_TEMPLATE.md
19
18
  .github/PULL_REQUEST_TEMPLATE.md
19
+ .github/dependabot.yml
20
20
  .github/workflows/standard.yml
21
21
  bin/hutch-python
22
22
  conda-recipe/meta.yaml
23
23
  docs/Makefile
24
24
  docs/hutch_python.ipynb
25
- docs/pre-release-notes.sh
26
- docs/release_notes.py
27
25
  docs/source/beamline.rst
28
26
  docs/source/bug.rst
29
27
  docs/source/cache.rst
@@ -53,8 +51,6 @@ docs/source/tutorial.ipynb
53
51
  docs/source/user_utils.rst
54
52
  docs/source/utils.rst
55
53
  docs/source/yaml_files.rst
56
- docs/source/upcoming_release_notes/template-full.rst
57
- docs/source/upcoming_release_notes/template-short.rst
58
54
  hutch_python/__init__.py
59
55
  hutch_python/__main__.py
60
56
  hutch_python/_version.py
@@ -95,6 +91,8 @@ hutch_python.egg-info/SOURCES.txt
95
91
  hutch_python.egg-info/dependency_links.txt
96
92
  hutch_python.egg-info/entry_points.txt
97
93
  hutch_python.egg-info/requires.txt
94
+ hutch_python.egg-info/scm_file_list.json
95
+ hutch_python.egg-info/scm_version.json
98
96
  hutch_python.egg-info/top_level.txt
99
97
  hutch_python/cookiecutter/cookiecutter.json
100
98
  hutch_python/cookiecutter/{{ cookiecutter.hutch }}/.gitignore
@@ -3,7 +3,7 @@ bluesky>=1.8.0
3
3
  coloredlogs>=15.0.0
4
4
  cookiecutter>=1.7.0
5
5
  happi>=1.9.0
6
- ipython<9.0.0
6
+ ipython>=9.0.0
7
7
  jinja2>=2.11.0
8
8
  lightpath>=1.0.1
9
9
  matplotlib>=3.4.0
@@ -0,0 +1,138 @@
1
+ {
2
+ "files": [
3
+ ".coveragerc",
4
+ ".flake8",
5
+ ".git_archival.txt",
6
+ ".gitattributes",
7
+ ".github/CODEOWNERS",
8
+ ".github/PULL_REQUEST_TEMPLATE.md",
9
+ ".github/dependabot.yml",
10
+ ".github/workflows/standard.yml",
11
+ ".gitignore",
12
+ ".landscape.yml",
13
+ ".pre-commit-config.yaml",
14
+ "AUTHORS.rst",
15
+ "CONTRIBUTING.rst",
16
+ "LICENSE",
17
+ "MANIFEST.in",
18
+ "README.rst",
19
+ "bin/hutch-python",
20
+ "conda-recipe/meta.yaml",
21
+ "dev-requirements.txt",
22
+ "docs-requirements.txt",
23
+ "docs/Makefile",
24
+ "docs/hutch_python.ipynb",
25
+ "docs/source/beamline.rst",
26
+ "docs/source/bug.rst",
27
+ "docs/source/cache.rst",
28
+ "docs/source/cli.rst",
29
+ "docs/source/conf.py",
30
+ "docs/source/daq.rst",
31
+ "docs/source/database.rst",
32
+ "docs/source/debug.rst",
33
+ "docs/source/environment.rst",
34
+ "docs/source/experiment.rst",
35
+ "docs/source/hutch_setup.rst",
36
+ "docs/source/index.rst",
37
+ "docs/source/ipython_log.rst",
38
+ "docs/source/load_conf.rst",
39
+ "docs/source/load_parts.rst",
40
+ "docs/source/log_setup.rst",
41
+ "docs/source/namespace.rst",
42
+ "docs/source/object_configuration.rst",
43
+ "docs/source/other_modules.rst",
44
+ "docs/source/presets.rst",
45
+ "docs/source/releases.rst",
46
+ "docs/source/report.rst",
47
+ "docs/source/start.rst",
48
+ "docs/source/startup.rst",
49
+ "docs/source/tips.rst",
50
+ "docs/source/tutorial.ipynb",
51
+ "docs/source/user_utils.rst",
52
+ "docs/source/utils.rst",
53
+ "docs/source/yaml_files.rst",
54
+ "hutch_python/__init__.py",
55
+ "hutch_python/__main__.py",
56
+ "hutch_python/bug.py",
57
+ "hutch_python/cache.py",
58
+ "hutch_python/calc_defaults.py",
59
+ "hutch_python/cam_load.py",
60
+ "hutch_python/cli.py",
61
+ "hutch_python/constants.py",
62
+ "hutch_python/cookiecutter/cookiecutter.json",
63
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/.gitignore",
64
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/README.md",
65
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/conf.yml",
66
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/experiments/__init__.py",
67
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/set-dev",
68
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}/__init__.py",
69
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}/beamline.py",
70
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}env",
71
+ "hutch_python/cookiecutter/{{ cookiecutter.hutch }}/{{ cookiecutter.hutch }}python",
72
+ "hutch_python/debug.py",
73
+ "hutch_python/env_version.py",
74
+ "hutch_python/epics_arch.py",
75
+ "hutch_python/exp_load.py",
76
+ "hutch_python/happi.py",
77
+ "hutch_python/ipython_log.py",
78
+ "hutch_python/ipython_session_timer.py",
79
+ "hutch_python/lcls.py",
80
+ "hutch_python/load_conf.py",
81
+ "hutch_python/log_setup.py",
82
+ "hutch_python/logging.yml",
83
+ "hutch_python/mpl_config.py",
84
+ "hutch_python/namespace.py",
85
+ "hutch_python/obj_config.py",
86
+ "hutch_python/ophyd_settings.py",
87
+ "hutch_python/options.py",
88
+ "hutch_python/plan_defaults.py",
89
+ "hutch_python/plan_wrappers.py",
90
+ "hutch_python/print_hint_banner.py",
91
+ "hutch_python/pt_app_config.py",
92
+ "hutch_python/qs_load.py",
93
+ "hutch_python/sim.py",
94
+ "hutch_python/startup_script.py",
95
+ "hutch_python/templates/issue.template",
96
+ "hutch_python/tests/__init__.py",
97
+ "hutch_python/tests/bad_script.py",
98
+ "hutch_python/tests/camviewer.cfg",
99
+ "hutch_python/tests/conf.yaml",
100
+ "hutch_python/tests/conftest.py",
101
+ "hutch_python/tests/envs/pcds-1.0.0",
102
+ "hutch_python/tests/envs/pcds-2.0.0",
103
+ "hutch_python/tests/envs/z-env",
104
+ "hutch_python/tests/experiments/sample_expname.py",
105
+ "hutch_python/tests/experiments/x010.py",
106
+ "hutch_python/tests/experiments/x011.py",
107
+ "hutch_python/tests/happi_db.json",
108
+ "hutch_python/tests/sample_module_1.py",
109
+ "hutch_python/tests/sample_module_2.py",
110
+ "hutch_python/tests/script.py",
111
+ "hutch_python/tests/test_bug.py",
112
+ "hutch_python/tests/test_cache.py",
113
+ "hutch_python/tests/test_cam_load.py",
114
+ "hutch_python/tests/test_cli.py",
115
+ "hutch_python/tests/test_epics_arch.py",
116
+ "hutch_python/tests/test_experiment.py",
117
+ "hutch_python/tests/test_happi.py",
118
+ "hutch_python/tests/test_ipython_log.py",
119
+ "hutch_python/tests/test_ipython_session_timer.py",
120
+ "hutch_python/tests/test_load_conf.py",
121
+ "hutch_python/tests/test_log_setup.py",
122
+ "hutch_python/tests/test_namespace.py",
123
+ "hutch_python/tests/test_obj_config.py",
124
+ "hutch_python/tests/test_plan_wrappers.py",
125
+ "hutch_python/tests/test_questionnaire.py",
126
+ "hutch_python/tests/test_tstpython.py",
127
+ "hutch_python/tests/test_user_load.py",
128
+ "hutch_python/tests/test_utils.py",
129
+ "hutch_python/tests/tst/__init__.py",
130
+ "hutch_python/tests/tst/beamline.py",
131
+ "hutch_python/tests/tstpython",
132
+ "hutch_python/user_load.py",
133
+ "hutch_python/utils.py",
134
+ "hutch_python/version.py",
135
+ "pyproject.toml",
136
+ "requirements.txt"
137
+ ]
138
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "1.24.0",
3
+ "distance": 0,
4
+ "node": "g39d8f63469fd9c32ec6aba2e672a41d2061333ff",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-22"
8
+ }
@@ -3,7 +3,7 @@ bluesky>=1.8.0
3
3
  coloredlogs>=15.0.0
4
4
  cookiecutter>=1.7.0
5
5
  happi>=1.9.0
6
- ipython<9.0.0
6
+ ipython>=9.0.0
7
7
  jinja2>=2.11.0
8
8
  lightpath>=1.0.1
9
9
  matplotlib>=3.4.0
@@ -1,26 +0,0 @@
1
- <!--- Provide a general summary of the issue in the Title above -->
2
- ## Expected Behavior
3
- <!--- If you're describing a bug, tell us what should happen -->
4
- <!--- If you're suggesting a change/improvement, tell us how it should work -->
5
-
6
- ## Current Behavior
7
- <!--- If describing a bug, tell us what happens instead of the expected behavior -->
8
- <!--- If suggesting a change/improvement, explain the difference from current behavior -->
9
-
10
- ## Possible Solution
11
- <!--- Not obligatory, but suggest a fix/reason for the bug, -->
12
- <!--- or ideas how to implement the addition or change -->
13
-
14
- ## Steps to Reproduce (for bugs)
15
- <!--- Provide a link to a live example, or an unambiguous set of steps to -->
16
- <!--- reproduce this bug. Include code to reproduce, if relevant -->
17
- 1.
18
- 2.
19
- 3.
20
-
21
- ## Context
22
- <!--- How has this issue affected you? What are you trying to accomplish? -->
23
- <!--- Providing context helps us come up with a solution that is most useful in the real world -->
24
-
25
- ## Your Environment
26
- <!--- Include as many relevant details about the environment you experienced the bug in -->
@@ -1,37 +0,0 @@
1
- #!/bin/bash
2
-
3
- ISSUE=$1
4
- shift
5
- DESCRIPTION=$*
6
-
7
- if [[ -z "$ISSUE" || -z "$DESCRIPTION" ]]; then
8
- echo "Usage: $0 (ISSUE NUMBER) (DESCRIPTION)"
9
- exit 1
10
- fi
11
-
12
- re_issue_number='^[1-9][0-9]*$'
13
-
14
- if ! [[ "$ISSUE" =~ $re_issue_number ]]; then
15
- echo "Error: Issue number is not a number: $ISSUE"
16
- echo
17
- echo "This should preferably be the issue number that this pull request solves."
18
- echo "We may also accept the Pull Request number in place of the issue."
19
- exit 1
20
- fi
21
-
22
- echo "Issue: $ISSUE"
23
- echo "Description: $DESCRIPTION"
24
-
25
- FILENAME=source/upcoming_release_notes/${ISSUE}-${DESCRIPTION// /_}.rst
26
-
27
- pushd "$(dirname "$0")" || exit 1
28
-
29
- sed -e "s/IssueNumber Title/${ISSUE} ${DESCRIPTION}/" \
30
- "source/upcoming_release_notes/template-short.rst" > "${FILENAME}"
31
-
32
- if ${EDITOR} "${FILENAME}"; then
33
- echo "Adding ${FILENAME} to the git repository..."
34
- git add "${FILENAME}"
35
- fi
36
-
37
- popd || exit 0
@@ -1,114 +0,0 @@
1
- import sys
2
- import time
3
- from collections import defaultdict
4
- from pathlib import Path
5
-
6
- # find the pre-release directory and release notes file
7
- THIS_DIR = Path(__file__).resolve().parent
8
- PRE_RELEASE = THIS_DIR / 'source' / 'upcoming_release_notes'
9
- TEMPLATE = PRE_RELEASE / 'template-short.rst'
10
- RELEASE_NOTES = THIS_DIR / 'source' / 'releases.rst'
11
-
12
- # Set up underline constants
13
- TITLE_UNDER = '#'
14
- RELEASE_UNDER = '='
15
- SECTION_UNDER = '-'
16
-
17
-
18
- def parse_pre_release_file(path):
19
- """
20
- Return dict mapping of release notes section to lines.
21
-
22
- Uses empty list when no info was entered for the section.
23
- """
24
- print(f'Checking {path} for release notes.')
25
- with path.open('r') as fd:
26
- lines = fd.readlines()
27
-
28
- section_dict = defaultdict(list)
29
- prev = None
30
- section = None
31
-
32
- for line in lines:
33
- if prev is not None:
34
- if line.startswith(SECTION_UNDER * 2):
35
- section = prev.strip()
36
- continue
37
- if section is not None and line[0] in ' -':
38
- notes = section_dict[section]
39
- if len(line) > 6:
40
- notes.append(line)
41
- section_dict[section] = notes
42
- prev = line
43
-
44
- return section_dict
45
-
46
-
47
- def extend_release_notes(path, version, release_notes):
48
- """
49
- Given dict mapping of section to lines, extend the release notes file.
50
- """
51
- with path.open('r') as fd:
52
- lines = fd.readlines()
53
-
54
- new_lines = ['\n', '\n']
55
- date = time.strftime('%Y-%m-%d')
56
- release_title = f'{version} ({date})'
57
- new_lines.append(release_title + '\n')
58
- new_lines.append(len(release_title) * RELEASE_UNDER + '\n')
59
- new_lines.append('\n')
60
- for section, section_lines in release_notes.items():
61
- if section == 'Contributors':
62
- section_lines = sorted(list(set(section_lines)))
63
- if len(section_lines) > 0:
64
- new_lines.append(section + '\n')
65
- new_lines.append(SECTION_UNDER * len(section) + '\n')
66
- new_lines.extend(section_lines)
67
- new_lines.append('\n')
68
-
69
- output_lines = lines[:2] + new_lines + lines[2:]
70
-
71
- print('Writing out release notes file')
72
- for line in new_lines:
73
- print(line.strip('\n'))
74
- with path.open('w') as fd:
75
- fd.writelines(output_lines)
76
-
77
-
78
- def main(version_number: str):
79
- section_notes = parse_pre_release_file(TEMPLATE)
80
- to_delete = []
81
- for path in PRE_RELEASE.iterdir():
82
- if path.name[0] in '1234567890':
83
- to_delete.append(path)
84
- extra_notes = parse_pre_release_file(path)
85
- for section, notes in section_notes.items():
86
- notes.extend(extra_notes[section])
87
- section_notes[section] = notes
88
-
89
- extend_release_notes(RELEASE_NOTES, version_number, section_notes)
90
-
91
- print(
92
- "* Wrote release notes. Please perform the following manually:",
93
- file=sys.stderr,
94
- )
95
- for path in to_delete:
96
- print(f" git rm {path}", file=sys.stderr)
97
- print(f" git add {RELEASE_NOTES}", file=sys.stderr)
98
-
99
-
100
- if __name__ == '__main__':
101
- if len(sys.argv) != 2:
102
- print(f"Usage: {sys.argv[0]} VERSION_NUMBER", file=sys.stderr)
103
- sys.exit(1)
104
-
105
- version_number = sys.argv[1]
106
-
107
- if not version_number.startswith("v"):
108
- print(
109
- f"Version number should start with 'v': {version_number}",
110
- file=sys.stderr
111
- )
112
- sys.exit(1)
113
-
114
- main(version_number)