# Copyright (c) 2022, TU Wien
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
from grader_service.api.models import submission
from sqlalchemy import (
Boolean,
Column,
DateTime,
Enum,
ForeignKey,
Integer,
String,
Text,
)
from sqlalchemy.orm import relationship
from grader_service.orm.base import Base, Serializable
[docs]class Submission(Base, Serializable):
__tablename__ = "submission"
id = Column(Integer, primary_key=True, autoincrement=True)
date = Column(DateTime, nullable=False)
auto_status = Column(
Enum("pending", "not_graded", "automatically_graded", "grading_failed"),
default="not_graded",
nullable=False,
)
manual_status = Column(Enum("not_graded", "manually_graded","being_edited"))
score = Column(Integer, nullable=True)
assignid = Column(Integer, ForeignKey("assignment.id"))
username = Column(String(255), ForeignKey("user.name"))
commit_hash = Column(String(length=40), nullable=False)
properties = Column(Text, nullable=True, unique=False)
feedback_available = Column(Boolean, nullable=False)
logs = Column(Text, nullable=True)
assignment = relationship("Assignment", back_populates="submissions")
user = relationship("User", back_populates="submissions")
@property
def model(self) -> submission.Submission:
return submission.Submission(
id=self.id,
submitted_at=None
if self.date is None
else (self.date.isoformat("T", "milliseconds") + "Z"),
username=self.username,
auto_status=self.auto_status,
manual_status=self.manual_status,
score=self.score,
commit_hash=self.commit_hash,
feedback_available=self.feedback_available,
logs=self.logs
)