Exemple #1
0
async def check_exercise(user_result: int, user=Depends(get_user)):
    exercise: Exercises = db.query(Exercises).filter(Exercises.user_id == user.id).first()
    if exercise is None:
        return {
            'status': 400,
            'message': 'Exercise does not exists'
        }
    duration = 1  # TODO Measure Duration in the backend
    points = 1 if exercise.result == user_result else 0  # TODO Calculate Points with the Duration
    evaluation = db.query(Evaluation).filter(Evaluation.user_id == 0,
                                             Evaluation.factor1 == exercise.factor1,
                                             Evaluation.factor2 == exercise.factor2).first()
    if evaluation is None:
        user = db.query(User).filter(User.id == user.id).first()
        evaluation = Evaluation(user, exercise.factor1, exercise.factor2, points)
        db.add(evaluation)
        db.commit()
    else:
        db.query(Evaluation).filter(Evaluation.id == evaluation.id).update({
            Evaluation.points: evaluation.points + points,
            Evaluation.count: evaluation.count + 1,
        })
    db.commit()
    return {
        'status': 200,
        'result': exercise.result == user_result
    }
Exemple #2
0
async def rank_get(user=Depends(get_user)):
    users_db = db.query(User).all()
    ranklist = []
    for user in users_db:
        evaluations = db.query(Evaluation).filter(
            Evaluation.user_id == user.id).all()
        ranklist.append({
            'username': user.username,
            'points': calculatePoints(evaluations)
        })
    return ranklist
Exemple #3
0
async def generate_exercise(user=Depends(get_user)):
    factor1, factor2 = (await generateExercise(user.id)).values()
    if db.query(Exercises).filter(Exercises.user_id == user.id).first() is None:
        user_db = db.query(User).filter(User.id == user.id).first()
        db.add(Exercises(user_db, factor1, factor2))
    else:
        db.query(Exercises).filter(Exercises.user_id == user.id).update({Exercises.factor1: factor1,
                                                                            Exercises.factor2: factor2,
                                                                            Exercises.result: factor1 * factor2})
    db.commit()
    return {
        'factor1': factor1,
        'factor2': factor2
    }
Exemple #4
0
def staty_plan_edit():

    messages = ""
    category = ""

    form = request.form

    try:
        user = db.query(StudyPlan).get(form.get('id'))
        # user.one()

        user.name = form.get('name')
        user.start_date = form.get('start_date')

        db.commit()

        messages = "La informacion fue editada exitosamente!"
        category = "success"

    except ValueError as e:
        raise e

        messages = "Ha ocurrido un error desconocido!"
        category = "error"

    finally:
        flash(messages, category)

    return redirect(url_for('users.plan_de_estudio'))
Exemple #5
0
async def signup(body: RequestBody, response: Response):
    username = body.username
    name = body.name
    password_hash = hashlib.sha256(str.encode(body.password)).hexdigest()

    # Check if username already exists
    exists = db.query(User).filter_by(username=username).first()
    if exists:
        response.status_code = status.HTTP_409_CONFLICT
        return {"result": "fail", "reason": "Username already taken"}

    user = User(username=username, name=name, password_hash=password_hash)
    db.add(user)
    db.commit()

    payload = {
        "exp": datetime.utcnow() + timedelta(days=0, hours=24),
        "iat": datetime.utcnow(),
        "iss": username,
    }
    token = jwt.encode(payload, ACCESS_TOKEN_KEY, algorithm="HS256")
    content = {"result": "ok"}
    response = JSONResponse(content=content)
    response.headers["X-AUTH-TOKEN"] = f"{token}"
    return response
Exemple #6
0
def study_plan_goals(id):

    args = request.args.get('goals')
    find = "all"

    get_goals = db.query(StudyPlanGoals).\
        join(StudyPlan, StudyPlanGoals.plan_id == StudyPlan.id).\
        filter(StudyPlanGoals.state == 1).\
        filter(StudyPlan.id == id).\
        filter(StudyPlan.state == 1).\
        filter(StudyPlan.user_id == current_user.id)

    if args == 'all':
        goals = get_goals.all()
    elif args == 'finished':
        find = 1
        goals = get_goals.filter(StudyPlanGoals.done == 1)
    elif args == 'pending':
        find = 0
        goals = get_goals.filter(StudyPlanGoals.done == 0)
    else:
        goals = get_goals.all()

    return render_template('user/stady_plan_goals.html.j2',
                           title='Studies plan goals -',
                           goals=goals,
                           plan_id=id,
                           find=find)
    def get(self):
        libraries = db.query(Library).all()

        for library in libraries:
            library.province = library.location_road[0:2]

        return libraries
def get_or_404(model_clazz, pk):
    instance = db.query(model_clazz).filter_by(_id=pk).first()
    if instance is None:
        raise DataNotFoundError("{} {} Not found".format(
            model_clazz.__name__, pk))

    return instance
Exemple #9
0
async def register_user(username: str, password: str):
    if db.query(User).filter(User.username == username).first():
        raise HTTPException(status_code=409, detail='Username already exists')
    user = User(username, pwd_context.hash(password))
    db.add(user)
    db.commit()
    return Response('Created User.', 201)
Exemple #10
0
def study_plan(value, **kwargs):

    get_plan = db.query(StudyPlan).\
        filter(StudyPlan.user_id == current_user.id).\
        filter(StudyPlan.state == 1)

    progress = 0

    if 'done' in kwargs:
        if kwargs.get('done') == 1:
            return get_plan.filter(StudyPlan.done == 1).count()
        elif kwargs.get('done') == 0:
            return get_plan.filter(StudyPlan.done == 0).count()
        else:
            return get_plan.count()

    if 'progress' in kwargs:
        if kwargs.get('progress') == 1:
            done = get_plan.filter(StudyPlan.done == 1).count()
            total = get_plan.count()

            try:
                progress = (done * 100) / total
            except ZeroDivisionError as e:
                raise e
            finally:
                return progress

        else:
            return ValueError('Error in the key word')

    return get_plan.count()
Exemple #11
0
async def get_list(start_date: datetime,
                   end_date: datetime,
                   current_user: UserModel = Depends(get_current_active_user)):
    query = db.query(Bill).filter(Bill.date.between(start_date,
                                                    end_date)).all()
    print(query)
    return {"list": query}
Exemple #12
0
def add_qualification():

    form = QualificationForm()

    if form.validate_on_submit():

        id = form.id.data

        try:
            qualification = db.query(Courses).filter(Courses.id == id)

            new = qualification.one()
            new.qualification = request.form['calificacion']

            db.commit()

            messages = 'La operacion se realizo con exito!'
            category = 'success'

        except ValueError as e:

            messages = 'No fue posible completar la operacion!'
            category = 'error'

            raise e

    flash(messages, category)
    return redirect(url_for('users.subjects_finished'))
Exemple #13
0
def courses(value, **kwargs):

    filtro = db.query(Courses).\
        filter(Courses.user_id == current_user.id).\
        filter(Courses.state == 1)

    progress = 0

    if 'finished' in kwargs:

        if kwargs.get('finished') == 0:
            return filtro.filter(Courses.finished == 0).count()

        if kwargs.get('finished') == 1:
            return filtro.filter(Courses.finished == 1).count()

        else:
            return filtro.count()

    if 'progress' in kwargs:

        if kwargs.get('progress') == 1:
            total = filtro.count()
            finished = filtro.filter(Courses.finished == 1).count()

            try:
                progress = (finished * 100) / total
            except ZeroDivisionError as e:
                raise e
            finally:
                return progress
        else:
            return 0
Exemple #14
0
def study_plan_goals(id, **kwargs):

    get_goals = db.query(StudyPlanGoals).\
        join(StudyPlan, StudyPlanGoals.plan_id == StudyPlan.id).\
        filter(StudyPlanGoals.state == 1).\
        filter(StudyPlan.id == id).\
        filter(StudyPlan.state == 1).\
        filter(StudyPlan.user_id == current_user.id)

    progress = 0

    if 'done' in kwargs:
        if kwargs.get('done') == 1:
            return get_goals.filter(StudyPlanGoals.done == 1).count()
        elif kwargs.get('done') == 0:
            return get_goals.filter(StudyPlanGoals.done == 0).count()
        else:
            return get_goals.count()

    if 'progress' in kwargs:
        if kwargs.get('progress') == 1:
            done = get_goals.filter(StudyPlanGoals.done == 1).count()
            total = get_goals.count()

            try:
                progress = (done * 100) / total
            except ZeroDivisionError as e:
                raise e
            finally:
                return progress

    return get_goals.count()
Exemple #15
0
def plan_de_estudio():

    args = request.args.get('plan')
    find = 'both'

    get_plan = db.query(StudyPlan).\
        filter(StudyPlan.user_id == current_user.id). \
        filter(StudyPlan.state == 1).\
        options(contains_eager(StudyPlan.user))

    if args == 'all':
        plan = get_plan.all()

    elif args == 'finished':
        find = 1
        plan = get_plan.filter(StudyPlan.done == 1)

    elif args == 'pending':
        find = 0
        plan = get_plan.filter(StudyPlan.done == 0)

    else:
        plan = get_plan.all()

    return render_template('user/stady_plan.html.j2',
                           title='Studies plan -',
                           stady_plan=plan,
                           find=find)
Exemple #16
0
async def refresh_route(refresh_token: str):
    refresh_tokens = redis.lrange('refresh_tokens', 0,
                                  redis.llen('refresh_tokens'))
    if refresh_token.encode('utf-8') not in refresh_tokens:
        print('NOT IN CACHE')
        raise HTTPException(status_code=401, detail='Invalid Refresh Token')
    try:
        refresh_data = jwt.decode(refresh_token,
                                  SECRET_KEY,
                                  algorithms=[ALGORITHM])
    except jwt.exceptions.InvalidTokenError as e:
        if isinstance(e, jwt.exceptions.ExpiredSignatureError):
            raise HTTPException(status_code=401,
                                detail='Refresh Token is expired')
        else:
            raise HTTPException(status_code=401,
                                detail='Refresh Token is invalid')
    user = db.query(User).filter(User.id == refresh_data['userid']).first()
    access_token_data = {
        "user": {
            "id": user.id,
            "username": user.username,
            "admin": user.admin
        }
    }
    access_token = create_access_token(access_token_data)
    return {"access_token": access_token, "token_type": "bearer"}
Exemple #17
0
def tasks():

    get_task = db.query(Tasks).\
        filter(Tasks.user_id == current_user.id).\
        filter(Tasks.state == 1)

    args = request.args.get('tasks')
    find = "all"

    if args == "all":
        task = get_task.all()

    elif args == "finished":
        find = 1
        task = get_task.filter(Tasks.done == 1)

    elif args == "pending":
        find = 0
        task = get_task.filter(Tasks.done == 0)

    else:
        task = get_task.all()

    return render_template('user/all_tasks.html.j2',
                           title='Tasks -',
                           task_user=task,
                           find=find)
Exemple #18
0
def teachers(id, n=1):

    filtro = db.query(Teachers).\
        filter(Teachers.user_id == current_user.id).\
        filter(Teachers.state == n)

    return filtro
Exemple #19
0
def assing_teacher():

    form = AssignForm()

    if form.validate_on_submit():

        # name = form.profe.data
        id_teacher = request.form['profe']
        id_subject = form.id.data

        try:

            update = db.query(Courses).\
                filter(Courses.user_id == current_user.id)\
                .filter(Courses.id == id_subject)

            new_teacher = update.one()
            new_teacher.Teachers_id = id_teacher
            db.commit()

            messages = 'La operacion se realizo con exito!'
            category = 'success'

        except ValueError as e:
            raise e

            messages = 'Ha ocurrido un error!'
            category = 'error'

        flash(messages, category)

    return redirect(url_for('users.subjects'))
Exemple #20
0
def teachers():

    teacher = db.query(Teachers).filter(
        Teachers.user_id == current_user.id).all()

    return render_template('user/teachers.html.j2',
                           title="Teachers -",
                           teachers=teacher)
Exemple #21
0
def details_task(id):

    details = db.query(Tasks).filter(Tasks.id == id).\
        options(contains_eager(Tasks.user)).one()

    return render_template('user/details_task.html.j2',
                           title='details -',
                           details=details)
Exemple #22
0
def edit_tasks(id):

    datos = db.query(Tasks).filter(Tasks.user_id == current_user.id).\
        filter(Tasks.id == id).one()

    return render_template('user/edit/edit_tasks.html.j2',
                           title='Edit tasks -',
                           edit_data=datos)
Exemple #23
0
async def fetch_all(username: str, resp: Response):
    # TODO: Add token validation part

    models = db.query(DeployedModel).join(User).filter(User.username == username).all()
    if not models:
        resp.status_code = status.HTTP_404_NOT_FOUND
        return {"result": "fail", "reason": "No models found for given username"}
    return {"result": "ok", "models": models}
Exemple #24
0
async def generateExercise(user_id):
    evaluation_query = db.query(Evaluation).filter(Evaluation.user_id == user_id).order_by(Evaluation.points.asc())
    exercises = []
    if len(evaluation_query.all()) >= 3:
        for evaluation in evaluation_query.all()[:3]:
            exercises.append({"factor1": evaluation.factor1, "factor2": evaluation.factor2})
    exercises.append({"factor1": random.randint(2, 10), "factor2": random.randint(2, 10)})
    return random.choice(exercises)
async def register(new_user: UserModel):
    """register a new user"""
    if db.query(User).get(new_user.name) is not None:
        raise HTTPException(status_code=422, detail="Username already in use")

    new_user.password = get_password_hash(new_user.password)
    db.add(User(name=new_user.name, password=new_user.password))
    db.commit()
    return {"action": "successful"}
Exemple #26
0
async def evaluations_get(user=Depends(get_user)):
    evaluations = db.query(Evaluation).filter(Evaluation.user_id == user.id).order_by(Evaluation.points.desc()).all()
    return [
        {
            "factor1": evaluation.factor1,
            "factor2": evaluation.factor2,
            "points": evaluation.points,
            "count": evaluation.count,
        }
        for evaluation in evaluations
    ]
Exemple #27
0
async def fetch_one(uid: str, resp: Response):
    # TODO: Choose between .first() and .one() to fetch a model.
    # Using .one() throws an exception for zero or >1 results, hence using .first().
    model = (db.query(
        DeployedModel.name, DeployedModel.description,
        User.username).join(User).filter(DeployedModel.uid == uid).first())
    if not model:
        resp.status_code = status.HTTP_404_NOT_FOUND
        return {"result": "fail", "reason": "No model found for given UID"}

    return {"result": "ok", "model": model}
Exemple #28
0
async def log_add(factor1: int,
                  factor2: int,
                  user_result: int,
                  duration: int,
                  user=Depends(get_user)):
    user_db = db.query(User).filter(User.id == user.id).first()
    db.add(
        LogEntry(user_db, factor1, factor2, user_result,
                 factor1 * factor2 == user_result, duration))
    db.commit()
    return {'message': 'Created Log', 'status': 201}
Exemple #29
0
async def log_get(user=Depends(get_user)):
    result: list[LogEntry] = db.query(LogEntry).filter(
        LogEntry.user_id == user.id).all()
    return [{
        'id': row.id,
        'factor1': row.factor1,
        'factor2': row.factor2,
        'user_result': row.user_result,
        'correct': row.correct,
        'timestamp': row.timestamp,
        'duration': row.duration
    } for row in result]
Exemple #30
0
def courses(id):

    get_task = db.query(Tasks).\
        filter(Tasks.user_id == current_user.id). \
        filter(Tasks.course_id == id). \
        filter(Tasks.state == 1)

    courses = db.query(Courses).\
        filter(Courses.user_id == current_user.id).\
        filter(Courses.id == id).first()

    find = "both"

    if 'tasks' in request.args:

        args = request.args.get('tasks')

        if args == 'finished':
            find = 1
            task = get_task.filter(Tasks.done == 1).all()

        elif args == 'all':
            task = get_task.all()

        elif args == 'pending':
            find = 0
            task = get_task.filter(Tasks.done == 0).all()

        else:
            task = get_task.all()

    else:
        task = get_task.all()

    return render_template('user/courses.html.j2',
                           title='Courses: {}'.format(courses.name),
                           course=courses,
                           assignments=task,
                           course_id=id,
                           find=find)