示例#1
0
文件: container.py 项目: qurit/raiven
def update_container(container_id: int,
                     auto_build: bool = True,
                     file: bytes = File(None),
                     name: str = Form(...),
                     filename: str = Form(None),
                     description: str = Form(None),
                     is_input_container: bool = Form(...),
                     is_output_container: bool = Form(...),
                     is_shared: bool = Form(...),
                     user: User = Depends(token_auth),
                     db: session = Depends(session)):
    """ Editing a container"""
    db_container = db.query(Container).get(container_id)

    if db_container.user_id != user.id:
        raise HTTPException(403, "User does not own this container")

    db_container.update(db,
                        name=name,
                        description=description,
                        is_input_container=is_input_container,
                        is_output_container=is_output_container,
                        is_shared=is_shared)

    if file:
        folder = db_container.get_abs_path()
        shutil.rmtree(folder)
        save_file(db_container, filename, file)

        if auto_build:
            db.commit()
            ContainerController.build_container(db_container.id)

    return db_container
示例#2
0
async def create_upload_file(file: bytes = File(...),
                             filename: str = Form(...),
                             assignment_id: int = Form(...),
                             db: session = Depends(session)):
    db_assignment = db.query(models.Assignment).get(assignment_id)

    if not os.path.exists(assignment_folder := db_assignment.path):
示例#3
0
def get_assignment(assignment_id: int, db: session = Depends(session)):
    assignment = db.query(models.Assignment).get(assignment_id)
    bytes_ = export.generate_results_report(assignment)
    report_name = f'{assignment.name}_report'

    response = StreamingResponse(io.BytesIO(bytes_), media_type="application/x-zip-compressed")
    response.headers["Content-Disposition"] = f"attachment; filename={report_name}.csv"

    return response
示例#4
0
def make_moss_folder(assignment_id: int, db: session = Depends(session)):
    assignment = db.query(models.Assignment).get(assignment_id)
    files = db.query(models.SubmissionFile)\
        .join(models.Submission, models.Assignment)\
        .filter(models.SubmissionFile.filename == "LList.cpp", models.Assignment.id == assignment_id)\
        .all()

    m = mosspy.Moss(config.MOSS_USERNAME, 'cc')

    moss_folder = os.path.join(assignment.path, '__MOSS__')
    if os.path.exists(moss_folder):
        shutil.rmtree(moss_folder)
    os.mkdir(moss_folder)
    [shutil.copy(
        os.path.join(config.UPLOAD_DIR, f.path),
        os.path.join(moss_folder, f'{f.submission.student.name.replace(" ", "")}_{f.filename}'))
        for f in files]

    m.addFilesByWildcard(f'{moss_folder}/*.cpp')
    url = m.send()

    assignment.description = url
    assignment.save(db)
示例#5
0
def get_courses(db: session = Depends(session)):
    return db.query(models.Course).all()
示例#6
0
文件: builds.py 项目: awtkns/fastmark
def get_builds(db: session = Depends(session)):
    return db.query(models.BuildResult).all()
示例#7
0
文件: builds.py 项目: awtkns/fastmark
def get_all_active_jobs(db: session = Depends(session)):
    return db.query(models.ActiveJob).all()
示例#8
0
文件: builds.py 项目: awtkns/fastmark
def get_tests(db: session = Depends(session)):
    return db.query(models.TestResult).all()
示例#9
0
def set_assignment_solution(assignment_id: int, file: bytes = File(...), filename: str = Form(...), db: session = Depends(session)):
    """ Upload build artifacts for the assignment."""

    if not (assignment := db.query(models.Assignment).get(assignment_id)):
        raise HTTPException(404)
示例#10
0
def delete_assignment(assignment_id: int, db: session = Depends(session)):
    if assignment := db.query(models.Assignment).get(assignment_id):
        assignment.delete(db)
示例#11
0
def get_assignment(assignment_id: int, db: session = Depends(session)):
    assignment = db.query(models.Assignment).get(assignment_id)
    assignment.submissions.sort(key=lambda x: x.student.name)

    return assignment
示例#12
0
def get_assignments(db: session = Depends(session)):
    return db.query(models.Assignment).all()