lsst-ctrl-bps-htcondor 29.2025.3700__tar.gz → 29.2025.3800__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.
- {lsst_ctrl_bps_htcondor-29.2025.3700/python/lsst_ctrl_bps_htcondor.egg-info → lsst_ctrl_bps_htcondor-29.2025.3800}/PKG-INFO +1 -1
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/htcondor_service.py +4 -4
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/lssthtc.py +1 -1
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/provisioner.py +3 -2
- lsst_ctrl_bps_htcondor-29.2025.3800/python/lsst/ctrl/bps/htcondor/version.py +2 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800/python/lsst_ctrl_bps_htcondor.egg-info}/PKG-INFO +1 -1
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_htcondor_service.py +4 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_lssthtc.py +18 -1
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_provisioner.py +8 -8
- lsst_ctrl_bps_htcondor-29.2025.3700/python/lsst/ctrl/bps/htcondor/version.py +0 -2
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/COPYRIGHT +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/LICENSE +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/MANIFEST.in +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/README.rst +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/bsd_license.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/doc/lsst.ctrl.bps.htcondor/CHANGES.rst +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/doc/lsst.ctrl.bps.htcondor/index.rst +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/doc/lsst.ctrl.bps.htcondor/userguide.rst +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/gpl-v3.0.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/pyproject.toml +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/__init__.py +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/etc/__init__.py +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/etc/htcondor_defaults.yaml +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/final_post.sh +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/handlers.py +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst/ctrl/bps/htcondor/htcondor_config.py +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst_ctrl_bps_htcondor.egg-info/SOURCES.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst_ctrl_bps_htcondor.egg-info/dependency_links.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst_ctrl_bps_htcondor.egg-info/requires.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst_ctrl_bps_htcondor.egg-info/top_level.txt +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/python/lsst_ctrl_bps_htcondor.egg-info/zip-safe +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/setup.cfg +0 -0
- {lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_handlers.py +0 -0
|
@@ -705,16 +705,16 @@ def _create_job(subdir_template, cached_values, generic_workflow, gwjob, out_pre
|
|
|
705
705
|
|
|
706
706
|
htc_job_cmds.update(_translate_job_cmds(cached_values, generic_workflow, gwjob))
|
|
707
707
|
|
|
708
|
-
#
|
|
708
|
+
# Combine stdout and stderr to reduce the number of files.
|
|
709
709
|
for key in ("output", "error"):
|
|
710
710
|
if cached_values["overwriteJobFiles"]:
|
|
711
|
-
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).
|
|
711
|
+
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).out"
|
|
712
712
|
else:
|
|
713
|
-
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).$$([NumJobStarts ?: 0]).
|
|
713
|
+
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).$$([NumJobStarts ?: 0]).out"
|
|
714
714
|
_LOG.debug("HTCondor %s = %s", key, htc_job_cmds[key])
|
|
715
715
|
|
|
716
716
|
key = "log"
|
|
717
|
-
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).{key
|
|
717
|
+
htc_job_cmds[key] = f"{gwjob.name}.$(Cluster).{key}"
|
|
718
718
|
_LOG.debug("HTCondor %s = %s", key, htc_job_cmds[key])
|
|
719
719
|
|
|
720
720
|
htc_job_cmds.update(
|
|
@@ -530,7 +530,7 @@ def htc_write_condor_file(
|
|
|
530
530
|
print(f"{key}={value}", file=fh)
|
|
531
531
|
for key in ["output", "error", "log"]:
|
|
532
532
|
if key not in job:
|
|
533
|
-
filename = f"{job_name}.$(Cluster)
|
|
533
|
+
filename = f"{job_name}.$(Cluster).{'out' if key != 'log' else key}"
|
|
534
534
|
print(f"{key}={filename}", file=fh)
|
|
535
535
|
|
|
536
536
|
if job_attrs is not None:
|
|
@@ -194,8 +194,9 @@ class Provisioner:
|
|
|
194
194
|
"getenv": "True",
|
|
195
195
|
}
|
|
196
196
|
cmds |= {
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
"output": str(job.subfile.with_suffix(".$(Cluster).out")),
|
|
198
|
+
"error": str(job.subfile.with_suffix(".$(Cluster).out")),
|
|
199
|
+
"log": str(job.subfile.with_suffix(".$(Cluster).log")),
|
|
199
200
|
}
|
|
200
201
|
job.add_job_cmds(cmds)
|
|
201
202
|
|
|
@@ -1577,6 +1577,10 @@ class CreateJobTestCase(unittest.TestCase):
|
|
|
1577
1577
|
self.assertEqual(htc_job.label, gwjob.label)
|
|
1578
1578
|
self.assertIn("NumJobStarts", htc_job.cmds["output"])
|
|
1579
1579
|
self.assertIn("NumJobStarts", htc_job.cmds["error"])
|
|
1580
|
+
self.assertNotIn("NumJobStarts", htc_job.cmds["log"])
|
|
1581
|
+
self.assertTrue(htc_job.cmds["error"].endswith(".out"))
|
|
1582
|
+
self.assertTrue(htc_job.cmds["output"].endswith(".out"))
|
|
1583
|
+
self.assertTrue(htc_job.cmds["log"].endswith(".log"))
|
|
1580
1584
|
|
|
1581
1585
|
|
|
1582
1586
|
if __name__ == "__main__":
|
{lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_lssthtc.py
RENAMED
|
@@ -1128,13 +1128,30 @@ class HtcWriteCondorFileTestCase(unittest.TestCase):
|
|
|
1128
1128
|
"environment": "one=1 two=\"2\" three='spacey 'quoted' value'",
|
|
1129
1129
|
"log": f"{job_name}.log",
|
|
1130
1130
|
}
|
|
1131
|
-
|
|
1132
1131
|
job_attrs = {
|
|
1133
1132
|
"bps_job_name": job_name,
|
|
1134
1133
|
"bps_job_label": "label1",
|
|
1135
1134
|
"bps_job_quanta": "task1:8;task2:8",
|
|
1136
1135
|
}
|
|
1136
|
+
expected = [
|
|
1137
|
+
"executable=$(CTRL_MPEXEC_DIR)/bin/pipetask\n",
|
|
1138
|
+
"arguments=-a -b 2 -c\n",
|
|
1139
|
+
"request_memory=2000\n",
|
|
1140
|
+
"environment=\"one=1 two=\"2\" three='spacey 'quoted' value'\"\n",
|
|
1141
|
+
f"output={job_name}.$(Cluster).out\n",
|
|
1142
|
+
f"error={job_name}.$(Cluster).out\n",
|
|
1143
|
+
f"log={job_name}.log\n",
|
|
1144
|
+
f'+bps_job_name = "{job_name}"\n',
|
|
1145
|
+
'+bps_job_label = "label1"\n',
|
|
1146
|
+
'+bps_job_quanta = "task1:8;task2:8"\n',
|
|
1147
|
+
"queue\n",
|
|
1148
|
+
]
|
|
1149
|
+
|
|
1137
1150
|
lssthtc.htc_write_condor_file(filename, job_name, job, job_attrs)
|
|
1151
|
+
with open(filename, encoding="utf-8") as f:
|
|
1152
|
+
actual = f.readlines()
|
|
1153
|
+
|
|
1154
|
+
self.assertEqual(set(actual), set(expected))
|
|
1138
1155
|
self.assertTrue(filename.exists())
|
|
1139
1156
|
# Try to make Submit object from file to find any syntax issues
|
|
1140
1157
|
_ = lssthtc.htc_create_submit_from_file(filename)
|
|
@@ -49,7 +49,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
49
49
|
pass
|
|
50
50
|
|
|
51
51
|
def testConfigureWithoutExistingConfig(self):
|
|
52
|
-
"""Test if configuration file is created if necessary."""
|
|
52
|
+
"""Test if the configuration file is created if necessary."""
|
|
53
53
|
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
|
54
54
|
filename = f"{tmpdir}/condor-info.py"
|
|
55
55
|
self.config[".provisioning.provisioningScriptConfig"] = "foo"
|
|
@@ -66,7 +66,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
66
66
|
self.assertTrue(provisioner.is_configured)
|
|
67
67
|
|
|
68
68
|
def testConfigureWithExistingConfig(self):
|
|
69
|
-
"""Test if existing configuration file is left unchanged."""
|
|
69
|
+
"""Test if the existing configuration file is left unchanged."""
|
|
70
70
|
with tempfile.NamedTemporaryFile(mode="w+", encoding="utf-8") as tmpfile:
|
|
71
71
|
self.config[".provisioning.provisioningScriptConfig"] = "bar"
|
|
72
72
|
self.config[".provisioning.provisioningScriptConfigPath"] = tmpfile.name
|
|
@@ -97,7 +97,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
97
97
|
self.assertTrue(provisioner.is_configured)
|
|
98
98
|
|
|
99
99
|
def testConfigureOsError(self):
|
|
100
|
-
"""Test if method raises when
|
|
100
|
+
"""Test if the method raises when it can't create the configuration."""
|
|
101
101
|
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
|
102
102
|
filename = f"{tmpdir}/subdir/condor-info.py"
|
|
103
103
|
self.config[".provisioning.provisioningScriptConfigPath"] = filename
|
|
@@ -112,7 +112,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
112
112
|
os.chmod(tmpdir, 0o700)
|
|
113
113
|
|
|
114
114
|
def testPrepare(self):
|
|
115
|
-
"""Test if provisioning script is created."""
|
|
115
|
+
"""Test if the provisioning script is created."""
|
|
116
116
|
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
|
117
117
|
prov_config = Path(f"{tmpdir}/condor-info.py")
|
|
118
118
|
self.config[".provisioning.provisioningScriptConfigPath"] = str(prov_config)
|
|
@@ -133,13 +133,13 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
133
133
|
self.assertEqual(prov_script.read_text(), "bar")
|
|
134
134
|
|
|
135
135
|
def testPrepareIfNotConfigured(self):
|
|
136
|
-
"""Test if method raises when the configuration step
|
|
136
|
+
"""Test if the method raises when the configuration step is skipped."""
|
|
137
137
|
provisioner = Provisioner(self.config)
|
|
138
138
|
with self.assertRaises(RuntimeError):
|
|
139
139
|
provisioner.prepare("provisioning_job.sh", prefix="")
|
|
140
140
|
|
|
141
141
|
def testProvision(self):
|
|
142
|
-
"""Test if provisioning job is added to the DAG."""
|
|
142
|
+
"""Test if the provisioning job is added to the DAG."""
|
|
143
143
|
script = Path("provisioningJob.sh")
|
|
144
144
|
cmds = {
|
|
145
145
|
"universe": "local",
|
|
@@ -147,7 +147,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
147
147
|
"should_transfer_files": "NO",
|
|
148
148
|
"getenv": "True",
|
|
149
149
|
"output": f"jobs/{script.stem}/{script.stem}.$(Cluster).out",
|
|
150
|
-
"error": f"jobs/{script.stem}/{script.stem}.$(Cluster).
|
|
150
|
+
"error": f"jobs/{script.stem}/{script.stem}.$(Cluster).out",
|
|
151
151
|
"log": f"jobs/{script.stem}/{script.stem}.$(Cluster).log",
|
|
152
152
|
}
|
|
153
153
|
dag = HTCDag(name="default")
|
|
@@ -168,7 +168,7 @@ class ProvisionerTestCase(unittest.TestCase):
|
|
|
168
168
|
self.assertIn("bps_provisioning_job", dag.graph["attr"])
|
|
169
169
|
|
|
170
170
|
def testProvisionError(self):
|
|
171
|
-
"""Test if method raises when the prepare step was skipped."""
|
|
171
|
+
"""Test if the method raises when the prepare step was skipped."""
|
|
172
172
|
dag = HTCDag(name="test")
|
|
173
173
|
provisioner = Provisioner(self.config)
|
|
174
174
|
with self.assertRaises(RuntimeError):
|
|
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
|
{lsst_ctrl_bps_htcondor-29.2025.3700 → lsst_ctrl_bps_htcondor-29.2025.3800}/tests/test_handlers.py
RENAMED
|
File without changes
|