コード例 #1
0
ファイル: util.py プロジェクト: lskdev/commcare-hq
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,
    }
コード例 #2
0
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)
コード例 #3
0
ファイル: views.py プロジェクト: modonnell729/commcare-hq
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)
コード例 #4
0
ファイル: util.py プロジェクト: dimagi/commcare-hq
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,
    }
コード例 #5
0
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,
    }
コード例 #6
0
ファイル: util.py プロジェクト: yonglehou/commcare-hq
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
コード例 #7
0
ファイル: views.py プロジェクト: wbnigeria/django-soil
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)
コード例 #8
0
ファイル: util.py プロジェクト: saketkanth/commcare-hq
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
コード例 #9
0
ファイル: views.py プロジェクト: thedevelopermw/commcare-hq
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)
コード例 #10
0
ファイル: util.py プロジェクト: dimagi/django-soil
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
コード例 #11
0
ファイル: views.py プロジェクト: johan--/commcare-hq
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)