team-3/src/c3nav/api/urls.py

84 lines
3.4 KiB
Python
Raw Normal View History

import re
from collections import OrderedDict
from compressor.utils.decorators import cached_property
from django.conf.urls import include, url
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from rest_framework.routers import SimpleRouter
2016-09-11 21:39:01 +02:00
2017-07-06 13:07:05 +02:00
from c3nav.editor.api import ChangeSetViewSet, EditorViewSet
from c3nav.mapdata.api import (AccessRestrictionGroupViewSet, AccessRestrictionViewSet, AreaViewSet, BuildingViewSet,
ColumnViewSet, CrossDescriptionViewSet, DoorViewSet, HoleViewSet,
LeaveDescriptionViewSet, LevelViewSet, LineObstacleViewSet, LocationBySlugViewSet,
2017-11-27 16:06:55 +01:00
LocationGroupCategoryViewSet, LocationGroupViewSet, LocationViewSet, MapViewSet,
ObstacleViewSet, POIViewSet, RampViewSet, SourceViewSet, SpaceViewSet, StairViewSet,
2017-12-24 01:01:58 +01:00
UpdatesViewSet)
2017-11-27 16:40:15 +01:00
from c3nav.routing.api import RoutingViewSet
2016-09-11 21:39:01 +02:00
router = SimpleRouter()
2017-10-10 17:55:55 +02:00
router.register(r'map', MapViewSet, base_name='map')
2017-06-11 14:43:14 +02:00
router.register(r'levels', LevelViewSet)
2017-05-11 19:36:49 +02:00
router.register(r'buildings', BuildingViewSet)
router.register(r'spaces', SpaceViewSet)
router.register(r'doors', DoorViewSet)
router.register(r'holes', HoleViewSet)
router.register(r'areas', AreaViewSet)
router.register(r'stairs', StairViewSet)
2017-11-17 20:31:29 +01:00
router.register(r'ramps', RampViewSet)
2017-05-11 19:36:49 +02:00
router.register(r'obstacles', ObstacleViewSet)
router.register(r'lineobstacles', LineObstacleViewSet)
2017-06-09 15:22:30 +02:00
router.register(r'columns', ColumnViewSet)
2017-07-08 16:29:12 +02:00
router.register(r'pois', POIViewSet)
router.register(r'leavedescriptions', LeaveDescriptionViewSet)
router.register(r'crossdescriptions', CrossDescriptionViewSet)
2016-09-27 16:18:18 +02:00
router.register(r'sources', SourceViewSet)
2017-07-13 19:01:47 +02:00
router.register(r'accessrestrictions', AccessRestrictionViewSet)
router.register(r'accessrestrictiongroups', AccessRestrictionGroupViewSet)
2016-10-13 13:55:02 +02:00
2017-05-11 19:36:49 +02:00
router.register(r'locations', LocationViewSet)
2017-11-27 16:06:55 +01:00
router.register(r'locations/by_slug', LocationBySlugViewSet, base_name='location-by-slug')
2017-07-10 13:54:33 +02:00
router.register(r'locationgroupcategories', LocationGroupCategoryViewSet)
2017-05-11 19:36:49 +02:00
router.register(r'locationgroups', LocationGroupViewSet)
2016-12-15 13:18:46 +01:00
2017-12-24 01:01:58 +01:00
router.register(r'updates', UpdatesViewSet, base_name='updates')
2017-11-27 16:40:15 +01:00
router.register(r'routing', RoutingViewSet, base_name='routing')
router.register(r'editor', EditorViewSet, base_name='editor')
2017-07-06 13:07:05 +02:00
router.register(r'changesets', ChangeSetViewSet)
class APIRoot(GenericAPIView):
"""
Welcome to the c3nav RESTful API.
2017-11-29 11:27:50 +01:00
The HTML preview is only shown because your Browser sent text/html in its Accept header.
2017-11-29 11:13:13 +01:00
If you want to use this API on a large scale, please use a client that supports E-Tags.
2017-11-29 11:27:50 +01:00
For more information on a specific API endpoint, access it with a browser.
"""
def _format_pattern(self, pattern):
return re.sub(r'\(\?P<([^>]*[^>_])_?>[^)]+\)', r'{\1}', pattern)[1:-1]
@cached_property
def urls(self):
urls = OrderedDict()
for urlpattern in router.urls:
name = urlpattern.name
2017-05-11 19:36:49 +02:00
url = self._format_pattern(urlpattern.regex.pattern).replace('{pk}', '{id}')
base = url.split('/', 1)[0]
if '-' in name:
urls.setdefault(base, OrderedDict())[name.split('-', 1)[1]] = url
else:
urls[name] = url
return urls
def get(self, request):
return Response(self.urls)
urlpatterns = [
url(r'^$', APIRoot.as_view()),
url(r'', include(router.urls)),
]