def sa_add(self): action = self.request.matched_route.name bc = breadcrumbs(self.tname, get_table_verbose_name(self.table), action, self.pk) dbsession = self.request.dbsession try: obj = get_obj(dbsession, self.table, self.pk) except (NoResultFound, KeyError): raise HTTPNotFound form = SacrudForm(obj=obj, dbsession=dbsession, request=self.request, table=self.table)() def options_for_response(form): return dict( form=form.render(), pk=self.pk, obj=obj, breadcrumbs=bc ) if 'form.submitted' in self.request.params: controls = self.request.POST.items() pstruct = peppercorn.parse(controls) if '__formid__' in pstruct: try: deserialized = form.validate_pstruct(pstruct).values() except deform.ValidationFailure as e: return options_for_response(e) data = {k: preprocessing_value(v) for d in deserialized for k, v in d.items()} else: # if not peppercon format data = pstruct try: if action == PYRAMID_SACRUD_UPDATE: obj = self.crud.update(self.pk, data) flash_action = 'updated' else: obj = self.crud.create(data) flash_action = 'created' name = obj.__repr__() dbsession.flush() except SacrudMessagedException as e: self.flash_message(e.message, status=e.status) return self.get_response(options_for_response(form), SACRUD_EDIT_TEMPLATE) except Exception as e: transaction.abort() logging.exception("Something awful happened!") raise e transaction.commit() self.flash_message(_ps( u"You ${action} object of ${name}", mapping={'action': flash_action, 'name': escape(name or '')} )) return HTTPFound( location=self.request.route_url(PYRAMID_SACRUD_LIST, table=self.tname)) return self.get_response(options_for_response(form), SACRUD_EDIT_TEMPLATE)
def test_preprocessing_value(): Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) foo = Column(String) bar = Column(Integer) form = SacrudForm(None, None, User) form.make_appstruct() assert preprocessing_value("foo", colander.null, form.schema) == "" assert preprocessing_value("foo", "", form.schema) == "" assert isinstance( sqlalchemy.sql.null(), type(preprocessing_value("bar", "", form.schema)) ) value = {'foo': 'bar'} assert preprocessing_value("foo", value, form.schema) == value
def form(self): return self._form or SacrudForm( obj=self._obj, dbsession=self.dbsession, table=self.table)
def obj(self, obj): self._obj = obj self.form = SacrudForm(obj=self._obj, dbsession=self.dbsession, table=self.table)