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)
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)
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)