taskcluster 91.0.1__tar.gz → 96.0.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.
Files changed (126) hide show
  1. taskcluster-96.0.0/.gitignore +84 -0
  2. taskcluster-96.0.0/CODE_OF_CONDUCT.md +15 -0
  3. taskcluster-96.0.0/CONTRIBUTING.md +27 -0
  4. taskcluster-96.0.0/Makefile +44 -0
  5. {taskcluster-91.0.1 → taskcluster-96.0.0}/PKG-INFO +20 -34
  6. taskcluster-96.0.0/lint.sh +12 -0
  7. taskcluster-96.0.0/pyproject.toml +96 -0
  8. taskcluster-96.0.0/release.sh +36 -0
  9. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/__init__.py +8 -5
  10. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/__init__.py +5 -3
  11. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/asyncclient.py +92 -86
  12. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/asyncutils.py +50 -32
  13. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/download.py +63 -32
  14. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/reader_writer.py +5 -0
  15. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/retry.py +3 -3
  16. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/upload.py +45 -21
  17. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/client.py +266 -227
  18. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/download.py +5 -1
  19. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/exceptions.py +32 -7
  20. taskcluster-96.0.0/taskcluster/generated/_client_importer.py +19 -0
  21. taskcluster-96.0.0/taskcluster/generated/aio/_client_importer.py +19 -0
  22. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/auth.py +269 -241
  23. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/authevents.py +56 -48
  24. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/github.py +99 -101
  25. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/githubevents.py +77 -69
  26. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/hooks.py +125 -111
  27. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/hooksevents.py +38 -30
  28. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/index.py +91 -79
  29. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/notify.py +89 -77
  30. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/notifyevents.py +29 -21
  31. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/object.py +71 -63
  32. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/purgecache.py +63 -53
  33. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/queue.py +469 -345
  34. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/queueevents.py +343 -213
  35. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/secrets.py +64 -56
  36. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/workermanager.py +259 -192
  37. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/workermanagerevents.py +230 -222
  38. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/auth.py +239 -231
  39. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/authevents.py +56 -48
  40. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/github.py +96 -100
  41. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/githubevents.py +77 -69
  42. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/hooks.py +116 -108
  43. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/hooksevents.py +38 -30
  44. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/index.py +85 -77
  45. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/notify.py +86 -76
  46. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/notifyevents.py +29 -21
  47. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/object.py +71 -63
  48. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/purgecache.py +60 -52
  49. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/queue.py +422 -330
  50. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/queueevents.py +343 -213
  51. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/secrets.py +64 -56
  52. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/workermanager.py +229 -182
  53. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/workermanagerevents.py +230 -222
  54. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/helper.py +27 -22
  55. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/retry.py +2 -2
  56. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/upload.py +2 -1
  57. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/utils.py +105 -88
  58. taskcluster-96.0.0/test/aio/__init__.py +0 -0
  59. taskcluster-96.0.0/test/aio/test_client.py +63 -0
  60. taskcluster-96.0.0/test/aio/test_reader_writer.py +83 -0
  61. taskcluster-96.0.0/test/aio/test_upload_download.py +417 -0
  62. taskcluster-96.0.0/test/aio/test_upload_download_real.py +166 -0
  63. taskcluster-96.0.0/test/base.py +105 -0
  64. taskcluster-96.0.0/test/conftest.py +22 -0
  65. taskcluster-96.0.0/test/public.key +30 -0
  66. taskcluster-96.0.0/test/secret.key +57 -0
  67. taskcluster-96.0.0/test/test_client.py +1118 -0
  68. taskcluster-96.0.0/test/test_exceptions.py +37 -0
  69. {taskcluster-91.0.1 → taskcluster-96.0.0}/test/test_imports.py +1 -2
  70. {taskcluster-91.0.1 → taskcluster-96.0.0}/test/test_upload_download.py +69 -58
  71. {taskcluster-91.0.1 → taskcluster-96.0.0}/test/test_upload_download_real.py +34 -29
  72. taskcluster-96.0.0/test/test_utils.py +518 -0
  73. taskcluster-96.0.0/test.sh +3 -0
  74. taskcluster-96.0.0/uv.lock +1923 -0
  75. taskcluster-91.0.1/setup.cfg +0 -11
  76. taskcluster-91.0.1/setup.py +0 -98
  77. taskcluster-91.0.1/taskcluster/generated/_client_importer.py +0 -20
  78. taskcluster-91.0.1/taskcluster/generated/aio/_client_importer.py +0 -20
  79. taskcluster-91.0.1/taskcluster.egg-info/PKG-INFO +0 -593
  80. taskcluster-91.0.1/taskcluster.egg-info/SOURCES.txt +0 -102
  81. taskcluster-91.0.1/taskcluster.egg-info/dependency_links.txt +0 -1
  82. taskcluster-91.0.1/taskcluster.egg-info/not-zip-safe +0 -1
  83. taskcluster-91.0.1/taskcluster.egg-info/requires.txt +0 -23
  84. taskcluster-91.0.1/taskcluster.egg-info/top_level.txt +0 -1
  85. taskcluster-91.0.1/test/test_client.py +0 -1031
  86. taskcluster-91.0.1/test/test_utils.py +0 -434
  87. {taskcluster-91.0.1 → taskcluster-96.0.0}/LICENSE +0 -0
  88. {taskcluster-91.0.1 → taskcluster-96.0.0}/README.md +0 -0
  89. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/auth.py +0 -0
  90. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/authevents.py +0 -0
  91. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/awsprovisioner.py +0 -0
  92. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/ec2manager.py +0 -0
  93. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/github.py +0 -0
  94. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/githubevents.py +0 -0
  95. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/hooks.py +0 -0
  96. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/hooksevents.py +0 -0
  97. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/index.py +0 -0
  98. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/login.py +0 -0
  99. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/notify.py +0 -0
  100. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/notifyevents.py +0 -0
  101. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/purgecache.py +0 -0
  102. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/queue.py +0 -0
  103. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/queueevents.py +0 -0
  104. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/secrets.py +0 -0
  105. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/workermanager.py +0 -0
  106. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/aio/workermanagerevents.py +0 -0
  107. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/auth.py +0 -0
  108. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/authevents.py +0 -0
  109. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/awsprovisioner.py +0 -0
  110. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/ec2manager.py +0 -0
  111. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/__init__.py +0 -0
  112. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/generated/aio/__init__.py +0 -0
  113. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/github.py +0 -0
  114. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/githubevents.py +0 -0
  115. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/hooks.py +0 -0
  116. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/hooksevents.py +0 -0
  117. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/index.py +0 -0
  118. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/login.py +0 -0
  119. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/notify.py +0 -0
  120. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/notifyevents.py +0 -0
  121. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/purgecache.py +0 -0
  122. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/queue.py +0 -0
  123. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/queueevents.py +0 -0
  124. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/secrets.py +0 -0
  125. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/workermanager.py +0 -0
  126. {taskcluster-91.0.1 → taskcluster-96.0.0}/taskcluster/workermanagerevents.py +0 -0
@@ -0,0 +1,84 @@
1
+ # This project's things
2
+ docs/client.rst
3
+ env-*
4
+ *.tar.gz
5
+ *.tar.bz2
6
+ *.tar
7
+ *.tar.xz
8
+
9
+ # Vim
10
+ [._]*.s[a-w][a-z]
11
+ [._]s[a-w][a-z]
12
+ *.un~
13
+ Session.vim
14
+ .netrwhist
15
+ *~
16
+
17
+ # Node downloads
18
+ node-v*/
19
+ node_modules/
20
+
21
+ # Byte-compiled / optimized / DLL files
22
+ __pycache__/
23
+ *.py[cod]
24
+ *$py.class
25
+
26
+ # C extensions
27
+ *.so
28
+
29
+ # Distribution / packaging
30
+ .Python
31
+ env/
32
+ build/
33
+ develop-eggs/
34
+ dist/
35
+ downloads/
36
+ eggs/
37
+ lib/
38
+ lib64/
39
+ parts/
40
+ sdist/
41
+ var/
42
+ *.egg-info/
43
+ .installed.cfg
44
+ *.egg
45
+ .eggs/
46
+
47
+ # PyInstaller
48
+ # Usually these files are written by a python script from a template
49
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
50
+ *.manifest
51
+ *.spec
52
+
53
+ # Installer logs
54
+ pip-log.txt
55
+ pip-delete-this-directory.txt
56
+
57
+ # Unit test / coverage reports
58
+ htmlcov/
59
+ .venv/
60
+ .coverage
61
+ .cache
62
+ nosetests.xml
63
+ coverage.xml
64
+ .pytest_cache/
65
+
66
+ # Translations
67
+ *.mo
68
+ *.pot
69
+
70
+ # Django stuff:
71
+ *.log
72
+
73
+ # Sphinx documentation
74
+ docs/_build/
75
+
76
+ # PyBuilder
77
+ target/
78
+ # hypothesis cache
79
+ .hypothesis/
80
+
81
+ # vim's python-mode plugin
82
+ .ropeproject
83
+
84
+ .release/
@@ -0,0 +1,15 @@
1
+ # Community Participation Guidelines
2
+
3
+ This repository is governed by Mozilla's code of conduct and etiquette guidelines.
4
+ For more details, please read the
5
+ [Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
6
+
7
+ ## How to Report
8
+ For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.
9
+
10
+ <!--
11
+ ## Project Specific Etiquette
12
+
13
+ In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html).
14
+ Please update for your project.
15
+ -->
@@ -0,0 +1,27 @@
1
+ # How to Contribute
2
+
3
+ We welcome pull requests from everyone. We do expect everyone to adhere to the [Mozilla Community Participation Guidelines][participation].
4
+
5
+ If you're trying to figure out what to work on, here are some places to find suitable projects:
6
+ * [Good first bugs][goodfirstbug]: these are scoped to make it easy for first-time contributors to get their feet wet with Taskcluster code.
7
+ * [Mentored bugs][bugsahoy]: these are slightly more involved projects that may require insight or guidance from someone on the Taskcluster team.
8
+ * [Full list of open issues][issues]: everything else
9
+
10
+ If the project you're interested in working on isn't covered by a bug or issue, or you're unsure about how to proceed on an existing issue, it's a good idea to talk to someone on the Taskcluster team before you go too far down a particular path. You can find us in the #taskcluster channel on [Mozilla's IRC server][irc] to discuss. You can also simply add a comment to the issue or bug.
11
+
12
+ Once you've found an issue to work on and written a patch, submit a pull request. Some things that will increase the chance that your pull request is accepted:
13
+
14
+ * Follow our [best practices][bestpractices].
15
+ * This includes [writing or updating tests][testing].
16
+ * Write a [good commit message][commit].
17
+
18
+ Welcome to the team!
19
+
20
+ [participation]: https://www.mozilla.org/en-US/about/governance/policies/participation/
21
+ [issues]: ../../issues
22
+ [bugsahoy]: https://www.joshmatthews.net/bugsahoy/?taskcluster=1
23
+ [goodfirstbug]: http://www.joshmatthews.net/bugsahoy/?taskcluster=1&simple=1
24
+ [irc]: https://wiki.mozilla.org/IRC
25
+ [bestpractices]: https://docs.taskcluster.net/docs/manual/design/devel/best-practices
26
+ [testing]: https://docs.taskcluster.net/docs/manual/design/devel/best-practices/testing
27
+ [commit]: https://docs.taskcluster.net/docs/manual/design/devel/best-practices/commits
@@ -0,0 +1,44 @@
1
+ VENV := .venv
2
+ PYTHON := $(VENV)/bin/python
3
+ APIS_JSON=$(PWD)/apis.json
4
+ UV := $(shell which uv)
5
+
6
+ .PHONY: test
7
+ test: devel
8
+ $(UV) run pytest
9
+
10
+ .PHONY: lint
11
+ lint: devel
12
+ $(UV) run ruff check taskcluster test
13
+
14
+ .PHONY: format
15
+ format: devel
16
+ $(UV) run ruff format taskcluster test
17
+
18
+ .PHONY: update
19
+ update: docs
20
+
21
+ .PHONY: clean
22
+ clean:
23
+ rm -rf .venv htmlcov .coverage nosetests.xml
24
+ rm -rf *.egg *.egg-info .eggs/ dist/ build/
25
+ find . -name "*.py?" -exec rm {} +
26
+ find . -type d -name __pycache__ -exec rm -rf {} +
27
+ find . -type d -name .hypothesis -exec rm -rf {} +
28
+
29
+ .PHONY: docs
30
+ docs: devel
31
+ $(UV) run --with grip grip --export README.md
32
+ @echo "Now, upload README.html wherever docs go!"
33
+
34
+ .PHONY: devel
35
+ devel:
36
+ @if ! command -v uv >/dev/null 2>&1; then \
37
+ echo "uv not found, installing..."; \
38
+ curl -LsSf https://astral.sh/uv/install.sh | sh; \
39
+ fi
40
+ $(UV) sync --all-extras
41
+
42
+ .PHONY: install
43
+ install:
44
+ $(UV) pip install -e .
@@ -1,49 +1,35 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskcluster
3
- Version: 91.0.1
3
+ Version: 96.0.0
4
4
  Summary: Python client for Taskcluster
5
- Home-page: https://github.com/taskcluster/taskcluster
6
- Author: Mozilla Taskcluster and Release Engineering
7
- Author-email: release+python@mozilla.com
5
+ Project-URL: Homepage, https://github.com/taskcluster/taskcluster
6
+ Project-URL: Repository, https://github.com/taskcluster/taskcluster
7
+ Project-URL: Documentation, https://docs.taskcluster.net
8
+ Project-URL: Changelog, https://github.com/taskcluster/taskcluster/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/taskcluster/taskcluster/issues
10
+ Author-email: Mozilla Taskcluster and Release Engineering <release+python@mozilla.com>
11
+ License: MPL-2.0
12
+ License-File: LICENSE
13
+ Keywords: api,client,taskcluster
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
16
+ Classifier: Programming Language :: Python :: 3
8
17
  Classifier: Programming Language :: Python :: 3.9
9
18
  Classifier: Programming Language :: Python :: 3.10
10
19
  Classifier: Programming Language :: Python :: 3.11
11
20
  Classifier: Programming Language :: Python :: 3.12
12
21
  Classifier: Programming Language :: Python :: 3.13
13
- Description-Content-Type: text/markdown
14
- License-File: LICENSE
15
- Requires-Dist: requests>=2.4.3
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Requires-Python: >=3.9
25
+ Requires-Dist: aiohttp>=3.7.4
26
+ Requires-Dist: async-timeout>=2.0.0
16
27
  Requires-Dist: mohawk>=0.3.4
17
28
  Requires-Dist: python-dateutil>=2.8.2
29
+ Requires-Dist: requests>=2.4.3
18
30
  Requires-Dist: slugid>=2
19
31
  Requires-Dist: taskcluster-urls>=12.1.0
20
- Requires-Dist: aiohttp>=3.7.4
21
- Requires-Dist: async_timeout>=2.0.0
22
- Provides-Extra: test
23
- Requires-Dist: pytest; extra == "test"
24
- Requires-Dist: pytest-cov; extra == "test"
25
- Requires-Dist: pytest-mock; extra == "test"
26
- Requires-Dist: pytest-asyncio; extra == "test"
27
- Requires-Dist: httmock; extra == "test"
28
- Requires-Dist: mock; extra == "test"
29
- Requires-Dist: setuptools-lint; extra == "test"
30
- Requires-Dist: flake8; extra == "test"
31
- Requires-Dist: psutil; extra == "test"
32
- Requires-Dist: hypothesis; extra == "test"
33
- Requires-Dist: tox; extra == "test"
34
- Requires-Dist: coverage; extra == "test"
35
- Requires-Dist: aiofiles; extra == "test"
36
- Requires-Dist: httptest; extra == "test"
37
- Dynamic: author
38
- Dynamic: author-email
39
- Dynamic: classifier
40
- Dynamic: description
41
- Dynamic: description-content-type
42
- Dynamic: home-page
43
- Dynamic: license-file
44
- Dynamic: provides-extra
45
- Dynamic: requires-dist
46
- Dynamic: summary
32
+ Description-Content-Type: text/markdown
47
33
 
48
34
  # Taskcluster Client for Python
49
35
 
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+ set -e
3
+ # Lint using ruff
4
+ # Note: Generated files have special rules applied
5
+
6
+ echo "Running ruff check..."
7
+ uv run ruff check taskcluster test
8
+
9
+ echo "Running ruff format check..."
10
+ uv run ruff format --check taskcluster test
11
+
12
+ echo "Linting complete!"
@@ -0,0 +1,96 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "taskcluster"
7
+ version = "96.0.0"
8
+ description = "Python client for Taskcluster"
9
+ readme = "README.md"
10
+ license = {text = "MPL-2.0"}
11
+ requires-python = ">=3.9"
12
+ authors = [
13
+ {name = "Mozilla Taskcluster and Release Engineering", email = "release+python@mozilla.com"},
14
+ ]
15
+ keywords = ["taskcluster", "api", "client"]
16
+ classifiers = [
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.9",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
24
+ "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
25
+ "Intended Audience :: Developers",
26
+ "Topic :: Software Development :: Libraries :: Python Modules",
27
+ ]
28
+
29
+ dependencies = [
30
+ "requests>=2.4.3",
31
+ "mohawk>=0.3.4",
32
+ "python-dateutil>=2.8.2",
33
+ "slugid>=2",
34
+ "taskcluster-urls>=12.1.0",
35
+ "aiohttp>=3.7.4",
36
+ "async_timeout>=2.0.0",
37
+ ]
38
+
39
+ [dependency-groups]
40
+ dev = [
41
+ "pytest",
42
+ "pytest-cov",
43
+ "pytest-mock",
44
+ "pytest-asyncio",
45
+ "httmock",
46
+ "mock",
47
+ "flake8",
48
+ "psutil",
49
+ "hypothesis",
50
+ "coverage",
51
+ "aiofiles",
52
+ "httptest",
53
+ "ruff",
54
+ "grip",
55
+ ]
56
+
57
+ [project.urls]
58
+ Homepage = "https://github.com/taskcluster/taskcluster"
59
+ Repository = "https://github.com/taskcluster/taskcluster"
60
+ Documentation = "https://docs.taskcluster.net"
61
+ Changelog = "https://github.com/taskcluster/taskcluster/blob/main/CHANGELOG.md"
62
+ Issues = "https://github.com/taskcluster/taskcluster/issues"
63
+
64
+ [tool.hatch.build.targets.wheel]
65
+ packages = ["taskcluster"]
66
+
67
+ [tool.pytest.ini_options]
68
+ addopts = "--tb=native"
69
+ testpaths = ["test"]
70
+
71
+ [tool.coverage.run]
72
+ source = ["taskcluster"]
73
+ branch = true
74
+
75
+ [tool.coverage.report]
76
+ show_missing = true
77
+ skip_covered = false
78
+
79
+ [tool.ruff]
80
+ line-length = 88
81
+ target-version = "py39"
82
+
83
+ [tool.ruff.lint]
84
+ select = [
85
+ "E", # pycodestyle errors
86
+ "W", # pycodestyle warnings
87
+ "F", # pyflakes
88
+ "I", # isort
89
+ "UP", # pyupgrade
90
+ ]
91
+ ignore = [
92
+ "E501", # line too long (handled by formatter)
93
+ ]
94
+
95
+ [tool.ruff.lint.isort]
96
+ known-first-party = ["taskcluster"]
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+
3
+ # This script is used to generate releases of the python taskcluster client in
4
+ # a uniform way and upload it to pypi. It should be the only way that releases
5
+ # are created.
6
+
7
+ # Note that the VERSION in pyproject.toml should be updated before release!
8
+
9
+ REPOSITORY_URL=https://test.pypi.org/legacy/
10
+ if [ "$1" = "--real" ]; then
11
+ REPOSITORY_URL=https://upload.pypi.org/legacy/
12
+ fi
13
+
14
+ # step into directory containing this script
15
+ cd "$(dirname "${0}")"
16
+
17
+ # exit in case of bad exit code
18
+ set -e
19
+
20
+ # begin making the distribution
21
+ rm -rf dist/
22
+ rm -rf build/
23
+
24
+ # Build and publish using uv
25
+ # Install uv if not already available
26
+ if ! command -v uv &> /dev/null; then
27
+ echo "uv not found, installing..."
28
+ curl -LsSf https://astral.sh/uv/install.sh | sh
29
+ source $HOME/.local/bin/env
30
+ fi
31
+
32
+ # Build the package using uv
33
+ uv build
34
+
35
+ # Publish to PyPI using uv
36
+ uv publish --publish-url $REPOSITORY_URL
@@ -1,13 +1,16 @@
1
- """ Python client for Taskcluster """
2
- from __future__ import absolute_import, division, print_function, unicode_literals
1
+ """Python client for Taskcluster"""
3
2
 
4
3
  import logging
5
4
  import os
6
- from .client import createSession # NOQA
7
- from .client import createTemporaryCredentials # NOQA
8
- from taskcluster.utils import * # NOQA
5
+
9
6
  from taskcluster.exceptions import * # NOQA
10
7
  from taskcluster.generated._client_importer import * # NOQA
8
+ from taskcluster.utils import * # NOQA
9
+
10
+ from .client import (
11
+ createSession, # NOQA
12
+ createTemporaryCredentials, # NOQA
13
+ )
11
14
 
12
15
  log = logging.getLogger(__name__)
13
16
 
@@ -1,11 +1,13 @@
1
- """ Python client for Taskcluster """
1
+ """Python client for Taskcluster"""
2
2
 
3
3
  import logging
4
4
  import os
5
- from .asyncclient import createSession # NOQA
6
- from taskcluster.utils import * # NOQA
5
+
7
6
  from taskcluster.exceptions import * # NOQA
7
+ from taskcluster.utils import * # NOQA
8
+
8
9
  from ..generated.aio._client_importer import * # NOQA
10
+ from .asyncclient import createSession # NOQA
9
11
 
10
12
  log = logging.getLogger(__name__)
11
13