import tornado.options
import tornado.web
-from . import handlers_api
+from .. import Backend
+from ..constants import *
+from ..decorators import *
from .handlers import *
-from .ui_modules import *
-BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data")
+from . import handlers_api
+from . import mirrors
+from . import ui_modules
# Enable logging
tornado.options.define("debug", default=False, help="Run in debug mode", type=bool)
tornado.options.parse_command_line()
class Application(tornado.web.Application):
- def __init__(self):
- self.__pakfire = None
-
+ def __init__(self, **_settings):
settings = dict(
debug = tornado.options.options.debug,
gzip = True,
login_url = "/login",
- template_path = os.path.join(BASEDIR, "templates"),
+ template_path = TEMPLATESDIR,
+ static_path = STATICDIR,
ui_modules = {
- "Text" : TextModule,
- "Modal" : ModalModule,
+ "Text" : ui_modules.TextModule,
+ "Modal" : ui_modules.ModalModule,
- "Footer" : FooterModule,
+ "Footer" : ui_modules.FooterModule,
# Logging
- "Log" : LogModule,
- "LogEntry" : LogEntryModule,
- "LogEntryComment" : LogEntryCommentModule,
-
- # Builders
- "BuildersLoad" : BuildersLoadModule,
+ "Log" : ui_modules.LogModule,
+ "LogEntry" : ui_modules.LogEntryModule,
+ "LogEntryComment" : ui_modules.LogEntryCommentModule,
- "BuildHeadline" : BuildHeadlineModule,
- "BuildStateWarnings" : BuildStateWarningsModule,
+ "BuildHeadline" : ui_modules.BuildHeadlineModule,
+ "BuildStateWarnings" : ui_modules.BuildStateWarningsModule,
- "BugsTable" : BugsTableModule,
- "BuildLog" : BuildLogModule,
- "BuildOffset" : BuildOffsetModule,
- "BuildTable" : BuildTableModule,
+ "BugsTable" : ui_modules.BugsTableModule,
+ "BuildLog" : ui_modules.BuildLogModule,
+ "BuildOffset" : ui_modules.BuildOffsetModule,
+ "BuildTable" : ui_modules.BuildTableModule,
# Changelog
- "Changelog" : ChangelogModule,
- "ChangelogEntry" : ChangelogEntryModule,
+ "Changelog" : ui_modules.ChangelogModule,
+ "ChangelogEntry" : ui_modules.ChangelogEntryModule,
# Jobs
- "JobsList" : JobsListModule,
- "JobsStatus" : JobsStatusModule,
+ "JobsList" : ui_modules.JobsListModule,
+ "JobsStatus" : ui_modules.JobsStatusModule,
# Packages
- "PackagesDependencyTable" : PackagesDependencyTableModule,
-
- "CommitMessage" : CommitMessageModule,
- "CommitsTable" : CommitsTableModule,
- "JobsBoxes" : JobsBoxesModule,
- "JobState" : JobStateModule,
- "JobsTable" : JobsTableModule,
- "CommentsTable" : CommentsTableModule,
- "FilesTable" : FilesTableModule,
- "LogTable" : LogTableModule,
- "LogFilesTable" : LogFilesTableModule,
- "Maintainer" : MaintainerModule,
- "PackagesTable" : PackagesTableModule,
- "PackageTable2" : PackageTable2Module,
- "PackageHeader" : PackageHeaderModule,
- "PackageFilesTable" : PackageFilesTableModule,
- "RepositoryTable" : RepositoryTableModule,
- "RepoActionsTable" : RepoActionsTableModule,
- "SourceTable" : SourceTableModule,
- "UpdatesTable" : UpdatesTableModule,
- "UsersTable" : UsersTableModule,
- "WatchersSidebarTable" : WatchersSidebarTableModule,
-
- "HeadingDate" : HeadingDateModule,
-
- "SelectLocale" : SelectLocaleModule,
- "SelectTimezone" : SelectTimezoneModule,
+ "PackagesDependencyTable" : ui_modules.PackagesDependencyTableModule,
+
+ "CommitMessage" : ui_modules.CommitMessageModule,
+ "CommitsTable" : ui_modules.CommitsTableModule,
+ "JobsBoxes" : ui_modules.JobsBoxesModule,
+ "JobState" : ui_modules.JobStateModule,
+ "JobsTable" : ui_modules.JobsTableModule,
+ "CommentsTable" : ui_modules.CommentsTableModule,
+ "FilesTable" : ui_modules.FilesTableModule,
+ "LogTable" : ui_modules.LogTableModule,
+ "LogFilesTable" : ui_modules.LogFilesTableModule,
+ "Maintainer" : ui_modules.MaintainerModule,
+ "PackagesTable" : ui_modules.PackagesTableModule,
+ "PackageTable2" : ui_modules.PackageTable2Module,
+ "PackageHeader" : ui_modules.PackageHeaderModule,
+ "PackageFilesTable" : ui_modules.PackageFilesTableModule,
+ "RepositoryTable" : ui_modules.RepositoryTableModule,
+ "RepoActionsTable" : ui_modules.RepoActionsTableModule,
+ "SourceTable" : ui_modules.SourceTableModule,
+ "UpdatesTable" : ui_modules.UpdatesTableModule,
+ "UsersTable" : ui_modules.UsersTableModule,
+ "WatchersSidebarTable" : ui_modules.WatchersSidebarTableModule,
+
+ "HeadingDate" : ui_modules.HeadingDateModule,
+
+ "SelectLocale" : ui_modules.SelectLocaleModule,
+ "SelectTimezone" : ui_modules.SelectTimezoneModule,
},
ui_methods = {
- "format_eta" : self.format_eta,
"format_time" : self.format_time,
},
xsrf_cookies = True,
)
+ settings.update(_settings)
# Load translations.
- tornado.locale.load_gettext_translations(
- os.path.join(BASEDIR, "translations"), "pakfire")
+ tornado.locale.load_gettext_translations(LOCALEDIR, PACKAGE_NAME)
- tornado.web.Application.__init__(self, **settings)
-
- self.settings["static_path"] = static_path = os.path.join(BASEDIR, "static")
- static_handlers = [
- (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path = static_path)),
- (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
- (r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
- ]
-
- self.add_handlers(r".*", [
+ tornado.web.Application.__init__(self, [
# Entry site that lead the user to index
(r"/", IndexHandler),
(r"/updates", UpdatesHandler),
# Mirrors
- (r"/mirrors", MirrorListHandler),
- (r"/mirror/new", MirrorNewHandler),
- (r"/mirror/([A-Za-z0-9\-\.]+)/delete", MirrorDeleteHandler),
- (r"/mirror/([A-Za-z0-9\-\.]+)/edit", MirrorEditHandler),
- (r"/mirror/([A-Za-z0-9\-\.]+)", MirrorDetailHandler),
+ (r"/mirrors", mirrors.MirrorListHandler),
+ (r"/mirror/new", mirrors.MirrorNewHandler),
+ (r"/mirror/([\w\-\.]+)/delete", mirrors.MirrorDeleteHandler),
+ (r"/mirror/([\w\-\.]+)/edit", mirrors.MirrorEditHandler),
+ (r"/mirror/([\w\-\.]+)", mirrors.MirrorDetailHandler),
# Key management
(r"/keys", KeysListHandler),
# API handlers
(r"/api/packages/autocomplete", handlers_api.ApiPackagesAutocomplete),
-
- ] + static_handlers + [
-
- # Everything else is catched by the 404 handler.
- (r"/.*", Error404Handler),
- ])
+ ], **settings)
logging.info("Successfully initialied application")
- @property
- def pakfire(self):
- if self.__pakfire is None:
- config_file = os.path.join(BASEDIR, "..", "pbs.conf")
-
- self.__pakfire = backend.Pakfire(config_file=config_file)
-
- return self.__pakfire
+ @lazy_property
+ def backend(self):
+ """
+ Backend connection
+ """
+ return Backend()
def __del__(self):
logging.info("Shutting down application")
## UI methods
- def format_eta(self, handler, (s, stddev)):
- if s is None:
- _ = handler.locale.translate
- return _("Unknown")
-
- if s < 0:
- s = 0
-
- return u"%s ± %s" % (
- self.format_time(handler, s),
- self.format_time_short(handler, stddev / 2),
- )
-
def format_time(self, handler, s, shorter=False):
_ = handler.locale.translate