Esempio n. 1
0
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()
Esempio n. 2
0
 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
Esempio n. 3
0
def get_rowdisplay(modelname):
    modelclass = get_model(modelname)
    return models.get_rowdisplay(modelclass)