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 _init_gs(self, obj, request): return SacrudForm(self.session, obj, self.table, request)
def sa_add(self): bc = breadcrumbs(self.tname, get_table_verbose_name(self.table), 'sa_create') if self.pk: bc = breadcrumbs(self.tname, get_table_verbose_name(self.table), 'sa_update', id=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 get_responce(form): return dict(form=form.render(), pk=self.pk, obj=obj, breadcrumbs=bc, pk_to_list=pk_to_list) 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 get_responce(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 self.pk: obj = self.crud.update(self.pk, data) else: obj = self.crud.create(data) name = obj.__repr__() dbsession.flush() except SacrudMessagedException as e: self.flash_message(e.message, status=e.status) return get_responce(form) except Exception as e: transaction.abort() logging.exception("Something awful happened!") raise e transaction.commit() if self.pk: self.flash_message( _ps(u"You updated object of ${name}", mapping={'name': escape(name or '')})) else: self.flash_message( _ps("You created new object of ${name}", mapping={'name': escape(name or '')})) return HTTPFound( location=self.request.route_url('sa_list', table=self.tname)) return get_responce(form)
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)