1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# BitBake Toaster Implementation 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Copyright (C) 2013-2017 Intel Corporation 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunfrom django.conf.urls import url 10*4882a593Smuzhiyunfrom django.views.generic import RedirectView 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunfrom toastergui import tables 13*4882a593Smuzhiyunfrom toastergui import buildtables 14*4882a593Smuzhiyunfrom toastergui import typeaheads 15*4882a593Smuzhiyunfrom toastergui import api 16*4882a593Smuzhiyunfrom toastergui import widgets 17*4882a593Smuzhiyunfrom toastergui import views 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunurlpatterns = [ 20*4882a593Smuzhiyun # landing page 21*4882a593Smuzhiyun url(r'^landing/$', views.landing, name='landing'), 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun url(r'^builds/$', 24*4882a593Smuzhiyun tables.AllBuildsTable.as_view(template_name="builds-toastertable.html"), 25*4882a593Smuzhiyun name='all-builds'), 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun # build info navigation 28*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)$', views.builddashboard, name="builddashboard"), 29*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/tasks/$', 30*4882a593Smuzhiyun buildtables.BuildTasksTable.as_view( 31*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 32*4882a593Smuzhiyun name='tasks'), 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/task/(?P<task_id>\d+)$', views.task, name='task'), 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/recipes/$', 37*4882a593Smuzhiyun buildtables.BuiltRecipesTable.as_view( 38*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 39*4882a593Smuzhiyun name='recipes'), 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)/active_tab/(?P<active_tab>\d{1})$', views.recipe, name='recipe'), 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', views.recipe, name='recipe'), 44*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', views.recipe_packages, name='recipe_packages'), 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/packages/$', 47*4882a593Smuzhiyun buildtables.BuiltPackagesTable.as_view( 48*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 49*4882a593Smuzhiyun name='packages'), 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', views.package_built_detail, 52*4882a593Smuzhiyun name='package_built_detail'), 53*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$', 54*4882a593Smuzhiyun views.package_built_dependencies, name='package_built_dependencies'), 55*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/package_included_detail/(?P<target_id>\d+)/(?P<package_id>\d+)$', 56*4882a593Smuzhiyun views.package_included_detail, name='package_included_detail'), 57*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/package_included_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$', 58*4882a593Smuzhiyun views.package_included_dependencies, name='package_included_dependencies'), 59*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$', 60*4882a593Smuzhiyun views.package_included_reverse_dependencies, name='package_included_reverse_dependencies'), 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 63*4882a593Smuzhiyun buildtables.InstalledPackagesTable.as_view( 64*4882a593Smuzhiyun template_name="target.html"), 65*4882a593Smuzhiyun name='target'), 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', views.xhr_dirinfo, name='dirinfo_ajax'), 69*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', views.dirinfo, name='dirinfo'), 70*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', views.dirinfo, name='dirinfo_filepath'), 71*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/configuration$', views.configuration, name='configuration'), 72*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/configvars$', views.configvars, name='configvars'), 73*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/buildtime$', 74*4882a593Smuzhiyun buildtables.BuildTimeTable.as_view( 75*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 76*4882a593Smuzhiyun name='buildtime'), 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/cputime$', 79*4882a593Smuzhiyun buildtables.BuildCPUTimeTable.as_view( 80*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 81*4882a593Smuzhiyun name='cputime'), 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/diskio$', 84*4882a593Smuzhiyun buildtables.BuildIOTable.as_view( 85*4882a593Smuzhiyun template_name="buildinfo-toastertable.html"), 86*4882a593Smuzhiyun name='diskio'), 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun # image information dir 89*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/packagefile/(?P<packagefile_id>\d+)$', 90*4882a593Smuzhiyun views.image_information_dir, name='image_information_dir'), 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun # build download artifact 93*4882a593Smuzhiyun url(r'^build/(?P<build_id>\d+)/artifact/(?P<artifact_type>\w+)/id/(?P<artifact_id>\w+)', views.build_artifact, name="build_artifact"), 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun # project URLs 96*4882a593Smuzhiyun url(r'^newproject/$', views.newproject, name='newproject'), 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun url(r'^projects/$', 99*4882a593Smuzhiyun tables.ProjectsTable.as_view(template_name="projects-toastertable.html"), 100*4882a593Smuzhiyun name='all-projects'), 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/$', views.project, name='project'), 103*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/configuration$', views.projectconf, name='projectconf'), 104*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/builds/$', 105*4882a593Smuzhiyun tables.ProjectBuildsTable.as_view(template_name="projectbuilds-toastertable.html"), 106*4882a593Smuzhiyun name='projectbuilds'), 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun url(r'^newproject_specific/(?P<pid>\d+)/$', views.newproject_specific, name='newproject_specific'), 109*4882a593Smuzhiyun url(r'^project_specific/(?P<pid>\d+)/$', views.project_specific, name='project_specific'), 110*4882a593Smuzhiyun url(r'^landing_specific/(?P<pid>\d+)/$', views.landing_specific, name='landing_specific'), 111*4882a593Smuzhiyun url(r'^landing_specific_cancel/(?P<pid>\d+)/$', views.landing_specific_cancel, name='landing_specific_cancel'), 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun # the import layer is a project-specific functionality; 114*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/importlayer$', views.importlayer, name='importlayer'), 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun # the table pages that have been converted to ToasterTable widget 117*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/machines/$', 118*4882a593Smuzhiyun tables.MachinesTable.as_view(template_name="generic-toastertable-page.html"), 119*4882a593Smuzhiyun name="projectmachines"), 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/softwarerecipes/$', 122*4882a593Smuzhiyun tables.SoftwareRecipesTable.as_view(template_name="generic-toastertable-page.html"), 123*4882a593Smuzhiyun name="projectsoftwarerecipes"), 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/images/$', 126*4882a593Smuzhiyun tables.ImageRecipesTable.as_view(template_name="generic-toastertable-page.html"), name="projectimagerecipes"), 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/customimages/$', 129*4882a593Smuzhiyun tables.CustomImagesTable.as_view(template_name="generic-toastertable-page.html"), name="projectcustomimages"), 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/newcustomimage/$', 132*4882a593Smuzhiyun tables.NewCustomImagesTable.as_view(template_name="newcustomimage.html"), 133*4882a593Smuzhiyun name="newcustomimage"), 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/layers/$', 136*4882a593Smuzhiyun tables.LayersTable.as_view(template_name="generic-toastertable-page.html"), 137*4882a593Smuzhiyun name="projectlayers"), 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$', 140*4882a593Smuzhiyun views.layerdetails, name='layerdetails'), 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/recipes/$', 143*4882a593Smuzhiyun tables.LayerRecipesTable.as_view(template_name="generic-toastertable-page.html"), 144*4882a593Smuzhiyun { 'table_name': tables.LayerRecipesTable.__name__.lower(), 145*4882a593Smuzhiyun 'title' : 'All recipes in layer' }, 146*4882a593Smuzhiyun name=tables.LayerRecipesTable.__name__.lower()), 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/machines/$', 149*4882a593Smuzhiyun tables.LayerMachinesTable.as_view(template_name="generic-toastertable-page.html"), 150*4882a593Smuzhiyun { 'table_name': tables.LayerMachinesTable.__name__.lower(), 151*4882a593Smuzhiyun 'title' : 'All machines in layer' }, 152*4882a593Smuzhiyun name=tables.LayerMachinesTable.__name__.lower()), 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/distros/$', 156*4882a593Smuzhiyun tables.DistrosTable.as_view(template_name="generic-toastertable-page.html"), 157*4882a593Smuzhiyun name="projectdistros"), 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/customrecipe/(?P<custrecipeid>\d+)/selectpackages/$', 161*4882a593Smuzhiyun tables.SelectPackagesTable.as_view(), name="recipeselectpackages"), 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/customrecipe/(?P<custrecipeid>\d+)$', 165*4882a593Smuzhiyun tables.SelectPackagesTable.as_view(template_name="customrecipe.html"), 166*4882a593Smuzhiyun name="customrecipe"), 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipe_id>\d+)/download$', 169*4882a593Smuzhiyun views.customrecipe_download, 170*4882a593Smuzhiyun name="customrecipedownload"), 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun url(r'^project/(?P<pid>\d+)/recipe/(?P<recipe_id>\d+)$', 173*4882a593Smuzhiyun tables.PackagesTable.as_view(template_name="recipedetails.html"), 174*4882a593Smuzhiyun name="recipedetails"), 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun # typeahead api end points 177*4882a593Smuzhiyun url(r'^xhr_typeahead/(?P<pid>\d+)/layers$', 178*4882a593Smuzhiyun typeaheads.LayersTypeAhead.as_view(), name='xhr_layerstypeahead'), 179*4882a593Smuzhiyun url(r'^xhr_typeahead/(?P<pid>\d+)/machines$', 180*4882a593Smuzhiyun typeaheads.MachinesTypeAhead.as_view(), name='xhr_machinestypeahead'), 181*4882a593Smuzhiyun url(r'^xhr_typeahead/(?P<pid>\d+)/recipes$', 182*4882a593Smuzhiyun typeaheads.RecipesTypeAhead.as_view(), name='xhr_recipestypeahead'), 183*4882a593Smuzhiyun url(r'^xhr_typeahead/projects$', 184*4882a593Smuzhiyun typeaheads.ProjectsTypeAhead.as_view(), name='xhr_projectstypeahead'), 185*4882a593Smuzhiyun url(r'^xhr_typeahead/gitrev$', 186*4882a593Smuzhiyun typeaheads.GitRevisionTypeAhead.as_view(), 187*4882a593Smuzhiyun name='xhr_gitrevtypeahead'), 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun url(r'^xhr_typeahead/(?P<pid>\d+)/distros$', 190*4882a593Smuzhiyun typeaheads.DistrosTypeAhead.as_view(), name='xhr_distrostypeahead'), 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun url(r'^xhr_testreleasechange/(?P<pid>\d+)$', views.xhr_testreleasechange, 193*4882a593Smuzhiyun name='xhr_testreleasechange'), 194*4882a593Smuzhiyun url(r'^xhr_configvaredit/(?P<pid>\d+)$', views.xhr_configvaredit, 195*4882a593Smuzhiyun name='xhr_configvaredit'), 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun url(r'^xhr_layer/(?P<pid>\d+)/(?P<layerversion_id>\d+)$', 198*4882a593Smuzhiyun api.XhrLayer.as_view(), 199*4882a593Smuzhiyun name='xhr_layer'), 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun url(r'^xhr_layer/(?P<pid>\d+)$', 202*4882a593Smuzhiyun api.XhrLayer.as_view(), 203*4882a593Smuzhiyun name='xhr_layer'), 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun # JS Unit tests 206*4882a593Smuzhiyun url(r'^js-unit-tests/$', views.jsunittests, name='js-unit-tests'), 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun # image customisation functionality 209*4882a593Smuzhiyun url(r'^xhr_customrecipe/(?P<recipe_id>\d+)' 210*4882a593Smuzhiyun '/packages/(?P<package_id>\d+|)$', 211*4882a593Smuzhiyun api.XhrCustomRecipePackages.as_view(), 212*4882a593Smuzhiyun name='xhr_customrecipe_packages'), 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/$', 215*4882a593Smuzhiyun api.XhrCustomRecipePackages.as_view(), 216*4882a593Smuzhiyun name='xhr_customrecipe_packages'), 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun url(r'^xhr_customrecipe/(?P<recipe_id>\d+)$', 219*4882a593Smuzhiyun api.XhrCustomRecipeId.as_view(), 220*4882a593Smuzhiyun name='xhr_customrecipe_id'), 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun url(r'^xhr_customrecipe/', 223*4882a593Smuzhiyun api.XhrCustomRecipe.as_view(), 224*4882a593Smuzhiyun name='xhr_customrecipe'), 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun url(r'^xhr_buildrequest/project/(?P<pid>\d+)$', 227*4882a593Smuzhiyun api.XhrBuildRequest.as_view(), 228*4882a593Smuzhiyun name='xhr_buildrequest'), 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun url(r'^xhr_projectupdate/project/(?P<pid>\d+)$', 231*4882a593Smuzhiyun api.XhrProjectUpdate.as_view(), 232*4882a593Smuzhiyun name='xhr_projectupdate'), 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun url(r'^xhr_setdefaultimage/project/(?P<pid>\d+)$', 235*4882a593Smuzhiyun api.XhrSetDefaultImageUrl.as_view(), 236*4882a593Smuzhiyun name='xhr_setdefaultimage'), 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun url(r'xhr_project/(?P<project_id>\d+)$', 239*4882a593Smuzhiyun api.XhrProject.as_view(), 240*4882a593Smuzhiyun name='xhr_project'), 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun url(r'xhr_build/(?P<build_id>\d+)$', 243*4882a593Smuzhiyun api.XhrBuild.as_view(), 244*4882a593Smuzhiyun name='xhr_build'), 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun url(r'^mostrecentbuilds$', widgets.MostRecentBuildsView.as_view(), 247*4882a593Smuzhiyun name='most_recent_builds'), 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun # JSON data for aggregators 250*4882a593Smuzhiyun url(r'^api/builds$', views.json_builds, name='json_builds'), 251*4882a593Smuzhiyun url(r'^api/building$', views.json_building, name='json_building'), 252*4882a593Smuzhiyun url(r'^api/build/(?P<build_id>\d+)$', views.json_build, name='json_build'), 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun # default redirection 255*4882a593Smuzhiyun url(r'^$', RedirectView.as_view(url='landing', permanent=True)), 256*4882a593Smuzhiyun] 257