Skip to content
Snippets Groups Projects
Select Git revision
  • 4f4ab1cf134d1a5200a87888d32243de1222a2d8
  • master default protected
  • L2SDP-LIFT
  • L2SDP-1113
  • HPR-158
5 results

dp_bsn_scheduler.vhd

Blame
  • 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)))