PyKubeGrader 0.2.33__py3-none-any.whl → 0.2.34__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.34
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
2
+ pykubegrader/initialize.py,sha256=oA97fRQXNaQiqHThvwgm90t-6Qp--BXTA4t1mzZhluU,3998
3
+ pykubegrader/telemetry.py,sha256=-OfdtD4rzkrPnvVWv3bUDwB0Nnl5RVToU7LREbp9wVk,6350
4
4
  pykubegrader/utils.py,sha256=T3GYnLnTL9VXjTZNPr00sUgMgobQYsNTGwynMyXdvHk,696
5
- pykubegrader/validate.py,sha256=2KLSB3wfFZbBh1NGgmrOV073paKAgrQz4AgA6LmCIj4,11076
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=T8-Q_YeSxPdB0Om4HTNJUFYVczPCBPZc3Biqc8ieP9s,1200
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.34.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
31
+ PyKubeGrader-0.2.34.dist-info/METADATA,sha256=FMMZd7Q_vSU-1VCPgYdaN5jIGsCsmYMNkIGxJwhqDms,2779
32
+ PyKubeGrader-0.2.34.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
33
+ PyKubeGrader-0.2.34.dist-info/entry_points.txt,sha256=UPMdTT46fQwTYJWtrUwIWIbXbwyOPfNQgBFRa0frWzw,138
34
+ PyKubeGrader-0.2.34.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
35
+ PyKubeGrader-0.2.34.dist-info/RECORD,,
@@ -6,17 +6,18 @@ 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
12
 
13
+ api_base_url = os.getenv("DB_URL")
14
+
13
15
 
14
16
  # TODO: could cleanup to remove redundant imports
15
17
  def initialize_assignment(
16
18
  name: str,
17
19
  week: str,
18
20
  assignment_type: str,
19
- url: str = "https://engr-131-api.eastus.cloudapp.azure.com/",
20
21
  verbose: bool = False,
21
22
  assignment_points: Optional[float] = None,
22
23
  assignment_tag: Optional[str] = None,
@@ -72,8 +73,10 @@ def initialize_assignment(
72
73
  pn.extension(silent=True)
73
74
 
74
75
  # Check connection to API server
76
+ if not api_base_url:
77
+ raise Exception("Environment variable for API URL not set")
75
78
  params = {"jhub_user": responses["jhub_user"]}
76
- response = requests.get(url, params=params)
79
+ response = requests.get(api_base_url, params=params)
77
80
  if verbose:
78
81
  print(f"status code: {response.status_code}")
79
82
  data = response.json()
pykubegrader/telemetry.py CHANGED
@@ -13,6 +13,10 @@ from requests import Response
13
13
  from requests.auth import HTTPBasicAuth
14
14
  from requests.exceptions import RequestException
15
15
 
16
+ student_user = os.getenv("user_name_student")
17
+ student_pw = os.getenv("keys_student")
18
+ api_base_url = os.getenv("DB_URL")
19
+
16
20
  #
17
21
  # Logging setup
18
22
  #
@@ -126,11 +130,11 @@ def update_responses(key: str, value) -> dict:
126
130
  #
127
131
 
128
132
 
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"
133
+ def score_question(term: str = "winter_2025") -> None:
134
+ if not student_user or not student_pw or not api_base_url:
135
+ raise ValueError("Necessary environment variables not set")
136
+
137
+ url = api_base_url.rstrip("/") + "/live-scorer"
134
138
 
135
139
  responses = ensure_responses()
136
140
 
@@ -144,7 +148,9 @@ def score_question(
144
148
  }
145
149
 
146
150
  try:
147
- res = requests.post(url, json=payload, auth=HTTPBasicAuth("student", "capture"))
151
+ res = requests.post(
152
+ url, json=payload, auth=HTTPBasicAuth(student_user, student_pw)
153
+ )
148
154
  res.raise_for_status()
149
155
 
150
156
  res_data: dict[str, tuple[float, float]] = res.json()
@@ -170,9 +176,11 @@ def submit_question(
170
176
  question: str,
171
177
  responses: dict,
172
178
  score: dict,
173
- base_url: str = "https://engr-131-api.eastus.cloudapp.azure.com/",
174
179
  ) -> Response:
175
- url = base_url + "/submit-question"
180
+ if not student_user or not student_pw or not api_base_url:
181
+ raise ValueError("Necessary environment variables not set")
182
+
183
+ url = api_base_url.rstrip("/") + "/submit-question"
176
184
 
177
185
  payload = {
178
186
  "student_email": student_email,
@@ -183,33 +191,35 @@ def submit_question(
183
191
  "score": score,
184
192
  }
185
193
 
186
- res = requests.post(url, json=payload, auth=HTTPBasicAuth("student", "capture"))
194
+ res = requests.post(url, json=payload, auth=HTTPBasicAuth(student_user, student_pw))
187
195
 
188
196
  return res
189
197
 
190
198
 
191
199
  # 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:
200
+ def verify_server(jhub_user: Optional[str] = None) -> str:
201
+ if not api_base_url:
202
+ raise ValueError("Environment variable for API URL not set")
196
203
  params = {"jhub_user": jhub_user} if jhub_user else {}
197
- res = requests.get(url, params=params)
204
+ res = requests.get(api_base_url, params=params)
198
205
  message = f"status code: {res.status_code}"
199
206
  return message
200
207
 
201
208
 
202
209
  def get_my_grades() -> dict[str, float]:
210
+ if not student_user or not student_pw or not api_base_url:
211
+ raise ValueError("Necessary environment variables not set")
212
+
203
213
  from_hostname = socket.gethostname().removeprefix("jupyter-")
204
214
  from_env = os.getenv("JUPYTERHUB_USER")
205
215
  if from_hostname != from_env:
206
- raise ValueError("Problem with JupiterHub username")
216
+ raise ValueError("Problem with JupyterHub username")
207
217
 
208
218
  params = {"username": from_env}
209
219
  res = requests.get(
210
- "https://engr-131-api.eastus.cloudapp.azure.com/my-grades",
220
+ url=api_base_url.rstrip("/") + "/my-grades",
211
221
  params=params,
212
- auth=HTTPBasicAuth("student", "capture"),
222
+ auth=HTTPBasicAuth(student_user, student_pw),
213
223
  )
214
224
  res.raise_for_status()
215
225
 
@@ -3,6 +3,8 @@ import os
3
3
  import requests
4
4
  from requests.auth import HTTPBasicAuth
5
5
 
6
+ api_base_url = os.getenv("DB_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/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,