opensafely 2.0.4__tar.gz → 2.1.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.
- {opensafely-2.0.4 → opensafely-2.1.0}/PKG-INFO +1 -1
- opensafely-2.1.0/opensafely/VERSION +1 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/actions.py +0 -32
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/config.py +23 -3
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/models.py +1 -1
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/pull.py +0 -2
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/PKG-INFO +1 -1
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_pull.py +0 -2
- opensafely-2.0.4/opensafely/VERSION +0 -1
- {opensafely-2.0.4 → opensafely-2.1.0}/LICENSE +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/README.md +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/certifi/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/certifi/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/certifi/cacert.pem +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/certifi/core.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/certifi/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/api.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/cd.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/cli/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/cli/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/constant.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/legacy.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/md.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/models.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/charset_normalizer/version.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/distro/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/distro/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/distro/distro.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/distro/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/cli.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/codec.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/compat.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/core.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/idnadata.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/intranges.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/package_data.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/idna/uts46data.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/_internal/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/severity/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/attributes/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/attributes/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/baggage/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/baggage/propagation/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/baggage/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/context/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/context/context.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/context/contextvars_context.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/context/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/environment_variables/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/environment_variables/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/_internal/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/_internal/instrument.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/_internal/observation.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagate/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagate/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/_envcarrier.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/composite.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/textmap.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/propagation/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/propagation/tracecontext.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/span.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/status.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/_decorator.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/_importlib_metadata.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/_once.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/_providers.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/re.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/types.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/version/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/version/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/__main__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/constants.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/exceptions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/features.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/legacy.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/loading.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/main.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/models.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/outputs.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline/validation.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/pipeline.pyi +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/__version__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/_internal_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/_types.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/adapters.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/api.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/auth.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/certs.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/compat.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/cookies.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/exceptions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/help.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/hooks.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/models.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/packages.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/sessions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/status_codes.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/structures.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/requests/utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/anchor.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/comments.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/compat.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/composer.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/configobjwalker.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/constructor.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/cyaml.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/dumper.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/emitter.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/error.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/events.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/loader.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/main.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/nodes.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/parser.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/reader.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/representer.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/resolver.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/scalarbool.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/scalarfloat.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/scalarint.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/scalarstring.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/scanner.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/serializer.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/timestamp.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/tokens.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/ruyaml/util.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/typing_extensions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/typing_extensions.pyi +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/_base_connection.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/_collections.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/_request_methods.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/_version.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/connection.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/connectionpool.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/connection.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/fetch.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/request.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/response.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/pyopenssl.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/socks.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/exceptions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/fields.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/filepost.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/http2/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/http2/connection.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/http2/probe.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/poolmanager.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/py.typed +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/response.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/connection.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/proxy.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/request.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/response.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/retry.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/ssl_.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/ssl_match_hostname.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/ssltransport.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/timeout.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/url.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/util.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/util/wait.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/clean.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/codelists.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/execute.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/info.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/cli/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/cli/local_run.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/cli/migrate.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/create_or_update_jobs.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/executors/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/executors/local.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/executors/volumes.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/job_executor.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/__init__.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/database.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/docker.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/git.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/github_validators.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/log_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/lru_dict.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/path_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/string_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/subprocess_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/lib/yaml_utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/queries.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/reusable_actions.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/run.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jobrunner/tracing.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/jupyter.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/launch.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/rstudio.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/unzip.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/upgrade.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely/utils.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/SOURCES.txt +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/dependency_links.txt +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/entry_points.txt +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/requires.txt +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/opensafely.egg-info/top_level.txt +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/pyproject.toml +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/setup.cfg +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_clean.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_codelists.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_execute.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_info.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_init.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_launch.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_packaging.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_unzip.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_upgrade.py +0 -0
- {opensafely-2.0.4 → opensafely-2.1.0}/tests/test_utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
v2.1.0
|
|
@@ -4,9 +4,6 @@ import shlex
|
|
|
4
4
|
|
|
5
5
|
from opensafely._vendor.pipeline.exceptions import ProjectValidationError
|
|
6
6
|
from opensafely._vendor.pipeline.models import Action
|
|
7
|
-
from opensafely._vendor.pipeline.outputs import get_output_dirs
|
|
8
|
-
|
|
9
|
-
from opensafely.jobrunner.lib.path_utils import ensure_unix_path
|
|
10
7
|
|
|
11
8
|
|
|
12
9
|
class UnknownActionError(ProjectValidationError):
|
|
@@ -54,27 +51,6 @@ def get_action_specification(config, action_id, using_dummy_data_backend=False):
|
|
|
54
51
|
json.dumps(action_spec.config).replace("'", r"\u0027"),
|
|
55
52
|
]
|
|
56
53
|
|
|
57
|
-
# Special case handling for the `cohortextractor generate_cohort` command
|
|
58
|
-
if is_cohortextractor_generate_cohort(run_parts):
|
|
59
|
-
# Set the size of the dummy data population, if that's what we're
|
|
60
|
-
# generating. Possibly this should be moved to the study definition
|
|
61
|
-
# anyway, which would make this unnecessary.
|
|
62
|
-
if using_dummy_data_backend:
|
|
63
|
-
if action_spec.dummy_data_file is not None:
|
|
64
|
-
run_parts.append(
|
|
65
|
-
f"--dummy-data-file={ensure_unix_path(action_spec.dummy_data_file)}"
|
|
66
|
-
)
|
|
67
|
-
else:
|
|
68
|
-
size = config.expectations.population_size
|
|
69
|
-
run_parts.append(f"--expectations-population={size}")
|
|
70
|
-
|
|
71
|
-
output_dirs = get_output_dirs(action_spec.outputs)
|
|
72
|
-
|
|
73
|
-
if len(output_dirs) == 1:
|
|
74
|
-
# Automatically configure the cohortextractor to produce output in the
|
|
75
|
-
# directory the `outputs` spec is expecting.
|
|
76
|
-
run_parts.append(f"--output-dir={output_dirs[0]}")
|
|
77
|
-
|
|
78
54
|
run_command = shlex.join(run_parts)
|
|
79
55
|
|
|
80
56
|
return ActionSpecification(
|
|
@@ -83,11 +59,3 @@ def get_action_specification(config, action_id, using_dummy_data_backend=False):
|
|
|
83
59
|
outputs=action_spec.outputs.dict(),
|
|
84
60
|
action=action_spec,
|
|
85
61
|
)
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def is_cohortextractor_generate_cohort(args):
|
|
89
|
-
return (
|
|
90
|
-
len(args) > 1
|
|
91
|
-
and args[0].startswith("cohortextractor:")
|
|
92
|
-
and args[1] == "generate_cohort"
|
|
93
|
-
)
|
|
@@ -76,7 +76,6 @@ else:
|
|
|
76
76
|
USING_DUMMY_DATA_BACKEND = BACKEND == "expectations"
|
|
77
77
|
|
|
78
78
|
ALLOWED_IMAGES = {
|
|
79
|
-
"cohortextractor",
|
|
80
79
|
"databuilder",
|
|
81
80
|
"ehrql",
|
|
82
81
|
"stata-mp",
|
|
@@ -214,15 +213,36 @@ ENABLE_MAINTENANCE_MODE_THREAD = os.environ.get(
|
|
|
214
213
|
|
|
215
214
|
|
|
216
215
|
# Map known exit codes to user-friendly messages
|
|
216
|
+
# Taken from https://github.com/opensafely-core/job-runner/blob/dd0c916db15168d3d0be0134c1dc1fbb7f54785a/controller/config.py#L160
|
|
217
217
|
DATABASE_EXIT_CODES = {
|
|
218
|
-
# Custom database-related exit codes return from
|
|
219
|
-
# https://github.com/opensafely-core/
|
|
218
|
+
# Custom database-related exit codes return from ehrQL, see e.g.
|
|
219
|
+
# https://github.com/opensafely-core/ehrql/blob/868e07b9d3638996c14a573030ca946765d8fdf9/ehrql/backends/tpp.py#L229-L254
|
|
220
|
+
# These are unlikely to be hit since the CLI always uses dummy data and ehrql's
|
|
221
|
+
# in-memory engine
|
|
220
222
|
3: (
|
|
221
223
|
"A transient database error occurred, your job may run "
|
|
222
224
|
"if you try it again, if it keeps failing then contact tech support"
|
|
223
225
|
),
|
|
224
226
|
4: "New data is being imported into the database, please try again in a few hours",
|
|
225
227
|
5: "Something went wrong with the database, please contact tech support",
|
|
228
|
+
6: (
|
|
229
|
+
"Your ehrQL is valid but it produced SQL which is too complex for the database"
|
|
230
|
+
" to run; please contact tech-support so we can help you simplify it."
|
|
231
|
+
),
|
|
232
|
+
# Other ehrQL exit codes with specific meanings, see:
|
|
233
|
+
# https://github.com/opensafely-core/ehrql/blob/868e07b9d3638996c14a573030ca946765d8fdf9/ehrql/__main__.py#L112
|
|
234
|
+
# https://github.com/opensafely-core/ehrql/blob/868e07b9d3638996c14a573030ca946765d8fdf9/ehrql/exceptions.py#L66
|
|
235
|
+
# Messages have been modified to remove instructions that only apply to real
|
|
236
|
+
# jobs run in the backend (e.g. to check code runs locally, or to contact tech-support)
|
|
237
|
+
2: ("There was a problem with the command line arguments in your ehrQL action"),
|
|
238
|
+
10: "There was a problem reading your ehrQL code",
|
|
239
|
+
11: "There was a problem reading one of the supplied data files",
|
|
240
|
+
12: "You do not have the required permissions for the ehrQL you are trying to run",
|
|
241
|
+
13: "Assurance tests failed",
|
|
242
|
+
14: (
|
|
243
|
+
"Your job was making such slow progress that it was unlikely to complete "
|
|
244
|
+
"successfully"
|
|
245
|
+
),
|
|
226
246
|
}
|
|
227
247
|
|
|
228
248
|
|
|
@@ -212,7 +212,7 @@ class Job:
|
|
|
212
212
|
commit: str = None
|
|
213
213
|
# Name of workspace (effectively, the output directory)
|
|
214
214
|
workspace: str = None
|
|
215
|
-
# Only applicable to "
|
|
215
|
+
# Only applicable to "generate-dataset" jobs: the name of the database to
|
|
216
216
|
# query against
|
|
217
217
|
database_name: str = None
|
|
218
218
|
# Name of the action (one of the keys in the `actions` dict in
|
|
@@ -44,7 +44,6 @@ def test_default_no_local_images(run, capsys):
|
|
|
44
44
|
def test_default_no_local_images_force(run, capsys):
|
|
45
45
|
run.expect(["docker", "info"])
|
|
46
46
|
expect_local_images(run)
|
|
47
|
-
run.expect(["docker", "pull", tag("cohortextractor", version="latest")])
|
|
48
47
|
run.expect(["docker", "pull", tag("ehrql")])
|
|
49
48
|
run.expect(["docker", "pull", tag("jupyter")])
|
|
50
49
|
run.expect(["docker", "pull", tag("python", version="v2")])
|
|
@@ -67,7 +66,6 @@ def test_default_no_local_images_force(run, capsys):
|
|
|
67
66
|
out, err = capsys.readouterr()
|
|
68
67
|
assert err == ""
|
|
69
68
|
assert out.splitlines() == [
|
|
70
|
-
"Updating OpenSAFELY cohortextractor:latest image",
|
|
71
69
|
"Updating OpenSAFELY ehrql:v1 image",
|
|
72
70
|
"Updating OpenSAFELY jupyter:v1 image",
|
|
73
71
|
"Updating OpenSAFELY python:v2 image",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
v2.0.4
|
|
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
|
|
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
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/_internal/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/_logs/severity/__init__.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/attributes/__init__.py
RENAMED
|
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
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/metrics/_internal/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagate/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/_envcarrier.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/composite.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/propagators/textmap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/trace/propagation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/opentelemetry/util/_importlib_metadata.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/__init__.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/connection.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/fetch.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/request.py
RENAMED
|
File without changes
|
{opensafely-2.0.4 → opensafely-2.1.0}/opensafely/_vendor/urllib3/contrib/emscripten/response.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|