mirror of https://github.com/papermerge/mglib
126 lines
3.1 KiB
Python
126 lines
3.1 KiB
Python
import os
|
|
import logging
|
|
import shutil
|
|
from mglib.utils import safe_to_delete
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Storage:
|
|
"""
|
|
Default Storage class which works with DocumentPath and PagePath
|
|
on local host filesystem
|
|
"""
|
|
|
|
def __init__(self, location=None):
|
|
# by default, this will be something like
|
|
# settings.MEDIA_ROOT
|
|
self._location = location
|
|
|
|
@property
|
|
def location(self):
|
|
return self._location
|
|
|
|
def abspath(self, _path):
|
|
return os.path.join(
|
|
self.location, _path
|
|
)
|
|
|
|
def path(self, _path):
|
|
return self.abspath(_path)
|
|
|
|
def delete_document(self, doc_path):
|
|
"""
|
|
Receives a mglib.path.DocumentPath instance
|
|
"""
|
|
# where original documents and their versions are stored
|
|
abs_dirname_docs = self.path(
|
|
doc_path.dirname_docs
|
|
)
|
|
# where OCRed information and generated thumbnails
|
|
# are stored
|
|
abs_dirname_results = self.path(
|
|
doc_path.dirname_results
|
|
)
|
|
# Before recursively deleting everything in folder
|
|
# double check that there are only
|
|
# .pdf, .txt, .hocr, .jpg files.
|
|
if safe_to_delete(
|
|
abs_dirname_docs
|
|
):
|
|
shutil.rmtree(abs_dirname_docs)
|
|
if os.path.exists(abs_dirname_docs):
|
|
os.rmdir(abs_dirname_docs)
|
|
|
|
if safe_to_delete(
|
|
abs_dirname_results
|
|
):
|
|
shutil.rmtree(abs_dirname_results)
|
|
if os.path.exists(abs_dirname_results):
|
|
os.rmdir(abs_dirname_results)
|
|
|
|
def copy_doc(self, src, dst):
|
|
"""
|
|
copy given file src file path to destination
|
|
as absolute doc_path
|
|
"""
|
|
|
|
dirname = os.path.dirname(
|
|
self.abspath(dst)
|
|
)
|
|
if not os.path.exists(
|
|
dirname
|
|
):
|
|
os.makedirs(
|
|
dirname, exist_ok=True
|
|
)
|
|
logger.debug(
|
|
f"copy_doc: {src} to {dst}"
|
|
)
|
|
shutil.copyfile(
|
|
src,
|
|
self.abspath(dst)
|
|
)
|
|
|
|
def exists(self, _path):
|
|
return os.path.exists(
|
|
self.path(_path)
|
|
)
|
|
|
|
def delete_pages(self, doc_path, page_numers):
|
|
"""
|
|
Delets pages in the document pointed by doc_path.
|
|
doc_path is an instance of mglib.path.DocumentPath
|
|
|
|
In case of success returns document's new version.
|
|
"""
|
|
pass
|
|
|
|
def reoder_pages(self, doc_path, new_order):
|
|
"""
|
|
Reorders pages in the document pointed by doc_path.
|
|
doc_path is an instance of mglib.path.DocumentPath
|
|
|
|
In case of success returns document's new version.
|
|
"""
|
|
pass
|
|
|
|
def paste_pages(
|
|
self,
|
|
dest_doc_path,
|
|
src_doc_path,
|
|
dest_doc_is_new=False,
|
|
after_page_number=False,
|
|
before_page_number=False
|
|
):
|
|
"""
|
|
Pastes pages in the document pointed by dest_doc_path
|
|
from src_doc_path. Both dest and src are instances of
|
|
mglib.path.DocumentPath
|
|
"""
|
|
pass
|
|
|
|
|
|
class FileSystemStorage(Storage):
|
|
pass
|