def getDetail(project_id):
        # Load project from internal database
        project = models.Project.query.filter_by(id=project_id).first()

        # Check if project was found
        if not project:
            validation = ValidationResult(dict())
            validation.addError("Project not in internal database")

            return validation

        # Init result cloud api
        resultCloud = ResultCloud(config.RESULT_CLOUD_API)
        
        # Try to load project
        try:
            response = resultCloud.get_project(project.ext_id)
        except:
            # Prepare validation and return result
            validation = ValidationResult(models.serialize(project))
            return validation

        # Init result
        result = models.serialize(project)

        # If there was a response, get submissions
        if response:
            result["submissions"] = resultCloud.last_response['Result']['Submissions']

        # Prepare validation and return result
        validation = ValidationResult(result)
        return validation
Пример #2
0
def put_response(model, field, match, not_implemented=[]):
    model_to_update = model.query.filter(
        getattr(model, field) == match).first()
    if not model_to_update:
        return not_found()
    update_json = request.get_json()
    if 'id' in update_json:
        return bad_request('Cannot update id.')

    for key in not_implemented:
        if key in update_json:
            return bad_request(
                'Update of ' + key +
                'not implemented. Use the endpoints respective to ' + key +
                ' to perform this operation.')

    for key in update_json:
        setattr(model_to_update, key, update_json[key])

    db.session.add(model_to_update)
    db.session.commit()
    return jsonify({
        'message': 'Updated.',
        model.__name__.lower(): serialize(model_to_update)
    })
Пример #3
0
def all_response(model, model_name):
    models = model.query.paginate()
    return jsonify({
        'page': models.page,
        'pages': models.pages,
        'per_page': models.per_page,
        'next': models.next_num,
        'prev': models.prev_num,
        model_name: [serialize(model) for model in models.items]
    })
    def getList():
        # Init api handler
        resultCloud = ResultCloud(config.RESULT_CLOUD_API)

        # Try to load projects from result cloud
        try:
            response  = resultCloud.get_git_projects()   
        except:
            # Load internal projects
            internalProjects = models.Project.query.all()

            # Prepare validation and return result
            validation =  ValidationResult([models.serialize(project) for project in internalProjects])
            return validation
 
        # Check if the request was successful
        if not response:
            # Load failed
            validationResult = ValidationResult(dict())
            validationResult.addError("Failed to load projects from ResultCloud repository")

            # Return result
            return validationResult
        else:
            # Load was successful
            externalProjects = resultCloud.last_response['Result']

            # Merge new projects
            for project in externalProjects:
                if not models.Project.query.filter_by(ext_id=project["Id"]).first():
                    new_project = models.Project(project["Id"], project["Name"], project["GitRepository"])
                    ProjectService.save(new_project)

            # Load internal projects
            internalProjects = models.Project.query.all()

            # Prepare validation and return result
            validation =  ValidationResult([models.serialize(project) for project in internalProjects])
            return validation
Пример #5
0
def update(question_id):
    question = Question.query.filter(Question.id == question_id).first()
    if not question:
        return not_found()
    update_json = request.get_json()

    # TODO: determine if it's better to use an exception flow here

    try:
        validate_json(update_json)
    except (InvalidUpdateFieldError, IdUpdateError) as err:
        return bad_request(err.args[0])

    question.update(**update_json)
    db.session.add(question)
    db.session.commit()
    return jsonify({'message': 'Updated.', 'question': serialize(question)})
Пример #6
0
    def list(self):
        page = request.GET.get('page', 1)
        search = request.GET.get('search')
        per_page = 20
        query = User.query

        if search is not None:
            search = '%{}%'.format(search)
            query = User.query.filter(
                User.username.ilike(search) |
                User.fb_id.ilike(search) |
                User.name.ilike(search) |
                User.gender.ilike(search))
        query = query.order_by(User.name)
        pagination = Pagination(query, page, per_page)

        context = {
            'pages': pagination.pages,
            'prev': pagination.prev,
            'next': pagination.next,
            'current': page,
            'objects': serialize(pagination.objects)
        }
        return context
Пример #7
0
def specific_response(model, field, match):
    specific_model = model.query.filter(getattr(model, field) == match).first()
    if not specific_model:
        return not_found()
    return jsonify(serialize(specific_model))
Пример #8
0
def getConsumptionHistory(prescription_id):
  records = db.session.query(models.DrugInventory)\
    .filter(models.DrugInventory.prescription_id==prescription_id)\
    .order_by(models.DrugInventory.time_stamp.desc())
  json_str = json.dumps({'ConsumptionHistory': [models.serialize(record) for record in records]}, default=models.custom_parser)
  return Response(json_str, status=200, mimetype='application/json')
Пример #9
0
def getUserData(user_id):
  user = models.User.query.get(user_id)
  resp = Response(json.dumps({'User': models.serialize(user)}), status=200)
  resp.mimetype = 'application/json'
  return resp
Пример #10
0
def getPrescriptions(user_id):
  prescriptions = db.session.query(Prescription).filter(Prescription.patient_id == user_id)
  json_str = json.dumps({'Prescriptions': [models.serialize(prescription) for prescription in prescriptions]}, default=models.custom_parser)
  resp = Response(json_str, status=200, mimetype='application/json')
  return resp