Source code for intranet.apps.api.views

from collections import OrderedDict

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response

from django.urls import reverse


[docs]def perma_reverse(request, view, *args, **kwargs): return request.build_absolute_uri(reverse(view, *args, **kwargs))
[docs]@api_view(("GET",)) @permission_classes((AllowAny,)) def api_root(request, format=None): # pylint: disable=redefined-builtin,unused-argument; It doesn't appear we can change this keyword argument name """ Welcome to the Ion API! Documentation is below. <pk> refers to the unique id of a certain object - this is shown as "id" in most lists and references. The general form of the API link (with /api/ assumed to be prepended) is shown, along with an example URL. All of the API methods, except for those relating to the Bell Schedule, require authentication. Use of the Ion API is subject to the TJHSST Intranet API and OAuth Acceptable Use Policy,\ which can be found at https://ion.tjhsst.edu/docs/api-oauth-aup.\ Activity inconsistent with the AUP may result in revocation of API and/or OAuth access.\ All API activity is logged and monitored, and may be used to identify and investigate violations of the AUP. """ if request.user and request.user.is_authenticated and not request.user.oauth_and_api_access: return Response( { "detail": ( "You are not authorized to access the API. " "You may have violated the TJHSST Intranet API and OAuth Acceptable Use Policy, " "which can be found at https://ion.tjhsst.edu/docs/api-oauth-aup. " "Attempts to circumvent this restriction will result in disciplinary action. " "Contact intranet@tjhsst.edu for more information. " ) }, status=403, ) views = OrderedDict( ( ( "Schedule", { "/schedule": ["Get today's schedule", perma_reverse(request, "api_schedule_day_list")], "/schedule?page_size=<num>": [ "Get the schedule for the next <num> days", "{}?page_size=7".format(perma_reverse(request, "api_schedule_day_list")), ], "/schedule/<date>": [ "Get the schedule for a specific day, in YYYY-MM-DD format", perma_reverse(request, "api_schedule_day_detail", kwargs={"date": "2016-04-04"}), ], }, ), ( "Announcements", { "/announcements": ["List announcements", perma_reverse(request, "api_announcements_list_create")], "/announcements/<pk>": ["Get announcement details", perma_reverse(request, "api_announcements_detail", kwargs={"pk": 2999})], }, ), ("Emergency Announcements", {"/emerg": ["Get FCPS emergency announcement information", perma_reverse(request, "api_emerg_status")]}), ( "Profile", { "/profile": ["Get current user profile", perma_reverse(request, "api_user_myprofile_detail")], "/profile/<pk>": ["Get specific user profile by user ID", perma_reverse(request, "api_user_profile_detail", kwargs={"pk": 489})], "/profile/<username>": [ "Get specific user profile by username", perma_reverse(request, "api_user_profile_detail_by_username", kwargs={"username": "2017ewang"}), ], "/profile/<pk>/picture": [ "Get a specific user's profile picture by user ID", perma_reverse(request, "api_user_profile_picture_default", kwargs={"pk": 489}), ], "/profile/<username>/picture": [ "Get a specific user's profile picture by username", perma_reverse(request, "api_user_profile_picture_default_by_username", kwargs={"username": "2017ewang"}), ], }, ), ( "Search", { "/search/<query>": [ "Search users (see {}?tips for advanced search documentation)".format(perma_reverse(request, "search")), perma_reverse(request, "api_user_search", kwargs={"query": "last:Kim"}), ] }, ), ( "Blocks", { "/blocks": ["List all blocks this year (paginated)", perma_reverse(request, "api_eighth_block_list")], "/blocks?start_date=<start_date>": [ "List all blocks starting on the specified date (in YYYY-MM-DD format; paginated)", "{}?start_date=2015-11-18".format(perma_reverse(request, "api_eighth_block_list")), ], "/blocks?date=<date>": [ "List all blocks on the specified date (in YYYY-MM-DD format)", "{}?date=2015-11-18".format(perma_reverse(request, "api_eighth_block_list")), ], "/blocks/<pk>": ["Get a list of activities on a block", perma_reverse(request, "api_eighth_block_detail", kwargs={"pk": 3030})], }, ), ( "Activities", { "/activities": ["List all eighth period activities", perma_reverse(request, "api_eighth_activity_list")], "/activities/<pk>": [ "Get details for a specific eighth period activity (including some scheduling information)", perma_reverse(request, "api_eighth_activity_detail", kwargs={"pk": 115}), ], }, ), ( "Signups", { "/signups/user": [ "List eighth signups for the current user, or sign up the current user for an activity", perma_reverse(request, "api_eighth_user_signup_list_myid"), ], "/signups/user/<user_id>": [ "List eighth signups for a specific user", perma_reverse(request, "api_eighth_user_signup_list", kwargs={"user_id": 8889}), ], "/signups/user/favorites": [ "List favorited eighth activities for current user, or toggle whether an activity is favorited", perma_reverse(request, "api_eighth_user_favorites_list_myid"), ], "/signups/scheduled_activity/<scheduled_activity_id>": [ "List eighth signups for a specific scheduled activity", perma_reverse(request, "api_eighth_scheduled_activity_signup_list", kwargs={"scheduled_activity_id": 889}), ], }, ), ( "Bus", { "/bus": ["Get list of bus routes", perma_reverse(request, "api_bus_list")], "/bus/<pk>": ["Get information about a specific bus route", perma_reverse(request, "api_bus_detail", kwargs={"pk": 3})], }, ), ) ) return Response(views)