lsst-ctrl-bps-htcondor 30.0.0rc2__tar.gz → 30.0.1rc1__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 (41) hide show
  1. {lsst_ctrl_bps_htcondor-30.0.0rc2/python/lsst_ctrl_bps_htcondor.egg-info → lsst_ctrl_bps_htcondor-30.0.1rc1}/PKG-INFO +3 -3
  2. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/doc/lsst.ctrl.bps.htcondor/CHANGES.rst +44 -2
  3. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/doc/lsst.ctrl.bps.htcondor/userguide.rst +10 -7
  4. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/pyproject.toml +4 -12
  5. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/dagman_configurator.py +1 -1
  6. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/htcondor_service.py +2 -2
  7. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/lssthtc.py +19 -11
  8. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/prepare_utils.py +5 -1
  9. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/version.py +1 -1
  10. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1/python/lsst_ctrl_bps_htcondor.egg-info}/PKG-INFO +3 -3
  11. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_lssthtc.py +2 -0
  12. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_prepare_utils.py +13 -0
  13. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/COPYRIGHT +0 -0
  14. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/LICENSE +0 -0
  15. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/MANIFEST.in +0 -0
  16. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/README.rst +0 -0
  17. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/bsd_license.txt +0 -0
  18. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/doc/lsst.ctrl.bps.htcondor/index.rst +0 -0
  19. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/gpl-v3.0.txt +0 -0
  20. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/__init__.py +0 -0
  21. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/common_utils.py +0 -0
  22. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/etc/__init__.py +0 -0
  23. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/etc/htcondor_defaults.yaml +0 -0
  24. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/final_post.sh +0 -0
  25. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/handlers.py +0 -0
  26. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/htcondor_config.py +0 -0
  27. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/htcondor_workflow.py +0 -0
  28. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/provisioner.py +0 -0
  29. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst/ctrl/bps/htcondor/report_utils.py +0 -0
  30. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst_ctrl_bps_htcondor.egg-info/SOURCES.txt +0 -0
  31. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst_ctrl_bps_htcondor.egg-info/dependency_links.txt +0 -0
  32. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst_ctrl_bps_htcondor.egg-info/requires.txt +0 -0
  33. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst_ctrl_bps_htcondor.egg-info/top_level.txt +0 -0
  34. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/python/lsst_ctrl_bps_htcondor.egg-info/zip-safe +0 -0
  35. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/setup.cfg +0 -0
  36. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_common_utils.py +0 -0
  37. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_dagman_configurator.py +0 -0
  38. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_handlers.py +0 -0
  39. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_htcondor_service.py +0 -0
  40. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_provisioner.py +0 -0
  41. {lsst_ctrl_bps_htcondor-30.0.0rc2 → lsst_ctrl_bps_htcondor-30.0.1rc1}/tests/test_report_utils.py +0 -0
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-bps-htcondor
3
- Version: 30.0.0rc2
3
+ Version: 30.0.1rc1
4
4
  Summary: HTCondor plugin for lsst-ctrl-bps.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/ctrl_bps_htcondor
8
+ Project-URL: Source, https://github.com/lsst/ctrl_bps_htcondor
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
- Requires-Python: >=3.11.0
17
+ Requires-Python: >=3.12.0
18
18
  Description-Content-Type: text/x-rst
19
19
  License-File: COPYRIGHT
20
20
  License-File: LICENSE
@@ -1,3 +1,45 @@
1
+ lsst-ctrl-bps-htcondor v30.0.1 (2026-02-03)
2
+ ===========================================
3
+
4
+ Dropped support for Python 3.11.
5
+ Tested with Python 3.14.
6
+
7
+ Other Changes and Additions
8
+ ---------------------------
9
+
10
+ - - Switched docs action to use ``sphinxutils``.
11
+ - Bumped minimum Python version to 3.12.
12
+ - Dropped ``black`` and ``isort`` sections from ``pyproject.toml``. (`DM-54005 <https://rubinobs.atlassian.net/browse/DM-54005>`_)
13
+
14
+
15
+ lsst-ctrl-bps-htcondor v30.0.0 (2026-01-16)
16
+ ===========================================
17
+
18
+ New Features
19
+ ------------
20
+
21
+ - Added ability to bring the output files produced during job's execution back to the submit site. (`DM-48479 <https://rubinobs.atlassian.net/browse/DM-48479>`_)
22
+ - Added ability to save job stdout/stderr across job retries by setting ``overwriteJobFiles`` to ``false`` in the submit yaml. (`DM-51905 <https://rubinobs.atlassian.net/browse/DM-51905>`_)
23
+ - Added a mechanism that lets the user configure DAGMan via submit YAML. (`DM-52778 <https://rubinobs.atlassian.net/browse/DM-52778>`_)
24
+ - Added using the given priority as the DAG node priority in addition to the HTCondor job priority. (`DM-53753 <https://rubinobs.atlassian.net/browse/DM-53753>`_)
25
+
26
+
27
+ Bug Fixes
28
+ ---------
29
+
30
+ - Fixed bug causing ``bps status --id`` to always report ``MISFIT`` status. Bug was introduced in DM-51868. (`DM-53014 <https://rubinobs.atlassian.net/browse/DM-53014>`_)
31
+ - Fixed bug causing finalJob's memory to not be increased on retries like on regular payload jobs. (`DM-53053 <https://rubinobs.atlassian.net/browse/DM-53053>`_)
32
+
33
+
34
+ Other Changes and Additions
35
+ ---------------------------
36
+
37
+ - Redirected payload's ``stderr`` and ``stdout`` to the same file (``*.out``) to reduce number of files the plugin creates during submission. (`DM-31879 <https://rubinobs.atlassian.net/browse/DM-31879>`_)
38
+ - Added documentation on ``condor_tail`` and ``condor_ssh_to_job``. (`DM-50900 <https://rubinobs.atlassian.net/browse/DM-50900>`_)
39
+ - Fixed issue with some failed jobs being reported as deleted when using ``bps report`` with HTCondor plugin. (`DM-51868 <https://rubinobs.atlassian.net/browse/DM-51868>`_)
40
+ - Divided ``htcondor_service.py`` and ``test_htcondor_service.py`` into smaller files. (`DM-52552 <https://rubinobs.atlassian.net/browse/DM-52552>`_)
41
+
42
+
1
43
  lsst-ctrl-bps-htcondor v29.1.0 (2025-06-13)
2
44
  ===========================================
3
45
 
@@ -136,8 +178,8 @@ Other Changes and Additions
136
178
  - Make HTCondor treat all jobs exiting with a signal as if they ran out of memory. (`DM-32968 <https://rubinobs.atlassian.net/browse/DM-32968>`_)
137
179
  - Make HTCondor plugin pass a group and user attribute to any batch systems that require such attributes for accounting purposes. (`DM-33887 <https://rubinobs.atlassian.net/browse/DM-33887>`_)
138
180
 
139
- ctrl_bps v23.0.0 (2021-12-10)
140
- =============================
181
+ lsst-ctrl-bps-htcondor v23.0.0 (2021-12-10)
182
+ ===========================================
141
183
 
142
184
  New Features
143
185
  ------------
@@ -1,3 +1,6 @@
1
+ User Guide
2
+ ==========
3
+
1
4
  .. _htc-plugin-overview:
2
5
 
3
6
  Overview
@@ -6,7 +9,7 @@ Overview
6
9
  LSST Batch Processing Service (BPS) allows large-scale workflows to execute in
7
10
  well-managed fashion, potentially in multiple environments. The service is
8
11
  provided by the `ctrl_bps`_ package. ``ctrl_bps_htcondor`` is a plugin
9
- allowing `ctrl_bps` to execute workflows on computational resources managed by
12
+ allowing ``ctrl_bps`` to execute workflows on computational resources managed by
10
13
  `HTCondor`_.
11
14
 
12
15
  .. _htc-plugin-preqs:
@@ -89,8 +92,8 @@ Job Environment
89
92
  ^^^^^^^^^^^^^^^
90
93
 
91
94
  By default, the htcondor jobs copy the environment from the shell in which
92
- `bps submit` was executed. To set or override an environment variable via
93
- submission yaml, use an `environment` section. Other yaml values and pre-existing
95
+ ``bps submit`` was executed. To set or override an environment variable via
96
+ submission yaml, use an ``environment`` section. Other yaml values and pre-existing
94
97
  environment variables can be used. Some examples:
95
98
 
96
99
  .. code-block:: YAML
@@ -104,7 +107,7 @@ environment variables can be used. Some examples:
104
107
 
105
108
  .. note::
106
109
 
107
- The `environment` section has to be at the root level. There is no
110
+ The ``environment`` section has to be at the root level. There is no
108
111
  way to change the environment inside another level (e.g., per site,
109
112
  per cluster, per pipeline task)
110
113
 
@@ -397,11 +400,11 @@ by ``provisioningMaxIdleTime`` (default value: 15 min., see below) or maximum
397
400
  wall time is reached.
398
401
 
399
402
  The provisioning job is expected to run as long as the workflow. If the job
400
- dies, the job status will be `FAILED`. If the job just completed successfully,
401
- the job status will be `SUCCEEDED` with a message saying it ended early (which
403
+ dies, the job status will be ``FAILED``. If the job just completed successfully,
404
+ the job status will be ``SUCCEEDED`` with a message saying it ended early (which
402
405
  may or may not cause a problem since existing glideins could remain running).
403
406
  To get more information about either of these cases, check the job output
404
- and error files in the `jobs/provisioningJob` subdirectory.
407
+ and error files in the ``jobs/provisioningJob`` subdirectory.
405
408
 
406
409
 
407
410
  If the automatic provisioning of the resources is enabled, the script that the
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lsst-ctrl-bps-htcondor"
7
- requires-python = ">=3.11.0"
7
+ requires-python = ">=3.12.0"
8
8
  description = "HTCondor plugin for lsst-ctrl-bps."
9
9
  license = "BSD-3-Clause OR GPL-3.0-or-later"
10
10
  license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
@@ -16,7 +16,6 @@ classifiers = [
16
16
  "Intended Audience :: Science/Research",
17
17
  "Operating System :: OS Independent",
18
18
  "Programming Language :: Python :: 3",
19
- "Programming Language :: Python :: 3.11",
20
19
  "Programming Language :: Python :: 3.12",
21
20
  "Programming Language :: Python :: 3.13",
22
21
  "Programming Language :: Python :: 3.14",
@@ -36,6 +35,7 @@ dynamic = ["version"]
36
35
 
37
36
  [project.urls]
38
37
  "Homepage" = "https://github.com/lsst/ctrl_bps_htcondor"
38
+ "Source" = "https://github.com/lsst/ctrl_bps_htcondor"
39
39
 
40
40
  [project.optional-dependencies]
41
41
  test = [
@@ -93,15 +93,6 @@ version = { attr = "lsst_versions.get_lsst_version" }
93
93
  name = "An API Removal or Deprecation"
94
94
  showcontent = true
95
95
 
96
- [tool.black]
97
- line-length = 110
98
- target-version = ["py311"]
99
-
100
- [tool.isort]
101
- profile = "black"
102
- line_length = 110
103
- known_first_party = ["lsst"]
104
-
105
96
  [tool.lsst_versions]
106
97
  write_to = "python/lsst/ctrl/bps/htcondor/version.py"
107
98
 
@@ -127,7 +118,7 @@ exclude_lines = [
127
118
  ]
128
119
 
129
120
  [tool.ruff]
130
- target-version = "py311"
121
+ target-version = "py312"
131
122
  line-length = 110
132
123
  exclude = [
133
124
  "__init__.py",
@@ -194,6 +185,7 @@ checks = [
194
185
  "RT01", # Unfortunately our @property trigger this.
195
186
  "RT02", # Does not want named return value. DM style says we do.
196
187
  "SS05", # pydocstyle is better at finding infinitive verb.
188
+ "RT03", # Temporarily disable for sphinx empty returns.
197
189
  ]
198
190
  exclude = [
199
191
  '^__init__$',
@@ -91,7 +91,7 @@ class DagmanConfigurator:
91
91
  ----------
92
92
  config : `lsst.ctrl.bps.BpsConfig`
93
93
  BPS configuration.
94
- search_opts : `dict` [`str`, `Any`], optional
94
+ search_opts : `dict` [`str`, `~typing.Any`], optional
95
95
  Options to use while searching the BPS configuration for values.
96
96
 
97
97
  Raises
@@ -100,7 +100,7 @@ class HTCondorService(BaseWmsService):
100
100
 
101
101
  Returns
102
102
  -------
103
- workflow : `lsst.ctrl.bps.wms.htcondor.HTCondorWorkflow`
103
+ workflow : `lsst.ctrl.bps.htcondor.HTCondorWorkflow`
104
104
  HTCondor workflow ready to be run.
105
105
  """
106
106
  _LOG.debug("out_prefix = '%s'", out_prefix)
@@ -141,7 +141,7 @@ class HTCondorService(BaseWmsService):
141
141
 
142
142
  Parameters
143
143
  ----------
144
- workflow : `lsst.ctrl.bps.BaseWorkflow`
144
+ workflow : `lsst.ctrl.bps.htcondor.HTCondorWorkflow`
145
145
  A single HTCondor workflow to submit. run_id is updated after
146
146
  successful submission to WMS.
147
147
  **kwargs : `~typing.Any`
@@ -234,6 +234,7 @@ HTC_VALID_JOB_DAG_KEYS = {
234
234
  "retry_unless_exit",
235
235
  "abort_dag_on",
236
236
  "abort_exit",
237
+ "priority",
237
238
  }
238
239
  HTC_VERSION = version.parse(htcondor.__version__)
239
240
 
@@ -243,7 +244,7 @@ class RestrictedDict(MutableMapping):
243
244
 
244
245
  Parameters
245
246
  ----------
246
- valid_keys : `Container`
247
+ valid_keys : `~collections.abc.Container`
247
248
  Strings that are valid keys.
248
249
  init_data : `dict` or `RestrictedDict`, optional
249
250
  Initial data.
@@ -490,7 +491,7 @@ def htc_write_attribs(stream, attrs):
490
491
 
491
492
  Parameters
492
493
  ----------
493
- stream : `~io.TextIOBase`
494
+ stream : `~typing.TextIO`
494
495
  Output text stream (typically an open file).
495
496
  attrs : `dict`
496
497
  HTCondor job attributes (dictionary of attribute key, value).
@@ -512,7 +513,7 @@ def htc_write_condor_file(
512
513
 
513
514
  Parameters
514
515
  ----------
515
- filename : `str` or os.PathLike
516
+ filename : `str` or `os.PathLike`
516
517
  Filename for the HTCondor submit file.
517
518
  job_name : `str`
518
519
  Job name to use in submit file.
@@ -823,7 +824,7 @@ def _htc_write_job_commands(stream, name, commands):
823
824
 
824
825
  Parameters
825
826
  ----------
826
- stream : `~io.TextIOBase`
827
+ stream : `~typing.TextIO`
827
828
  Writeable text stream (typically an opened file).
828
829
  name : `str`
829
830
  Job name.
@@ -884,6 +885,12 @@ def _htc_write_job_commands(stream, name, commands):
884
885
  file=stream,
885
886
  )
886
887
 
888
+ if "priority" in commands and commands["priority"]:
889
+ print(
890
+ f"PRIORITY {name} {commands['priority']}",
891
+ file=stream,
892
+ )
893
+
887
894
 
888
895
  class HTCJob:
889
896
  """HTCondor job for use in building DAG.
@@ -974,7 +981,7 @@ class HTCJob:
974
981
 
975
982
  Parameters
976
983
  ----------
977
- stream : `IO` or `str`
984
+ stream : `~typing.TextIO`
978
985
  Output Stream.
979
986
  dag_rel_path : `str`
980
987
  Relative path of dag to submit directory.
@@ -1002,7 +1009,7 @@ class HTCJob:
1002
1009
 
1003
1010
  Parameters
1004
1011
  ----------
1005
- fh : `~io.TextIOBase`
1012
+ fh : `~typing.TextIO`
1006
1013
  Output stream.
1007
1014
  """
1008
1015
  printer = pprint.PrettyPrinter(indent=4, stream=fh)
@@ -1016,8 +1023,9 @@ class HTCDag(networkx.DiGraph):
1016
1023
 
1017
1024
  Parameters
1018
1025
  ----------
1019
- data : networkx.DiGraph.data
1020
- Initial graph.
1026
+ data : `~typing.Any`
1027
+ Initial graph data of any format that is supported
1028
+ by the to_network_graph() function.
1021
1029
  name : `str`
1022
1030
  Name for DAG.
1023
1031
  """
@@ -1209,7 +1217,7 @@ class HTCDag(networkx.DiGraph):
1209
1217
 
1210
1218
  Parameters
1211
1219
  ----------
1212
- fh : `io.IO` or `str`
1220
+ fh : `typing.IO`
1213
1221
  Where to dump DAG info as text.
1214
1222
  """
1215
1223
  for key, value in self.graph:
@@ -1296,7 +1304,7 @@ def condor_query(constraint=None, schedds=None, query_func=htc_query_present, **
1296
1304
  HTCondor schedulers which to query for job information. If None
1297
1305
  (default), the query will be run against the history file of
1298
1306
  the local scheduler only.
1299
- query_func : callable
1307
+ query_func : `~collections.abc.Callable`
1300
1308
  An query function which takes following arguments:
1301
1309
 
1302
1310
  - ``schedds``: Schedulers to query (`list` [`htcondor.Schedd`]).
@@ -1653,7 +1661,7 @@ def read_dag_status(wms_path: str | os.PathLike) -> dict[str, Any]:
1653
1661
 
1654
1662
  Parameters
1655
1663
  ----------
1656
- wms_path : `str` or `os.PathLike
1664
+ wms_path : `str` or `os.PathLike`
1657
1665
  Path that includes node status file for a run.
1658
1666
 
1659
1667
  Returns
@@ -306,7 +306,11 @@ def _translate_dag_cmds(gwjob):
306
306
  DAGMan commands for the job.
307
307
  """
308
308
  # Values in the dag script that just are name mappings.
309
- dag_translation = {"abort_on_value": "abort_dag_on", "abort_return_value": "abort_exit"}
309
+ dag_translation = {
310
+ "abort_on_value": "abort_dag_on",
311
+ "abort_return_value": "abort_exit",
312
+ "priority": "priority",
313
+ }
310
314
 
311
315
  dagcmds = {}
312
316
  for gwkey, htckey in dag_translation.items():
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "30.0.0rc2"
2
+ __version__ = "30.0.1rc1"
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-bps-htcondor
3
- Version: 30.0.0rc2
3
+ Version: 30.0.1rc1
4
4
  Summary: HTCondor plugin for lsst-ctrl-bps.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/ctrl_bps_htcondor
8
+ Project-URL: Source, https://github.com/lsst/ctrl_bps_htcondor
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
- Requires-Python: >=3.11.0
17
+ Requires-Python: >=3.12.0
18
18
  Description-Content-Type: text/x-rst
19
19
  License-File: COPYRIGHT
20
20
  License-File: LICENSE
@@ -724,6 +724,7 @@ class HtcWriteJobCommands(unittest.TestCase):
724
724
  "retry": 3,
725
725
  "retry_unless_exit": 1,
726
726
  "abort_dag_on": {"node_exit": 100, "abort_exit": 4},
727
+ "priority": 123,
727
728
  }
728
729
 
729
730
  truth = """SCRIPT DEFER 1 120 DEBUG debug_pre.txt ALL PRE job1 exec1 arg1 arg2
@@ -733,6 +734,7 @@ VARS job1 spaces="a space"
733
734
  PRE_SKIP job1 1
734
735
  RETRY job1 3 UNLESS-EXIT 1
735
736
  ABORT-DAG-ON job1 100 RETURN 4
737
+ PRIORITY job1 123
736
738
  """
737
739
  mockfh = io.StringIO()
738
740
  lssthtc._htc_write_job_commands(mockfh, "job1", dag_cmds)
@@ -134,6 +134,19 @@ class TranslateJobCmdsTestCase(unittest.TestCase):
134
134
  self.assertEqual(htc_commands["max_retries"], 0)
135
135
 
136
136
 
137
+ class TranslateDagCmdsTestCase(unittest.TestCase):
138
+ """Test _translate_dag_cmds method."""
139
+
140
+ def setUp(self):
141
+ self.gw_exec = GenericWorkflowExec("test_exec", "/dummy/dir/pipetask")
142
+
143
+ def testPriority(self):
144
+ gwjob = GenericWorkflowJob("priority", "label1", executable=self.gw_exec)
145
+ gwjob.priority = 100
146
+ dag_commands = prepare_utils._translate_dag_cmds(gwjob)
147
+ self.assertEqual(dag_commands["priority"], 100)
148
+
149
+
137
150
  class GroupToSubdagTestCase(unittest.TestCase):
138
151
  """Test _group_to_subdag function."""
139
152