5 import tornado
.httpserver
10 from handlers
import *
11 from ui_modules
import *
13 BASEDIR
= os
.path
.join(os
.path
.dirname(__file__
), "..", "data")
16 tornado
.options
.parse_command_line()
18 class Application(tornado
.web
.Application
):
26 template_path
= os
.path
.join(BASEDIR
, "templates"),
29 "Modal" : ModalModule
,
31 "Footer" : FooterModule
,
35 "LogEntry" : LogEntryModule
,
36 "LogEntryComment" : LogEntryCommentModule
,
39 "BuildersLoad" : BuildersLoadModule
,
41 "BuildHeadline" : BuildHeadlineModule
,
42 "BuildStateWarnings" : BuildStateWarningsModule
,
44 "BugsTable" : BugsTableModule
,
45 "BuildLog" : BuildLogModule
,
46 "BuildOffset" : BuildOffsetModule
,
47 "BuildTable" : BuildTableModule
,
50 "Changelog" : ChangelogModule
,
51 "ChangelogEntry" : ChangelogEntryModule
,
54 "JobsList" : JobsListModule
,
57 "PackagesDependencyTable" : PackagesDependencyTableModule
,
59 "CommitsTable" : CommitsTableModule
,
60 "JobsBoxes" : JobsBoxesModule
,
61 "JobState" : JobStateModule
,
62 "JobsTable" : JobsTableModule
,
63 "CommentsTable" : CommentsTableModule
,
64 "FilesTable" : FilesTableModule
,
65 "LogTable" : LogTableModule
,
66 "LogFilesTable" : LogFilesTableModule
,
67 "Maintainer" : MaintainerModule
,
68 "PackagesTable" : PackagesTableModule
,
69 "PackageTable2" : PackageTable2Module
,
70 "PackageHeader" : PackageHeaderModule
,
71 "PackageFilesTable" : PackageFilesTableModule
,
72 "RepositoryTable" : RepositoryTableModule
,
73 "RepoActionsTable" : RepoActionsTableModule
,
74 "SourceTable" : SourceTableModule
,
75 "UpdatesTable" : UpdatesTableModule
,
76 "UsersTable" : UsersTableModule
,
77 "WatchersSidebarTable" : WatchersSidebarTableModule
,
79 "SelectLocale" : SelectLocaleModule
,
80 "SelectTimezone" : SelectTimezoneModule
,
86 tornado
.locale
.load_gettext_translations(
87 os
.path
.join(BASEDIR
, "translations"), "pakfire")
89 tornado
.web
.Application
.__init
__(self
, **settings
)
91 self
.settings
["static_path"] = static_path
= os
.path
.join(BASEDIR
, "static")
93 (r
"/static/(.*)", tornado
.web
.StaticFileHandler
, dict(path
= static_path
)),
94 (r
"/(favicon\.ico)", tornado
.web
.StaticFileHandler
, dict(path
= static_path
)),
95 (r
"/(robots\.txt)", tornado
.web
.StaticFileHandler
, dict(path
= static_path
)),
98 self
.add_handlers(r
".*", [
99 # Entry site that lead the user to index
100 (r
"/", IndexHandler
),
102 # Handle all the users logins/logouts/registers and stuff.
103 (r
"/login", LoginHandler
),
104 (r
"/logout", LogoutHandler
),
105 (r
"/register", RegisterHandler
),
106 (r
"/password-recovery", PasswordRecoveryHandler
),
109 (r
"/users", UsersHandler
),
110 (r
"/users/comments", UsersCommentsHandler
),
111 (r
"/user/impersonate", UserImpersonateHandler
),
112 (r
"/user/(\w+)/passwd", UserPasswdHandler
),
113 (r
"/user/(\w+)/delete", UserDeleteHandler
),
114 (r
"/user/(\w+)/edit", UserEditHandler
),
115 (r
"/user/(\w+)/activate", ActivationHandler
),
116 (r
"/user/(\w+)", UserHandler
),
117 (r
"/profile", UserHandler
),
118 (r
"/profile/builds", UsersBuildsHandler
),
121 (r
"/packages", PackageListHandler
),
122 (r
"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", PackageDetailHandler
),
123 (r
"/package/([\w\-\+]+)/properties", PackagePropertiesHandler
),
124 (r
"/package/([\w\-\+]+)", PackageNameHandler
),
125 (r
"/package/([\w\-\+]+)/changelog", PackageChangelogHandler
),
126 (r
"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/download(.*)", PackageFileDownloadHandler
),
127 (r
"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/view(.*)", PackageFileViewHandler
),
130 (r
"/file/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", FileDetailHandler
),
133 (r
"/builds", BuildsHandler
),
134 (r
"/builds/filter", BuildFilterHandler
),
135 (r
"/builds/queue", BuildQueueHandler
),
136 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", BuildDetailHandler
),
137 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/bugs", BuildBugsHandler
),
138 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/manage", BuildManageHandler
),
139 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/comment", BuildDetailCommentHandler
),
140 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/priority", BuildPriorityHandler
),
141 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/state", BuildStateHandler
),
142 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/watch", BuildWatchersAddHandler
),
143 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/watchers", BuildWatchersHandler
),
144 (r
"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/delete", BuildDeleteHandler
),
147 (r
"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", JobDetailHandler
),
148 (r
"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/abort", JobAbortHandler
),
149 (r
"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/buildroot", JobBuildrootHandler
),
150 (r
"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/schedule", JobScheduleHandler
),
153 (r
"/builders", BuilderListHandler
),
154 (r
"/builder/new", BuilderNewHandler
),
155 (r
"/builder/([A-Za-z0-9\-\.]+)/enable", BuilderEnableHander
),
156 (r
"/builder/([A-Za-z0-9\-\.]+)/disable", BuilderDisableHander
),
157 (r
"/builder/([A-Za-z0-9\-\.]+)/delete", BuilderDeleteHandler
),
158 (r
"/builder/([A-Za-z0-9\-\.]+)/edit", BuilderEditHandler
),
159 (r
"/builder/([A-Za-z0-9\-\.]+)/renew", BuilderRenewPassphraseHandler
),
160 (r
"/builder/([A-Za-z0-9\-\.]+)", BuilderDetailHandler
),
163 (r
"/distros", DistributionListHandler
),
164 (r
"/distro/([A-Za-z0-9\-\.]+)", DistributionDetailHandler
),
166 # XXX THOSE URLS ARE DEPRECATED
167 (r
"/distribution/delete/([A-Za-z0-9\-\.]+)", DistributionDetailHandler
),
168 (r
"/distribution/edit/([A-Za-z0-9\-\.]+)", DistributionEditHandler
),
170 (r
"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)",
171 RepositoryDetailHandler
),
172 (r
"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)\.repo",
173 RepositoryConfHandler
),
174 (r
"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/mirrorlist",
175 RepositoryMirrorlistHandler
),
176 (r
"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/edit",
177 RepositoryEditHandler
),
179 (r
"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)",
180 DistroSourceDetailHandler
),
181 (r
"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/commits",
182 DistroSourceCommitsHandler
),
183 (r
"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/([\w]{40})",
184 DistroSourceCommitDetailHandler
),
185 (r
"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/([\w]{40})/reset",
186 DistroSourceCommitResetHandler
),
188 (r
"/distro/([A-Za-z0-9\-\.]+)/update/create",
189 DistroUpdateCreateHandler
),
190 (r
"/distro/([A-Za-z0-9\-\.]+)/update/(\d+)/(\d+)",
191 DistroUpdateDetailHandler
),
194 (r
"/updates", UpdatesHandler
),
197 (r
"/mirrors", MirrorListHandler
),
198 (r
"/mirror/new", MirrorNewHandler
),
199 (r
"/mirror/([A-Za-z0-9\-\.]+)/delete", MirrorDeleteHandler
),
200 (r
"/mirror/([A-Za-z0-9\-\.]+)/edit", MirrorEditHandler
),
201 (r
"/mirror/([A-Za-z0-9\-\.]+)", MirrorDetailHandler
),
204 (r
"/keys", KeysListHandler
),
205 (r
"/key/import", KeysImportHandler
),
206 (r
"/key/([A-Z0-9]+)", KeysDownloadHandler
),
207 (r
"/key/([A-Z0-9]+)/delete", KeysDeleteHandler
),
210 (r
"/statistics", StatisticsMainHandler
),
213 (r
"/documents", DocsIndexHandler
),
214 (r
"/documents/builds", DocsBuildsHandler
),
215 (r
"/documents/users", DocsUsersHandler
),
216 (r
"/documents/what-is-the-pakfire-build-service", DocsWhatsthisHandler
),
219 (r
"/search", SearchHandler
),
222 (r
"/uploads", UploadsHandler
),
225 (r
"/log", LogHandler
),
227 ] + static_handlers
+ [
229 # Everything else is catched by the 404 handler.
230 (r
"/.*", Error404Handler
),
233 logging
.info("Successfully initialied application")
237 if self
.__pakfire
is None:
238 config_file
= os
.path
.join(BASEDIR
, "..", "pbs.conf")
240 self
.__pakfire
= backend
.Pakfire(config_file
=config_file
)
242 return self
.__pakfire
245 logging
.info("Shutting down application")
249 return tornado
.ioloop
.IOLoop
.instance()
251 def shutdown(self
, *args
):
252 logging
.debug("Caught shutdown signal")
255 def run(self
, port
=80):
256 logging
.debug("Going to background")
258 http_server
= tornado
.httpserver
.HTTPServer(self
, xheaders
=True)
260 # If we are not running in debug mode, we can actually run multiple
261 # frontends to get best performance out of our service.
262 if not self
.settings
["debug"]:
263 http_server
.bind(port
)
264 http_server
.start(num_processes
=4)
266 http_server
.listen(port
)
268 # All requests should be done after 60 seconds or they will be killed.
269 self
.ioloop
.set_blocking_log_threshold(60)
274 logging
.debug("Caught reload signal")