opensafely 1.57.0__tar.gz → 2.0.2__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 (287) hide show
  1. {opensafely-1.57.0 → opensafely-2.0.2}/PKG-INFO +8 -9
  2. {opensafely-1.57.0 → opensafely-2.0.2}/README.md +1 -1
  3. opensafely-2.0.2/opensafely/VERSION +1 -0
  4. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/__init__.py +19 -7
  5. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/certifi/__init__.py +1 -1
  6. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/certifi/cacert.pem +213 -992
  7. opensafely-2.0.2/opensafely/_vendor/charset_normalizer/api.py +1065 -0
  8. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/cd.py +152 -80
  9. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/cli/__main__.py +34 -52
  10. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/constant.py +158 -118
  11. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/legacy.py +3 -4
  12. opensafely-2.0.2/opensafely/_vendor/charset_normalizer/md.py +1002 -0
  13. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/models.py +22 -12
  14. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/utils.py +136 -95
  15. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/version.py +1 -1
  16. opensafely-2.0.2/opensafely/_vendor/idna/__main__.py +6 -0
  17. opensafely-2.0.2/opensafely/_vendor/idna/cli.py +128 -0
  18. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/idna/codec.py +51 -14
  19. opensafely-2.0.2/opensafely/_vendor/idna/compat.py +41 -0
  20. opensafely-2.0.2/opensafely/_vendor/idna/core.py +648 -0
  21. opensafely-2.0.2/opensafely/_vendor/idna/idnadata.py +1897 -0
  22. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/idna/intranges.py +5 -7
  23. opensafely-2.0.2/opensafely/_vendor/idna/package_data.py +1 -0
  24. opensafely-2.0.2/opensafely/_vendor/idna/uts46data.py +16896 -0
  25. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/_logs/__init__.py +2 -14
  26. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/_logs/_internal/__init__.py +204 -50
  27. opensafely-2.0.2/opensafely/_vendor/opentelemetry/_logs/severity/__init__.py +44 -0
  28. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/attributes/__init__.py +114 -73
  29. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/baggage/__init__.py +8 -21
  30. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/baggage/propagation/__init__.py +85 -46
  31. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/context/__init__.py +19 -38
  32. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/context/context.py +23 -14
  33. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/context/contextvars_context.py +1 -12
  34. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/environment_variables/__init__.py +1 -17
  35. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/metrics/__init__.py +1 -12
  36. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/metrics/_internal/__init__.py +51 -63
  37. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/metrics/_internal/instrument.py +100 -75
  38. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/metrics/_internal/observation.py +6 -18
  39. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/propagate/__init__.py +57 -50
  40. opensafely-2.0.2/opensafely/_vendor/opentelemetry/propagators/_envcarrier.py +98 -0
  41. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/propagators/composite.py +10 -19
  42. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/propagators/textmap.py +15 -29
  43. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/trace/__init__.py +68 -47
  44. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/trace/propagation/__init__.py +3 -17
  45. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/trace/propagation/tracecontext.py +4 -16
  46. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/trace/span.py +58 -48
  47. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/trace/status.py +3 -15
  48. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/util/_decorator.py +8 -18
  49. opensafely-2.0.2/opensafely/_vendor/opentelemetry/util/_importlib_metadata.py +63 -0
  50. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/util/_once.py +2 -13
  51. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/util/_providers.py +6 -14
  52. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/opentelemetry/util/re.py +8 -17
  53. opensafely-2.0.2/opensafely/_vendor/opentelemetry/util/types.py +46 -0
  54. opensafely-2.0.2/opensafely/_vendor/opentelemetry/version/__init__.py +4 -0
  55. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/__init__.py +57 -22
  56. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/__version__.py +2 -2
  57. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/_internal_utils.py +7 -6
  58. opensafely-2.0.2/opensafely/_vendor/requests/_types.py +183 -0
  59. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/adapters.py +124 -95
  60. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/api.py +31 -8
  61. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/auth.py +84 -44
  62. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/certs.py +1 -0
  63. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/compat.py +12 -5
  64. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/cookies.py +143 -79
  65. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/exceptions.py +16 -5
  66. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/help.py +15 -15
  67. opensafely-2.0.2/opensafely/_vendor/requests/hooks.py +48 -0
  68. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/models.py +270 -129
  69. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/sessions.py +168 -79
  70. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/status_codes.py +2 -2
  71. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/structures.py +51 -20
  72. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/utils.py +177 -108
  73. opensafely-2.0.2/opensafely/_vendor/typing_extensions.py +4422 -0
  74. opensafely-2.0.2/opensafely/_vendor/typing_extensions.pyi +1 -0
  75. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/__init__.py +62 -0
  76. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/_base_connection.py +14 -19
  77. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/_collections.py +19 -16
  78. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/_request_methods.py +64 -3
  79. opensafely-2.0.2/opensafely/_vendor/urllib3/_version.py +24 -0
  80. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/connection.py +268 -74
  81. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/connectionpool.py +39 -30
  82. opensafely-2.0.2/opensafely/_vendor/urllib3/contrib/emscripten/__init__.py +17 -0
  83. opensafely-2.0.2/opensafely/_vendor/urllib3/contrib/emscripten/connection.py +260 -0
  84. opensafely-2.0.2/opensafely/_vendor/urllib3/contrib/emscripten/fetch.py +726 -0
  85. opensafely-2.0.2/opensafely/_vendor/urllib3/contrib/emscripten/request.py +22 -0
  86. opensafely-2.0.2/opensafely/_vendor/urllib3/contrib/emscripten/response.py +281 -0
  87. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/contrib/pyopenssl.py +29 -14
  88. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/contrib/socks.py +4 -6
  89. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/exceptions.py +28 -11
  90. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/fields.py +18 -22
  91. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/filepost.py +1 -1
  92. opensafely-2.0.2/opensafely/_vendor/urllib3/http2/__init__.py +53 -0
  93. opensafely-2.0.2/opensafely/_vendor/urllib3/http2/connection.py +356 -0
  94. opensafely-2.0.2/opensafely/_vendor/urllib3/http2/probe.py +87 -0
  95. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/poolmanager.py +28 -13
  96. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/response.py +480 -117
  97. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/connection.py +1 -1
  98. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/request.py +20 -13
  99. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/retry.py +31 -3
  100. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/ssl_.py +59 -96
  101. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/ssl_match_hostname.py +5 -11
  102. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/ssltransport.py +8 -17
  103. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/timeout.py +0 -4
  104. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/url.py +2 -4
  105. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/clean.py +1 -1
  106. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/codelists.py +7 -5
  107. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/execute.py +4 -2
  108. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/info.py +4 -1
  109. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/actions.py +2 -3
  110. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/cli/local_run.py +9 -7
  111. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/config.py +7 -8
  112. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/executors/local.py +32 -21
  113. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/executors/volumes.py +2 -10
  114. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/job_executor.py +8 -11
  115. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/__init__.py +3 -3
  116. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/docker.py +1 -1
  117. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/git.py +1 -1
  118. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/string_utils.py +1 -2
  119. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/subprocess_utils.py +2 -1
  120. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/yaml_utils.py +1 -1
  121. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/models.py +9 -5
  122. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/reusable_actions.py +1 -1
  123. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/run.py +31 -28
  124. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/tracing.py +13 -11
  125. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/launch.py +10 -10
  126. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/pull.py +9 -7
  127. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/unzip.py +6 -8
  128. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/utils.py +3 -3
  129. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely.egg-info/PKG-INFO +8 -9
  130. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely.egg-info/SOURCES.txt +15 -35
  131. opensafely-2.0.2/opensafely.egg-info/requires.txt +5 -0
  132. {opensafely-1.57.0 → opensafely-2.0.2}/pyproject.toml +23 -13
  133. opensafely-2.0.2/tests/test_clean.py +99 -0
  134. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_codelists.py +3 -1
  135. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_info.py +2 -4
  136. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_init.py +33 -6
  137. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_packaging.py +4 -6
  138. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_pull.py +11 -13
  139. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_upgrade.py +2 -2
  140. opensafely-1.57.0/opensafely/VERSION +0 -1
  141. opensafely-1.57.0/opensafely/_vendor/charset_normalizer/api.py +0 -669
  142. opensafely-1.57.0/opensafely/_vendor/charset_normalizer/md.py +0 -635
  143. opensafely-1.57.0/opensafely/_vendor/deprecated/__init__.py +0 -15
  144. opensafely-1.57.0/opensafely/_vendor/deprecated/classic.py +0 -301
  145. opensafely-1.57.0/opensafely/_vendor/deprecated/sphinx.py +0 -281
  146. opensafely-1.57.0/opensafely/_vendor/deprecated.pyi +0 -1
  147. opensafely-1.57.0/opensafely/_vendor/idna/compat.py +0 -15
  148. opensafely-1.57.0/opensafely/_vendor/idna/core.py +0 -437
  149. opensafely-1.57.0/opensafely/_vendor/idna/idnadata.py +0 -4243
  150. opensafely-1.57.0/opensafely/_vendor/idna/package_data.py +0 -1
  151. opensafely-1.57.0/opensafely/_vendor/idna/uts46data.py +0 -8681
  152. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/__init__.py +0 -1132
  153. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_adapters.py +0 -83
  154. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_collections.py +0 -30
  155. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_compat.py +0 -56
  156. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_functools.py +0 -104
  157. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_itertools.py +0 -171
  158. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_meta.py +0 -75
  159. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/_text.py +0 -99
  160. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/compat/py311.py +0 -22
  161. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/compat/py39.py +0 -36
  162. opensafely-1.57.0/opensafely/_vendor/importlib_metadata/diagnose.py +0 -21
  163. opensafely-1.57.0/opensafely/_vendor/opentelemetry/_events/__init__.py +0 -224
  164. opensafely-1.57.0/opensafely/_vendor/opentelemetry/_logs/severity/__init__.py +0 -115
  165. opensafely-1.57.0/opensafely/_vendor/opentelemetry/util/_importlib_metadata.py +0 -37
  166. opensafely-1.57.0/opensafely/_vendor/opentelemetry/util/types.py +0 -59
  167. opensafely-1.57.0/opensafely/_vendor/opentelemetry/version/__init__.py +0 -15
  168. opensafely-1.57.0/opensafely/_vendor/requests/hooks.py +0 -33
  169. opensafely-1.57.0/opensafely/_vendor/requests.pyi +0 -1
  170. opensafely-1.57.0/opensafely/_vendor/ruyaml/py.typed +0 -0
  171. opensafely-1.57.0/opensafely/_vendor/urllib3/_version.py +0 -4
  172. opensafely-1.57.0/opensafely/_vendor/wrapt/__init__.py +0 -30
  173. opensafely-1.57.0/opensafely/_vendor/wrapt/__wrapt__.py +0 -14
  174. opensafely-1.57.0/opensafely/_vendor/wrapt/arguments.py +0 -38
  175. opensafely-1.57.0/opensafely/_vendor/wrapt/decorators.py +0 -541
  176. opensafely-1.57.0/opensafely/_vendor/wrapt/importer.py +0 -295
  177. opensafely-1.57.0/opensafely/_vendor/wrapt/patches.py +0 -141
  178. opensafely-1.57.0/opensafely/_vendor/wrapt/weakrefs.py +0 -98
  179. opensafely-1.57.0/opensafely/_vendor/wrapt/wrappers.py +0 -821
  180. opensafely-1.57.0/opensafely/_vendor/wrapt.pyi +0 -1
  181. opensafely-1.57.0/opensafely/_vendor/zipp/__init__.py +0 -452
  182. opensafely-1.57.0/opensafely/_vendor/zipp/compat/overlay.py +0 -37
  183. opensafely-1.57.0/opensafely/_vendor/zipp/compat/py310.py +0 -13
  184. opensafely-1.57.0/opensafely/_vendor/zipp/glob.py +0 -114
  185. opensafely-1.57.0/opensafely/_vendor/zipp.pyi +0 -1
  186. opensafely-1.57.0/opensafely/jobrunner/__init__.py +0 -0
  187. opensafely-1.57.0/opensafely/jobrunner/cli/__init__.py +0 -0
  188. opensafely-1.57.0/opensafely.egg-info/requires.txt +0 -5
  189. opensafely-1.57.0/tests/test_clean.py +0 -91
  190. {opensafely-1.57.0 → opensafely-2.0.2}/LICENSE +0 -0
  191. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/certifi/__main__.py +0 -0
  192. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/certifi/core.py +0 -0
  193. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/certifi/py.typed +0 -0
  194. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/__init__.py +0 -0
  195. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/__main__.py +0 -0
  196. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/cli/__init__.py +0 -0
  197. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/charset_normalizer/py.typed +0 -0
  198. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/distro/__init__.py +0 -0
  199. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/distro/__main__.py +0 -0
  200. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/distro/distro.py +0 -0
  201. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/distro/py.typed +0 -0
  202. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/idna/__init__.py +0 -0
  203. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/idna/py.typed +0 -0
  204. {opensafely-1.57.0/opensafely/_vendor/importlib_metadata → opensafely-2.0.2/opensafely/_vendor/opentelemetry/_logs}/py.typed +0 -0
  205. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/_events → opensafely-2.0.2/opensafely/_vendor/opentelemetry/attributes}/py.typed +0 -0
  206. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/_logs → opensafely-2.0.2/opensafely/_vendor/opentelemetry/baggage}/py.typed +0 -0
  207. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/attributes → opensafely-2.0.2/opensafely/_vendor/opentelemetry/context}/py.typed +0 -0
  208. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/baggage → opensafely-2.0.2/opensafely/_vendor/opentelemetry/environment_variables}/py.typed +0 -0
  209. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/context → opensafely-2.0.2/opensafely/_vendor/opentelemetry/metrics}/py.typed +0 -0
  210. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/environment_variables → opensafely-2.0.2/opensafely/_vendor/opentelemetry/propagate}/py.typed +0 -0
  211. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/metrics → opensafely-2.0.2/opensafely/_vendor/opentelemetry/propagators}/py.typed +0 -0
  212. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/propagate → opensafely-2.0.2/opensafely/_vendor/opentelemetry}/py.typed +0 -0
  213. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/propagators → opensafely-2.0.2/opensafely/_vendor/opentelemetry/trace}/py.typed +0 -0
  214. {opensafely-1.57.0/opensafely/_vendor/opentelemetry → opensafely-2.0.2/opensafely/_vendor/opentelemetry/util}/py.typed +0 -0
  215. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/trace → opensafely-2.0.2/opensafely/_vendor/opentelemetry/version}/py.typed +0 -0
  216. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/__init__.py +0 -0
  217. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/__main__.py +0 -0
  218. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/constants.py +0 -0
  219. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/exceptions.py +0 -0
  220. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/features.py +0 -0
  221. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/legacy.py +0 -0
  222. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/loading.py +0 -0
  223. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/main.py +0 -0
  224. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/models.py +0 -0
  225. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/outputs.py +0 -0
  226. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline/validation.py +0 -0
  227. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/pipeline.pyi +0 -0
  228. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/requests/packages.py +0 -0
  229. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/util → opensafely-2.0.2/opensafely/_vendor/requests}/py.typed +0 -0
  230. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/__init__.py +0 -0
  231. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/anchor.py +0 -0
  232. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/comments.py +0 -0
  233. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/compat.py +0 -0
  234. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/composer.py +0 -0
  235. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/configobjwalker.py +0 -0
  236. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/constructor.py +0 -0
  237. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/cyaml.py +0 -0
  238. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/dumper.py +0 -0
  239. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/emitter.py +0 -0
  240. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/error.py +0 -0
  241. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/events.py +0 -0
  242. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/loader.py +0 -0
  243. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/main.py +0 -0
  244. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/nodes.py +0 -0
  245. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/parser.py +0 -0
  246. {opensafely-1.57.0/opensafely/_vendor/opentelemetry/version → opensafely-2.0.2/opensafely/_vendor/ruyaml}/py.typed +0 -0
  247. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/reader.py +0 -0
  248. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/representer.py +0 -0
  249. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/resolver.py +0 -0
  250. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/scalarbool.py +0 -0
  251. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/scalarfloat.py +0 -0
  252. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/scalarint.py +0 -0
  253. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/scalarstring.py +0 -0
  254. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/scanner.py +0 -0
  255. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/serializer.py +0 -0
  256. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/timestamp.py +0 -0
  257. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/tokens.py +0 -0
  258. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/ruyaml/util.py +0 -0
  259. {opensafely-1.57.0/opensafely/_vendor/importlib_metadata/compat → opensafely-2.0.2/opensafely/_vendor/urllib3/contrib}/__init__.py +0 -0
  260. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/py.typed +0 -0
  261. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/__init__.py +0 -0
  262. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/proxy.py +0 -0
  263. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/response.py +0 -0
  264. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/util.py +0 -0
  265. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/_vendor/urllib3/util/wait.py +0 -0
  266. {opensafely-1.57.0/opensafely/_vendor/urllib3/contrib → opensafely-2.0.2/opensafely/jobrunner}/__init__.py +0 -0
  267. {opensafely-1.57.0/opensafely/_vendor/zipp/compat → opensafely-2.0.2/opensafely/jobrunner/cli}/__init__.py +0 -0
  268. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/cli/migrate.py +0 -0
  269. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/create_or_update_jobs.py +0 -0
  270. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/executors/__init__.py +0 -0
  271. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/database.py +0 -0
  272. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/github_validators.py +0 -0
  273. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/log_utils.py +0 -0
  274. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/lru_dict.py +0 -0
  275. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/lib/path_utils.py +0 -0
  276. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jobrunner/queries.py +0 -0
  277. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/jupyter.py +0 -0
  278. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/rstudio.py +0 -0
  279. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely/upgrade.py +0 -0
  280. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely.egg-info/dependency_links.txt +0 -0
  281. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely.egg-info/entry_points.txt +0 -0
  282. {opensafely-1.57.0 → opensafely-2.0.2}/opensafely.egg-info/top_level.txt +0 -0
  283. {opensafely-1.57.0 → opensafely-2.0.2}/setup.cfg +0 -0
  284. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_execute.py +0 -0
  285. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_launch.py +0 -0
  286. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_unzip.py +0 -0
  287. {opensafely-1.57.0 → opensafely-2.0.2}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: opensafely
3
- Version: 1.57.0
3
+ Version: 2.0.2
4
4
  Summary: Command line tool for running OpenSAFELY studies locally.
5
5
  Author-email: OpenSAFELY <tech@opensafely.org>
6
6
  License: GPL-3.0
@@ -14,20 +14,19 @@ Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Environment :: Console
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.8
18
- Classifier: Programming Language :: Python :: 3.9
19
17
  Classifier: Programming Language :: Python :: 3.10
20
18
  Classifier: Programming Language :: Python :: 3.11
21
19
  Classifier: Programming Language :: Python :: 3.12
22
20
  Classifier: Programming Language :: Python :: 3.13
23
21
  Classifier: Topic :: Scientific/Engineering
24
- Requires-Python: >=3.8
22
+ Requires-Python: >=3.10
25
23
  Description-Content-Type: text/markdown
26
24
  License-File: LICENSE
27
25
  Provides-Extra: tracing
28
- Requires-Dist: opentelemetry-api==1.33.1; extra == "tracing"
29
- Requires-Dist: opentelemetry-sdk==1.33.1; extra == "tracing"
30
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.15.0; extra == "tracing"
26
+ Requires-Dist: opentelemetry-api>=1.44.0; extra == "tracing"
27
+ Requires-Dist: opentelemetry-sdk>=1.44.0; extra == "tracing"
28
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.44.0; extra == "tracing"
29
+ Dynamic: license-file
31
30
 
32
31
  # OpenSAFELY Command Line Interface
33
32
 
@@ -35,7 +34,7 @@ This tool is part of the [OpenSAFELY](https://www.opensafely.org)
35
34
  project.
36
35
 
37
36
  To use it you will need to install:
38
- * [Python](https://www.python.org/downloads/) (at least version 3.8, but the more recent the better)
37
+ * [Python](https://www.python.org/downloads/) (at least version 3.10, but the more recent the better)
39
38
  * [git](https://git-scm.com/downloads)
40
39
  * [Docker](https://docs.docker.com/get-docker/)
41
40
 
@@ -4,7 +4,7 @@ This tool is part of the [OpenSAFELY](https://www.opensafely.org)
4
4
  project.
5
5
 
6
6
  To use it you will need to install:
7
- * [Python](https://www.python.org/downloads/) (at least version 3.8, but the more recent the better)
7
+ * [Python](https://www.python.org/downloads/) (at least version 3.10, but the more recent the better)
8
8
  * [git](https://git-scm.com/downloads)
9
9
  * [Docker](https://docs.docker.com/get-docker/)
10
10
 
@@ -0,0 +1 @@
1
+ v2.0.2
@@ -4,10 +4,10 @@ import os
4
4
  import sys
5
5
  import tempfile
6
6
  import warnings
7
- from datetime import datetime, timedelta
7
+ from datetime import datetime, timedelta, timezone
8
8
  from pathlib import Path
9
9
 
10
- from opensafely import ( # noqa: E402
10
+ from opensafely import (
11
11
  clean,
12
12
  codelists,
13
13
  execute,
@@ -19,7 +19,7 @@ from opensafely import ( # noqa: E402
19
19
  unzip,
20
20
  upgrade,
21
21
  )
22
- from opensafely.jobrunner.cli import local_run # noqa: E402
22
+ from opensafely.jobrunner.cli import local_run
23
23
 
24
24
 
25
25
  # quieten unneeded loggers
@@ -56,7 +56,7 @@ def should_version_check():
56
56
  if not VERSION_FILE.exists():
57
57
  return True
58
58
 
59
- four_hours_ago = datetime.utcnow() - timedelta(hours=4)
59
+ four_hours_ago = datetime.now(tz=timezone.utc) - timedelta(hours=4)
60
60
 
61
61
  return VERSION_FILE.stat().st_mtime < four_hours_ago.timestamp()
62
62
 
@@ -67,7 +67,7 @@ def update_version_check():
67
67
 
68
68
 
69
69
  def warn_if_unsupported_python_version():
70
- if sys.version_info < (3, 10):
70
+ if sys.version_info < (3, 10): # noqa: UP036
71
71
  print(
72
72
  "Warning: The installed Python version being used to run the OpenSAFELY "
73
73
  "CLI is older than Python 3.10 and has reached end of life.\n"
@@ -79,6 +79,18 @@ def warn_if_unsupported_python_version():
79
79
  "new versions of the OpenSAFELY CLI.\n",
80
80
  file=sys.stderr,
81
81
  )
82
+ elif sys.version_info >= (3, 14):
83
+ print(
84
+ "Warning: The installed Python version being used to run the OpenSAFELY "
85
+ "CLI is newer than Python 3.13 and is unsupported.\n"
86
+ "\n"
87
+ "This installed version of the OpenSAFELY CLI will continue to run, but "
88
+ "you may encounter unexpected behaviour.\n"
89
+ "\n"
90
+ "Please use Python 3.10 to 3.13 to ensure the OpenSAFELY CLI works "
91
+ "correctly.\n",
92
+ file=sys.stderr,
93
+ )
82
94
 
83
95
 
84
96
  def warn_if_updates_needed(argv):
@@ -107,7 +119,7 @@ def warn_if_updates_needed(argv):
107
119
  )
108
120
  # if we're out of date, don't warn the user about out of date images as well
109
121
  return
110
- except Exception:
122
+ except Exception: # noqa: S110
111
123
  pass
112
124
 
113
125
  # check for out of date images unless we are updating images.
@@ -122,7 +134,7 @@ def warn_if_updates_needed(argv):
122
134
  file=sys.stderr,
123
135
  )
124
136
 
125
- except Exception:
137
+ except Exception: # noqa: S110
126
138
  pass
127
139
 
128
140
  update_version_check()
@@ -1,4 +1,4 @@
1
1
  from .core import contents, where
2
2
 
3
3
  __all__ = ["contents", "where"]
4
- __version__ = "2025.08.03"
4
+ __version__ = "2026.07.22"