Skip to content

Instantly share code, notes, and snippets.

@mcdonc
Created March 7, 2019 00:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcdonc/50d09e79e98467b456f7bd161142e106 to your computer and use it in GitHub Desktop.
Save mcdonc/50d09e79e98467b456f7bd161142e106 to your computer and use it in GitHub Desktop.
from pyramid.config import Configurator
from pyramid.view import view_config
from waitress import serve
import colander
from pyramid_deform import SessionFileUploadTempStore, CSRFSchema
import deform
from deform import widget
@colander.deferred
def deferred_upload_widget(node, kw):
request = kw["request"]
tmpstore = SessionFileUploadTempStore(request)
return widget.FileUploadWidget(tmpstore)
class FileUploads(colander.SequenceSchema):
file = colander.SchemaNode(
deform.FileData(),
missing=colander.drop,
widget=deferred_upload_widget,
)
@colander.deferred
def deferred_initialized_sequence_widget(node, kw):
""" Set an initial widget for FileUploads """
return widget.SequenceWidget(min_len=1)
class PropertyDamageSchema(CSRFSchema):
number = colander.SchemaNode(
colander.Int(),
title="Validation failure test",
validator=colander.Range(
min=0, max=1),
)
files = FileUploads(
missing=None,
widget=deferred_initialized_sequence_widget
)
class IncidentTypeEdit(object):
def __init__(self, request):
self.request = request
@view_config(
renderer="./type_create.jinja2",
request_method=['GET', 'HEAD']
)
def __call__(self):
schema = PropertyDamageSchema().bind(
request=self.request,
)
b = deform.Button(name="create", title="Create Incident Type")
form = deform.Form(schema, buttons=(b,))
incident = {
'files':(
{'filename':'abc','uid':'abc'},
),
'number':50
}
form = form.render(incident)
return {'form':form, 'created':False}
@view_config(
renderer="type_create.jinja2",
request_method=['POST']
)
def validate(self):
schema = PropertyDamageSchema().bind(
request=self.request,
)
b = deform.Button(name="create", title="Create Incident Type")
form = deform.Form(schema, buttons=(b,))
try:
form.validate(self.request.POST.items())
except deform.exception.ValidationFailure as e:
form = e.render()
return {'form':form, 'created':True}
if __name__ == '__main__':
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('itsaseekreet')
config = Configurator(
settings={
'pyramid_deform.tempdir':'/tmp',
'jinja2.directories':'.',
})
config.include('pyramid_jinja2')
config.set_session_factory(my_session_factory)
config.scan()
app = config.make_wsgi_app()
serve(app)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment