Esempio n. 1
0
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
Esempio n. 2
0
 def _init_gs(self, obj, request):
     return SacrudForm(self.session, obj, self.table, request)
Esempio n. 3
0
    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)
Esempio n. 4
0
 def form(self):
     return self._form or SacrudForm(
         obj=self._obj, dbsession=self.dbsession, table=self.table)
Esempio n. 5
0
 def obj(self, obj):
     self._obj = obj
     self.form = SacrudForm(obj=self._obj,
                            dbsession=self.dbsession,
                            table=self.table)