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