PyKubeGrader 0.2.6__py3-none-any.whl → 0.2.7__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyKubeGrader
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -28,6 +28,7 @@ Requires-Dist: types-python-dateutil
28
28
  Requires-Dist: types-pyyaml
29
29
  Requires-Dist: types-requests
30
30
  Requires-Dist: types-setuptools
31
+ Requires-Dist: httpx
31
32
  Provides-Extra: testing
32
33
  Requires-Dist: setuptools; extra == "testing"
33
34
  Requires-Dist: pytest; extra == "testing"
@@ -12,6 +12,7 @@ pykubegrader/graders/late_assignments.py,sha256=_2-rA5RqO0BWY9WAQA_mbCxxPKTOiJOl
12
12
  pykubegrader/log_parser/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
13
13
  pykubegrader/log_parser/parse.ipynb,sha256=H1CUuqiUSE-tiZV1IS7VG6HAEvoopGd6i_5QM5CwoE0,12230
14
14
  pykubegrader/log_parser/parse.py,sha256=YCs_OCnoxQKsL55MjTZWXBBBsehJL8PIB9ANnC-aE44,7379
15
+ pykubegrader/submit/submit_assignment.py,sha256=DcaxSlW3yHQvp9dYJmL4wtwc9HGaCaHBHWw99GXxX98,2659
15
16
  pykubegrader/widgets/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
16
17
  pykubegrader/widgets/multiple_choice.py,sha256=NjD3-uXSnibpUQ0mO3hRp_O-rynFyl0Dz6IXE4tnCRI,2078
17
18
  pykubegrader/widgets/reading_question.py,sha256=y30_swHwzH8LrT8deWTnxctAAmR8BSxTlXAqMgUrAT4,3031
@@ -24,9 +25,9 @@ pykubegrader/widgets_base/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-
24
25
  pykubegrader/widgets_base/multi_select.py,sha256=Cl0IN21wXLZuFu-zC65aS9tD4jMfzCRJ2DPjHao5_Ak,4044
25
26
  pykubegrader/widgets_base/reading.py,sha256=_vjUPynqmJe_R4vf-7hVhGnQR726S9GL6qT8bflBXBM,5383
26
27
  pykubegrader/widgets_base/select.py,sha256=Fw3uFNOIWo1a3CvlzSx23bvi6bSmA3TqutuRbhD4Dp8,2525
27
- PyKubeGrader-0.2.6.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
28
- PyKubeGrader-0.2.6.dist-info/METADATA,sha256=_XXXPzB7wxkhmlAFJDZwa5s2BCzFQ3-kzU4tncrn2IA,2729
29
- PyKubeGrader-0.2.6.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
30
- PyKubeGrader-0.2.6.dist-info/entry_points.txt,sha256=UPMdTT46fQwTYJWtrUwIWIbXbwyOPfNQgBFRa0frWzw,138
31
- PyKubeGrader-0.2.6.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
32
- PyKubeGrader-0.2.6.dist-info/RECORD,,
28
+ PyKubeGrader-0.2.7.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
29
+ PyKubeGrader-0.2.7.dist-info/METADATA,sha256=-sUexmOPsmqakDBCt6iyjtAGvZLCuJrNdfrubGl5fvA,2750
30
+ PyKubeGrader-0.2.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
31
+ PyKubeGrader-0.2.7.dist-info/entry_points.txt,sha256=UPMdTT46fQwTYJWtrUwIWIbXbwyOPfNQgBFRa0frWzw,138
32
+ PyKubeGrader-0.2.7.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
33
+ PyKubeGrader-0.2.7.dist-info/RECORD,,
@@ -0,0 +1,80 @@
1
+ import os
2
+ import httpx
3
+ import asyncio
4
+
5
+
6
+ def get_credentials():
7
+ """
8
+ Fetch the username and password from environment variables.
9
+ """
10
+ username = os.getenv("user_name_student")
11
+ password = os.getenv("keys_student")
12
+ if not username or not password:
13
+ raise ValueError(
14
+ "Environment variables 'user_name_student' or 'keys_student' are not set."
15
+ )
16
+ return {"username": username, "password": password}
17
+
18
+
19
+ async def call_score_assignment(
20
+ assignment_title: str, file_path: str = ".output_reduced.log"
21
+ ) -> dict:
22
+ """
23
+ Submit an assignment to the scoring endpoint.
24
+
25
+ Args:
26
+ assignment_title (str): Title of the assignment.
27
+ file_path (str): Path to the log file to upload.
28
+
29
+ Returns:
30
+ dict: JSON response from the server.
31
+ """
32
+ # Fetch the endpoint URL from environment variables
33
+ base_url = os.getenv("DB_URL")
34
+ if not base_url:
35
+ raise ValueError("Environment variable 'DB_URL' is not set.")
36
+ url = f"{base_url}score-assignment"
37
+
38
+ # Get credentials
39
+ credentials = get_credentials()
40
+
41
+ # Send the POST request
42
+ async with httpx.AsyncClient() as client:
43
+ try:
44
+ with open(file_path, "rb") as file:
45
+ response = await client.post(
46
+ url,
47
+ data={"cred": credentials, "assignment_title": assignment_title},
48
+ files={"log_file": file},
49
+ )
50
+
51
+ # Handle the response
52
+ response.raise_for_status() # Raise an exception for HTTP errors
53
+ response_data = response.json()
54
+ return response_data
55
+ except FileNotFoundError:
56
+ raise FileNotFoundError(f"The file {file_path} does not exist.")
57
+ except httpx.RequestError as e:
58
+ raise RuntimeError(f"An error occurred while requesting {url}: {e}")
59
+ except Exception as e:
60
+ raise RuntimeError(f"An unexpected error occurred: {e}")
61
+
62
+
63
+ # Importable function
64
+ def submit_assignment(
65
+ assignment_title: str, file_path: str = ".output_reduced.log"
66
+ ) -> None:
67
+ """
68
+ Synchronous wrapper for the `call_score_assignment` function.
69
+
70
+ Args:
71
+ assignment_title (str): Title of the assignment.
72
+ file_path (str): Path to the log file to upload.
73
+ """
74
+ response = asyncio.run(call_score_assignment(assignment_title, file_path))
75
+ print("Server Response:", response.get("message", "No message in response"))
76
+
77
+
78
+ # Example usage (remove this section if only the function needs to be importable):
79
+ if __name__ == "__main__":
80
+ submit_assignment("Week 1 Assignment", "path/to/your/log_file.txt")