Example #1
0
    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)
Example #2
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
Example #3
0
 def form(self):
     return self._form or SacrudForm(
         obj=self._obj, dbsession=self.dbsession, table=self.table)
Example #4
0
 def obj(self, obj):
     self._obj = obj
     self.form = SacrudForm(obj=self._obj,
                            dbsession=self.dbsession,
                            table=self.table)