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