def get_download_context(download_id, message=None, require_result=False): """ :param require_result: If set to True, is_ready will not be set to True unless result is also available. If check_state=False, this is ignored. """ download_data = DownloadBase.get(download_id) if download_data is None: download_data = DownloadBase(download_id=download_id) task = download_data.task task_status = get_task_status( task, is_multiple_download_task=isinstance(download_data, MultipleTaskDownload)) if task_status.failed(): raise TaskFailedError(task_status.error) if require_result: is_ready = task_status.success() and task_status.result is not None else: is_ready = task_status.success() return { 'result': task_status.result, 'error': task_status.error, 'is_ready': is_ready, 'is_alive': is_alive() if heartbeat_enabled() else True, 'progress': task_status.progress._asdict(), 'download_id': download_id, 'allow_dropbox_sync': isinstance(download_data, FileDownload) and download_data.use_transfer, 'has_file': download_data is not None and download_data.has_file, 'custom_message': message, }
def ajax_job_poll(request, download_id, template="soil/partials/dl_status.html"): download_data = DownloadBase.get(download_id) if download_data is None: download_data = DownloadBase(download_id=download_id) is_ready = False try: if download_data.task.failed(): return HttpResponseServerError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass else: is_ready = True alive = True if heartbeat_enabled(): alive = is_alive() context = RequestContext(request) context['is_ready'] = is_ready context['is_alive'] = alive context['progress'] = download_data.get_progress() context['download_id'] = download_id return render_to_response(template, context_instance=context)
def location_importer_job_poll(request, domain, download_id, template="locations/manage/partials/status.html"): download_data = DownloadBase.get(download_id) is_ready = False if download_data is None: download_data = DownloadBase(download_id=download_id) try: if download_data.task.failed(): return HttpResponseServerError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass alive = True if heartbeat_enabled(): alive = is_alive() context = RequestContext(request) if download_data.task.state == 'SUCCESS': is_ready = True context['result'] = download_data.task.result.get('messages') context['is_ready'] = is_ready context['is_alive'] = alive context['progress'] = download_data.get_progress() context['download_id'] = download_id return render_to_response(template, context_instance=context)
def get_download_context(download_id, message=None, require_result=False): """ :param require_result: If set to True, is_ready will not be set to True unless result is also available. If check_state=False, this is ignored. """ download_data = DownloadBase.get(download_id) if download_data is None: download_data = DownloadBase(download_id=download_id) task = download_data.task task_status = get_task_status( task, is_multiple_download_task=isinstance(download_data, MultipleTaskDownload)) if task_status.failed(): # Celery replaces exceptions with a wrapped one that we can't directly import # so I think our best choice is to match off the name, even though that's hacky exception_name = (task.result.__class__.__name__ if isinstance(task.result, Exception) else None) raise TaskFailedError(task_status.error, exception_name=exception_name) if require_result: is_ready = task_status.success() and task_status.result is not None else: is_ready = task_status.success() return { 'result': task_status.result, 'error': task_status.error, 'is_ready': is_ready, 'is_alive': is_alive() if heartbeat_enabled() else True, 'progress': task_status.progress._asdict(), 'download_id': download_id, 'allow_dropbox_sync': isinstance(download_data, FileDownload) and download_data.use_transfer, 'has_file': download_data is not None and download_data.has_file, 'custom_message': message, }
def get_download_context(download_id, check_state=False, message=None, require_result=False): """ :param require_result: If set to True, is_ready will not be set to True unless result is also available. If check_state=False, this is ignored. """ is_ready = False context = {} download_data = DownloadBase.get(download_id) context['has_file'] = download_data is not None and download_data.has_file if download_data is None: download_data = DownloadBase(download_id=download_id) if isinstance(download_data, MultipleTaskDownload): if download_data.task.ready(): context['result'], context[ 'error'] = _get_download_context_multiple_tasks(download_data) else: try: if download_data.task.failed(): raise TaskFailedError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass else: if not check_state: is_ready = True elif download_data.task.successful(): is_ready = True result = download_data.task.result context['result'] = result and result.get('messages') if result and result.get('errors'): raise TaskFailedError(result.get('errors')) alive = True if heartbeat_enabled(): alive = is_alive() progress = download_data.get_progress() def progress_complete(): return (getattr(settings, 'CELERY_ALWAYS_EAGER', False) or progress.get('percent', 0) == 100 and not progress.get('error', False)) context['is_ready'] = is_ready or progress_complete() if check_state and require_result: context['is_ready'] = context['is_ready'] and context.get( 'result') is not None context['is_alive'] = alive context['progress'] = progress context['download_id'] = download_id context['allow_dropbox_sync'] = isinstance( download_data, FileDownload) and download_data.use_transfer context['custom_message'] = message return context
def ajax_job_poll(request, download_id, template="soil/partials/dl_status.html"): download_data = cache.get(download_id, None) if download_data == None: is_ready = False else: is_ready=True alive = True if heartbeat_enabled(): alive = is_alive() context = RequestContext(request) context['is_ready'] = is_ready context['is_alive'] = alive context['download_id'] = download_id return render_to_response(template, context_instance=context)
def get_download_context(download_id, check_state=False, message=None): is_ready = False context = {} download_data = DownloadBase.get(download_id) context['has_file'] = download_data is not None and download_data.has_file if download_data is None: download_data = DownloadBase(download_id=download_id) if isinstance(download_data, MultipleTaskDownload): if download_data.task.ready(): context['result'], context['error'] = _get_download_context_multiple_tasks(download_data) else: try: if download_data.task.failed(): raise TaskFailedError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass else: if not check_state: is_ready = True elif download_data.task.successful(): is_ready = True result = download_data.task.result context['result'] = result and result.get('messages') if result and result.get('errors'): raise TaskFailedError(result.get('errors')) alive = True if heartbeat_enabled(): alive = is_alive() progress = download_data.get_progress() def progress_complete(): return ( getattr(settings, 'CELERY_ALWAYS_EAGER', False) or progress.get('percent', 0) == 100 and not progress.get('error', False) ) context['is_ready'] = is_ready or progress_complete() context['is_alive'] = alive context['progress'] = progress context['download_id'] = download_id context['allow_dropbox_sync'] = isinstance(download_data, FileDownload) and download_data.use_transfer context['custom_message'] = message return context
def importer_job_poll(request, domain, download_id, template="importer/partials/import_status.html"): download_data = DownloadBase.get(download_id) is_ready = False if download_data is None: download_data = DownloadBase(download_id=download_id) try: if download_data.task.failed(): return HttpResponseServerError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass alive = True if heartbeat_enabled(): alive = is_alive() context = RequestContext(request) if download_data.task.result and 'error' in download_data.task.result: error = download_data.task.result['error'] if error == 'EXPIRED': return _spreadsheet_expired(request, domain) elif error == 'HAS_ERRORS': messages.error( request, _('The session containing the file you ' 'uploaded has expired - please upload ' 'a new one.')) return HttpResponseRedirect( base.ImportCases.get_url(domain=domain) + "?error=cache") if download_data.task.state == 'SUCCESS': is_ready = True context['result'] = download_data.task.result context['is_ready'] = is_ready context['is_alive'] = alive context['progress'] = download_data.get_progress() context['download_id'] = download_id return render_to_response(template, context_instance=context)
def get_download_context(download_id, check_state=False): is_ready = False context = {} download_data = DownloadBase.get(download_id) context['has_file'] = bool(download_data) if download_data is None: download_data = DownloadBase(download_id=download_id) try: if download_data.task.failed(): raise TaskFailedError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass else: if not check_state: is_ready = True elif download_data.task.state == 'SUCCESS': is_ready = True result = download_data.task.result context['result'] = result and result.get('messages') if result and result.get('errors'): raise TaskFailedError(result.get('errors')) alive = True if heartbeat_enabled(): alive = is_alive() progress = download_data.get_progress() def progress_complete(): return ( getattr(settings, 'CELERY_ALWAYS_EAGER', False) and progress.get('percent', 0) == 100 and not progress.get('error', False) ) context['is_ready'] = is_ready or progress_complete() context['is_alive'] = alive context['progress'] = progress context['download_id'] = download_id return context
def importer_job_poll(request, domain, download_id, template="importer/partials/import_status.html"): download_data = DownloadBase.get(download_id) is_ready = False if download_data is None: download_data = DownloadBase(download_id=download_id) try: if download_data.task.failed(): return HttpResponseServerError() except (TypeError, NotImplementedError): # no result backend / improperly configured pass alive = True if heartbeat_enabled(): alive = is_alive() context = RequestContext(request) if download_data.task.result and 'error' in download_data.task.result: error = download_data.task.result['error'] if error == 'EXPIRED': return _spreadsheet_expired(request, domain) elif error == 'HAS_ERRORS': messages.error(request, _('The session containing the file you ' 'uploaded has expired - please upload ' 'a new one.')) return HttpResponseRedirect(base.ImportCases.get_url(domain=domain) + "?error=cache") if download_data.task.state == 'SUCCESS': is_ready = True context['result'] = download_data.task.result context['is_ready'] = is_ready context['is_alive'] = alive context['progress'] = download_data.get_progress() context['download_id'] = download_id context['url'] = base.ImportCases.get_url(domain=domain) return render_to_response(template, context_instance=context)