Exemplo n.º 1
0
def related_add(modelname, entry_id, colname, relmodelname, rel_id):
    klass = get_model(modelname)
    relklass = get_model(relmodelname)
    metadata = models.get_column_metadata(klass, colname)
    # fetch parent and related objects
    dbrow = webhelpers.get_row(klass, entry_id)
    reldbrow = webhelpers.get_row(relklass, rel_id)
    # now add using appropriate semantics
    if metadata.uselist:
        col = getattr(dbrow, colname)
        col.append(reldbrow)
    else:
        setattr(dbrow, colname, reldbrow)
    try:
        webhelpers.dbsession.commit()
    except (DataError, IntegrityError), err:
        webhelpers.dbsession.rollback()
        raise
Exemplo n.º 2
0
def related_remove(modelname, entry_id, colname, relmodelname, rel_id):
    klass = get_model(modelname)
    relklass = get_model(relmodelname)
    metadata = models.get_column_metadata(klass, colname)
    # fetch parent and related objects
    dbrow = webhelpers.get_row(klass, entry_id)
    if metadata.uselist:
        reldbrow = webhelpers.get_row(relklass, rel_id)
        col = getattr(dbrow, colname)
        col.remove(reldbrow)
    else:
        if metadata.nullable:
            setattr(dbrow, colname, None)
        else:
            raise DataError("Removing non-nullable relation")
    try:
        webhelpers.dbsession.commit()
    except (DataError, IntegrityError), err:
        webhelpers.dbsession.rollback()
        raise
Exemplo n.º 3
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