Ejemplo n.º 1
0
def new_assignment():
    days_given = require_arguments('days_given')
    try:
        days_given = int(days_given)
    except ValueError:
        raise InvalidArgument('days given must be an integar')
    students = request.json.get('student')
    if students is None:
        raise InvalidArgument('students required')
    token = request.json.get('token')
    if not token:
        raise InvalidArgument('token required')
    problems = request.json.get('problems')
    if not problems:
        raise InvalidArgument('problems required')

    user = auth_by_token(token,min_privilege='teacher')
    for student in students:
        if User.objects(id=students).count() == 0:
            raise InvalidArgument('user '+student+' does not exist')
        scored_problems = []
        for problem in problems:
            problem_id = problem.get('id')
            point = problem.get('point')
            scored_problems.append(ScoredProblem(problem=Problem.objects(id=problem_id).first(),point=point))
        date = datetime.datetime.now()
        assignment = Assignment(owner=user,scored_problems=scored_problems,students=students,assign_time=date,days_given=days_given).save()
        return success({'id':str(assignment.id)})        
Ejemplo n.º 2
0
def note_edit():
    [token,note_id,note_content] = require_arguments('token','note_id','note_content')
    #这个错怎么处理
    user = auth_by_token(token)
    if not user:
        raise InvalidArgument('token required')
    other_note = note_by_id(note_id)
    other_note.note_content = note_content
    other_note.save()
    # if 'title' in request.form:
    #     title = request.form['title']
    #     other_note.title=title
    #     other_note.save()
    # if 'text' in request.form:
    #     text = request.form['text']
    #     note_content.text=text
    #     note_content.save()
    #     other_note.note_content=note_content
    #     other_note.save()
    # if 'image_url' in request.form:
    #     image_url = request.form['image_url']
    #     note_content.image_url=image_url
    #     note_content.save()
    #     other_note.note_content=note_content
    #     other_note.save()
    return {'status':'success'}
Ejemplo n.º 3
0
def send_password():
    [email_address, phone_number] = require_arguments('email_address',
                                                      'phone_number')
    user = User.objects(email_address=email_address).first()
    if user.phone_number != phone_number:
        raise InvalidArgument('invalid email address or phone number')
    return user.password
Ejemplo n.º 4
0
def change_password():
    [token, email_address, phone_number, old_password,
     new_password] = require_arguments('token', 'email_address',
                                       'phone_number', 'old_password',
                                       'new_password')
    user = auth_by_token(token)

    # 前端来做
    # if 'confirm_password' in request.form:
    #     confirm_password = request.form['confirm_password']
    # else:
    #     return {'status':'failed','data':'confirm password required'}
    # if new_password != confirm_password:
    #     return {'status':'failed','data':'the confirm password differs from the former one'}use
    if email_address != user.email_address:
        raise InvalidArgument('email_address is wrong')
    if phone_number != user.phone_number:
        raise InvalidArgument('phone number is wrong')
    if old_password == new_password:
        raise InvalidArgument('the new password is the same as the old')
    if len(new_password) < 8 or len(new_password) > 16:
        raise InvalidArgument(
            'the length of password should be between 8 and 16')
    if ' ' in new_password:
        raise InvalidArgument('illegal character in password')
    if old_password != user.password:
        raise InvalidArgument('invalid password')
    user.password = new_password
    user.save()
    return success(user.password)  #这个要改,不能直接传密码
Ejemplo n.º 5
0
def add_event():
    [token, event_name,
     event_type] = require_arguments('token', 'event_name', 'event_type')
    user = auth_by_token(token)
    #problem = Problem(problem=problem,key=key,type_=type_,owner=user,difficulty=difficulty).save()
    event = Event(event_name=event_name, event_type=event_type,
                  owner=user).save()
    return success({'id': str(event.id)})
Ejemplo n.º 6
0
def note_delete():
    [token,note_id] = require_arguments('token','note_id')
    #需弹窗确认是否删除
    user = auth_by_token(token)
    if not user:
        raise InvalidArgument('token required')
    Other_note.objects(id=note_id).delete()
    return {'status':'success'}
Ejemplo n.º 7
0
def change_class_name():
    [token, new_class_name] = require_arguments('token', 'new_class_name')
    user = auth_by_token(token)
    if new_class_name == user.class_name:
        raise InvalidArgument("class_name hasn't been changed")
    user.class_name = new_class_name
    user.save()
    return {'status': 'success'}
Ejemplo n.º 8
0
def edit_event():
    [token, id, event_name,
     event_type] = require_arguments('token', 'id', 'event_name', 'event_type')
    user = auth_by_token(token)
    event = event_by_id(id)
    event.event_name = event_name
    event.event_type = event_type
    event.save()
    return {'status': 'success'}
Ejemplo n.º 9
0
def get_user_event():
    [token] = require_arguments('token')
    user = auth_by_token(token)
    #event = Event.objects(owner_name=user.username).first()
    event = Event.objects.get(owner=user)
    return success({
        'event_name': event.event_name,
        'event_type': event.event_type
    })
Ejemplo n.º 10
0
def assignment_by_id():
    id = require_arguments('id')
    assignment = Assignment.objects(id=id).first()
    if not assignment:
        raise InvalidArgument('id does not exist')    
    # return success({'owner':assignment.owner,
    # 'scored problems':assignment.scored_problems,
    # 'students':assignment.students
    # })
    return success(assignment)
Ejemplo n.º 11
0
def user_login():
    [username, password] = require_arguments('username', 'password')
    user = auth_by_password(username, password)
    if not user:
        raise InvalidArgument('invalid username or password')
    id = str(uuid.uuid4()).replace('-', '')
    token = Token(user=user,
                  token=id,
                  expire=datetime.datetime.now() + datetime.timedelta(days=30))
    token.save()
    return success({'token': id, 'type': user.type_})
Ejemplo n.º 12
0
def problem_add():

    [token,problem,key,type_,difficulty] = require_arguments('token','problem','key','type_','difficulty')
    user = auth_by_token(token,min_privilege='teacher')
    try:
        difficulty = int(difficulty)
    except ValueError:
        raise InvalidArgument('difficulty must be an integar')
    problem = Problem(problem=problem,key=key,type_=type_,owner=user,difficulty=difficulty).save()

    return success({'id':str(problem.id)})
Ejemplo n.º 13
0
def change_username():
    [token, new_username] = require_arguments('token', 'username')
    user = auth_by_token(token)
    if ' ' in new_username:
        raise InvalidArgument('invalid username')
    if new_username == user.username:
        raise InvalidArgument("username hasn't been changed")
    if User.objects(username=new_username).count() > 0:
        raise InvalidArgument('duplicated username')
    user.username = new_username
    user.save()
    return {'status': 'success'}
Ejemplo n.º 14
0
def add_process():
    [token, process_name, book, section,
     brief_intro] = require_arguments('token', 'process_name', 'book',
                                      'section', 'brief_intro')
    user = auth_by_token(token)
    #problem = Problem(problem=problem,key=key,type_=type_,owner=user,difficulty=difficulty).save()
    process = Process(owner=user,
                      process_name=process_name,
                      book=book,
                      section=section,
                      brief_intro=brief_intro).save()
    return success({'id': str(process.id)})
Ejemplo n.º 15
0
def edit_process():
    [token, id, process_name, book, section,
     brief_intro] = require_arguments('token', 'id', 'process_name', 'book',
                                      'section', 'brief_intro')
    user = auth_by_token(toketn)
    process = process_by_id(id)
    process.process_name = process_name
    process.book = book
    process.section = section
    process.brief_intro = brief_intro
    process.save()
    return {'status': 'success'}
Ejemplo n.º 16
0
def change_phone_number():
    [token, new_phone_number] = require_arguments('token', 'new_phone_number')
    user = auth_by_token(token)
    if ' ' in new_phone_number:
        raise InvalidArgument('invalid phonename')
    if new_phone_number == user.phone_number:
        raise InvalidArgument("phone number hasn't been changed")
    if User.objects(phone_number=new_phone_number).count() > 0:
        raise InvalidArgument('duplicated phone number')
    user.phone_number = new_phone_number
    user.save()
    return {'status': 'success'}
Ejemplo n.º 17
0
def user_note():
    [token] = require_arguments('token')
    user = auth_by_token(token)
    #process = process.objects(owner_name=user.username).first()
    try:
        other_note = Other_note.objects.get(owner=user)
    except:
        other_note = None
    #     process_name = '学习'
    #     process_brief_intro = '复习所学内容'
    #     Process(owner=user,process_name=process_name,brief_intro=process_brief_intro).save()
    return success({'note_content':other_note.note_content,
            'process_brief_intro':process.brief_intro})
Ejemplo n.º 18
0
def note_add():
    [token,note_category,note_content]=require_arguments('token','note_category','note_content')
    user = auth_by_token(token)
    other_note = Other_note(owner=user,note_content=note_content).save()
    # if 'text' in request.form:
    #     text = request.form['text']
    #     note_content.text=text
    #     note_content.save()
    #     other_note.note_content=note_content
    #     other_note.save()
    # if 'image_url' in request.form:
    #     image_url = request.form['image_url']
    #     note_content.image_url=image_url
    #     note_content.save()
    #     other_note.note_content=note_content
    #     other_note.save()
    return {'status':'success'}
Ejemplo n.º 19
0
def user_full_info():
    [token] = require_arguments("token")
    user = auth_by_token(token)
    if not user:
        raise InvalidArgument("token invalid")
    # if user.real_name==None and user.student_id==None:
    #     if user.phone_number == None and user.email_address == None:
    #         if user.qq_number == None and user.school_name == None:
    #             if user.grade_name == None and user.class_name == None:
    #                 return None
    return success({
        'real_name': user.real_name,
        'student_id': user.student_id,
        'phone_number': user.phone_number,
        'email_address': user.email_address,
        'qq_number': user.qq_number,
        'school_name': user.school_name,
        'grade_name': user.grade_name,
        'class_name': user.class_name
    })
Ejemplo n.º 20
0
def user_process():
    [token] = require_arguments('token')
    user = auth_by_token(token)
    #process = process.objects(owner_name=user.username).first()
    if Process.objects(owner=user).count() > 0:
        processes = Process.objects(owner=user).all()
        # return success({'process_name':processes.process_name,'process_brief_intro':processes.brief_intro})
        return success([{
            'process_name': process.process_name,
            'process_brief_intro': process.brief_intro
        } for process in processes])
    else:
        process_name = '学习'
        process_brief_intro = '学习永无止境'
        Process(owner=user,
                process_name=process_name,
                brief_intro=process_brief_intro).save()
        processes = Process.objects.get(owner=user).all()
        return success([{
            'process_name': process.process_name,
            'process_brief_intro': process.brief_intro
        } for process in processes])
Ejemplo n.º 21
0
def auto_check_answer():
    [token,answer_id]=require_arguments('token','answer_id')
    user = auth_by_token(token)
    answers = answer_by_id(answer_id)
    assignment = answers.assignment
    problems = answers.assignment.scored_problems

    submit_time = datetime.datetime.now()
    t = assignment.days_given
    deadline = assignment.assign_time + datetime.timedelta(days=t)
    if submit_time > deadline:
        raise InvalidArgument('you have missed the deadline')
    for index,answer in enumerate(answers):
        problem = problems[index]
        if answer == problem.problem.key:
            answer.points_get.append(problems[index].point)
        else:
            fault_answer = FaultAnswer(answer=answer,problems=problem).save()
            fault = Fault(owner=user,fault_answer=fault_answer)
            fault.save()
    answer.save()
    return success(answer)
Ejemplo n.º 22
0
def user_register():
    '''
    route:/user_register
    method:POST
    fields:username,password,type
    usernam不能与已知用户重复
    password不能有空格,长度介于8到16之间
    type只可为teacher,student,admin之一
    '''
    [username, password, type_] = require_arguments('username', 'password',
                                                    'type')
    if ' ' in username:
        raise InvalidArgument('invalid username')
    if type_ not in ['student', 'teacher']:
        raise InvalidArgument('user type invalid')
    if User.objects(username=username).count() > 0:
        raise InvalidArgument('duplicated username')
    if len(password) > 16 or len(password) < 8:
        raise InvalidArgument('password length should be between 8 and 16')
    if ' ' in password:
        raise InvalidArgument('Invalid password')
    User(username=username, password=password, type_=type_).save()
    return {'status': 'success'}
Ejemplo n.º 23
0
def fill_information():
    [
        token, real_name, student_id, email_address, phone_number, school_name,
        grade_name, class_name
    ] = require_arguments('token', 'real_name', 'student_id', 'email_address',
                          'phone_number', 'school_name', 'grade_name',
                          'class_name')
    user = auth_by_token(token)
    if 'qq_number' in request.form:
        qq_number = request.form['qq_number']
        if qq_number != None:
            if ' ' in qq_number:
                raise InvalidArgument('invalid qq number')
            if len(qq_number) < 5 or len(qq_number) > 10:
                raise InvalidArgument('invalid qq number')
            user.qq_number = qq_number
    if len(phone_number) != 11:
        raise InvalidArgument('invalid phone number')
    if '@' not in email_address:
        raise InvalidArgument('invalid email address')

    if User.objects(email_address=email_address).count() > 0:
        if email_address == user.email_address:
            pass
        else:
            raise InvalidArgument('duplicated email address')

    user.real_name = real_name
    user.phone_number = phone_number
    user.email_address = email_address
    user.student_id = student_id
    user.school_name = school_name
    user.grade_name = grade_name
    user.class_name = class_name
    user.save()
    return {'status': 'success'}
Ejemplo n.º 24
0
def delete_process():
    [token, id] = require_arguments('token', 'id')
    user = auth_by_token(token)
    Process.objects(id=id).delete()
    return {'status': 'success'}
Ejemplo n.º 25
0
def fault_report():
    token = require_arguments('token')
    user = auth_by_token(token)
    fault =  Fault(owner=user)
    return fault
Ejemplo n.º 26
0
def user_info():
    [token] = require_arguments("token")
    user = auth_by_token(token)
    if not user:
        raise InvalidArgument("token invalid")
    return success({"username": user.username, "type": user.type})
Ejemplo n.º 27
0
def logout():
    token = require_arguments('token')
    Token.objects(token=token).delete()
    return {'status': 'success'}