def download_pdf_one(self, page_id: str, revision_id: str = None, *args, **kwargs): file_id = int(tg.request.controller_state.routing_args.get('file_id')) revision_id = int(revision_id) if revision_id != 'latest' else None page = int(page_id) cache_path = CFG.get_instance().PREVIEW_CACHE_DIR preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user content_api = ContentApi(user, show_archived=True, show_deleted=True) file = content_api.get_one(file_id, self._item_type) if revision_id: file_path = content_api.get_one_revision_filepath(revision_id) else: file = content_api.get_one(file_id, self._item_type) file_path = content_api.get_one_revision_filepath(file.revision_id) path = preview_manager.get_pdf_preview(file_path=file_path, page=page) file_suffix = '' if page > -1: file_suffix = '.page-{}'.format(page + 1) tg.response.headers['Content-Disposition'] = \ 'attachment; filename="{}{}.pdf"'.format( file.label, file_suffix, ) with open(path, 'rb') as pdf: return pdf.read()
def get_one(self, page_id: str = '-1', revision_id: str = None, size: int = 300, *args, **kwargs): file_id = int(tg.request.controller_state.routing_args.get('file_id')) page = int(page_id) revision_id = int(revision_id) if revision_id != 'latest' else None cache_path = CFG.get_instance().PREVIEW_CACHE_DIR preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user content_api = ContentApi(user, show_archived=True, show_deleted=True) if revision_id: file_path = content_api.get_one_revision_filepath(revision_id) else: file = content_api.get_one(file_id, self._item_type) file_path = content_api.get_one_revision_filepath(file.revision_id) try: path = preview_manager.get_jpeg_preview(file_path=file_path, page=page, height=size, width=size) with open(path, 'rb') as large: result = large.read() except PreviewGeneratorException: result = None return result
def download_pdf_one(self, page_id: str, revision_id: str=None, *args, **kwargs): file_id = int(tg.request.controller_state.routing_args.get('file_id')) revision_id = int(revision_id) if revision_id != 'latest' else None page = int(page_id) cache_path = CFG.get_instance().PREVIEW_CACHE_DIR preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user content_api = ContentApi(user, show_archived=True, show_deleted=True) file = content_api.get_one(file_id, self._item_type) if revision_id: file_path = content_api.get_one_revision_filepath(revision_id) else: file = content_api.get_one(file_id, self._item_type) file_path = content_api.get_one_revision_filepath(file.revision_id) path = preview_manager.get_pdf_preview(file_path=file_path, page=page) file_suffix = '' if page > -1: file_suffix = '.page-{}'.format(page + 1) tg.response.headers['Content-Disposition'] = \ 'attachment; filename="{}{}.pdf"'.format( file.label, file_suffix, ) with open(path, 'rb') as pdf: return pdf.read()
def get_one(self, page_id: str='-1', revision_id: str=None, size: int=300, *args, **kwargs): file_id = int(tg.request.controller_state.routing_args.get('file_id')) page = int(page_id) revision_id = int(revision_id) if revision_id != 'latest' else None cache_path = CFG.get_instance().PREVIEW_CACHE_DIR preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user content_api = ContentApi(user, show_archived=True, show_deleted=True) if revision_id: file_path = content_api.get_one_revision_filepath(revision_id) else: file = content_api.get_one(file_id, self._item_type) file_path = content_api.get_one_revision_filepath(file.revision_id) try: path = preview_manager.get_jpeg_preview(file_path=file_path, page=page, height=size, width=size) with open(path, 'rb') as large: result = large.read() except PreviewGeneratorException: result = None return result
def get_one(self, file_id, revision_id=None): file_id = int(file_id) cache_path = CFG.get_instance().PREVIEW_CACHE preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user workspace = tmpl_context.workspace current_user_content = Context(CTX.CURRENT_USER, current_user=user).toDict(user) current_user_content.roles.sort(key=lambda role: role.workspace.name) content_api = ContentApi(user, show_archived=True, show_deleted=True) if revision_id: file = content_api.get_one_from_revision(file_id, self._item_type, workspace, revision_id) else: file = content_api.get_one(file_id, self._item_type, workspace) revision_id = file.revision_id file_path = content_api.get_one_revision_filepath(revision_id) nb_page = preview_manager.get_nb_page(file_path=file_path) preview_urls = [] for page in range(int(nb_page)): url_str = '/previews/{}/pages/{}?revision_id={}' url = url_str.format(file_id, page, revision_id) preview_urls.append(url) fake_api_breadcrumb = self.get_breadcrumb(file_id) fake_api_content = DictLikeClass(breadcrumb=fake_api_breadcrumb, current_user=current_user_content) fake_api = Context(CTX.FOLDER, current_user=user).toDict(fake_api_content) dictified_file = Context(self._get_one_context, current_user=user).toDict(file, 'file') result = DictLikeClass(result=dictified_file, fake_api=fake_api, nb_page=nb_page, url=preview_urls) return result
def get_one(self, file_id, revision_id=None): file_id = int(file_id) cache_path = CFG.get_instance().PREVIEW_CACHE_DIR preview_manager = PreviewManager(cache_path, create_folder=True) user = tmpl_context.current_user workspace = tmpl_context.workspace current_user_content = Context(CTX.CURRENT_USER, current_user=user).toDict(user) current_user_content.roles.sort(key=lambda role: role.workspace.name) content_api = ContentApi(user, show_archived=True, show_deleted=True) if revision_id: file = content_api.get_one_from_revision(file_id, self._item_type, workspace, revision_id) else: file = content_api.get_one(file_id, self._item_type, workspace) revision_id = file.revision_id file_path = content_api.get_one_revision_filepath(revision_id) nb_page = 0 enable_pdf_buttons = False # type: bool preview_urls = [] try: nb_page = preview_manager.get_page_nb(file_path=file_path) for page in range(int(nb_page)): url_str = '/previews/{}/pages/{}?revision_id={}' url = url_str.format(file_id, page, revision_id) preview_urls.append(url) enable_pdf_buttons = \ preview_manager.has_pdf_preview(file_path=file_path) except PreviewGeneratorException as e: # INFO - A.P - Silently intercepts preview exception # As preview generation isn't mandatory, just register it logger.debug(self, 'Preview Generator Exception: {}'.format(e.__str__)) except Exception as e: # INFO - D.A - 2017-08-11 - Make Tracim robust to pg exceptions # Preview generator may potentially raise any type of exception # so we prevent user interface crashes by catching all exceptions logger.error( self, 'Preview Generator Generic Exception: {}'.format(e.__str__)) pdf_available = 'true' if enable_pdf_buttons else 'false' # type: str fake_api_breadcrumb = self.get_breadcrumb(file_id) fake_api_content = DictLikeClass(breadcrumb=fake_api_breadcrumb, current_user=current_user_content) fake_api = Context(CTX.FOLDER, current_user=user)\ .toDict(fake_api_content) dictified_file = Context(self._get_one_context, current_user=user).toDict(file, 'file') result = DictLikeClass(result=dictified_file, fake_api=fake_api, nb_page=nb_page, url=preview_urls, pdf_available=pdf_available) return result