Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Update job-runner to v2.75.1 #281

Merged
merged 1 commit into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion opensafely/_vendor/chardet-3.0.4.dist-info/RECORD
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
../../bin/chardetect,sha256=Iim50Xo_A-6jNKXhng0od1YWXEr5OEzrv2MBb1TfLes,256
../../bin/chardetect,sha256=ev_GV213bCHkAMnQeo3ii08Fv8sI1fEHaNtuxa8jZC0,253
chardet-3.0.4.dist-info/DESCRIPTION.rst,sha256=PQ4sBsMyKFZkjC6QpmbpLn0UtCNyeb-ZqvCGEgyZMGk,2174
chardet-3.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
chardet-3.0.4.dist-info/METADATA,sha256=RV_2I4B1Z586DL8oVO5Kp7X5bUdQ5EuKAvNoAEF8wSw,3239
Expand Down
2 changes: 1 addition & 1 deletion opensafely/_vendor/distro-1.8.0.dist-info/RECORD
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
../../bin/distro,sha256=LL7TkGdbIp5yO7jgBe9K5tlwiCJXMlG9hKhj5qmlETo,247
../../bin/distro,sha256=EWDFjO47mPtktTsN5OHU1gFevw6eIf_IooN8WrxphJM,244
distro-1.8.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
distro-1.8.0.dist-info/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
distro-1.8.0.dist-info/METADATA,sha256=NhYw94UPXb78_Z3_VtLxTJ1zQgUUKoTndg10uKJX800,6915
Expand Down
2 changes: 1 addition & 1 deletion opensafely/_vendor/jobrunner/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def get_action_specification(config, action_id, using_dummy_data_backend=False):
return ActionSpecification(
run=run_command,
needs=action_spec.needs,
outputs=action_spec.outputs.dict(exclude_unset=True),
outputs=action_spec.outputs.dict(),
action=action_spec,
)

Expand Down
21 changes: 13 additions & 8 deletions opensafely/_vendor/jobrunner/cli/kill_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,20 +55,25 @@ def get_jobs(partial_job_ids):
jobs = []
need_confirmation = False
for partial_job_id in partial_job_ids:
matches = database.find_where(Job, id__like=f"%{partial_job_id}%")
if len(matches) == 0:
# look for partial matches
partial_matches = database.find_where(Job, id__like=f"%{partial_job_id}%")
if len(partial_matches) == 0:
raise RuntimeError(f"No jobs found matching '{partial_job_id}'")
elif len(matches) > 1:
elif len(partial_matches) > 1:
print(f"Multiple jobs found matching '{partial_job_id}':")
for i, job in enumerate(matches, start=1):
for i, job in enumerate(partial_matches, start=1):
print(f" {i}: {job.slug}")
print()
index = int(input("Enter number: "))
assert 0 < index <= len(matches)
jobs.append(matches[index - 1])
assert 0 < index <= len(partial_matches)
jobs.append(partial_matches[index - 1])
else:
need_confirmation = True
jobs.append(matches[0])
# We only need confirmation if the supplied job ID doesn't exactly
# match the found job
job = partial_matches[0]
if job.id != partial_job_id:
need_confirmation = True
jobs.append(job)
if need_confirmation:
print("About to kill jobs:")
for job in jobs:
Expand Down
2 changes: 2 additions & 0 deletions opensafely/_vendor/jobrunner/executors/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,9 @@ def execute(self, job_definition):
label=LABEL,
labels=get_job_labels(job_definition),
extra_args=extra_args,
volume_type=volume_api.volume_type,
)

except Exception as exc:
return JobStatus(
ExecutorState.ERROR, f"Failed to start docker container: {exc}"
Expand Down
2 changes: 2 additions & 0 deletions opensafely/_vendor/jobrunner/executors/volumes.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class DockerVolumeAPI:
# don't run with UIDs for now. We maybe be able to support this in future.
requires_root = True
supported_platforms = ("linux", "win32", "darwin")
volume_type = "volume" # https://docs.docker.com/engine/storage/volumes/

def volume_name(job):
return docker_volume_name(job)
Expand Down Expand Up @@ -93,6 +94,7 @@ class BindMountVolumeAPI:
# Only works running jobs with uid:gid
requires_root = False
supported_platforms = ("linux",)
volume_type = "bind" # https://docs.docker.com/engine/storage/bind-mounts/

def volume_name(job):
"""Return the absolute path to the volume directory.
Expand Down
2 changes: 1 addition & 1 deletion opensafely/_vendor/jobrunner/lib/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def get_connection(filename=None):
# Looks icky but is documented `threading.local` usage
cache = CONNECTION_CACHE.__dict__
if filename not in cache:
conn = sqlite3.connect(filename)
conn = sqlite3.connect(filename, uri=True)
# Enable autocommit so changes made outside of a transaction still get
# persisted to disk. We can use explicit transactions when we need
# atomicity.
Expand Down
5 changes: 4 additions & 1 deletion opensafely/_vendor/jobrunner/lib/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,7 @@ def run(
label=None,
labels=None,
extra_args=None,
volume_type="volume",
):
run_args = ["run", "--init", "--detach", "--label", LABEL, "--name", name]
if extra_args is not None:
Expand All @@ -413,7 +414,9 @@ def run(
if not allow_network_access:
run_args.extend(["--network", "none"])
if volume:
run_args.extend(["--volume", f"{volume[0]}:{volume[1]}"])
run_args.extend(
["--mount", f"type={volume_type},source={volume[0]},target={volume[1]}"]
)
# These lables are in addition to the default LABEL which is always applied
# Single unary label
if label is not None:
Expand Down
19 changes: 15 additions & 4 deletions opensafely/_vendor/jobrunner/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,21 @@ def maintenance_wrapper():
time.sleep(config.MAINTENANCE_POLL_INTERVAL)


DB_MAINTENANCE_MODE = "db-maintenance"


def maintenance_mode():
"""Check if the db is currently in maintenance mode, and set flags as appropriate."""
# This did not seem big enough to warrant splitting into a separate module.
log.info("checking if db undergoing maintenance...")

# manually setting this flag bypasses the automaticaly check
manual_db_mode = get_flag_value("manual-db-maintenance")
if manual_db_mode:
log.info(f"manually set db mode: {DB_MAINTENANCE_MODE}")
return DB_MAINTENANCE_MODE

# detect db mode from TPP.
current = get_flag_value("mode")
ps = docker(
[
Expand All @@ -111,14 +122,14 @@ def maintenance_mode():
text=True,
)
last_line = ps.stdout.strip().split("\n")[-1]
if "db-maintenance" in last_line:
if current != "db-maintenance":
if DB_MAINTENANCE_MODE in last_line:
if current != DB_MAINTENANCE_MODE:
log.warning("Enabling DB maintenance mode")
else:
log.warning("DB maintenance mode is currently enabled")
set_flag("mode", "db-maintenance")
set_flag("mode", DB_MAINTENANCE_MODE)
else:
if current == "db-maintenance":
if current == DB_MAINTENANCE_MODE:
log.info("DB maintenance mode had ended")
set_flag("mode", None)

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from opensafely_jobrunner-2.75.1.dist-info import *
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: opensafely-jobrunner
Version: 2.74.1
Version: 2.75.1
Summary: OpenSAFELY job scheduling and executor
Author-email: OpenSAFELY <[email protected]>
License: OpenSAFELY Job Runner
Expand All @@ -26,7 +26,7 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: opensafely-pipeline@ git+https://github.com/opensafely-core/pipeline@v2024.03.19.153938
Requires-Dist: opensafely-pipeline@ git+https://github.com/opensafely-core/pipeline@v2024.10.11.170331
Requires-Dist: ruyaml
Requires-Dist: requests
Requires-Dist: opentelemetry-exporter-otlp-proto-http
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
../../bin/add_job,sha256=auF1lMohrk8Fk05a3Ezlpi8IVlS7xVzeZReWtP-IsWw,255
../../bin/flags,sha256=epygIZezoksuFAsTDKYklZoNvcE9q_H-HxEQ6sV_Ppo,253
../../bin/kill_job,sha256=jHNhQDHDyPzXXTpvr1vkB76xacBvcPy7vci3pAzPmxc,256
../../bin/local_run,sha256=Wffot83T6YFDtKAVtlQm6c9mGigY7F1jCBIKgds8OVk,257
../../bin/migrate,sha256=wd49OrcUdgPqBacylXP1JhbH961m-gRtcsa5sdMHzTo,255
../../bin/prepare_for_reboot,sha256=oY3JNDwuV91RqasOVovpZWkfEUGo5WhVxNf2nOA9Bk0,266
../../bin/retry_job,sha256=t_oJk2Zi_rocmK5tmd2k3qRCQ0Ec_nC1PLCYa_O95XY,257
../../bin/add_job,sha256=4i-IezAZRGeeMvFBxS9v6JDhmFVkz0sTpvZ_oOq3Uik,250
../../bin/flags,sha256=J8f8-8-IC6Wa9XL0P_rRkDB2nSQAobMM74MuG-QwFWE,248
../../bin/kill_job,sha256=fDFVGEQo4wnT40jzYohH9ahWCd1S_s2IZyRoomMAEUM,251
../../bin/local_run,sha256=j4F_xAmlJecFsSJqcK-B3cnwsvu3By3ZcvUGhSo463k,252
../../bin/migrate,sha256=JPDcv6NoUBUwQVyxuvMLsy-0gpeAyzH-vs-6v5PueDs,250
../../bin/prepare_for_reboot,sha256=aTrALVp3T81BfBOpgoBAjAuelIi33HotwZB8uOdQK6E,261
../../bin/retry_job,sha256=f7uUzVoXgipH-thuUJT-WrWQ6iz1LJT07SsPABHY0JM,252
jobrunner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
jobrunner/actions.py,sha256=bGcLGnsgTKW9mHkZSiN5HdauFADCiUu6v_VlsWhNAOc,3128
jobrunner/actions.py,sha256=a7IqxeJ3H1MLUP-rYxApd59PbTY_N0VUs6wAbnTwyiU,3110
jobrunner/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
jobrunner/cli/add_job.py,sha256=hbOFNJx4bUTXch3IriMOwUG66lfOHIbyGnTdPYnCvmA,2968
jobrunner/cli/flags.py,sha256=6dFPWab0vB6CGCLg5yMAp9iQJo8Y6rN5cfQ7bEXhgqs,2704
jobrunner/cli/kill_job.py,sha256=_cTNi-JjirvCVfK2vSs2SQYREkCiyj2jLeNG4yYaZAc,3333
jobrunner/cli/kill_job.py,sha256=RSICZF_Ub29XimTDExJFwR9-ZoaPe17W21P_dtsy5PE,3604
jobrunner/cli/local_run.py,sha256=iWfbL4DZ0dXSqNkNCF5XdkdY0Hnc7_EH0NfZfvl7YVA,25719
jobrunner/cli/manifests.py,sha256=dVFDE4OLmS75HHaWxWqToDz4ZdpLL1mJh_3sH4Ff43c,5619
jobrunner/cli/migrate.py,sha256=V2cI3Kee67DNhqJUiDnALNvzHlP4mx_myKQycD4E9uI,609
Expand All @@ -19,13 +19,13 @@ jobrunner/cli/retry_job.py,sha256=qDTiYwxc59QYZBLfgv_t-CAa6kmmhiCKh0sLpv5xhwA,24
jobrunner/config.py,sha256=HU1SNXMzjyDNQO0pqFvNaoeOZyheO8QnGJlf5GdOxT8,9531
jobrunner/create_or_update_jobs.py,sha256=eA-wK0VwWwRFF5_t8Qfz4ddCOL5COnNyAAXCZWKuTgY,15344
jobrunner/executors/__init__.py,sha256=4-eu9LwIzhALtsq1LDC9NQ_5nbcjsPDdIEGvRvZwIbo,283
jobrunner/executors/local.py,sha256=fXUOiNg4uqMZswGeYhnnvS6YM23SnVGJwS80U6fjbYs,35423
jobrunner/executors/local.py,sha256=m30PLiwHUaZ4nIpi5KaMtqHFesBBvEmIRBOGH1rFjrY,35476
jobrunner/executors/logging.py,sha256=iCISXFR8sbtCrp-E3jaQlC1Kw6Huf65b-dqomrJzywI,2104
jobrunner/executors/volumes.py,sha256=H8lISCydAyi9-g3p344KkwVhNhrqfWO5RO-NZRFVM5c,7102
jobrunner/executors/volumes.py,sha256=VgyeEUxRg_v5ZpZ1iYlc8IuqLh9cCi_HBBpj5yrIYD0,7260
jobrunner/job_executor.py,sha256=523lwyHQRPeup6dZKC-hLjW_LYCb9ppiR0tZGLssHr4,13928
jobrunner/lib/__init__.py,sha256=EwrN6m71VpDCvi-vTzcuIvelJ6gZOBB1rf5KyF13xjc,4388
jobrunner/lib/database.py,sha256=AWwUI9AdVNSIKhyqt8H4p0bIuBQ7DUbkgYHlBgq2__Q,12590
jobrunner/lib/docker.py,sha256=C2fp3quN4vkaqg2MvMNC_k6Zbz8awN-oFtFuSLqA6xY,15825
jobrunner/lib/database.py,sha256=uQTxjOz6M_LIE9nZIFQsadzq5Xt4_120F6ErJUUsDHc,12600
jobrunner/lib/docker.py,sha256=4d_ngAW8t8VyhhzRq0W9ylMByxXCMGMpJ23z7u0H0eU,15905
jobrunner/lib/docker_stats.py,sha256=PBx1eU7Rax-Q-fRLKXGSvFv-UD6IYIEENqH6_hoWpKU,1357
jobrunner/lib/git.py,sha256=5Bw3bRk4EJaNEmcOADFk8Ww_NHeF5GtqDpJ5rR3KYFA,13145
jobrunner/lib/github_validators.py,sha256=3YW04zbYz15lnGXjQ3XHrsaH1VyRX_kmd6lF4vyTKM8,2412
Expand All @@ -40,15 +40,15 @@ jobrunner/queries.py,sha256=EsBtoRsFr_dCqHOKu44Sgxjdgmfnzd0dfOQYogNITYo,2225
jobrunner/record_stats.py,sha256=etCjpOyv0zT2gxagDnaovbiAuUfLUwildDWDtL3I_RE,7567
jobrunner/reusable_actions.py,sha256=yt9qSKXUPIPxI-2wM7tgUFJdQlOMneqZqqT8JUpVQow,7683
jobrunner/run.py,sha256=gr2GIrplwgKVHQqzVZUSKftcp8cF-wOOi4fGtR3QZ1U,27565
jobrunner/service.py,sha256=MhppSwuGiDTrkcduxGfmHLoUpD1Ao0fRI2lfuQkb11Y,4182
jobrunner/service.py,sha256=itTF4mpuh9wso6vliU92Ml-EnAkjgQQiUejLqfIP8ZE,4517
jobrunner/sync.py,sha256=nRyHluwAxQjSNw36xpq5sJXhJNLmtREOHjFjhCT7P7A,5127
jobrunner/tracing.py,sha256=F_q9wM7Do5u5GroGvqTL1VW5vElr092wg_L3CMFBHaE,13144
opensafely_jobrunner-2.74.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
opensafely_jobrunner-2.74.1.dist-info/LICENSE,sha256=F5fS3mizkbW4yOk3XP--G0oDJbZAovAKuSIZShtkCw4,671
opensafely_jobrunner-2.74.1.dist-info/METADATA,sha256=HumP74hsF-6zd8Em2KQgtDOLIKFye2JbYn_QCDz--Hs,8211
opensafely_jobrunner-2.74.1.dist-info/RECORD,,
opensafely_jobrunner-2.74.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
opensafely_jobrunner-2.74.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
opensafely_jobrunner-2.74.1.dist-info/direct_url.json,sha256=mfNX3sM6Fdj5fLMywICmzf-i4KV4qcNFRjJ6bBFzIy0,174
opensafely_jobrunner-2.74.1.dist-info/entry_points.txt,sha256=hat6DNe6ZtwPqk0GIs5BOzd-18yfWfwJrouA1YAmBJY,298
opensafely_jobrunner-2.74.1.dist-info/top_level.txt,sha256=dHLIHTr12iPEGMfrfPkXrkh8qGsw52DE0cbpHQVbiic,10
opensafely_jobrunner-2.75.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
opensafely_jobrunner-2.75.1.dist-info/LICENSE,sha256=F5fS3mizkbW4yOk3XP--G0oDJbZAovAKuSIZShtkCw4,671
opensafely_jobrunner-2.75.1.dist-info/METADATA,sha256=LnQf9pvevzeoUtYQiGQQnntFMsU58JwwmeC3DGX6pmE,8211
opensafely_jobrunner-2.75.1.dist-info/RECORD,,
opensafely_jobrunner-2.75.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
opensafely_jobrunner-2.75.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
opensafely_jobrunner-2.75.1.dist-info/direct_url.json,sha256=Cdkkdym_cmyBqNv5x7MyPcpJar4kQ23ZLIp1fKJ122w,174
opensafely_jobrunner-2.75.1.dist-info/entry_points.txt,sha256=hat6DNe6ZtwPqk0GIs5BOzd-18yfWfwJrouA1YAmBJY,298
opensafely_jobrunner-2.75.1.dist-info/top_level.txt,sha256=dHLIHTr12iPEGMfrfPkXrkh8qGsw52DE0cbpHQVbiic,10
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (75.1.0)
Generator: setuptools (75.2.0)
Root-Is-Purelib: true
Tag: py3-none-any

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"url": "https://github.com/opensafely-core/job-runner", "vcs_info": {"commit_id": "04847b88be27e4fddc5c212d9ba847a6c91e970b", "requested_revision": "v2.75.1", "vcs": "git"}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from opensafely_pipeline-2024.10.11.170331.dist-info import *
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: opensafely-pipeline
Version: 2024.3.19.153938
Version: 2024.10.11.170331
Summary: OpenSAFELY pipeline configuration parsing library
Author-email: OpenSAFELY <[email protected]>
License: ${GITHUB_REPOSITORY_NAME}
Expand All @@ -26,8 +26,10 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic <2
Requires-Dist: ruyaml
Provides-Extra: fastparser
Requires-Dist: ruamel-yaml==0.18.6; extra == "fastparser"
Requires-Dist: ruamel-yaml-clib==0.2.8; extra == "fastparser"

# OpenSAFELY Pipeline Parser

Expand All @@ -39,7 +41,7 @@ For example:
data = load_pipeline(f.read())


The returned object is a Pydantic model, `Pipeline`, defined in `pipeline/models.py`.
The returned object is an instance of `pipeline.models.Pipeline`.


## Developer docs
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
opensafely_pipeline-2024.10.11.170331.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
opensafely_pipeline-2024.10.11.170331.dist-info/LICENSE,sha256=3dYRqvpnIRI1ISbzwG_EKRHulT5qzYLacVDM09Ehn5Y,675
opensafely_pipeline-2024.10.11.170331.dist-info/METADATA,sha256=faRr_pwGJi4yv35Rz3hS5q4CxflVPooNKODk92nyw8Q,1931
opensafely_pipeline-2024.10.11.170331.dist-info/RECORD,,
opensafely_pipeline-2024.10.11.170331.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
opensafely_pipeline-2024.10.11.170331.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
opensafely_pipeline-2024.10.11.170331.dist-info/direct_url.json,sha256=9KCk1lwhmjztvze5CoLYaSdkMZqjTY-ZfoTyxLkJCZo,183
opensafely_pipeline-2024.10.11.170331.dist-info/top_level.txt,sha256=Qdc1eKrvhKK_o9CPbdooOdDt7g3ZSXZDrNXHmUGl94Q,9
pipeline/__init__.py,sha256=OXi7WT9uT8zmpPCJY5mh7DCBiSdRg7D6EFOT-wNTulM,236
pipeline/__main__.py,sha256=5hAi8GJDuS0ufV6IA9TP91SPQphoJQjdBTtBHzPeIQQ,471
pipeline/constants.py,sha256=YYp4huzWNFIaimLP9AbiW1eDLaRaS2c6tHYW_GRb19c,354
pipeline/exceptions.py,sha256=aeRYcjMhpgkhdRyQka-yK4X2vxRqa3wg6LG-lYI67Tw,196
pipeline/features.py,sha256=z-Gs7TaX-9YqBYGt0zLiVeZT_aU1VRMjmPJGb-7t4wI,972
pipeline/legacy.py,sha256=hfxBHpEXO6VbqHcg_cqKUb_lVKmq0hVbhwYaXkACkf8,405
pipeline/loading.py,sha256=HUh-uOOVTh6VBLi3xUvwyEP91155Z_IPp2Mimcm-PPk,3929
pipeline/main.py,sha256=t8KyXsNdZvCeEq5LFR7xJtV6aq4OvJidL24K0_580ro,990
pipeline/models.py,sha256=Z70X0x9WX7NcQn7l3cVhFQgKhDMFwtQAMnpanMi6xWo,10943
pipeline/outputs.py,sha256=rAzXgaFLsm8wZXkBLS1EsLFBid6UmsnitiqnnqZMLtg,763
pipeline/validation.py,sha256=EGr86QjK9tOzw3_u4bhU2C-aqoX08RWXKLz7ZtL4_fM,5646
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.43.0)
Generator: setuptools (75.2.0)
Root-Is-Purelib: true
Tag: py3-none-any

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"url": "https://github.com/opensafely-core/pipeline", "vcs_info": {"commit_id": "4e202a4b2d1b0b56f37deaeea429ab55522e7d4d", "requested_revision": "v2024.10.11.170331", "vcs": "git"}}

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion opensafely/_vendor/pipeline/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
".svgz",
# reports
".html",
".pdf",
".txt",
".log",
".json",
Expand Down
4 changes: 4 additions & 0 deletions opensafely/_vendor/pipeline/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ class InvalidPatternError(ProjectValidationError):

class YAMLError(Exception):
pass


class ValidationError(Exception):
pass
Loading