def to_representation(self, value): """ Return a signed url """ permission = self.permission() if not (permission.has_object_action_permission( 'GET', self.context['request'].user, value) and permission.has_action_permission( 'GET', self.context['request'].user, value.__class__)): return None url_args = [getattr(value, arg) for arg in self.url_args] url = reverse_signed(self.url_name, args=url_args) if self.filename: filename = self.filename elif self.file_attr: file = getattr(value, self.file_attr, None) if not file: return None else: filename = os.path.basename(file.name) else: filename = '---' return {'url': url, 'name': filename}
def document_link(self, obj): if obj.document and obj.document.file: template = loader.get_template('admin/document_button.html') if 'localhost' in connection.tenant.domain_url: download_url = obj.document.file.url else: download_url = reverse_signed('kyc-document', args=(obj.id, )) return template.render({'document_url': download_url}) return "_"
def test_download_invalid_signature(self): result = export(Exporter, tenant=self.tenant, from_date=timezone.now(), to_date=timezone.now() - datetime.timedelta(days=180)) response = self.client.get( reverse_signed('exportdb_download', args=(result, )) + '123') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def document(self, obj): if obj.connect_account and \ isinstance(obj.connect_account, PlainPayoutAccount) and \ obj.connect_account.document and \ obj.connect_account.document.file: template = loader.get_template('admin/document_button.html') if 'localhost' in connection.tenant.domain_url: download_url = obj.connect_account.document.file.url else: download_url = reverse_signed('kyc-document', args=(obj.connect_account.id, )) return template.render({'document_url': download_url}) return "_"
def test_download(self): result = export(Exporter, tenant=self.tenant, from_date=timezone.now(), to_date=timezone.now() - datetime.timedelta(days=180)) response = self.client.get( reverse_signed('exportdb_download', args=(result, ))) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertTrue(response['Content-Disposition'].startswith( 'attachment; filename="export-')) self.assertTrue(response['X-Accel-Redirect'].startswith( '/media/private/exports/export')) self.assertEqual( response['Content-Type'], 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' )
def get(self, request, *args, **kwargs): async_result = AsyncResult(request.session.get(EXPORTDB_EXPORT_KEY)) if not async_result: return self.json_response({'status': 'FAILURE', 'progress': 0}) if async_result.state == 'PROGRESS': progress = async_result.info['progress'] if progress > 0.99: progress = 0.99 elif async_result.ready(): progress = 1 else: progress = 1 content = { 'status': async_result.state, 'progress': progress, 'file': reverse_signed('exportdb_download', args=(async_result.result, )) if async_result.ready() else None } return self.json_response(content)
def get_links(self, instance): return { 'ical': reverse_signed('event-ical', args=(instance.pk, )), 'google': instance.google_calendar_link, 'outlook': instance.outlook_link, }
def document_url(self): # pk may be unset if not saved yet, in which case no url can be # generated. if self.pk is not None and self.file: return reverse_signed('project-document-file', args=(self.pk, )) return None
def get_link(self, obj): parent_id = getattr(obj, self.relationship).get().pk return reverse_signed(self.content_view_name, args=(parent_id, ))
def resume_link(obj): if obj.resume: url = reverse_signed('task-member-resume', args=(obj.id, )) return format_html(u"<a href='{}'>{}</a>", str(url), _('Resume'))