def test_input_widgets(self): """Create widgets to input data with Formulator fields. """ form = FormData(self.root, TestRequest()) widgets = Widgets(form=form) widgets.extend(Fields(self.root.form)) self.assertEqual(len(widgets), 4) # String text_widget = widgets.get('field-text-field') self.assertTrue(verifyObject(IFormulatorWidget, text_widget)) self.assertEqual(text_widget.identifier, 'field-text-field') self.assertEqual(text_widget.title, 'Name') self.assertEqual(text_widget.description, '') self.assertEqual(text_widget.required, True) # Checkbox checkbox_widget = widgets.get('field-deceased-field') self.assertTrue(verifyObject(IFormulatorWidget, checkbox_widget)) self.assertEqual(checkbox_widget.identifier, 'field-deceased-field') self.assertEqual(checkbox_widget.title, 'Deceased ?') self.assertEqual(checkbox_widget.description, '') self.assertEqual(checkbox_widget.required, False) # Update widgets.update() # Render self.assertEqual( text_widget.render(), u'<div class="field field-required"><input class="field field-required" id="field-text-field" name="field_text_field" size="20" type="text" value="Arthur van Bossnia" /></div> <input type="hidden" value="1" name="marker_field_text_field" />') self.assertEqual( checkbox_widget.render(), u'<input class="field" id="field-deceased-field" name="field_deceased_field" type="checkbox" /> <input type="hidden" value="1" name="marker_field_deceased_field" />')
class Step1(wizard.WizardStep): composed.view(MyWizard) grok.context(Content) ignoreContent = False fields = Fields(IContact).select('name') label = "Step1"
class Step2(wizard.WizardStep): """Second form of the wizard. """ wizard.view(PersonWizard) grok.context(MyContent) ignoreContent = False fields = Fields(IContact).select('age') label = "Step Age"
class Step1(wizard.WizardStep): """First form of the wizard. """ wizard.view(PersonWizard) grok.context(MyContent) ignoreContent = False fields = Fields(IContact).select('surname') label = "Step Name"
def test_fields(self): """Create fields. """ fields = Fields(self.root.form) self.assertEqual(len(fields), 4) # String text_field = fields.get('text_field') self.assertTrue(verifyObject(IFormulatorField, text_field)) self.assertEqual(text_field.meta_type, 'StringField') self.assertEqual(text_field.identifier, 'text_field') self.assertEqual(text_field.title, 'Name') self.assertEqual(text_field.readonly, False) self.assertEqual(text_field.required, True) self.assertEqual(text_field.getDefaultValue(None), 'Arthur van Bossnia') # Checkbox checkbox_field = fields.get('deceased_field') self.assertTrue(verifyObject(IFormulatorField, checkbox_field)) self.assertEqual(checkbox_field.meta_type, 'CheckBoxField') self.assertEqual(checkbox_field.identifier, 'deceased_field') self.assertEqual(checkbox_field.title, 'Deceased ?') self.assertEqual(checkbox_field.readonly, False) self.assertEqual(checkbox_field.required, False) self.assertEqual(checkbox_field.getDefaultValue(None), False)
class Login(Form): """A very basic implementation of a login form. """ grok.title(_("Log in")) grok.require("zope.Public") grok.context(zope.interface.Interface) prefix = "" label = _("Identify yourself") form_name = _("Login form") fields = Fields(ILoginForm) fields['camefrom'].mode = 'hidden' for field in fields: field.prefix = "" @action(_("Log in")) def login(self): data, errors = self.extractData() if errors: return FAILURE principal = self.request.principal if IUnauthenticatedPrincipal.providedBy(principal): self.status = _("Login failed") return FAILURE self.flash( _("You are now logged in as ${name}", mapping={"name": principal.id})) grok.notify(UserLoggedInEvent(principal)) camefrom = self.request.get("camefrom", None) if not camefrom: if ILocation.providedBy(principal): camefrom = absoluteURL(principal, self.request) else: camefrom = absoluteURL(self.context, self.request) self.redirect(camefrom) return SUCCESS
def test_display_widgets(self): """Create widgets to input data with Formulator fields. """ form = FormData(self.root, TestRequest()) form.mode = DISPLAY widgets = Widgets(form=form) widgets.extend(Fields(self.root.form)) self.assertEqual(len(widgets), 4) # String text_widget = widgets.get('field-text-field') self.assertTrue(verifyObject(IFormulatorWidget, text_widget)) # Checkbox checkbox_widget = widgets.get('field-deceased-field') self.assertTrue(verifyObject(IFormulatorWidget, checkbox_widget)) # Update widgets.update() # Render self.assertEqual(text_widget.render(), u'Arthur van Bossnia') self.assertEqual(checkbox_widget.render(), u'No')
def configuration_fields(self): ifaces = self.getInterfaces() return Fields(*ifaces)
class Step2(wizard.WizardStep): composed.view(MyWizard) grok.context(Content) fields = Fields(IContact).select('age') label = "Step2"
def fields(self): return Fields(*self.context.schema)
def fields(self): content_object = self.context.getContentType() return Fields(*content_object.schema)
class LandingPage(ApplicationForm): grok.context(interface.IInvoiceUploader) grok.name("index") grok.require("zope.Public") fields = Fields(interface.IInvoice) def update(self): resource.style.need() @action("Senden") def handel_save(self): data, errors = self.extractData() if errors: self.flash(u'Es sind leider Fehler aufgetreten') return if data['anrede'] == '': self.flash(u'Bitte wählen Sie eine Anrede aus.') return if data['email'] != '': checkmail = re.compile( r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$").match if not bool(checkmail(data['email'])): self.flash( u'Bitte tragen Sie eine gültige E-Mail Adresse ein.') return if data['datenschutz'] is False: self.flash( u'Bitte bestätigen Sie die Datenschutzerklärung der UKH.') return for x in data['anlagen']: if x == NO_VALUE: self.flash(u'Sie haben keine Dateien zum Upload ausgewählt!') return output_path = settings.get('output_path') pdfstreams = [] pdf_fn = UploadPdf(data, None) for attachment in data.get('anlagen'): print attachment.filename if "pdf" in attachment.filename: pdfstreams.append(attachment) elif "heic" in attachment.filename: from backports.tempfile import TemporaryDirectory with TemporaryDirectory() as tmpdirname: ifn = '%s/%s' % (tmpdirname, attachment.filename) ofn = '%s/%s.jpg' % (tmpdirname, attachment.filename) import pdb pdb.set_trace() with open(ifn, 'wb') as heic: heic.write(attachment.read()) subprocess.call(["heif-convert", ifn, ofn]) with open(ofn, 'rb') as f: rgbimage = Image.open(f) jpegimage = StringIO() rgbimage.save(jpegimage, format="JPEG") jpegimage.seek(0) pdfimage = img2pdf.convert(jpegimage) pdfstreams.append(StringIO(pdfimage)) elif "jpeg" in attachment.filename or 'jpg' or 'png' in attachment.filename: pilimage = Image.open(attachment) if pilimage.mode == "RGBA": rgbimage = pilimage.convert("RGB") else: rgbimage = pilimage jpegimage = StringIO() rgbimage.save(jpegimage, format="JPEG") jpegimage.seek(0) pdfimage = img2pdf.convert(jpegimage) pdfstreams.append(StringIO(pdfimage)) deckblatt = PdfFileReader(pdf_fn) fn_base = datetime.now().strftime('%Y%m%d_%H%M%S') for i, reader in enumerate(map(PdfFileReader, pdfstreams)): output_file = "%s/%s_%s.pdf" % (output_path, fn_base, i) logger.info('Write File %s' % output_file) writer = PdfFileMerger() with open(output_file, 'wb') as output: writer.append(deckblatt) writer.append(reader) writer.write(output) #for n in range(reader.getNumPages()): # writer.addPage(reader.getPage(n)) # writer.write(output) self.flash(u'Vielen Dank, wir haben Ihre Dateien erhalten.') self.redirect(self.application_url())