PyKubeGrader 0.2.28__tar.gz → 0.2.29__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 (66) hide show
  1. {pykubegrader-0.2.28/src/PyKubeGrader.egg-info → pykubegrader-0.2.29}/PKG-INFO +1 -1
  2. {pykubegrader-0.2.28 → pykubegrader-0.2.29/src/PyKubeGrader.egg-info}/PKG-INFO +1 -1
  3. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/tokens/validate_token.py +46 -1
  4. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/.coveragerc +0 -0
  5. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/.github/workflows/main.yml +0 -0
  6. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/.gitignore +0 -0
  7. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/.readthedocs.yml +0 -0
  8. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/AUTHORS.rst +0 -0
  9. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/CHANGELOG.rst +0 -0
  10. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/CONTRIBUTING.rst +0 -0
  11. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/LICENSE.txt +0 -0
  12. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/README.rst +0 -0
  13. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/Makefile +0 -0
  14. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/_static/Drexel_blue_Logo_square_Dark.png +0 -0
  15. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/_static/Drexel_blue_Logo_square_Light.png +0 -0
  16. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/_static/custom.css +0 -0
  17. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/authors.rst +0 -0
  18. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/changelog.rst +0 -0
  19. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/conf.py +0 -0
  20. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/contributing.rst +0 -0
  21. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/index.rst +0 -0
  22. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/license.rst +0 -0
  23. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/readme.rst +0 -0
  24. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/docs/requirements.txt +0 -0
  25. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/examples/.responses.json +0 -0
  26. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/examples/true_false.ipynb +0 -0
  27. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/pyproject.toml +0 -0
  28. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/setup.cfg +0 -0
  29. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/setup.py +0 -0
  30. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/SOURCES.txt +0 -0
  31. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/dependency_links.txt +0 -0
  32. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/entry_points.txt +0 -0
  33. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/not-zip-safe +0 -0
  34. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/requires.txt +0 -0
  35. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/PyKubeGrader.egg-info/top_level.txt +0 -0
  36. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/__init__.py +0 -0
  37. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/build/__init__.py +0 -0
  38. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/build/api_notebook_builder.py +0 -0
  39. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/build/build_folder.py +0 -0
  40. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/build/clean_folder.py +0 -0
  41. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/graders/__init__.py +0 -0
  42. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/graders/late_assignments.py +0 -0
  43. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/initialize.py +0 -0
  44. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/log_parser/__init__.py +0 -0
  45. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/log_parser/parse.ipynb +0 -0
  46. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/log_parser/parse.py +0 -0
  47. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/submit/submit_assignment.py +0 -0
  48. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/telemetry.py +0 -0
  49. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/tokens/tokens.py +0 -0
  50. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/utils.py +0 -0
  51. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/validate.py +0 -0
  52. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/__init__.py +0 -0
  53. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/multiple_choice.py +0 -0
  54. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/reading_question.py +0 -0
  55. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/select_many.py +0 -0
  56. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/student_info.py +0 -0
  57. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/style.py +0 -0
  58. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/true_false.py +0 -0
  59. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets/types_question.py +0 -0
  60. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets_base/__init__.py +0 -0
  61. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets_base/multi_select.py +0 -0
  62. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets_base/reading.py +0 -0
  63. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/src/pykubegrader/widgets_base/select.py +0 -0
  64. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/tests/conftest.py +0 -0
  65. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/tests/import_test.py +0 -0
  66. {pykubegrader-0.2.28 → pykubegrader-0.2.29}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PyKubeGrader
3
- Version: 0.2.28
3
+ Version: 0.2.29
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PyKubeGrader
3
- Version: 0.2.28
3
+ Version: 0.2.29
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -1,9 +1,12 @@
1
1
  import asyncio
2
2
  import os
3
+ import sys
3
4
  from typing import Optional
4
5
 
5
6
  import httpx
6
7
  import nest_asyncio # type: ignore
8
+ import requests
9
+ from requests.auth import HTTPBasicAuth
7
10
 
8
11
  # Apply nest_asyncio for environments like Jupyter
9
12
  nest_asyncio.apply()
@@ -98,7 +101,7 @@ async def async_validate_token(token: Optional[str] = None) -> None:
98
101
  raise TokenValidationError(f"An unexpected error occurred: {e}")
99
102
 
100
103
 
101
- def validate_token(token: Optional[str] = None) -> None:
104
+ def validate_token_wrapper(token: Optional[str] = None) -> None:
102
105
  """
103
106
  Synchronous wrapper for the `async_validate_token` function.
104
107
 
@@ -123,6 +126,48 @@ def validate_token(token: Optional[str] = None) -> None:
123
126
  loop.run_until_complete(async_validate_token(token))
124
127
 
125
128
 
129
+ def validate_token(token: Optional[str] = None) -> None:
130
+ if token:
131
+ os.environ["TOKEN"] = token # If token passed, set env var
132
+ else:
133
+ token = os.getenv("TOKEN") # Otherwise try to get from env
134
+ if not token:
135
+ print("Error: No token provided", file=sys.stderr)
136
+ return
137
+
138
+ # Get endpoint URL
139
+ base_url = os.getenv("DB_URL")
140
+ if not base_url:
141
+ print("Error: Environment variable 'DB_URL' not set", file=sys.stderr)
142
+ return
143
+ endpoint = f"{base_url.rstrip('/')}/validate-token/{token}"
144
+
145
+ # Get credentials
146
+ try:
147
+ credentials = get_credentials()
148
+ except ValueError as e:
149
+ print(f"Error: {e}", file=sys.stderr)
150
+ return
151
+
152
+ username = credentials["username"]
153
+ password = credentials["password"]
154
+ basic_auth = HTTPBasicAuth(username, password)
155
+
156
+ try:
157
+ response = requests.get(url=endpoint, auth=basic_auth, timeout=10)
158
+ response.raise_for_status()
159
+
160
+ detail = response.json().get("detail", response.text)
161
+ print(detail)
162
+ except requests.exceptions.HTTPError as e:
163
+ detail = e.response.json().get("detail", e.response.text)
164
+ print(f"Error: {detail}", file=sys.stderr)
165
+ except requests.exceptions.RequestException as e:
166
+ print(f"Error: Request failed: {e}", file=sys.stderr)
167
+ except Exception as e:
168
+ print(f"Unexpected error: {e}", file=sys.stderr)
169
+
170
+
126
171
  # Example usage
127
172
  if __name__ == "__main__":
128
173
  token = "test"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes