Esempio n. 1
0
def documents(request, section=None, name=None):
    """
    Returns inner html with founded documents
    """
    ctx = _default_context(request)

    docs = Document.objects.permitted(request).all()

    if section:
        ctx['section'] = site.sections.get(section, None)
        if not ctx['section'] or not ctx['section'].has_permission(request):
            if LOGGING:
                logger = logging.getLogger('reportapi.views.documents')
                logger.error(force_text(_('Section (%s) not found or not allowed.') % section))

            return render(request, 'reportapi/404.html', ctx)
        docs = docs.filter(register__section=section)

    if section and name:
        report, register = site.get_report_and_register(request, section, name)
        if not report or not register:
            if LOGGING:
                logger = logging.getLogger('reportapi.views.documents')
                logger.error(force_text(_('Report or register not found for section (%s).') % section))

            return render(request, 'reportapi/404.html', ctx)
        ctx['report'] = report
        docs = docs.filter(register__name=name)

    ctx['docs'] = docs[:DOCS_PER_PAGE]

    return render(request, 'reportapi/index.html', ctx)
Esempio n. 2
0
def API_document_create(request, section, name, filters=None, force=False, fake=False, **kwargs):
    """
    Запускает процесс создания отчёта и/или возвращает информацию
    об уже запущенном процессе.
    """
    user = request.user
    session = request.session

    report, register = site.get_report_and_register(request, section, name)
    if not report or not register:
        raise PermissionError()

    
    filters = report.prepare_filters(filters, request)
    code = report.get_code(filters, request)
    expired = timezone.now() - timezone.timedelta(seconds=report.expiration_time)

    all_documents = register.document_set.filter(code=code, error='')
    proc_documents = all_documents.filter(end__isnull=True)
    last_documents = all_documents.filter(end__gt=expired)

    if proc_documents:
        # Создающийся отчёт
        return result(request, proc_documents[0])
    elif last_documents and (not force or not report.create_force):
        # Готовый отчёт
        if fake:
            return result(request, last_documents[0])
        return result(request, last_documents[0], old=True)
    else:
        # Новый отчёт
        document = Document.objects.new(request=request, user=user, code=code, register=register)
        document.description = report.get_description_from_filters(filters, request=request)
        document.details = report.get_details(document=document, filters=filters, request=request)
        document.save()

        func_kwargs = {
            'request': request,
            'filters': filters,
            'document': document,
            'report': report,
        }

        if report.enable_threads and REPORTAPI_ENABLE_THREADS:
            # Создание нового потока в режиме демона
            t = threading.Thread(target=create_document, kwargs=func_kwargs)
            t.setDaemon(True)
            t.start()
            return result(request, document)
        else:
            # Последовательное создание отчёта
            r = create_document(**func_kwargs)
            return result(request, document)
Esempio n. 3
0
def report(request, section, name):
    ctx = _default_context(request)
    report, register = site.get_report_and_register(request, section, name)
    if not report or not register:
        if LOGGING:
            logger = logging.getLogger('reportapi.views.report')
            logger.error(force_text(
                _('Report or register not found for section (%(section)s) and name (%(name)s).')
                % {'section': section, 'name': name}
            ))
        return render(request, 'reportapi/404.html', ctx)

    ctx['report_as_json'] = tojson(report.get_scheme(request) or dict())
    ctx['report']  = report
    ctx['filters_list'] = report.filters_list(request)
    ctx['section'] = site.sections[section]

    return render(request, 'reportapi/report.html', ctx)