hackerrank 2026.7.8__tar.gz → 2026.7.30__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 (58) hide show
  1. hackerrank-2026.7.30/CHANGELOG.rst +37 -0
  2. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/PKG-INFO +10 -10
  3. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/pyproject.toml +11 -12
  4. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/_dict_types.py +2 -2
  5. hackerrank-2026.7.30/src/hackerrank/async_client.py +2615 -0
  6. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/client.py +27 -25
  7. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/types.py +9 -5
  8. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/PKG-INFO +10 -10
  9. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/requires.txt +9 -9
  10. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/scm_file_list.json +33 -33
  11. hackerrank-2026.7.30/src/hackerrank.egg-info/scm_version.json +8 -0
  12. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/conftest.py +25 -13
  13. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/test_async_client.py +39 -0
  14. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/test_client.py +19 -0
  15. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/test_coverage_gaps.py +3 -9
  16. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/test_endpoints.py +458 -27
  17. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/test_types.py +7 -2
  18. hackerrank-2026.7.8/CHANGELOG.rst +0 -23
  19. hackerrank-2026.7.8/src/hackerrank/async_client.py +0 -1325
  20. hackerrank-2026.7.8/src/hackerrank.egg-info/scm_version.json +0 -8
  21. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.git_archival.txt +0 -0
  22. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.gitattributes +0 -0
  23. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/dependabot.yml +0 -0
  24. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/workflows/ci.yml +0 -0
  25. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/workflows/dependabot-merge.yml +0 -0
  26. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/workflows/lint.yml +0 -0
  27. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/workflows/publish-site.yml +0 -0
  28. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.github/workflows/release.yml +0 -0
  29. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.gitignore +0 -0
  30. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.pre-commit-config.yaml +0 -0
  31. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/.prettierrc +0 -0
  32. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/LICENSE +0 -0
  33. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/README.rst +0 -0
  34. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/conftest.py +0 -0
  35. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/__init__.py +0 -0
  36. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/api-reference.rst +0 -0
  37. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/changelog.rst +0 -0
  38. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/conf.py +0 -0
  39. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/contributing.rst +0 -0
  40. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/index.rst +0 -0
  41. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/openapi-spec.rst +0 -0
  42. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/release-process.rst +0 -0
  43. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/source/unreleased.rst +0 -0
  44. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/docs/towncrier_template.rst.jinja +0 -0
  45. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/newsfragments/.gitkeep +0 -0
  46. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/openapi.json +0 -0
  47. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/setup.cfg +0 -0
  48. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/spelling_private_dict.txt +0 -0
  49. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/__init__.py +0 -0
  50. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/exceptions.py +0 -0
  51. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/py.typed +0 -0
  52. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank/transports.py +0 -0
  53. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/SOURCES.txt +0 -0
  54. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/dependency_links.txt +0 -0
  55. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/not-zip-safe +0 -0
  56. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/src/hackerrank.egg-info/top_level.txt +0 -0
  57. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/tests/__init__.py +0 -0
  58. {hackerrank-2026.7.8 → hackerrank-2026.7.30}/zizmor.yml +0 -0
@@ -0,0 +1,37 @@
1
+ Changelog
2
+ =========
3
+
4
+ .. towncrier release notes start
5
+
6
+ 2026.07.30
7
+ ----------
8
+
9
+ - Align interview-template create and update requests with the current API,
10
+ return updated templates, and parse live string template IDs and integer
11
+ question IDs.
12
+
13
+ 2026.07.19
14
+ ----------
15
+
16
+ - SCIM v2 requests are now sent to ``https://services.hackerrank.com/scim/v2`` instead of the v3 API host, so ``client.scim`` works out of the box. A new ``scim_base_url`` argument on ``HackerRank`` and ``AsyncHackerRank`` allows overriding it.
17
+
18
+ - Bring the async ``AsyncHackerRank`` client to full parity with the synchronous ``HackerRank`` client, adding all missing operations and aligning method shapes (``ats.codepair``/``ats.codescreen``, ``teams.memberships`` and ``scim.users``/``scim.groups`` sub-namespaces).
19
+
20
+ 2026.07.08
21
+ ----------
22
+
23
+ No significant changes.
24
+
25
+ 2026.05.12.2
26
+ ------------
27
+
28
+
29
+ 2026.05.12.1
30
+ ------------
31
+
32
+
33
+ 2026.05.12
34
+ ----------
35
+
36
+
37
+ * Initial release.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hackerrank
3
- Version: 2026.7.8
3
+ Version: 2026.7.30
4
4
  Summary: Interact with the HackerRank for Work API.
5
5
  Author-email: Adam Dangoor <adamdangoor@gmail.com>
6
6
  License-Expression: MIT
@@ -25,19 +25,19 @@ Requires-Dist: beartype==0.22.9; extra == "dev"
25
25
  Requires-Dist: check-manifest==0.51; extra == "dev"
26
26
  Requires-Dist: deptry==0.25.1; extra == "dev"
27
27
  Requires-Dist: doc8==2.0.0; extra == "dev"
28
- Requires-Dist: doccmd==2026.5.25; extra == "dev"
28
+ Requires-Dist: doccmd==2026.7.19; extra == "dev"
29
29
  Requires-Dist: furo==2025.12.19; extra == "dev"
30
30
  Requires-Dist: interrogate==1.7.0; extra == "dev"
31
- Requires-Dist: mypy[faster-cache]==2.2.0; extra == "dev"
32
- Requires-Dist: mypy-strict-kwargs==2026.5.20.1; extra == "dev"
31
+ Requires-Dist: mypy[faster-cache]==2.3.0; extra == "dev"
32
+ Requires-Dist: mypy-strict-kwargs==2026.7.19.1; extra == "dev"
33
33
  Requires-Dist: openapi-mock==2026.3.2; extra == "dev"
34
- Requires-Dist: prek==0.4.8; extra == "dev"
34
+ Requires-Dist: prek==0.4.11; extra == "dev"
35
35
  Requires-Dist: pydocstringformatter==1.0.0; extra == "dev"
36
36
  Requires-Dist: pydocstyle==6.3; extra == "dev"
37
37
  Requires-Dist: pygments==2.20.0; extra == "dev"
38
38
  Requires-Dist: pylint[spelling]==4.0.6; extra == "dev"
39
39
  Requires-Dist: pylint-per-file-ignores==3.2.1; extra == "dev"
40
- Requires-Dist: pyproject-fmt==2.25.1; extra == "dev"
40
+ Requires-Dist: pyproject-fmt==2.26.0; extra == "dev"
41
41
  Requires-Dist: pyrefly==1.1.1; extra == "dev"
42
42
  Requires-Dist: pyright==1.1.411; extra == "dev"
43
43
  Requires-Dist: pyroma==5.0.1; extra == "dev"
@@ -47,7 +47,7 @@ Requires-Dist: pytest-beartype-tests==2026.4.26; extra == "dev"
47
47
  Requires-Dist: pytest-cov==7.1.0; extra == "dev"
48
48
  Requires-Dist: pyyaml==6.0.3; extra == "dev"
49
49
  Requires-Dist: respx==0.23.1; extra == "dev"
50
- Requires-Dist: ruff==0.15.20; extra == "dev"
50
+ Requires-Dist: ruff==0.16.0; extra == "dev"
51
51
  Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
52
52
  Requires-Dist: shfmt-py==4.0.0; extra == "dev"
53
53
  Requires-Dist: sphinx==9.1.0; extra == "dev"
@@ -57,13 +57,13 @@ Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
57
57
  Requires-Dist: sphinx-substitution-extensions==2026.6.17; extra == "dev"
58
58
  Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
59
59
  Requires-Dist: sphinxcontrib-towncrier==0.5.0a0; extra == "dev"
60
- Requires-Dist: strict-kwargs==2026.6.8.post1; extra == "dev"
60
+ Requires-Dist: strict-kwargs==2026.7.24; extra == "dev"
61
61
  Requires-Dist: sybil==10.1.0; extra == "dev"
62
62
  Requires-Dist: towncrier==25.8.0; extra == "dev"
63
- Requires-Dist: ty==0.0.56; extra == "dev"
63
+ Requires-Dist: ty==0.0.65; extra == "dev"
64
64
  Requires-Dist: vulture==2.16; extra == "dev"
65
65
  Requires-Dist: yamlfix==1.19.1; extra == "dev"
66
- Requires-Dist: zizmor==1.26.1; extra == "dev"
66
+ Requires-Dist: zizmor==1.28.0; extra == "dev"
67
67
  Provides-Extra: release
68
68
  Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
69
69
  Requires-Dist: towncrier==25.8.0; extra == "release"
@@ -41,19 +41,19 @@ optional-dependencies.dev = [
41
41
  "check-manifest==0.51",
42
42
  "deptry==0.25.1",
43
43
  "doc8==2.0.0",
44
- "doccmd==2026.5.25",
44
+ "doccmd==2026.7.19",
45
45
  "furo==2025.12.19",
46
46
  "interrogate==1.7.0",
47
- "mypy[faster-cache]==2.2.0",
48
- "mypy-strict-kwargs==2026.5.20.1",
47
+ "mypy[faster-cache]==2.3.0",
48
+ "mypy-strict-kwargs==2026.7.19.1",
49
49
  "openapi-mock==2026.3.2",
50
- "prek==0.4.8",
50
+ "prek==0.4.11",
51
51
  "pydocstringformatter==1.0.0",
52
52
  "pydocstyle==6.3",
53
53
  "pygments==2.20.0",
54
54
  "pylint[spelling]==4.0.6",
55
55
  "pylint-per-file-ignores==3.2.1",
56
- "pyproject-fmt==2.25.1",
56
+ "pyproject-fmt==2.26.0",
57
57
  "pyrefly==1.1.1",
58
58
  "pyright==1.1.411",
59
59
  "pyroma==5.0.1",
@@ -63,7 +63,7 @@ optional-dependencies.dev = [
63
63
  "pytest-cov==7.1.0",
64
64
  "pyyaml==6.0.3",
65
65
  "respx==0.23.1",
66
- "ruff==0.15.20",
66
+ "ruff==0.16.0",
67
67
  # We add shellcheck-py not only for shell scripts and shell code blocks,
68
68
  # but also because having it installed means that ``actionlint-py`` will
69
69
  # use it to lint shell commands in GitHub workflow files.
@@ -78,13 +78,13 @@ optional-dependencies.dev = [
78
78
  # ``sphinxcontrib-towncrier`` renders unreleased news fragments
79
79
  # into docs/source/unreleased.rst during Sphinx builds.
80
80
  "sphinxcontrib-towncrier==0.5.0a0",
81
- "strict-kwargs==2026.6.8.post1",
81
+ "strict-kwargs==2026.7.24",
82
82
  "sybil==10.1.0",
83
83
  "towncrier==25.8.0",
84
- "ty==0.0.56",
84
+ "ty==0.0.65",
85
85
  "vulture==2.16",
86
86
  "yamlfix==1.19.1",
87
- "zizmor==1.26.1",
87
+ "zizmor==1.28.0",
88
88
  ]
89
89
  optional-dependencies.release = [ "check-wheel-contents==0.6.3", "towncrier==25.8.0" ]
90
90
  urls.Documentation = "https://adamtheturtle.github.io/hackerrank/"
@@ -102,9 +102,6 @@ package-data.hackerrank = [
102
102
  ]
103
103
  zip-safe = false
104
104
 
105
- [tool.distutils]
106
- bdist_wheel.universal = true
107
-
108
105
  [tool.setuptools_scm]
109
106
  # This keeps the start of the version the same as the last release.
110
107
  # This is useful for our documentation to include e.g. binary links
@@ -121,6 +118,8 @@ lint.select = [
121
118
  lint.ignore = [
122
119
  # Ruff warns that this conflicts with the formatter.
123
120
  "COM812",
121
+ # Copyright headers are not required.
122
+ "CPY001",
124
123
  # Allow our chosen docstring line-style - pydocstringformatter handles formatting
125
124
  # but doesn't enforce D205 (blank line after summary) or D212 (summary on first line).
126
125
  "D205",
@@ -47,14 +47,14 @@ class InterviewTranscriptDict(TypedDict):
47
47
  class InterviewTemplateDict(TypedDict):
48
48
  """A HackerRank interview template."""
49
49
 
50
- id: int
50
+ id: int | str
51
51
  name: str
52
52
  created_at: NotRequired[str]
53
53
  status: NotRequired[int]
54
54
  user: NotRequired[int]
55
55
  roles: NotRequired[list[str]]
56
56
  team_share: NotRequired[int]
57
- questions: NotRequired[list[str]]
57
+ questions: NotRequired[list[int | str]]
58
58
  scorecard: NotRequired[int]
59
59
  import_template: NotRequired[bool]
60
60
  editor_access: NotRequired[bool]