sync update: + data provider; refactoring; documents update
This commit is contained in:
1 parent
144e69e6c4
commit
927674e53e
9 files changed
+311
-229
No files matched your search
@@ -0,0 +1,78 @@
|
||||
import os
|
||||
from tempfile import mkstemp
|
||||
|
||||
from sync.core import Sync
|
||||
from utils.hash import hash_file, hash_str
|
||||
from utils.image import create_image
|
||||
from utils.image.resize import image_magick_pdf_to_img
|
||||
from utils.text.transform import url_encode_text, url_encode_file
|
||||
|
||||
|
||||
class SyncDocument(Sync):
|
||||
def __init__(self, collection, provider, sizes, dir_static_previews, url_base_preview, url_base_document):
|
||||
super().__init__()
|
||||
self.collection = collection
|
||||
self.provider = provider
|
||||
self.sizes = sizes
|
||||
self.dir_static_previews = dir_static_previews
|
||||
self.url_base_preview = url_base_preview
|
||||
self.url_base_document = url_base_document
|
||||
|
||||
def create(self, document):
|
||||
file = document['file']
|
||||
filename = os.path.basename(file)
|
||||
|
||||
document['type'] = self.document_type(document)
|
||||
document['preview'] = self.create_preview(file, sizes=self.sizes, preview_dir=self.dir_static_previews)
|
||||
document['file'] = {
|
||||
'name': filename,
|
||||
'size': self.provider.size(file)
|
||||
}
|
||||
|
||||
return document
|
||||
|
||||
def document_type(self, document):
|
||||
if document['category'] == 'Награды':
|
||||
return 'award'
|
||||
return 'document'
|
||||
|
||||
def create_id(self, document):
|
||||
bn = os.path.basename(document['file'])
|
||||
document['id'] = url_encode_text('{category}-{file}'.format(
|
||||
category=document['category'],
|
||||
file=bn
|
||||
))
|
||||
return document
|
||||
|
||||
def create_url(self, document):
|
||||
filename = os.path.basename(document['file'])
|
||||
document['url'] = self.url_base_document.format(file=url_encode_file(filename))
|
||||
return document
|
||||
|
||||
def create_hash(self, document):
|
||||
document['hash'] = hash_str(
|
||||
hash_str(document) + self.provider.hash(document['file'])
|
||||
)
|
||||
return document
|
||||
|
||||
def create_preview(self, file, sizes, preview_dir):
|
||||
temp_preview_path = pdf_to_jpg(self.provider, file)
|
||||
|
||||
file = os.path.basename(file)
|
||||
file = url_encode_text(file)
|
||||
url = lambda size, ext: self.url_base_preview.format(id=file, size=size, ext=ext)
|
||||
|
||||
img = create_image(temp_preview_path, sizes, url, preview_dir)
|
||||
os.remove(temp_preview_path)
|
||||
return img
|
||||
|
||||
|
||||
def pdf_to_jpg(provider, pdf):
|
||||
# cwd = os.getcwd()
|
||||
# abspdf = os.path.join(cwd, pdf)
|
||||
abspdf = provider.get_abs(pdf)
|
||||
_, temp = mkstemp('.jpg')
|
||||
image_magick_pdf_to_img(abspdf, temp)
|
||||
return temp
|
||||
|
||||
|
||||
Reference in new issue
Block a user