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
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
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