Exemple #1
0
def getUser(account_id):
    try:
        user = User.query.filter_by(account_id=account_id).first()
        response = respond({'user': user.columns_to_dict()}, 200)
    except:
        response = respond({'error': "user not found"}, 404)
    return response
Exemple #2
0
def browse(rq, app, model):
	query = rq.pwf.model.objects

	# TODO: Filters
	if rq.pwf.filters:
		try: conds = parse_filters(rq.pwf.model, rq.pwf.filters)
		except PerfectDataError as e:
			return respond(rq, {'message':'failed-to-parse-filters', 'messages':e.messages}, 400)

		if conds:
			query = query.filter(conds)

	result = {
		"per_page":rq.pwf.per_page,
		"page":rq.pwf.page,
		"total":query.count(),
		"data":[],
	}

	# Apply sort to query
	try: query = parse_sort(rq, query)
	except PerfectDataError as e:
		return respond(rq, {'message':'failed-to-parse-filters', 'messages':e.messages}, 400)

	page_real = rq.pwf.page * rq.pwf.per_page
	per_page_real = page_real + rq.pwf.per_page

	data_list = query.all()[page_real:per_page_real]

	for obj in data_list:
		result['data'].append(obj.to_object())

	return respond(rq, result)
Exemple #3
0
def createUser():
    req = request.get_json()
    try:
        newuser = User(username=req['username'], email=req['email'])
        db.session.add(newuser)
        db.session.commit()
        return respond({'user': newuser.columns_to_dict()}, 201)
    except AlreadyExists as e:
        return respond({'error': e.message}, 400)
Exemple #4
0
def updateUser(account_id):
    req = request.get_json()
    try:
        user = User.query.filter_by(account_id=account_id).first()
        user.update(req)
        db.session.commit()
        return respond({'user': user.columns_to_dict()}, 201)
    except AlreadyExists as e:
        return respond({"error": e.message}, 400)
Exemple #5
0
def getUserStastistics(account_id):
    try:
        user = User.query.filter_by(account_id=account_id).options(
            db.load_only("id")).first()
        statistics = Statistics.query.filter_by(user_id=user.id).order_by(
            Statistics.created_at.desc()).first()
        res = {"statistics": statistics.columns_to_dict()}
        return respond(res, 200)
    except:
        return respond({"error": "user not found"}, 404)
Exemple #6
0
def updateUserAchievements(account_id):
    try:
        req = request.get_json()
        user = User.query.filter_by(account_id=account_id).options(
            db.load_only("id")).first()
        achiev = Achievements(user_id=user.id, achievement=req['achievement'])
        db.session.add(achiev)
        db.session.commit()
        resp = {"success": "achievement has been added successfully"}
        return respond(resp, 201)
    except:
        return respond({"error": "user not found"}, 404)
Exemple #7
0
def getUserAchievements(account_id):
    try:
        user = User.query.filter_by(account_id=account_id).options(
            db.load_only("id")).first()
        achievements = Achievements.query.filter_by(user_id=user.id).all()
        result = {}

        for index in range(len(achievements)):
            result[index] = achievements[index].columns_to_dict()
        return respond({'achievements': result}, 200)
    except:
        return respond({'error': "user not found"}, 404)
Exemple #8
0
def proxy_head(rq, app):
	data = validate_request(rq, [
		{'name':'url', 'type':'url', 'required':True}
	])

	url   = urlparse.urlparse(data['values']['url'])
	query = ''

	if url.query:
		query = '?%s' % url.query

	path = '%s%s' % (url.path, query)
	conn = httplib.HTTPConnection(url.netloc)
	conn.request('HEAD', path)

	res = conn.getresponse()
	mime = res.getheader('content-type')
	size = res.getheader('content-length')

	info = {
		'host':url.netloc,
		'path':path,
	}

	if mime:
		info['type'] = mime

	if size:
		info['size'] = int(size)

	return respond(rq, info, res.status)
Exemple #9
0
def updateUserStatistics(account_id):
    try:
        req = request.get_json()
        user = User.query.filter_by(account_id=account_id).options(
            db.load_only("id")).first()
        stats = Statistics(user_id=user.id,
                           wins=req['wins'],
                           losses=req['losses'],
                           score=req['score'],
                           level=req['level'])
        db.session.add(stats)
        db.session.commit()
        resp = {"success": "statistics has been added successfully"}
        return respond(resp, 201)
    except:
        return respond({"error": "user not found"}, 404)
Exemple #10
0
def getUserInfo(account_id, info):
    if info not in ['statistics', 'achievements']:
        return respond({"error": "invalid url"}, 404)
    else:
        if info == 'achievements':
            return getUserAchievements(account_id=account_id)
        elif info == 'statistics':
            return getUserStastistics(account_id=account_id)
Exemple #11
0
def authenticate():
    """Sends a 401 response that enables basic auth"""
    data = {
        "error":
        'Could not verify your access level for that URL. You have to login with proper credentials'
    }
    status_code = 401
    headers = {'WWW-Authenticate': 'Basic realm="Login Required"'}
    return respond(data=data, status_code=status_code, headers=headers)
	def decorator(rq, *args, **kwargs):
		if not hasattr(rq, 'pwf'):
			try: rq.pwf = pwf().parse_rq_base(rq)
			except PerfectDataError as e:
				return respond(rq, {
					'message':'failed-to-parse-base',
					'errors':e.messages
				}, 400)

		return fn(rq, *args, **kwargs)
Exemple #13
0
def update_document(document_id):
    body = request.get_json()
    updated_document_count = Document.objects.update_one(
        id=document_id,
        **{
            k: v
            for k, v in body.items()
            if k in ["title", "parent", "children", "content"]
        })

    return respond(updated_document_count=updated_document_count)
	def decorator(rq, app, model, id=None, *args, **kwargs):
		try: id = int(id)
		except: id = None

		if id:
			try: rq.pwf.obj = rq.pwf.model.objects.filter(id=id).get()
			except ObjectDoesNotExist:
				raise Http404

			return fn(rq, app, model, id, *args, **kwargs)
		else:
			return respond(rq, {'message':'invalid-id'}, 400)
Exemple #15
0
def create(rq, app, model, id=None):
	# ID attribute will be added into request payload schema, so it must be
	# removed to prevent rewrites
	if 'id' in rq.pwf.obj_data['values']:
		rq.pwf.obj_data['values'].pop('id', None)

	item = update_object(rq.pwf.model, rq.pwf.model(), rq.pwf.obj_data['values'])
	item.save()

	if rq.pwf.obj_data['update_m2m']:
		item = rq.pwf.model.objects.filter(id = item.id).get()
		item = update_object(rq.pwf.model, item, rq.pwf.obj_data['values'])
		item.save()

	return respond(rq, {'data':item.to_object()})
Exemple #16
0
def create_document():
    body = request.get_json()
    try:
        title = body["title"]
        content = body["content"]
        parent = body.get("parent")
        children = body.get("children")
    except KeyError:
        return "Data missing from request"

    document = Document(**{
        "title": title,
        "content": content,
        "parent": parent,
        "children": children
    })
    document.save()

    return respond(document=document.to_mongo())
Exemple #17
0
def on_validation_error(e):
    return respond({'error': e.message}, 400)
Exemple #18
0
def get_document(document_id):
    res = db.documents.find_one({"_id": ObjectId(document_id)})

    return respond(document=res)
Exemple #19
0
def get_documents():
    res = list(db.documents.find())

    return respond(documents=res)
Exemple #20
0
def edit(rq, app, model, id):
	item = update_object(rq.pwf.model, rq.pwf.obj, rq.pwf.obj_data['values'])
	item.save()

	return respond(rq, {'data':item.to_object()})
Exemple #21
0
def drop(rq, app, model, id):
	rq.pwf.obj.delete()
	return respond(rq, {'data':{'id':id}})
def deny(rq):
	return respond(rq, {'errors':[{'message':'permission-denied'}]}, 403)
	def decorator(rq, app, model, id=None, *args, **kwargs):
		rq.pwf.parse_object_data(False)

		if rq.pwf.obj_data['errors']:
			return respond(rq, {'errors':rq.pwf.obj_data['errors']}, 400)
		return fn(rq, app, model, id, *args, **kwargs)