Created
March 7, 2019 00:28
-
-
Save mcdonc/50d09e79e98467b456f7bd161142e106 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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