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