Select Git revision
dp_bsn_scheduler.vhd
-
Eric Kooistra authored
SVN copied data and hex directories so that they can be referred to from $RADIOHDL instead of from $UNB. SVN copied python, doc, matlab sub directories in tb or src to $RADIOHDL as well. Only common/hdllib.cfg still refers to $UNB because some low level components (multipliers) are not technology independent yet.
Eric Kooistra authoredSVN copied data and hex directories so that they can be referred to from $RADIOHDL instead of from $UNB. SVN copied python, doc, matlab sub directories in tb or src to $RADIOHDL as well. Only common/hdllib.cfg still refers to $UNB because some low level components (multipliers) are not technology independent yet.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
urls.py 14.96 KiB
"""tmss URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.shortcuts import render
from django.contrib import admin
from django.contrib.auth.views import LogoutView
from django.urls import path, re_path
from django.conf.urls import url, include
from django.views.generic.base import TemplateView, RedirectView
from collections import OrderedDict
from rest_framework import routers, permissions
from rest_framework.authtoken.views import obtain_auth_token
from .tmssapp import viewsets, models, serializers, views
from rest_framework.documentation import include_docs_urls
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from datetime import datetime
import os
from material.frontend import urls as frontend_urls
#
# Django style patterns
#
# schema for Swagger API
swagger_schema_view = get_schema_view(
openapi.Info(
title="LOFAR Internal API",
default_version='v1',
description="ReST API for internal LOFAR services",
terms_of_service="",
contact=openapi.Contact(email="softwaresupport@astron.nl"),
license=openapi.License(name="GPL License v3"),
),
validators=['flex', 'ssv'],
public=False,
# public=True,
# permission_classes=(permissions.AllowAny,),
)
# use re_path(r'<...>/?') to make trailing slash optional (double entries confuse Swagger)
urlpatterns = [
path('admin/', admin.site.urls),
path('logout/', LogoutView.as_view(), name='logout'),
path('token-auth/', obtain_auth_token, name='obtain-token-auth'),
path('token-deauth/', views.revoke_token_deauth, name='revoke-token-deauth'),
path('docs/', include_docs_urls(title='TMSS API')),
re_path(r'^swagger(?P<format>\.json|\.yaml)$', swagger_schema_view.without_ui(cache_timeout=0), name='schema-json'),
path('swagger/', swagger_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', swagger_schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
#re_path('schemas/<str:template>/<str:name>/<str:version>', views.get_template_json_schema, name='get_template_json_schema'), # !! use of regex here breaks reverse url lookup
path('schemas/<str:template>/<str:name>/<str:version>', views.get_template_json_schema, name='get_template_json_schema'), # !! two urls for same view break Swagger, one url break json ref resolution !!
path('schemas/<str:template>/<str:name>/<str:version>/', views.get_template_json_schema, name='get_template_json_schema'), # !! two urls for same view break Swagger, one url break json ref resolution !!
#re_path('station_groups/<str:template_name>/<str:template_version>/<str:station_group>/?', views.get_stations_in_group, name='get_stations_in_group'), # !! use of regex here somehow breaks functionality (because parameters?) -> index page
path('station_groups/<str:template_name>/<str:template_version>/<str:station_group>', views.get_stations_in_group, name='get_stations_in_group'),
path('station_groups/<str:template_name>/<str:template_version>/<str:station_group>/', views.get_stations_in_group, name='get_stations_in_group'),
re_path('util/sun_rise_and_set/?', views.get_sun_rise_and_set, name='get_sun_rise_and_set'),
re_path('util/utc/?', views.utc, name="system-utc"),
re_path('util/lst/?', views.lst, name="conversion-lst"),
re_path('util/angular_separation_from_bodies/?', views.get_angular_separation_from_bodies, name='get_angular_separation_from_bodies'),
re_path('util/target_rise_and_set/?', views.get_target_rise_and_set, name='get_target_rise_and_set'),
]
if os.environ.get('SHOW_DJANGO_DEBUG_TOOLBAR', False):
import debug_toolbar
urlpatterns.append(path('__debug__/', include(debug_toolbar.urls)))
#
# REST Router
#
class TMSSAPIRootView(routers.APIRootView):
def get(self, request, *args, **kwargs):
'''return the normal list of urls, but then sorted by url so they are easier to find in a list for us humble humans'''
response = super().get(request, *args, **kwargs)
sorted_by_key_urls = OrderedDict()
for key in sorted(response.data.keys()):
sorted_by_key_urls[key] = response.data[key]
response.data = sorted_by_key_urls
return response
class OptionalSlashRouter(routers.DefaultRouter):
def __init__(self):
super(routers.DefaultRouter, self).__init__()
self.trailing_slash = '/?'
router = OptionalSlashRouter()
router.APIRootView = TMSSAPIRootView
# COMMON
router.register(r'tags', viewsets.TagsViewSet)
# SPECIFICATION
# choices
router.register(r'role', viewsets.RoleViewSet)
router.register(r'datatype', viewsets.DatatypeViewSet)
router.register(r'dataformat', viewsets.DataformatViewSet)
router.register(r'copy_reason', viewsets.CopyReasonViewSet)
router.register(r'flag', viewsets.FlagViewSet)
router.register(r'period_category', viewsets.PeriodCategoryViewSet)
router.register(r'project_category', viewsets.ProjectCategoryViewSet)
router.register(r'quantity', viewsets.QuantityViewSet)
router.register(r'task_type', viewsets.TaskTypeViewSet)
# templates
router.register(r'common_schema_template', viewsets.CommonSchemaTemplateViewSet)
router.register(r'generator_template', viewsets.GeneratorTemplateViewSet)
router.register(r'scheduling_unit_observing_strategy_template', viewsets.SchedulingUnitObservingStrategyTemplateViewSet)
router.register(r'scheduling_unit_template', viewsets.SchedulingUnitTemplateViewSet)
router.register(r'scheduling_constraints_template', viewsets.SchedulingConstraintsTemplateViewSet)
router.register(r'task_template', viewsets.TaskTemplateViewSet)
router.register(r'task_relation_selection_template', viewsets.TaskRelationSelectionTemplateViewSet)
router.register(r'reservation_template', viewsets.ReservationTemplateViewSet)
router.register(r'task_connector_type', viewsets.TaskConnectorTypeViewSet)
router.register(r'default_generator_template', viewsets.DefaultGeneratorTemplateViewSet)
router.register(r'default_scheduling_unit_template', viewsets.DefaultSchedulingUnitTemplateViewSet)
router.register(r'default_scheduling_constraints_template', viewsets.DefaultSchedulingConstraintsTemplateViewSet)
router.register(r'default_task_template', viewsets.DefaultTaskTemplateViewSet)
router.register(r'default_task_relation_selection_template', viewsets.DefaultTaskRelationSelectionTemplateViewSet)
router.register(r'default_reservation_template', viewsets.DefaultReservationTemplateViewSet)
router.register(r'reservation_strategy_template', viewsets.ReservationStrategyTemplateViewSet)
# instances
router.register(r'cycle', viewsets.CycleViewSet)
router.register(r'cycle_quota', viewsets.CycleQuotaViewSet)
router.register(r'project', viewsets.ProjectViewSet)
router.register(r'resource_type', viewsets.ResourceTypeViewSet)
router.register(r'project_quota', viewsets.ProjectQuotaViewSet)
router.register(r'project_quota_archive_location', viewsets.ProjectQuotaArchiveLocationViewSet)
router.register(r'setting', viewsets.SettingViewSet)
router.register(r'reservation', viewsets.ReservationViewSet)
router.register(r'scheduling_set', viewsets.SchedulingSetViewSet)
router.register(r'scheduling_unit_draft_extended', viewsets.SchedulingUnitDraftExtendedViewSet)
router.register(r'scheduling_unit_draft', viewsets.SchedulingUnitDraftViewSet) # ! The last registered view on a model is used for references to objects
router.register(r'scheduling_unit_blueprint_extended', viewsets.SchedulingUnitBlueprintExtendedViewSet)
router.register(r'scheduling_unit_blueprint', viewsets.SchedulingUnitBlueprintViewSet) # ! The last registered view on a model is used for references to objects
router.register(r'task_draft', viewsets.TaskDraftViewSet)
router.register(r'task_blueprint', viewsets.TaskBlueprintViewSet)
router.register(r'task_relation_draft', viewsets.TaskRelationDraftViewSet)
router.register(r'task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
router.register(r'task_scheduling_relation_draft', viewsets.TaskSchedulingRelationDraftViewSet)
router.register(r'task_scheduling_relation_blueprint', viewsets.TaskSchedulingRelationBlueprintViewSet)
# nested
router.register(r'cycle/(?P<cycle_id>[\w\- ]+)/project', viewsets.ProjectNestedViewSet)
router.register(r'scheduling_set/(?P<scheduling_set_id>\d+)/scheduling_unit_draft', viewsets.SchedulingUnitDraftNestedViewSet)
router.register(r'scheduling_set/(?P<scheduling_set_id>\d+)/scheduling_unit_observing_strategy_template', viewsets.SchedulingUnitObservingStrategyTemplateNestedViewSet)
router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/scheduling_unit_blueprint', viewsets.SchedulingUnitBlueprintNestedViewSet)
router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/task_draft', viewsets.TaskDraftNestedViewSet)
router.register(r'task_draft/(?P<task_draft_id>\d+)/task_blueprint', viewsets.TaskBlueprintNestedViewSet)
router.register(r'task_draft/(?P<task_draft_id>\d+)/task_relation_draft', viewsets.TaskRelationDraftNestedViewSet)
router.register(r'task_relation_draft/(?P<task_relation_draft_id>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintNestedViewSet)
router.register(r'task_blueprint/(?P<task_blueprint_id>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintNestedViewSet)
router.register(r'task_blueprint/(?P<task_blueprint_id>\d+)/subtask', viewsets.SubtaskNestedViewSet)
# copy
router.register(r'task_draft/(?P<task_draft_id>\d+)/copy', viewsets.TaskDraftCopyViewSet)
router.register(r'task_blueprint/(?P<task_blueprint_id>\d+)/copy_to_task_draft', viewsets.TaskBlueprintCopyToTaskDraftViewSet)
router.register(r'scheduling_set/(?P<scheduling_set_id>\d+)/copy_scheduling_unit_drafts', viewsets.SchedulingUnitDraftCopyFromSchedulingSetViewSet)
router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/copy', viewsets.SchedulingUnitDraftCopyViewSet)
router.register(r'scheduling_unit_blueprint/(?P<scheduling_unit_blueprint_id>\d+)/copy_to_scheduling_unit_draft', viewsets.SchedulingUnitBlueprintCopyToSchedulingUnitDraftViewSet)
# SCHEDULING
# choices
router.register(r'subtask_state', viewsets.SubtaskStateViewSet)
router.register(r'subtask_type', viewsets.SubtaskTypeViewSet)
router.register(r'station_type', viewsets.StationTypeViewSet)
router.register(r'algorithm', viewsets.AlgorithmViewSet)
router.register(r'scheduling_relation_placement', viewsets.SchedulingRelationPlacement)
# templates
router.register(r'subtask_template', viewsets.SubtaskTemplateViewSet)
router.register(r'dataproduct_specifications_template', viewsets.DataproductSpecificationsTemplateViewSet)
router.register(r'default_subtask_template', viewsets.DefaultSubtaskTemplateViewSet)
router.register(r'default_dataproduct_specifications_template', viewsets.DefaultDataproductSpecificationsTemplateViewSet)
router.register(r'dataproduct_feedback_template', viewsets.DataproductFeedbackTemplateViewSet)
router.register(r'sap_template', viewsets.SAPTemplateViewSet)
# instances
router.register(r'subtask', viewsets.SubtaskViewSet)
router.register(r'dataproduct', viewsets.DataproductViewSet)
router.register(r'subtask_input', viewsets.SubtaskInputViewSet)
router.register(r'subtask_output', viewsets.SubtaskOutputViewSet)
router.register(r'antenna_set', viewsets.AntennaSetViewSet)
router.register(r'dataproduct_transform', viewsets.DataproductTransformViewSet)
router.register(r'filesystem', viewsets.FilesystemViewSet)
router.register(r'cluster', viewsets.ClusterViewSet)
router.register(r'dataproduct_archive_info', viewsets.DataproductArchiveInfoViewSet)
router.register(r'dataproduct_hash', viewsets.DataproductHashViewSet)
router.register(r'subtask_state_log', viewsets.SubtaskStateLogViewSet)
router.register(r'user', viewsets.UserViewSet)
router.register(r'sap', viewsets.SAPViewSet)
router.register(r'sip_identifier', viewsets.SIPidentifierViewSet)
# PERMISSIONS
router.register(r'project_role', viewsets.ProjectRoleViewSet)
router.register(r'project_permission', viewsets.ProjectPermissionViewSet)
urlpatterns.extend(router.urls)
frontend_urlpatterns = [
path("", views.index, name="index")
]
urlpatterns = [url(r'^api$', RedirectView.as_view(url='/api/')),
url(r'^api/', include(urlpatterns)), url(r'^oidc$',
RedirectView.as_view(url='/oidc/')),
url(r'^oidc/', include('mozilla_django_oidc.urls')),
url(r'', include(frontend_urls)),
url(r'^.*', include(frontend_urlpatterns)),
]
# QA Workflow steps
if os.environ.get('TMSS_ENABLE_VIEWFLOW', "False").lower() == "true":
from .workflowapp import viewsets as workflow_viewsets
viewflow_urlpatterns = []
viewflow_router = OptionalSlashRouter()
viewflow_router.APIRootView = TMSSAPIRootView
from .workflowapp import viewsets as workflow_viewsets
viewflow_router.register('scheduling_unit_flow/qa_reporting_to', workflow_viewsets.QAReportingTOViewSet, basename='qa_reporting_to')
viewflow_router.register('scheduling_unit_flow/qa_reporting_sos', workflow_viewsets.QAReportingSOSViewSet, basename='qa_reporting_sos')
viewflow_router.register('scheduling_unit_flow/qa_pi_verification', workflow_viewsets.PIVerificationViewSet, basename='qa_pi_verification')
viewflow_router.register('scheduling_unit_flow/qa_decide_acceptance', workflow_viewsets.DecideAcceptanceViewSet, basename='qa_decide_acceptance')
viewflow_router.register('scheduling_unit_flow/qa_scheduling_unit_process', workflow_viewsets.SchedulingUnitProcessViewSet, basename='qa_scheduling_unit_process')
viewflow_router.register('scheduling_unit_flow/qa_scheduling_unit_task', workflow_viewsets.SchedulingUnitTaskViewSet, basename='qa_scheduling_unit_task')
viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_task/(?P<qa_scheduling_unit_task_id>\d+)/assign', workflow_viewsets.SchedulingUnitTaskAssignViewSet)
viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_task/(?P<qa_scheduling_unit_task_id>\d+)/unassign', workflow_viewsets.SchedulingUnitTaskUnassignViewSet)
viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_process/(?P<qa_scheduling_unit_process_id>\d+)/current_task', workflow_viewsets.SchedulingUnitGetActiveTasksViewSet)
viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_process/(?P<qa_scheduling_unit_process_id>\d+)/perform', workflow_viewsets.SchedulingUnitTaskExecuteViewSet)
viewflow_urlpatterns.extend(viewflow_router.urls)
urlpatterns.insert(0,url(r'^workflow$', RedirectView.as_view(url='/workflow/', permanent=False)))
#Doesn't work if it is at the end of urlpatterns
urlpatterns.insert(0,url(r'^workflow_api/', include(viewflow_urlpatterns)))