# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web from twisted.web.woven import controller, widgets, model from twisted.web.util import redirectTo ################################################################################ def iso8601_now(): return iso8601.ctime(time.time()) def epoch_to_iso8601(t): return iso8601.ctime(int(t)) def now(): return str(int(time.time())) class SqlConsolePage(dbagg.web.AggPage): templateFile = "sql_console.html.tmpl" def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.conn = kwargs['conn'] self.conn.create_function("iso8601_to_epoch", 1, iso8601.parse) self.conn.create_function("epoch_to_iso8601", 1, epoch_to_iso8601) self.conn.create_function("iso8601_now", 0, iso8601_now) self.conn.create_function("now", 0, now) def wmfactory_sql(self, request): return request.args.get('sql', [''])[0] def wmfactory_sql_results(self, request): sql = self.wmfactory_sql(request) if sql == '': return RowSetModel() cursor = self.conn.cursor() cursor.execute(sql) return RowSetModel(cursor=cursor) class RowSetModel(model.MethodModel): def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.cursor = kwargs.get('cursor', None) self.cols = [] self.rows = [] self.rowcount = 0 if self.cursor: self.rowcount = self.cursor.rowcount for r in self.cursor.fetchall(): if not len(self.cols) > 0: self.cols = r.keys() data = [] for c in r: data.append(c) self.rows.append(data) self.cursor.close() def wmfactory_columns(self, request): return self.cols def wmfactory_rows(self, request): return self.rows def wmfactory_rowcount(self, request): return self.rowcount ################################################################################ resource = SqlConsolePage(conn=__main__.conn)