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