Skip to content

Commit

Permalink
[feat/#84] Refactor: string to format
Browse files Browse the repository at this point in the history
  • Loading branch information
NayeonKeum committed Aug 31, 2023
1 parent 2a897b1 commit fee84cc
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 48 deletions.
43 changes: 20 additions & 23 deletions resources/images/control-ubuntu/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def yaml_to_json(id, isProfessor):
role = "professor"
else:
role = "student"
f = open("./res/remote-deploy-%s.yml" % role, 'r')
f = open(f"./res/remote-deploy-{role}.yml", 'r')
ID = id

# find webssh url's container port
Expand Down Expand Up @@ -95,12 +95,12 @@ def yaml_to_json(id, isProfessor):

contents = file.split("---")
for i in range(len(contents)):
with open("./res/tmp%d.yml" % i, "w") as tmp:
with open(f"./res/tmp{i}.yml", "w") as tmp:
tmp.write(contents[i])

# convert yaml to json
for i in range(len(contents)):
with open("./res/tmp%d.yml" % i, 'r') as yaml_in, open("./res/tmp%d.json" % i, "w") as json_out:
with open(f"./res/tmp{i}.yml", 'r') as yaml_in, open(f"./res/tmp{i}.json", "w") as json_out:
yaml_object = yaml.safe_load(yaml_in)
json.dump(yaml_object, json_out)

Expand All @@ -119,24 +119,23 @@ async def create_professor_res(professor_info: Dto.UsersModel = None):

for i in range(json_num):
json_str = json.load(open(
"./res/tmp%d.json" % i))
f"./res/tmp{i}.json"))
if json_str['kind'] == "Pod":
url = Urls.kube_api_server+"/api/v1/namespaces/professor-ns/pods"
url = f"{Urls.kube_api_server}/api/v1/namespaces/professor-ns/pods"
elif json_str['kind'] == "Service":
url = Urls.kube_api_server+"/api/v1/namespaces/professor-ns/services"
headers = {"Authorization": "Bearer %s" % (os.getenv('TOKEN')),
url = f"{Urls.kube_api_server}/api/v1/namespaces/professor-ns/services"
headers = {"Authorization": f"Bearer {os.getenv('TOKEN')}",
'Accept': 'application/json', "Content-Type": "application/json"}
result = requests.post(url, data=json.dumps(json_str),
headers=headers, verify=os.getenv('CACERT')).text
if result == False:
print("Error in creating professor, id:"+id)
print(f"Error in creating professor, id: {id}")
return 0

print("Professor %s's node port is %d, api node port id %d" %
(id, PORT, API_PORT))
print(f"Professor {id}'s node port is {PORT}, api node port id {API_PORT}")
# url: webssh, api_url: internal api in k8s
url = Urls.kube_base_url+":%d" % PORT
api_url = Urls.kube_base_url+":%d" % API_PORT
url = f"{Urls.kube_base_url}:{PORT}"
api_url = f"{Urls.kube_base_url}:{API_PORT}"
# professor has multiple lectures, lecture_id doesn't matter(-1)
return Dto.URLModel(id=professor_info.user_id, lecture_id=professor_info.user_id, container_address=url, api_endpoint=api_url)

Expand All @@ -149,26 +148,24 @@ async def create_container(reqBody: dict = None):
lecture_id = reqBody["lecture_id"]

id = student_info["id"]
pod_id = id+"-"+lecture_id
pod_id = f"{id}-{lecture_id}"
json_num, PORT, _API_PORT, API_PORT = yaml_to_json(
pod_id, False) # use containerPort for api
for i in range(json_num):
json_str = json.load(open("./res/tmp%d.json" % i))
json_str = json.load(open(f"./res/tmp{i}.json"))
if json_str['kind'] == "Pod":
url = Urls.kube_api_server+"/api/v1/namespaces/student-ns/pods"
url = f"{Urls.kube_api_server}/api/v1/namespaces/student-ns/pods"
elif json_str['kind'] == "Service":
url = Urls.kube_api_server+"/api/v1/namespaces/student-ns/services"
headers = {"Authorization": "Bearer %s" % (os.getenv('TOKEN')),
url = f"{Urls.kube_api_server}/api/v1/namespaces/student-ns/services"
headers = {"Authorization": f"Bearer {os.getenv('TOKEN')}",
'Accept': 'application/json', "Content-Type": "application/json"}
result = requests.post(url, data=json.dumps(json_str),
headers=headers, verify=os.getenv('CACERT')).text
if result == False:
print("Error in creating student, id:"+pod_id)
print(f"Error in creating student, id:{pod_id}")
return 0
print("Student %s's port is %d, api port id %d" %
(pod_id, PORT, API_PORT))
print(f"Student {pod_id}'s port is {PORT}, api port id {API_PORT}")
# url: webssh, api_url: internal api in k8s
url = Urls.kube_base_url+":%d" % PORT
api_url = "http://student-%s-svc.student-ns.svc.cluster.local:%d" % (
pod_id, API_PORT)
url = f"{Urls.kube_base_url}:{PORT}"
api_url = f"http://student-{pod_id}-svc.student-ns.svc.cluster.local:{API_PORT}"
return Dto.URLModel(id=student_info["user_id"], lecture_id=lecture_id, container_address=url, api_endpoint=api_url)
4 changes: 2 additions & 2 deletions resources/images/control-ubuntu/server/res/init_port_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import sys

port_list = np.array([False]*65535)
np.save("%s/port_list" % sys.argv[1], port_list)
print("%s/port_list made" % sys.argv[1])
np.save(f"{sys.argv[1]}/port_list", port_list)
print(f"{sys.argv[1]}/port_list made")
11 changes: 5 additions & 6 deletions resources/images/professor-ubuntu/server/getAssignments.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
lecture_id = sys.argv[2]

json_str = requests.get(
Urls.base_url+"/assignments/"+assignment_id+"/urls").text
f"{Urls.base_url}/assignments/{assignment_id}/urls").text
data_users_assigned = list(json.loads(json_str)) # json to list[dict]

dir_path = Urls.dir_path_professor
Expand All @@ -20,18 +20,17 @@
for user in data_users_assigned:
# mkdir in student
encoded_dir_path_student = base64.b64encode((
dir_path_student+"/"+assignment_id).encode('ascii')).decode('ascii') # base64 encode
f"{dir_path_student}/{assignment_id}").encode('ascii')).decode('ascii') # base64 encode
urlmodel = json.loads(requests.get(
Urls.base_url+"/users/"+user["id"]+"/"+lecture_id+"/url").text)
url = urlmodel["apiEndpoint"]+"/files/" + encoded_dir_path_student
f"{Urls.base_url}/users/{user['id']}/{lecture_id}/url").text)
url = f"{urlmodel['apiEndpoint']}/files/{encoded_dir_path_student}"
json_str = requests.get(url).text
# json to dict
result = json.loads(json.loads(json_str))

# write files
for filename, content in result.items():
assignment_dir_path = "%s/%s/%s/%s" % (
dir_path, assignment_id, user["id"], filename)
assignment_dir_path = f"{dir_path}/{assignment_id}/{user['id']}/{filename}"
f = open(assignment_dir_path, 'w')
f.write(content)
f.close()
28 changes: 13 additions & 15 deletions resources/images/professor-ubuntu/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@

def schedule_cronjob(dt, assignment_id, lecture_id):
month, day, hour, minute = dt[1], dt[2], dt[3], dt[4]
os.system('/bin/bash %s/cronjob.sh %d %d %d %d %s %s' %
(os.path.dirname(os.path.realpath(__file__)), minute, hour, day, month, assignment_id, lecture_id))
os.system(
f"/bin/bash {os.path.dirname(os.path.realpath(__file__))}/cronjob.sh {minute} {hour} {day} {month} {assignment_id} {lecture_id}")


def create_directories(assignment_id, lecture_id, data_users_assigned):
Expand All @@ -39,25 +39,24 @@ def create_directories(assignment_id, lecture_id, data_users_assigned):
for user in data_users_assigned:
# mkdir in student
encoded_dir_path_student = base64.b64encode((
dir_path_student+"/"+assignment_id).encode('ascii')).decode('ascii') # base64 encode
f"{dir_path_student}/{assignment_id}").encode('ascii')).decode('ascii') # base64 encode
urlmodel = json.loads(requests.get(
Urls.base_url+"/users/"+user["id"]+"/"+lecture_id+"/url").text)
url = urlmodel["apiEndpoint"]+"/mkdir/" + encoded_dir_path_student
f"{Urls.base_url}/users/{user['id']}/{lecture_id}/url").text)
url = f"{urlmodel['apiEndpoint']}/mkdir/{encoded_dir_path_student}"
result = requests.post(url).text
if result == False:
print("Error in mkdir, uid:"+user["id"])
print(f"Error in mkdir, uid:{user['id']}")

# mkdir in professor
os.makedirs("%s/%s/%s" %
(dir_path_professor, assignment_id, user["id"]))
os.makedirs(f"{dir_path_professor}/{assignment_id}/{user['id']}")


@app.post("/assignments/")
async def create_assignment(assignment_info: Dto.AssignmentModel = None):
assignment_id = assignment_info.assignment_id
lecture_id = assignment_info.lecture_id
json_str = requests.get(
Urls.base_url+"/assignments/"+assignment_id+"/urls").text
f"{Urls.base_url}/assignments/{assignment_id}/urls").text
data_users_assigned = list(json.loads(json_str))
due_date = assignment_info.due_date

Expand All @@ -73,23 +72,22 @@ async def create_assignment(assignment_info: Dto.AssignmentModel = None):
@app.get("/assignment/")
async def get_assignment(id: str, assignment_id: str):
dir_path_professor = Urls.dir_path_professor
dir_path = "%s/%s/%s" % (dir_path_professor, assignment_id, id)
dir_path = f"{dir_path_professor}/{assignment_id}/{id}"
curr_path = os.path.dirname(os.path.realpath(__file__))
file_list = os.listdir(dir_path)
return_dict = {}
for file in file_list:
file_path = dir_path+"/"+file
file_path = f"{dir_path}/{file}"
f = open(file_path, "r")
content = f.read()
return_dict["content"] = content
f.close()
os.system('/bin/bash %s/getValueAndTime.sh %s' %
(curr_path, file_path))
f = open("%s/values.txt" % curr_path, "r")
os.system(f"/bin/bash {curr_path}/getValueAndTime.sh {file_path}")
f = open(f"{curr_path}/values.txt", "r")
values = f.read()
return_dict["answer"] = values
f.close()
f = open("%s/time.txt" % curr_path, "r")
f = open(f"{curr_path}/time.txt", "r")
time = f.read()
return_dict["runtime"] = time
f.close()
Expand Down
4 changes: 2 additions & 2 deletions resources/images/student-ubuntu/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
async def make_dir(dir_name: str = None):
# base64 decoded
decoded_dir_name = base64.b64decode(dir_name).decode('ascii')
print("decoded_dir_name: %s" % decoded_dir_name)
print(f"decoded_dir_name: {decoded_dir_name}")
try:
os.makedirs(decoded_dir_name)
return True
Expand All @@ -41,7 +41,7 @@ async def read_files_from_dir(dir_path: str = None):
returnDict = {}
file_list = os.listdir(decoded_dir_path)
for file in file_list:
f = open(decoded_dir_path+"/"+file, "r")
f = open(f"{decoded_dir_path}/{file}", "r")
content = f.read()
returnDict[file] = content
f.close()
Expand Down

0 comments on commit fee84cc

Please sign in to comment.