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'^cmdline/$', views.CommandLineBuilds.as_view(), name='cmdlines'), 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+)/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