Beispiel #1
0
def _group_graphs_api(request, group_id, graph_id=None):
	"""
	Handles any request (GET/POST) sent to groups/<group_id>/graphs or groups/<group_id>/graphs/<graph_id>.

	Parameters
	----------
	request - HTTP Request
	group_id : string
		Unique ID of the group.

	Returns
	-------

	"""
	if request.META.get('HTTP_ACCEPT', None) == 'application/json':
		if request.method == "GET" and graph_id is None:
			return HttpResponse(json.dumps(_get_group_graphs(request, group_id)),
								content_type="application/json")
		elif request.method == "POST" and graph_id is None:
			return HttpResponse(json.dumps(_add_group_graph(request, group_id)), content_type="application/json",
								status=201)
		elif request.method == "DELETE" and graph_id is not None:
			_delete_group_graph(request, group_id, graph_id)
			return HttpResponse(json.dumps({
				"message": "Successfully deleted graph with id=%s from group with id=%s" % (graph_id, group_id)
			}), content_type="application/json", status=200)
		else:
			raise MethodNotAllowed(request)  # Handle other type of request methods like OPTIONS etc.
	else:
		raise BadRequest(request)
Beispiel #2
0
def graphs_page(request):
    """
		Wrapper view function for the following pages:
		/graphs/

		Parameters
		----------
		request : HTTP Request

		Returns
		-------
		response : HTML Page Response
			Rendered graphs list page in HTML.

		Raises
		------
		MethodNotAllowed: If a user tries to send requests other than GET i.e., POST, PUT or UPDATE.

		Notes
		------
	"""
    if 'GET' == request.method:
        context = RequestContext(request,
                                 {"tags": request.GET.get('tags', '')})
        return render(request, 'graphs/index.html', context)
    else:
        raise MethodNotAllowed(
            request
        )  # Handle other type of request methods like POST, PUT, UPDATE.
Beispiel #3
0
def _group_members_api(request, group_id, member_id=None):
	"""
	Handles any request (GET/POST) sent to groups/<group_id>/members or groups/<group_id>/members/<member_id>.

	Parameters
	----------
	request - HTTP Request

	Returns
	-------

	"""
	if request.META.get('HTTP_ACCEPT', None) == 'application/json':
		if group_id is None:
			raise Exception("Group ID is required.")

		if request.method == "GET" and member_id is None:
			return HttpResponse(json.dumps(_get_group_members(request, group_id)),
								content_type="application/json")
		elif request.method == "POST" and member_id is None:
			return HttpResponse(json.dumps(_add_group_member(request, group_id)), content_type="application/json",
								status=201)
		elif request.method == "DELETE" and member_id is not None:
			_delete_group_member(request, group_id, member_id)
			return HttpResponse(json.dumps({
				"message": "Successfully deleted member with id=%s from group with id=%s" % (member_id, group_id)
			}), content_type="application/json", status=200)
		else:
			raise MethodNotAllowed(request)  # Handle other type of request methods like OPTIONS etc.
	else:
		raise BadRequest(request)
Beispiel #4
0
def _groups_api(request, group_id=None):
	"""
	Handles any request (GET/POST) sent to /groups or groups/<group_id>

	Parameters
	----------
	request - HTTP Request

	Returns
	-------

	"""
	if request.META.get('HTTP_ACCEPT', None) == 'application/json':
		if request.method == "GET" and group_id is None:
			return HttpResponse(json.dumps(_get_groups(request, query=request.GET)), content_type="application/json")
		elif request.method == "GET" and group_id is not None:
			return HttpResponse(json.dumps(_get_group(request, group_id)), content_type="application/json",
								status=200)
		elif request.method == "POST" and group_id is None:
			return HttpResponse(json.dumps(_add_group(request, group=request.POST)), content_type="application/json",
								status=201)
		elif request.method == "PUT" and group_id is not None:
			return HttpResponse(json.dumps(_update_group(request, group_id, group=QueryDict(request.body))),
								content_type="application/json",
								status=200)
		elif request.method == "DELETE" and group_id is not None:
			_delete_group(request, group_id)
			return HttpResponse(json.dumps({
				"message": "Successfully deleted group with id=%s" % group_id
			}), content_type="application/json", status=200)
		else:
			raise MethodNotAllowed(request)  # Handle other type of request methods like OPTIONS etc.
	else:
		raise BadRequest(request)
Beispiel #5
0
def _graphs_api(request, graph_id=None):
    """
	Handles any request sent to following urls:
		/graphs
		/graphs/<graph_id>

	Parameters
	----------
	request - HTTP Request

	Returns
	-------
	response : JSON Response

	Raises
	------
	MethodNotAllowed: If a user tries to send requests other than GET, POST, PUT or UPDATE.
	BadRequest: If HTTP_ACCEPT header is not set to application/json.

	"""
    if request.META.get('HTTP_ACCEPT', None) == 'application/json':
        if request.method == "GET" and graph_id is None:
            return HttpResponse(json.dumps(
                _get_graphs(request, query=request.GET)),
                                content_type="application/json")
        elif request.method == "GET" and graph_id is not None:
            return HttpResponse(json.dumps(_get_graph(request, graph_id)),
                                content_type="application/json",
                                status=200)
        elif request.method == "POST" and graph_id is None:
            return HttpResponse(json.dumps(
                _add_graph(request, graph=json.loads(request.body))),
                                content_type="application/json",
                                status=201)
        elif request.method == "PUT" and graph_id is not None:
            return HttpResponse(json.dumps(
                _update_graph(request,
                              graph_id,
                              graph=json.loads(request.body))),
                                content_type="application/json",
                                status=200)
        elif request.method == "DELETE" and graph_id is not None:
            _delete_graph(request, graph_id)
            return HttpResponse(json.dumps({
                "message":
                "Successfully deleted graph with id=%s" % graph_id
            }),
                                content_type="application/json",
                                status=200)
        else:
            raise MethodNotAllowed(
                request
            )  # Handle other type of request methods like OPTIONS etc.
    else:
        raise BadRequest(request)
Beispiel #6
0
def join_group_page(request, group_id):
	"""
		Wrapper view for the join_group_page by invitation. /groups/<group_id>/invite/

		:param request: HTTP GET Request.

	Parameters
	----------
	group_id : string
		Unique ID of the group. Required
	"""
	context = RequestContext(request, {})

	if 'GET' == request.method:
		group = users.get_group_by_id(request, group_id)
		if group is not None and group.invite_code == request.GET.get('code', None):
			if request.session['uid'] is None:
				context.push({
					"group": group,
					"invite_code": request.GET.get('code', None)
				})
				return render(request, 'join_group/index.html', context)
			else:
				try:
					users.add_group_member(request, group_id, member_email=request.session['uid'])
				finally:
					return redirect('/groups/'+group_id)
		else:
			return redirect('/')  # TODO: change it to signup page. Currently we dont have a signup link.
	elif 'POST' == request.method:

		group = users.get_group_by_id(request, group_id)
		if group is not None and group.invite_code == request.POST.get('code', None):
			try:
				if request.session['uid'] is None:
					user = users.register(request, username=request.POST.get('user_id', None), password=request.POST.get('password', None))
					if user is not None:
						request.session['uid'] = user.email
						request.session['admin'] = user.is_admin

					users.add_group_member(request, group_id, member_id=user.id)

				return redirect('/groups/'+group_id)
			except GraphSpaceError as e:
				context.push({
					"error_message": e.get_message(),
					"group": group,
					"invite_code": request.POST.get('code', None)
				})
				return render(request, 'join_group/index.html', context)
		else:
			return redirect('/')  # TODO: change it to signup page. Currently we dont have a signup link.
	else:
		raise MethodNotAllowed(request)  # Handle other type of request methods like POST, PUT, UPDATE.
Beispiel #7
0
def groups_page(request):
	"""
		Wrapper view for the groups page.

		:param request: HTTP GET Request.
	"""
	if 'GET' == request.method:
		context = RequestContext(request, {})
		return render(request, 'groups/index.html', context)
	else:
		raise MethodNotAllowed(request)  # Handle other type of request methods like POST, PUT, UPDATE.
Beispiel #8
0
def _graph_layouts_api(request, graph_id, layout_id=None):
    """
	Handles any request (GET/POST) sent to /layouts or /layouts/<layout_id>.

	Parameters
	----------
	request - HTTP Request
	graph_id : string
		Unique ID of the graph.
	layout_id: string
		Unique ID of the layout.

	Returns
	-------

	"""
    if request.META.get('HTTP_ACCEPT', None) == 'application/json':
        if request.method == "GET" and layout_id is None:
            return HttpResponse(json.dumps(
                _get_layouts(request, graph_id, query=request.GET)),
                                content_type="application/json")
        elif request.method == "GET" and layout_id is not None:
            return HttpResponse(json.dumps(
                _get_layout(request, graph_id, layout_id)),
                                content_type="application/json")
        elif request.method == "POST" and layout_id is None:
            return HttpResponse(json.dumps(
                _add_layout(request, graph_id,
                            layout=json.loads(request.body))),
                                content_type="application/json",
                                status=201)
        elif request.method == "PUT" and layout_id is not None:
            return HttpResponse(json.dumps(
                _update_layout(request,
                               graph_id,
                               layout_id,
                               layout=json.loads(request.body))),
                                content_type="application/json",
                                status=200)
        elif request.method == "DELETE" and layout_id is not None:
            _delete_layout(request, graph_id, layout_id)
            return HttpResponse(json.dumps({
                "message":
                "Successfully deleted layout with id=%s" % (layout_id)
            }),
                                content_type="application/json",
                                status=200)
        else:
            raise MethodNotAllowed(
                request
            )  # Handle other type of request methods like OPTIONS etc.
    else:
        raise BadRequest(request)
Beispiel #9
0
def _graph_groups_api(request, graph_id, group_id=None):
    """
	Handles any request (GET/POST) sent to graphs/<graph_id>/groups or graphs/<graph_id>/groups/<group_id>.

	Parameters
	----------
	request - HTTP Request
	graph_id : string
		Unique ID of the graph.

	Returns
	-------

	Raises
	------
	MethodNotAllowed: If a user tries to send requests other than GET, POST, PUT or UPDATE.
	BadRequest: If HTTP_ACCEPT header is not set to application/json.
	BadRequest: If graph_id is missing.

	"""
    if request.META.get('HTTP_ACCEPT', None) == 'application/json':
        if graph_id is None:
            raise BadRequest(request,
                             error_code=ErrorCodes.Validation.GraphIDMissing)

        if request.method == "GET" and group_id is None:
            return HttpResponse(json.dumps(
                _get_graph_groups(request, graph_id, query=request.GET)),
                                content_type="application/json")
        elif request.method == "POST" and group_id is None:
            return HttpResponse(json.dumps(
                _add_graph_group(request,
                                 graph_id,
                                 group=json.loads(request.body))),
                                content_type="application/json",
                                status=201)
        elif request.method == "DELETE" and group_id is not None:
            _delete_graph_group(request, graph_id, group_id)
            return HttpResponse(json.dumps({
                "message":
                "Successfully deleted graph with id=%s from group with id=%s" %
                (graph_id, group_id)
            }),
                                content_type="application/json",
                                status=200)
        else:
            raise MethodNotAllowed(
                request
            )  # Handle other type of request methods like OPTIONS etc.
    else:
        raise BadRequest(request)
Beispiel #10
0
def group_page(request, group_id):
	"""
		Wrapper view for the group page. /groups/<group_id>

		:param request: HTTP GET Request.

	Parameters
	----------
	group_id : string
		Unique ID of the group. Required
	"""
	if 'GET' == request.method:
		context = RequestContext(request, {})
		context.push({
			"group": _get_group(request, int(group_id)),
		})
		return render(request, 'group/index.html', context)
	else:
		raise MethodNotAllowed(request)  # Handle other type of request methods like POST, PUT, UPDATE.
Beispiel #11
0
def _users_api(request):
	"""
	Handles any request (GET/POST) sent to /users.

	Parameters
	----------
	request - HTTP Request

	Returns
	-------

	"""
	if 'application/json' in request.META.get('HTTP_ACCEPT', None):
		if request.method == "GET":
			return HttpResponse(json.dumps(_get_users(request, query=request.GET)), content_type="application/json")
		else:
			raise MethodNotAllowed(request)  # Handle other type of request methods like OPTIONS etc.
	else:
		raise BadRequest(request)
Beispiel #12
0
def user_page(request):
	"""
		Wrapper view for the user profile page.

		:param request: HTTP GET Request.
	"""
	if 'GET' == request.method:
		context = RequestContext(request, {})
		user_email = get_request_user(request)
		user_object, auth_token = users.get_user_profile(request, user_email) if user_email is not None else None
		context.push({
			"user": {
				"id": user_object.id,
				"email": user_object.email,
				"auth_token": auth_token
			}
		})
		return render(request, 'user_profile/index.html', context)
	else:
		raise MethodNotAllowed(request)  # Handle other type of request methods like POST, PUT, UPDATE.
Beispiel #13
0
def graphs_advanced_search_ajax_api(request):
    """
	Handles any request sent to following urls:
		/ajax/graphs

	Parameters
	----------
	request - HTTP Request

	Returns
	-------
	response : JSON Response

	"""
    if request.META.get('HTTP_ACCEPT', None) == 'application/json':
        if request.method == "POST":
            querydict = QueryDict('', mutable=True)
            querydict.update(request.GET)
            queryparams = querydict

            # Validate search graphs API request
            user_role = authorization.user_role(request)
            if user_role == authorization.UserRole.LOGGED_IN:
                if queryparams.get('owner_email', None) is None \
                  and queryparams.get('member_email', None) is None \
                  and queryparams.get('is_public', None) != '1':
                    raise BadRequest(
                        request,
                        error_code=ErrorCodes.Validation.IsPublicNotSet)
                if queryparams.get('is_public', None) != '1':
                    if get_request_user(request) != queryparams.get('member_email', None) \
                      and get_request_user(request) != queryparams.get('owner_email', None):
                        raise BadRequest(request,
                                         error_code=ErrorCodes.Validation.
                                         NotAllowedGraphAccess,
                                         args=queryparams.get(
                                             'owner_email', None))

            total, graphs_list = graphs.search_graphs1(
                request,
                owner_email=queryparams.get('owner_email', None),
                member_email=queryparams.get('member_email', None),
                names=list(filter(None, queryparams.getlist('names[]', []))),
                is_public=queryparams.get('is_public', None),
                nodes=list(filter(None, queryparams.getlist('nodes[]', []))),
                edges=list(filter(None, queryparams.getlist('edges[]', []))),
                tags=list(filter(None, queryparams.getlist('tags[]', []))),
                limit=queryparams.get('limit', 20),
                offset=queryparams.get('offset', 0),
                order=queryparams.get('order', 'desc'),
                sort=queryparams.get('sort', 'name'),
                query=json.loads(request.body))

            return HttpResponse(json.dumps({
                'total':
                total,
                'graphs': [
                    utils.serializer(graph, summary=True)
                    for graph in graphs_list
                ]
            }),
                                content_type="application/json",
                                status=200)
        else:
            raise MethodNotAllowed(
                request
            )  # Handle other type of request methods like GET, OPTIONS etc.
    else:
        raise BadRequest(request)