Skip to content
This repository has been archived by the owner on Nov 11, 2019. It is now read-only.

Commit

Permalink
Merge a718d5e into 05ec889
Browse files Browse the repository at this point in the history
  • Loading branch information
ayushr2 committed Mar 23, 2019
2 parents 05ec889 + a718d5e commit 7f25203
Show file tree
Hide file tree
Showing 17 changed files with 70 additions and 59 deletions.
12 changes: 7 additions & 5 deletions broadway_api/daos/assignment_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,19 @@ def id_from(course_id, assignment_name):
def insert(self, obj):
return self._collection.insert_one(self._to_store(obj))

def find_by_id(self, id):
return self._from_store(self._collection.find_one({AssignmentConfigDao.ID: id}))
def find_by_id(self, id_):
return self._from_store(
self._collection.find_one({AssignmentConfigDao.ID: id_})
)

def delete_by_id(self, id):
return self._collection.delete_one({AssignmentConfigDao.ID: id})
def delete_by_id(self, id_):
return self._collection.delete_one({AssignmentConfigDao.ID: id_})

def _from_store(self, obj):
if obj is None:
return obj
attrs = {
"id": obj.get(AssignmentConfigDao.ID),
"id_": obj.get(AssignmentConfigDao.ID),
"env": obj.get(AssignmentConfigDao.ENV),
"student_pipeline": obj.get(AssignmentConfigDao.STUDENT_PIPELINE),
"pre_processing_pipeline": obj.get(
Expand Down
6 changes: 3 additions & 3 deletions broadway_api/daos/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ def insert_or_update(self, obj):
{CourseDao.ID: obj.id}, {"$set": document}, upsert=True
)

def find_by_id(self, id):
return self._from_store(self._collection.find_one({CourseDao.ID: id}))
def find_by_id(self, id_):
return self._from_store(self._collection.find_one({CourseDao.ID: id_}))

def drop_all(self):
return self._collection.delete_many({})

def _from_store(self, obj):
if obj is None:
return None
attrs = {"id": obj.get(CourseDao.ID), "tokens": obj.get(CourseDao.TOKENS)}
attrs = {"id_": obj.get(CourseDao.ID), "tokens": obj.get(CourseDao.TOKENS)}
return Course(**attrs)

def _to_store(self, obj):
Expand Down
8 changes: 4 additions & 4 deletions broadway_api/daos/grading_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ def insert(self, obj):
del document[GradingJobDao.ID]
return self._collection.insert_one(document)

def find_by_id(self, id):
if not ObjectId.is_valid(id):
def find_by_id(self, id_):
if not ObjectId.is_valid(id_):
return None
return self._from_store(
self._collection.find_one({GradingJobDao.ID: ObjectId(id)})
self._collection.find_one({GradingJobDao.ID: ObjectId(id_)})
)

def find_by_run_id(self, run_id):
Expand All @@ -50,7 +50,7 @@ def _from_store(self, obj):
if obj is None:
return None
attrs = {
"id": str(obj.get(GradingJobDao.ID)),
"id_": str(obj.get(GradingJobDao.ID)),
"job_type": GradingJobType(obj.get(GradingJobDao.TYPE)),
"run_id": obj.get(GradingJobDao.RUN_ID),
"worker_id": obj.get(GradingJobDao.WORKER_ID),
Expand Down
8 changes: 4 additions & 4 deletions broadway_api/daos/grading_job_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ def insert(self, obj):
del document[GradingJobLogDao.ID]
return self._collection.insert_one(document)

def find_by_id(self, id):
if not ObjectId.is_valid(id):
def find_by_id(self, id_):
if not ObjectId.is_valid(id_):
return None
return self._from_store(
self._collection.find_one({GradingJobLogDao.ID: ObjectId(id)})
self._collection.find_one({GradingJobLogDao.ID: ObjectId(id_)})
)

def find_by_job_id(self, job_id):
Expand All @@ -37,7 +37,7 @@ def _from_store(self, obj):
if obj is None:
return None
attrs = {
"id": str(obj.get(GradingJobLogDao.ID)),
"id_": str(obj.get(GradingJobLogDao.ID)),
"job_id": obj.get(GradingJobLogDao.GRADING_JOB_ID),
"stdout": obj.get(GradingJobLogDao.STDOUT),
"stderr": obj.get(GradingJobLogDao.STDERR),
Expand Down
8 changes: 4 additions & 4 deletions broadway_api/daos/grading_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ def insert(self, obj):
del document[GradingRunDao.ID]
return self._collection.insert_one(document)

def find_by_id(self, id):
if not ObjectId.is_valid(id):
def find_by_id(self, id_):
if not ObjectId.is_valid(id_):
return None
return self._from_store(
self._collection.find_one({GradingRunDao.ID: ObjectId(id)})
self._collection.find_one({GradingRunDao.ID: ObjectId(id_)})
)

def update(self, obj):
Expand All @@ -44,7 +44,7 @@ def _from_store(self, obj):
if obj is None:
return None
attrs = {
"id": str(obj.get(GradingRunDao.ID)),
"id_": str(obj.get(GradingRunDao.ID)),
"state": GradingRunState(obj.get(GradingRunDao.STATE)),
"assignment_id": obj.get(GradingRunDao.ASSIGNMENT_ID),
"started_at": obj.get(GradingRunDao.STARTED_AT),
Expand Down
12 changes: 6 additions & 6 deletions broadway_api/daos/worker_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ def insert(self, obj):
def find_all(self):
return list(map(self._from_store, self._collection.find()))

def find_by_id(self, id):
if not ObjectId.is_valid(id):
def find_by_id(self, id_):
if not ObjectId.is_valid(id_):
return None
return self._from_store(
self._collection.find_one({WorkerNodeDao.ID: ObjectId(id)})
self._collection.find_one({WorkerNodeDao.ID: ObjectId(id_)})
)

def find_by_hostname(self, hostname):
Expand All @@ -53,15 +53,15 @@ def _from_store(self, obj):
if obj is None:
return None
attrs = {
"id": obj.get(WorkerNodeDao.ID),
"id_": obj.get(WorkerNodeDao.ID),
"running_job_id": obj.get(WorkerNodeDao.RUNNING_JOB_ID),
"last_seen": obj.get(WorkerNodeDao.LAST_SEEN),
"hostname": obj.get(WorkerNodeDao.WORKER_HOSTNAME),
"jobs_processed": obj.get(WorkerNodeDao.JOBS_PROCESSED),
"is_alive": obj.get(WorkerNodeDao.ALIVE),
}
if attrs["id"]:
attrs["id"] = str(attrs["id"])
if attrs["id_"]:
attrs["id_"] = str(attrs["id_"])
return WorkerNode(**attrs)

def _to_store(self, obj):
Expand Down
25 changes: 16 additions & 9 deletions broadway_api/handlers/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class GradingConfigHandler(ClientAPIHandler):
@schema.validate(input_schema=definitions.grading_config)
def post(self, *args, **kwargs):
assignment_id = self.get_assignment_id(**kwargs)
config = models.AssignmentConfig(id=assignment_id, **self.body)
config = models.AssignmentConfig(id_=assignment_id, **self.body)
config.id = assignment_id

config_dao = daos.AssignmentConfigDao(self.settings)
Expand Down Expand Up @@ -150,32 +150,39 @@ def get(self, *args, **kwargs):
return

grading_job_dao = daos.GradingJobDao(self.settings)
jobs = grading_job_dao.find_by_run_id(grading_run_id)
grading_jobs = grading_job_dao.find_by_run_id(grading_run_id)
pre_processing_job = next(
filter(lambda j: j.type == models.GradingJobType.PRE_PROCESSING, jobs), None
filter(
lambda j: j.type == models.GradingJobType.PRE_PROCESSING, grading_jobs
),
None,
)
post_processing_job = next(
filter(lambda j: j.type == models.GradingJobType.POST_PROCESSING, jobs),
filter(
lambda j: j.type == models.GradingJobType.POST_PROCESSING, grading_jobs
),
None,
)
student_jobs = filter(lambda j: j.type == models.GradingJobType.STUDENT, jobs)
student_jobs = filter(
lambda j: j.type == models.GradingJobType.STUDENT, grading_jobs
)

# [jobs] -> { job_id: job_state }
def get_job_map(jobs):
def get_job_id_to_state_map(jobs):
if jobs is None:
return None
else:
return {job.id: job.get_state().value for job in jobs}

return {
"state": grading_run.state.value,
"pre_processing_job_state": get_job_map(
"pre_processing_job_state": get_job_id_to_state_map(
[pre_processing_job] if pre_processing_job else None
),
"post_processing_job_state": get_job_map(
"post_processing_job_state": get_job_id_to_state_map(
[post_processing_job] if post_processing_job else None
),
"student_jobs_state": get_job_map(student_jobs),
"student_jobs_state": get_job_id_to_state_map(student_jobs),
}


Expand Down
4 changes: 2 additions & 2 deletions broadway_api/models/assignment_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
class AssignmentConfig(BaseModel):
def __init__(
self,
id: str,
id_: str,
env: Optional[Dict[str, str]] = None,
student_pipeline: List[Dict[str, Any]] = [],
pre_processing_pipeline: Optional[List[Dict[str, Any]]] = None,
post_processing_pipeline: Optional[List[Dict[str, Any]]] = None,
) -> None:
self.id = id
self.id = id_
self.env = env
self.student_pipeline = student_pipeline
self.pre_processing_pipeline = pre_processing_pipeline
Expand Down
4 changes: 2 additions & 2 deletions broadway_api/models/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@


class Course:
def __init__(self, id: str, tokens: List[str] = []):
self.id = id
def __init__(self, id_: str, tokens: List[str] = []):
self.id = id_
self.tokens = tokens
11 changes: 6 additions & 5 deletions broadway_api/models/grading_job.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from enum import Enum
from typing import Any, Dict, List, Optional
from datetime import datetime

from broadway_api.models.base import BaseModel

Expand All @@ -24,15 +25,15 @@ def __init__(
run_id: str,
stages: List[Any] = [],
students: List[Dict[str, str]] = None,
id: Optional[str] = None,
id_: Optional[str] = None,
worker_id: Optional[str] = None,
queued_at: Optional[str] = None,
started_at: Optional[str] = None,
finished_at: Optional[str] = None,
queued_at: Optional[datetime] = None,
started_at: Optional[datetime] = None,
finished_at: Optional[datetime] = None,
results: Optional[List[Any]] = None,
success: Optional[bool] = None,
) -> None:
self.id = id
self.id = id_
self.type = job_type
self.run_id = run_id
self.worker_id = worker_id
Expand Down
4 changes: 2 additions & 2 deletions broadway_api/models/grading_job_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ class GradingJobLog:
def __init__(
self,
job_id: str,
id: Optional[str] = None,
id_: Optional[str] = None,
stdout: Optional[str] = "",
stderr: Optional[str] = "",
):
self.id = id
self.id = id_
self.job_id = job_id
self.stdout = stdout
self.stderr = stderr
4 changes: 2 additions & 2 deletions broadway_api/models/grading_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def __init__(
self,
assignment_id: str,
state: GradingRunState,
id: Optional[str] = None,
id_: Optional[str] = None,
started_at: Optional[str] = None,
finished_at: Optional[str] = None,
pre_processing_env: Optional[List[Dict[str, str]]] = None,
Expand All @@ -27,7 +27,7 @@ def __init__(
student_jobs_left: int = 0,
success: Optional[bool] = None,
) -> None:
self.id = id
self.id = id_
self.state = state
self.assignment_id = assignment_id
self.started_at = started_at
Expand Down
7 changes: 4 additions & 3 deletions broadway_api/models/worker_node.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
from typing import Optional
from datetime import datetime


class WorkerNode:
def __init__(
self,
hostname: str,
id: Optional[str] = None,
id_: Optional[str] = None,
running_job_id: Optional[str] = None,
last_seen: Optional[str] = None,
last_seen: Optional[datetime] = None,
jobs_processed: int = 0,
is_alive: bool = True,
):
self.id = id
self.id = id_
self.running_job_id = running_job_id
self.last_seen = last_seen
self.hostname = hostname
Expand Down
2 changes: 1 addition & 1 deletion broadway_api/utils/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,5 @@ def initialize_course_tokens(settings, course_config_path):
course_dao.drop_all()

for course_id, tokens in courses.items():
course = Course(id=course_id, tokens=tokens)
course = Course(id_=course_id, tokens=tokens)
course_dao.insert_or_update(course)
2 changes: 1 addition & 1 deletion tests/_utils/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
def initialize_db(settings, course_config):
course_dao = CourseDao(settings)
for course_id, tokens in course_config.items():
course = Course(id=course_id, tokens=tokens)
course = Course(id_=course_id, tokens=tokens)
course_dao.insert_or_update(course)


Expand Down
4 changes: 2 additions & 2 deletions tests/integration/test_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@


# get status of the first job
def get_first_status(map):
return list(map.values())[0]
def get_first_status(grading_job_map):
return list(grading_job_map.values())[0]


class EndpointIntegrationTest(BaseTest):
Expand Down
8 changes: 4 additions & 4 deletions tests/unit/test_daos.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
class AssignmentConfigDaoTest(BaseTest):

DEFAULT_OBJECT = models.AssignmentConfig(
id="obj",
id_="obj",
env={"key": "value"},
pre_processing_pipeline=[{"image": "alpine"}],
student_pipeline=[{"image": "alpine"}],
Expand Down Expand Up @@ -51,7 +51,7 @@ def test_delete(self):

class CourseDaoTest(BaseTest):

DEFAULT_OBJECT = models.Course(id="course", tokens=["value"])
DEFAULT_OBJECT = models.Course(id_="course", tokens=["value"])

def setUp(self):
super().setUp()
Expand Down Expand Up @@ -86,7 +86,7 @@ def test_update(self):
class GradingJobLogDaoTest(BaseTest):

DEFAULT_OBJECT = models.GradingJobLog(
job_id="job_id", stdout=b"output", stderr=b"errors"
job_id="job_id", stdout="output", stderr="errors"
)

def setUp(self):
Expand Down Expand Up @@ -178,7 +178,7 @@ class GradingRunDaoTest(BaseTest):
DEFAULT_OBJECT = models.GradingRun(
assignment_id="assignment123",
state=models.GradingRunState.READY,
students_env=[{"override": True}],
students_env=[{"override": "1"}],
student_jobs_left=1,
)

Expand Down

0 comments on commit 7f25203

Please sign in to comment.