def listtable(request, tablename=None): klass = get_model(tablename) resp = framework.ResponseDocument(request, doc_constructor, title="Table %s" % (tablename,)) NM = resp.nodemaker resp.new_para(NM("A", {"href": request.get_url(addentry, tablename=tablename)}, resp.get_icon("add"))) cycler = itertools.cycle(["row1", "row2"]) # For alternating row styles. tbl = resp.doc.add_table(class_="sortable", width="100%") tbl.caption(tablename) colnames = models.get_rowdisplay(klass) tbl.new_headings("", *colnames) tbl.headings[0].class_ = "sorttable_nosort" tbl.new_footer("", *colnames) for dbrow in query(tablename, {}): row = tbl.new_row(id="rowid_%s" % dbrow.id, class_=cycler.next()) col = row.new_column( NM("Fragments", {}, NM("A", {"href": "edit/%s/" % (dbrow.id,)}, resp.get_small_icon("edit")), NM("A", {"href": "javascript:doDeleteRow(%r, %r);" % (tablename, dbrow.id)}, resp.get_small_icon("delete")), ) ) firstname = colnames[0] row.new_column( NM("A", {"href": request.get_url(view, tablename=tablename, rowid=dbrow.id)}, getattr(dbrow, firstname)) ) for colname in colnames[1:]: row.new_column(getattr(dbrow, colname)) return resp.finalize()
def ls(self, argv): """ls [<criteria>] List all current entries, or entries filtered by criteria. Criteria can be a simple expression of groups of name, operator, and value. a name prefixed by "=" means order by that name. """ mapper = models.class_mapper(self._obj) pkname = str(mapper.primary_key[0].name) q = self._get_query(argv) if q._statement is None: q = q.order_by(pkname) heading = models.get_rowdisplay(self._obj) fmtl = [] hfmtl = [] rows, cols = self._ui.get_winsize() tw = 0 cols -= 8 for colname in heading: md = models.get_column_metadata(self._obj, colname) fmt, length = _FORMATS.get(md.coltype, ("{!s:10.10}", 10)) # default width 10 cols -= length if cols <= 0: break fmtl.append(fmt) side = ">" if ">" in fmt else "<" hfmtl.append("{{:{side}{fw}.{fw}}}".format(side=side, fw=length)) fmt = "{!s:6.6s}: " + " ".join(fmtl) hfmt = "{!s:6.6s}: " + " ".join(hfmtl) ln = 0 ; rows -= 3 try: for item in q.all(): if ln % rows == 0: self._ui.printf("%B" + hfmt.format(pkname, *heading) + "%N") try: self._print(fmt.format(getattr(item, pkname), *[getattr(item, hn) for hn in heading])) except ValueError: self._ui.printf("%R{!s:6.6s}%N: {}".format(getattr(item, pkname), str(item))) ln += 1 except: _session.rollback() raise
def get_rowdisplay(modelname): modelclass = get_model(modelname) return models.get_rowdisplay(modelclass)