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