8 import matplotlib
.pyplot
as plt
9 import matplotlib
.dates
11 from handlers_base
import *
15 class AdminBaseHandler(BaseHandler
):
18 return backend
.Accounts()
22 return backend
.Planet()
26 return backend
.Downloads()
28 def get_current_user(self
):
29 return self
.get_secure_cookie("account")
32 class AdminLoginHandler(AdminBaseHandler
):
34 self
.render("admin-login.html")
37 account
= self
.accounts
.search(self
.get_argument("name"))
39 raise tornado
.web
.HTTPError(403)
41 if account
.check_password(self
.get_argument("password")):
42 self
.set_secure_cookie("account", account
.uid
)
44 raise tornado
.web
.HTTPError(403)
49 class AdminLogoutHandler(AdminBaseHandler
):
51 self
.clear_cookie("account")
55 class AdminIndexHandler(AdminBaseHandler
):
56 @tornado.web
.authenticated
58 self
.render("admin-index.html")
61 class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler
):
62 @tornado.web
.authenticated
64 text
= self
.get_argument("text", "")
67 self
.write(self
.planet
.render(text
))
71 class AdminPlanetHandler(AdminBaseHandler
):
72 @tornado.web
.authenticated
74 entries
= self
.planet
.get_entries(limit
=100)
76 self
.render("admin-planet.html", entries
=entries
)
79 class AdminPlanetComposeHandler(AdminBaseHandler
):
80 @tornado.web
.authenticated
81 def get(self
, id=None):
82 entry
= backend
.PlanetEntry()
85 entry
= self
.planet
.get_entry_by_id(id)
87 self
.render("admin-planet-compose.html", entry
=entry
)
89 @tornado.web
.authenticated
90 def post(self
, id=None):
91 id = self
.get_argument("id", id)
93 entry
= backend
.PlanetEntry()
96 entry
= self
.planet
.get_entry_by_id(id)
98 entry
.set("title", self
.get_argument("title"))
99 entry
.set("markdown", self
.get_argument("markdown"))
100 entry
.set("author_id", self
.current_user
)
103 self
.planet
.update_entry(entry
)
105 self
.planet
.save_entry(entry
)
107 self
.redirect("/planet")
110 class AdminPlanetEditHandler(AdminPlanetComposeHandler
):
114 class AdminAccountsBaseHandler(AdminBaseHandler
):
118 class AdminAccountsHandler(AdminAccountsBaseHandler
):
119 @tornado.web
.authenticated
121 accounts
= self
.accounts
.list()
122 self
.render("admin-accounts.html", accounts
=accounts
)
125 class AdminAccountsEditHandler(AdminAccountsBaseHandler
):
126 @tornado.web
.authenticated
128 account
= self
.accounts
.search(id)
130 raise tornado
.web
.HTTPError(404)
132 self
.render("admin-accounts-edit.html", account
=account
)
135 class AdminAccountsDeleteHandler(AdminAccountsBaseHandler
):
136 @tornado.web
.authenticated
138 account
= self
.accounts
.search(id)
140 raise tornado
.web
.HTTPError(404)
142 self
.accounts
.delete(id)
143 self
.redirect("/accounts")
146 class AdminMirrorsBaseHandler(AdminBaseHandler
):
149 return backend
.Mirrors()
152 class AdminMirrorsHandler(AdminMirrorsBaseHandler
):
153 @tornado.web
.authenticated
155 mirrors
= self
.mirrors
.list()
157 self
.render("admin-mirrors.html", mirrors
=mirrors
)
160 class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler
):
161 @tornado.web
.authenticated
163 self
.mirrors
.check_all()
164 self
.redirect("/mirrors")
167 class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler
):
168 @tornado.web
.authenticated
169 def get(self
, id=None):
171 mirror
= self
.db
.get("SELECT * FROM mirrors WHERE id = '%s'", int(id))
173 mirror
= tornado
.database
.Row(
185 self
.render("admin-mirrors-create.html", mirror
=mirror
)
187 @tornado.web
.authenticated
188 def post(self
, id=None):
189 args
= tornado
.database
.Row()
190 for key
in ("id", "hostname", "owner", "location", "path", "releases",
191 "pakfire2", "pakfire3", "disabled"):
192 args
[key
] = self
.get_argument(key
, "")
195 if not self
.mirrors
.get(args
.id):
196 raise tornado
.web
.HTTPError(404)
198 #self.db.execute("""UPDATE mirrors SET
199 # hostname = %s, owner = %s, location = %s, path = %s, mirror = %s,
200 # pakfire2 = %s, pakfire3 = %s, disabled = %s
201 # WHERE id = %s""", args.hostname, args.owner, args.location,
202 # args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled,
204 self
.db
.update("mirrors", args
.id, **args
)
207 #self.db.execute("""INSERT INTO
208 # mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled)
209 # VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner,
210 # args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled)
211 self
.db
.insert("mirrors", **args
)
213 # Update database information
214 self
.mirrors
.check_all()
216 self
.redirect("/mirrors")
219 class AdminMirrorsEditHandler(AdminMirrorsCreateHandler
):
223 class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler
):
224 @tornado.web
.authenticated
226 self
.db
.execute("DELETE FROM mirrors WHERE id=%s", id)
227 self
.db
.execute("DELETE FROM mirror_files WHERE mirror=%s", id)
228 self
.redirect("/mirrors")
231 class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler
):
232 @tornado.web
.authenticated
234 mirror
= self
.mirrors
.get(id)
236 raise tornado
.web
.HTTPError(404)
238 self
.render("admin-mirrors-details.html", mirror
=mirror
)
241 class AdminNewsBaseHandler(AdminBaseHandler
):
244 return self
.backend
.news
247 class AdminNewsHandler(AdminNewsBaseHandler
):
248 @tornado.web
.authenticated
250 news
= self
.news
.list()
252 self
.render("admin-news.html", news
=news
)
255 class AdminNewsCreateHandler(AdminNewsBaseHandler
):
256 @tornado.web
.authenticated
257 def get(self
, id=None):
261 self
.render("admin-news-create.html", news
=news
)
264 class AdminNewsEditHandler(AdminNewsCreateHandler
):
268 class AdminDownloadsHandler(AdminBaseHandler
):
269 @tornado.web
.authenticated
271 self
.render("admin-downloads.html",
272 downloads_total
= self
.downloads
.total
,
273 downloads_today
= self
.downloads
.today
,
274 downloads_yesterday
= self
.downloads
.yesterday
,
275 downloads_locations_today
= self
.downloads
.get_countries("today"),
276 downloads_locations_total
= self
.downloads
.get_countries(),
280 class AdminDownloadsMirrorsHandler(AdminBaseHandler
):
281 @tornado.web
.authenticated
283 self
.render("admin-downloads-mirrors.html",
284 mirror_load_total
= self
.downloads
.get_mirror_load(),
285 mirror_load_today
= self
.downloads
.get_mirror_load("today"),
289 class AdminDownloadsGraphHandler(AdminBaseHandler
):
290 @tornado.web
.authenticated
294 for row
in self
.downloads
.daily_map
:
295 x
.append(matplotlib
.dates
.date2num(row
.date
))
296 y
.append(row
.downloads
)
300 # Create output image.
304 plot
= fig
.add_subplot(111)
307 fig
.savefig("nice-image.svg")