PyKubeGrader 0.2.33__py3-none-any.whl → 0.2.35__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.2
2
2
  Name: PyKubeGrader
3
- Version: 0.2.33
3
+ Version: 0.2.35
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -1,8 +1,8 @@
1
1
  pykubegrader/__init__.py,sha256=AoAkdfIjDDZGWLlsIRENNq06L9h46kDGBIE8vRmsCfg,311
2
- pykubegrader/initialize.py,sha256=W-O1d9hy6BIYS28x3kcLG50WnNC4196eZwqwzVZdsgU,3902
3
- pykubegrader/telemetry.py,sha256=4rMEWfijv50yE2sE1PoZKJTAwLTvPMzmclS2hrj_e9g,5900
4
- pykubegrader/utils.py,sha256=T3GYnLnTL9VXjTZNPr00sUgMgobQYsNTGwynMyXdvHk,696
5
- pykubegrader/validate.py,sha256=2KLSB3wfFZbBh1NGgmrOV073paKAgrQz4AgA6LmCIj4,11076
2
+ pykubegrader/initialize.py,sha256=Bwu1q18l18FB9lGppvt-L41D5gzr3S8t6zC0_UbrASw,3994
3
+ pykubegrader/telemetry.py,sha256=jP_mLsn5fBAkAT8sqwEBK0oGKjsOXbtZFoujje68FqI,6288
4
+ pykubegrader/utils.py,sha256=FrxuZ3gtTBTm5FQeH5c0bF9kFjA_AVtE5AYeFhzwKZ0,827
5
+ pykubegrader/validate.py,sha256=OKnItGyd-L8QPKcsE0KRuwBI_IxKiJzMLJKZiA2j3II,11184
6
6
  pykubegrader/build/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
7
  pykubegrader/build/api_notebook_builder.py,sha256=dlcVrGgsvxnt6GlAUN3e-FrpsPNJKXSHni1fstRCBik,20311
8
8
  pykubegrader/build/build_folder.py,sha256=5jl_TAnxfd9sqWvggJr4i3E7mrEf03cmFDotVrgTZWQ,82697
@@ -13,7 +13,7 @@ pykubegrader/log_parser/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YB
13
13
  pykubegrader/log_parser/parse.ipynb,sha256=5e-9dzUbJk2M8kPP55lVeksm86lSY5ocKfWOP2RSWH0,11921
14
14
  pykubegrader/log_parser/parse.py,sha256=dXzTEOTI6VTRNoHFDAjg6hZUhvB3kHtMb10_KW3NPrw,7641
15
15
  pykubegrader/submit/submit_assignment.py,sha256=UgJXKWw5b8-bRSFnba4iHAyXnujULHcWIask7hKx9ik,3421
16
- pykubegrader/tokens/tokens.py,sha256=TOj0jRun1lWTztKA7KX9SjzIfNQqkwdnbczrFSPWB7Y,1089
16
+ pykubegrader/tokens/tokens.py,sha256=X9f3SzrGCrAJp_BXhr6VJn5f0LxtgQ7HLPBw7zEF2BY,1198
17
17
  pykubegrader/tokens/validate_token.py,sha256=MQtgz_USvSZ9JahJ48ybjp74F5aYz64lhtvuwVc4kQw,2712
18
18
  pykubegrader/widgets/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
19
19
  pykubegrader/widgets/multiple_choice.py,sha256=NjD3-uXSnibpUQ0mO3hRp_O-rynFyl0Dz6IXE4tnCRI,2078
@@ -27,9 +27,9 @@ pykubegrader/widgets_base/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-
27
27
  pykubegrader/widgets_base/multi_select.py,sha256=Cl0IN21wXLZuFu-zC65aS9tD4jMfzCRJ2DPjHao5_Ak,4044
28
28
  pykubegrader/widgets_base/reading.py,sha256=xmvN1UIXwk32v9S-JhsXwDc7axPlgpvoxSeM3II8sxY,5393
29
29
  pykubegrader/widgets_base/select.py,sha256=Fw3uFNOIWo1a3CvlzSx23bvi6bSmA3TqutuRbhD4Dp8,2525
30
- PyKubeGrader-0.2.33.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
31
- PyKubeGrader-0.2.33.dist-info/METADATA,sha256=HRHP59oTmYU6gTF21A3NircxAx1nwsc1p8Ecg7xPPz0,2779
32
- PyKubeGrader-0.2.33.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
33
- PyKubeGrader-0.2.33.dist-info/entry_points.txt,sha256=UPMdTT46fQwTYJWtrUwIWIbXbwyOPfNQgBFRa0frWzw,138
34
- PyKubeGrader-0.2.33.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
35
- PyKubeGrader-0.2.33.dist-info/RECORD,,
30
+ PyKubeGrader-0.2.35.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
31
+ PyKubeGrader-0.2.35.dist-info/METADATA,sha256=R4xFLArrD0fLQwL8Wekm6BwI3vh3HN2to6m0NbN_cAo,2779
32
+ PyKubeGrader-0.2.35.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
33
+ PyKubeGrader-0.2.35.dist-info/entry_points.txt,sha256=UPMdTT46fQwTYJWtrUwIWIbXbwyOPfNQgBFRa0frWzw,138
34
+ PyKubeGrader-0.2.35.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
35
+ PyKubeGrader-0.2.35.dist-info/RECORD,,
@@ -6,9 +6,10 @@ from typing import Optional
6
6
 
7
7
  import panel as pn
8
8
  import requests
9
- from IPython import get_ipython
9
+ from IPython.core.getipython import get_ipython
10
10
 
11
11
  from .telemetry import ensure_responses, log_variable, telemetry, update_responses
12
+ from .utils import api_base_url
12
13
 
13
14
 
14
15
  # TODO: could cleanup to remove redundant imports
@@ -16,7 +17,6 @@ def initialize_assignment(
16
17
  name: str,
17
18
  week: str,
18
19
  assignment_type: str,
19
- url: str = "https://engr-131-api.eastus.cloudapp.azure.com/",
20
20
  verbose: bool = False,
21
21
  assignment_points: Optional[float] = None,
22
22
  assignment_tag: Optional[str] = None,
@@ -72,8 +72,10 @@ def initialize_assignment(
72
72
  pn.extension(silent=True)
73
73
 
74
74
  # Check connection to API server
75
+ if not api_base_url:
76
+ raise Exception("Environment variable for API URL not set")
75
77
  params = {"jhub_user": responses["jhub_user"]}
76
- response = requests.get(url, params=params)
78
+ response = requests.get(api_base_url, params=params)
77
79
  if verbose:
78
80
  print(f"status code: {response.status_code}")
79
81
  data = response.json()
pykubegrader/telemetry.py CHANGED
@@ -13,6 +13,8 @@ from requests import Response
13
13
  from requests.auth import HTTPBasicAuth
14
14
  from requests.exceptions import RequestException
15
15
 
16
+ from .utils import api_base_url, student_pw, student_user
17
+
16
18
  #
17
19
  # Logging setup
18
20
  #
@@ -126,11 +128,11 @@ def update_responses(key: str, value) -> dict:
126
128
  #
127
129
 
128
130
 
129
- def score_question(
130
- term: str = "winter_2025",
131
- base_url: str = "https://engr-131-api.eastus.cloudapp.azure.com",
132
- ) -> None:
133
- url = base_url + "/live-scorer"
131
+ def score_question(term: str = "winter_2025") -> None:
132
+ if not student_user or not student_pw or not api_base_url:
133
+ raise ValueError("Necessary environment variables not set")
134
+
135
+ url = api_base_url.rstrip("/") + "/live-scorer"
134
136
 
135
137
  responses = ensure_responses()
136
138
 
@@ -144,7 +146,9 @@ def score_question(
144
146
  }
145
147
 
146
148
  try:
147
- res = requests.post(url, json=payload, auth=HTTPBasicAuth("student", "capture"))
149
+ res = requests.post(
150
+ url, json=payload, auth=HTTPBasicAuth(student_user, student_pw)
151
+ )
148
152
  res.raise_for_status()
149
153
 
150
154
  res_data: dict[str, tuple[float, float]] = res.json()
@@ -170,9 +174,11 @@ def submit_question(
170
174
  question: str,
171
175
  responses: dict,
172
176
  score: dict,
173
- base_url: str = "https://engr-131-api.eastus.cloudapp.azure.com/",
174
177
  ) -> Response:
175
- url = base_url + "/submit-question"
178
+ if not student_user or not student_pw or not api_base_url:
179
+ raise ValueError("Necessary environment variables not set")
180
+
181
+ url = api_base_url.rstrip("/") + "/submit-question"
176
182
 
177
183
  payload = {
178
184
  "student_email": student_email,
@@ -183,33 +189,35 @@ def submit_question(
183
189
  "score": score,
184
190
  }
185
191
 
186
- res = requests.post(url, json=payload, auth=HTTPBasicAuth("student", "capture"))
192
+ res = requests.post(url, json=payload, auth=HTTPBasicAuth(student_user, student_pw))
187
193
 
188
194
  return res
189
195
 
190
196
 
191
197
  # TODO: Refine
192
- def verify_server(
193
- jhub_user: Optional[str] = None,
194
- url: str = "https://engr-131-api.eastus.cloudapp.azure.com/",
195
- ) -> str:
198
+ def verify_server(jhub_user: Optional[str] = None) -> str:
199
+ if not api_base_url:
200
+ raise ValueError("Environment variable for API URL not set")
196
201
  params = {"jhub_user": jhub_user} if jhub_user else {}
197
- res = requests.get(url, params=params)
202
+ res = requests.get(api_base_url, params=params)
198
203
  message = f"status code: {res.status_code}"
199
204
  return message
200
205
 
201
206
 
202
207
  def get_my_grades() -> dict[str, float]:
208
+ if not student_user or not student_pw or not api_base_url:
209
+ raise ValueError("Necessary environment variables not set")
210
+
203
211
  from_hostname = socket.gethostname().removeprefix("jupyter-")
204
212
  from_env = os.getenv("JUPYTERHUB_USER")
205
213
  if from_hostname != from_env:
206
- raise ValueError("Problem with JupiterHub username")
214
+ raise ValueError("Problem with JupyterHub username")
207
215
 
208
216
  params = {"username": from_env}
209
217
  res = requests.get(
210
- "https://engr-131-api.eastus.cloudapp.azure.com/my-grades",
218
+ url=api_base_url.rstrip("/") + "/my-grades",
211
219
  params=params,
212
- auth=HTTPBasicAuth("student", "capture"),
220
+ auth=HTTPBasicAuth(student_user, student_pw),
213
221
  )
214
222
  res.raise_for_status()
215
223
 
@@ -3,6 +3,8 @@ import os
3
3
  import requests
4
4
  from requests.auth import HTTPBasicAuth
5
5
 
6
+ from ..utils import api_base_url
7
+
6
8
 
7
9
  def build_token_payload(token: str, duration: int) -> dict:
8
10
  jhub_user = os.getenv("JUPYTERHUB_USER")
@@ -21,7 +23,9 @@ def add_token(token: str, duration: int = 20) -> None:
21
23
  Sends a POST request to mint a token
22
24
  """
23
25
 
24
- url = "https://engr-131-api.eastus.cloudapp.azure.com/tokens"
26
+ if not api_base_url:
27
+ raise ValueError("Environment variable for API URL not set")
28
+ url = api_base_url.rstrip("/") + "/tokens"
25
29
 
26
30
  payload = build_token_payload(token=token, duration=duration)
27
31
 
pykubegrader/utils.py CHANGED
@@ -1,8 +1,13 @@
1
+ import os
1
2
  import random
2
3
  from typing import Optional, Tuple
3
4
 
4
5
  import panel as pn
5
6
 
7
+ api_base_url = os.getenv("DB_URL")
8
+ student_user = os.getenv("user_name_student")
9
+ student_pw = os.getenv("keys_student")
10
+
6
11
 
7
12
  def list_of_lists(options: list) -> bool:
8
13
  return all(isinstance(elem, list) for elem in options)
pykubegrader/validate.py CHANGED
@@ -20,11 +20,14 @@ def validate_logfile(
20
20
  assignment_id: str,
21
21
  question_max_scores: dict[int, int],
22
22
  free_response_questions: int = 0,
23
- username: str = "student",
24
- password: str = "capture",
25
- base_url: str = "https://engr-131-api.eastus.cloudapp.azure.com",
26
23
  key_box=None,
27
24
  ) -> None:
25
+ username = os.getenv("user_name_student")
26
+ password = os.getenv("keys_student")
27
+ base_url = os.getenv("DB_URL")
28
+ if not username or not password or not base_url:
29
+ sys.exit("Necessary environment variables are not set")
30
+
28
31
  login_data = {
29
32
  "username": username,
30
33
  "password": password,