def render(self): if not self.request.get('paths'): msg = _(u'error_no_items', default=u'You have not selected any items.') IStatusMessage(self.request).addStatusMessage(msg, type='error') return_temp = self.request.get('orig_template', self.context.absolute_url()) return self.request.RESPONSE.redirect(return_temp) dossiers = self.get_selected_dossiers() # generate the xls data with the XLSReporter reporter = XLSReporter(self.request, self.get_dossier_attributes(), dossiers) data = reporter() if not data: msg = _(u'Could not generate the report.') IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) set_attachment_content_disposition(self.request, "dossier_report.xlsx") return data
def _prepare_response(self): self.response.setHeader('X-Theme-Disabled', 'True') self.response.setHeader('Content-type', OCM_MIMETYPE) filename = '{}.{}'.format(self.document.getId(), OCM_FILE_EXTENSION) set_attachment_content_disposition(self.request, filename=filename, file=None)
def __call__(self): if not self.request.get('paths'): msg = _( u'error_no_items', default=u'You have not selected any Items') IStatusMessage(self.request).addStatusMessage(msg, type='error') return_temp = self.request.get( 'orig_template', self.context.absolute_url()) return self.request.RESPONSE.redirect(return_temp) documents = self.get_selected_documents() # generate the xls data with the XLSReporter reporter = XLSReporter( self.request, self.get_document_attributes(), documents) data = reporter() if not data: msg = _(u'Could not generate the report.') IStatusMessage(self.request).addStatusMessage( msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') set_attachment_content_disposition(self.request, "document_report.xlsx") return data
def render(self): tasks = get_selected_items(self.context, self.request) tasks = [tt for tt in tasks] if not tasks: msg = _( u'error_no_items', default=u'You have not selected any Items') IStatusMessage(self.request).addStatusMessage(msg, type='error') if self.request.get('orig_template'): return self.request.RESPONSE.redirect( self.request.form['orig_template']) else: return self.request.RESPONSE.redirect( self.context.absolute_url()) task_attributes = [ {'id':'title', 'title':_('label_task_title')}, {'id':'review_state', 'title':_('review_state'), 'transform':StringTranslater( self.context.REQUEST, 'plone').translate}, {'id':'deadline', 'title':_('label_deadline'), 'transform':format_datetime, 'style':get_date_style()}, {'id':'completed', 'title':_('label_completed'), 'transform':format_datetime, 'style':get_date_style()}, {'id': 'containing_dossier', 'title':_('label_dossier_title')}, {'id':'issuer', 'title':_('label_issuer'), 'transform':readable_author}, {'id':'responsible', 'title':_('label_responsible'), 'transform':readable_author}, {'id':'task_type', 'title':_('label_task_type'), 'transform':task_type_helper}, {'id':'client_id', 'title':_('label_client_id')}, {'id':'sequence_number', 'title':_('label_sequence_number')}, ] reporter = XLSReporter( self.context.REQUEST, task_attributes, tasks, sheet_title=translate( _('label_tasks', default=u'Tasks'), context=self.request), footer='%s %s' % ( datetime.now().strftime('%d.%m.%Y %H:%M'), get_client_id()) ) data = reporter() if not data: msg = _(u'Could not generate the report') IStatusMessage(self.request).addStatusMessage( msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', 'application/vnd.ms-excel') set_attachment_content_disposition(self.request, "task_report.xls") return data
def __call__(self): job_id = require_job_id_parameter(self.request) job = require_job(self.request, self.model, job_id) zip_file = job.get_zip_file() filename = u'{}.zip'.format(normalize_path(self.model.title)) set_attachment_content_disposition( self.request, filename, file=zip_file) return stream_data(zip_file)
def test_set_empty_filename(self): self.request['HTTP_USER_AGENT'] = '' self.replay() set_attachment_content_disposition(self.request, '') self.assertTrue(len(self.header) == 0)
def render(self): """ Copied from ftw.mail.attachment: Just add the contenttype-check (see l.51) """ if self.message is None: raise NotFound message = email.message_from_string(self.message.data) # we need an int value for the position pos = 0 try: pos = int(self.position) except ValueError: raise NotFound # get attachment at position pos attachment = None for i, part in enumerate(message.walk()): if i == pos: attachment = part continue if attachment is not None: content_type = attachment.get_content_type() filename = utils.get_filename(attachment) if filename is None: raise NotFound # the the konsul migrated mails, often has a wrong # content-type for word documents, therefore we check the # content-type, in this case we guess it over the filename if content_type == 'application/octet-stream': mtr = getToolByName(self.context, 'mimetypes_registry') content_type = mtr.globFilename(filename) # make sure we have a unicode string if not isinstance(filename, unicode): filename = filename.decode('utf-8', 'ignore') # internet explorer and safari don't like rfc encoding of filenames # and they don't like utf encoding too. # therefore we first try to encode the filename in iso-8859-1 try: filename = filename.encode('iso-8859-1') except ConflictError: raise except Exception: filename = filename.encode('utf-8', 'ignore') self.request.response.setHeader('Content-Type', content_type) set_attachment_content_disposition(self.request, filename) if content_type == 'message/rfc822': return attachment.as_string() return attachment.get_payload(decode=1) raise NotFound
def test_set_empty_filename(self): self.request['HTTP_USER_AGENT'] = '' self.replay() set_attachment_content_disposition(self.request, '') self.assertEqual(len(self.header), 0)
def __call__(self): data = generate_report(self.request, self.context) if not data: msg = StringTranslater(self.request, 'opengever.repository').translate(_(u'Could not generate the report.')) IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') set_attachment_content_disposition(self.request, "repository_report.xlsx") return data
def test_filename(self): """ Normaly we have the filename in quotes """ self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF') self.replay() set_attachment_content_disposition(self.request, 'Default Name') self.assertEquals(self.header[0], 'attachment; filename="%s"' % 'Default Name')
def test_set_ms_filename(self): """ In Ms we must remove the quotes. """ self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('MSIE') self.replay() set_attachment_content_disposition(self.request, 'MS Name') self.assertEquals(self.header[0], 'attachment; filename=%s' % quote('MS Name'))
def __call__(self): named_file = self._getFile() if not self.filename: self.filename = getattr(named_file, "filename", self.fieldname) if self.filename: self.filename = self.filename.encode("utf-8") set_attachment_content_disposition(self.request, self.filename, named_file) notify(FileCopyDownloadedEvent(self.context)) return stream_data(named_file)
def test_with_file(self): self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF') monk_file = NamedFile('bla bla', filename=u'test.txt') self.replay() set_attachment_content_disposition( self.request, 'Default Name', file=monk_file) self.assertEquals( self.header, ['text/plain', 7, 'attachment; filename="Default Name"'])
def test_filename(self): """ Normaly we have the filename in quotes """ self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF') self.replay() set_attachment_content_disposition(self.request, 'Default Name') self.assertEquals( self.header[0], 'attachment; filename="%s"' % 'Default Name')
def test_set_ms_filename(self): """ In Ms we must remove the quotes. """ self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('MSIE') self.replay() set_attachment_content_disposition(self.request, 'MS Name') self.assertEquals( self.header[0], 'attachment; filename=%s' % quote('MS Name'))
def render(self): self._init_version_file() if not self.version_file: msg = _(u'No file in in this version') IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', self.version_file.contentType) response.setHeader('Content-Length', self.version_file.getSize()) set_attachment_content_disposition( self.request, self.version_file.filename.encode('utf-8')) return self.version_file.data
def return_excel(self, reporter): data = reporter() if not data: msg = _(u'Could not generate the report.') api.portal.show_message(msg, request=self.request, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') set_attachment_content_disposition(self.request, self.filename) return data
def render(self): self._init_version_file() if not self.version_file: msg = _(u'No file in in this version') IStatusMessage(self.request).addStatusMessage( msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', self.version_file.contentType) response.setHeader('Content-Length', self.version_file.getSize()) set_attachment_content_disposition( self.request, self.version_file.filename.encode('utf-8')) return self.version_file.data
def return_excel(self, reporter): data = reporter() if not data: msg = _(u'Could not generate the report.') api.portal.show_message(msg, request=self.request, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) set_attachment_content_disposition(self.request, self.filename) return data
def __call__(self): data = generate_report(self.request, self.context) if not data: msg = StringTranslater(self.request, 'opengever.repository').translate( _(u'Could not generate the report.')) IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) set_attachment_content_disposition(self.request, "repository_report.xlsx") return data
def __call__(self): response = self.request.response with ZipGenerator() as generator: zipper = MeetingDocumentZipper(self.model, generator) zip_file = zipper.get_zip_file() filename = '{}.zip'.format(normalize_path(self.model.title)) set_attachment_content_disposition(self.request, filename) # the following headers must be set manually as # set_attachment_content_disposition expects a Named(Blob)File response.setHeader( 'Content-type', 'application/zip') response.setHeader( 'Content-Length', os.stat(zip_file.name).st_size) return filestream_iterator(zip_file.name, 'rb')
def __call__(self): reporter = XLSReporter( self.request, self.get_attributes(), self.context.get_dossier_representations(), sheet_title=self.get_sheet_title()) response = self.request.RESPONSE data = reporter() if not data: msg = _(u'The report could not been generated.') api.portal.show_message( message=msg, request=self.request, type='error') return response.redirect(self.context.absolute_url()) response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') set_attachment_content_disposition( self.request, "disposition_report.xlsx") return data
def __call__(self): reporter = XLSReporter(self.request, self.get_attributes(), self.context.get_dossier_representations(), sheet_title=self.get_sheet_title()) response = self.request.RESPONSE data = reporter() if not data: msg = _(u'The report could not been generated.') api.portal.show_message(message=msg, request=self.request, type='error') return response.redirect(self.context.absolute_url()) response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) set_attachment_content_disposition(self.request, self.get_file_name()) return data
def __call__(self): DownloadConfirmationHelper(self.context).process_request_form() try: named_file = self._getFile() except NotFound: msg = _(u'The Document ${title} has no File.', mapping={'title': self.context.Title().decode('utf-8')}) api.portal.show_message(msg, self.request, type='error') return self.request.RESPONSE.redirect( get_redirect_url(self.context)) if not self.filename: self.filename = getattr(named_file, 'filename', self.fieldname) if self.filename: self.filename = self.filename.encode('utf-8') set_attachment_content_disposition(self.request, self.filename, named_file) notify(FileCopyDownloadedEvent(self.context)) return self.stream_data(named_file)
def __call__(self): DownloadConfirmationHelper().process_request_form() try: named_file = self._getFile() except NotFound: msg = _( u'The Document ${title} has no File', mapping={'title': self.context.Title().decode('utf-8')}) api.portal.show_message(msg, self.request, type='error') return self.request.RESPONSE.redirect( get_redirect_url(self.context)) if not self.filename: self.filename = getattr(named_file, 'filename', self.fieldname) if self.filename: self.filename = self.filename.encode('utf-8') set_attachment_content_disposition(self.request, self.filename, named_file) notify(FileCopyDownloadedEvent(self.context)) return self.stream_data(named_file)
def render(self): tasks = get_selected_items(self.context, self.request) tasks = [tt for tt in tasks] if not tasks: msg = _(u'error_no_items', default=u'You have not selected any items.') IStatusMessage(self.request).addStatusMessage(msg, type='error') if self.request.get('orig_template'): return self.request.RESPONSE.redirect( self.request.form['orig_template']) else: return self.request.RESPONSE.redirect( self.context.absolute_url()) task_attributes = [ { 'id': 'title', 'title': _('label_task_title') }, { 'id': 'review_state', 'title': _('review_state'), 'transform': StringTranslater(self.context.REQUEST, 'plone').translate }, { 'id': 'deadline', 'title': _('label_deadline'), 'number_format': DATE_NUMBER_FORMAT }, { 'id': 'completed', 'title': _('label_completed'), 'number_format': DATE_NUMBER_FORMAT }, { 'id': 'containing_dossier', 'title': _('label_dossier_title') }, { 'id': 'issuer', 'title': _('label_issuer'), 'transform': readable_author }, { 'id': 'issuing_org_unit_label', 'title': _('label_issuing_org_unit') }, { 'id': 'responsible', 'title': _('label_responsible'), 'transform': readable_author }, { 'id': 'task_type', 'title': _('label_task_type'), 'transform': task_type_helper }, { 'id': 'admin_unit_id', 'title': _('label_admin_unit_id') }, { 'id': 'sequence_number', 'title': _('label_sequence_number') }, ] reporter = XLSReporter(self.context.REQUEST, task_attributes, tasks, sheet_title=translate(_('label_tasks', default=u'Tasks'), context=self.request), footer='%s %s' % (datetime.now().strftime('%d.%m.%Y %H:%M'), get_current_admin_unit().id())) data = reporter() if not data: msg = _(u'Could not generate the report.') IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) set_attachment_content_disposition(self.request, "task_report.xlsx") return data
def _prepare_response(self): self.response.setHeader('X-Theme-Disabled', 'True') self.response.setHeader('Content-type', OCM_MIMETYPE) filename = '{}.{}'.format(self.document.getId(), OCM_FILE_EXTENSION) set_attachment_content_disposition( self.request, filename=filename, file=None)