[sync] updated

This commit is contained in:
tmshv committed 2016-09-13 00:17:41 +03:00
1 parent 40a5d09e78
commit f38ddf8bd0
12 files changed
+285 -46

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
__author__ = 'Roman Timashev'
class Album:
def __init__(self, type, title, uri, course, course_uri, date, teacher, comment):
super().__init__()
self.products = []
self.type = type
self.title = title
self.uri = uri
self.course = course
self.course_uri = course_uri
self.date = date
self.teacher = teacher
self.comment = comment
def add_product(self, product):
self.products.append(product)
def __repr__(self, *args, **kwargs):
return '[%s by %s (%d items)]' % (self.title, self.teacher, len(self.products))
+6
View File
@@ -0,0 +1,6 @@
class Model:
def __init__(self):
super().__init__()
def bake(self):
return None
+124
View File
@@ -0,0 +1,124 @@
import os
from tempfile import mkstemp
import settings
from sync.models import Model
from utils.fn import last_good, lmap
from utils.hash import 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 Document(Model):
@staticmethod
def read(path):
name = os.path.basename(path)
document = {
'file': path,
'category': os.path.dirname(path),
'title': os.path.splitext(name)[0]
}
return document
def __init__(self, provider, path, url_base, preview_compiler):
super().__init__()
self.path = path
self.category = None
self.file = None
self.id = None
self.type = None
self.url = None
self.title = None
self.preview = None
for k, v in m.items():
setattr(self, k, v)
self.provider = provider
def bake(self):
file = self.file
filename = os.path.basename(file)
self.type = document_type(self.type)
self.preview = self.create_preview(file)
self.title = last_good([
self.title,
get_pdf_title(self.provider, self.file)
])
self.file = {
'name': filename,
'size': self.provider.size(file)
}
def __set_id(self):
bn = os.path.basename(self.file)
self.id = url_encode_text('{category}-{file}'.format(
category=self.category,
file=bn
))
def __set_url(self):
filename = os.path.basename(self.file)
self.url = self.url_base_document.format(file=url_encode_file(filename))
def __set_hash(self):
hash_keys = ['id', 'url']
hash_doc = lmap(
lambda key: getattr(self, key),
hash_keys
)
self.hash = hash_str(
hash_str(hash_doc) + self.provider.hash(self.file)
)
def create_preview(self, file):
def url(size, ext):
return self.url_base_preview.format(id=file, size=size, ext=ext)
temp_preview_path = pdf_to_jpg(self.provider, file)
file = os.path.basename(file)
file = url_encode_text(file)
img = create_image(temp_preview_path, self.sizes, url, settings.dir_static_images)
os.remove(temp_preview_path)
return img
def document_type(doctype):
if doctype == 'Награды':
return 'award'
return 'document'
def pdf_to_jpg(provider, pdf):
_, temp_in = mkstemp(suffix='.pdf')
_, temp_out = mkstemp(suffix='.jpg')
abspdf = provider.copy(pdf, temp_in)
image_magick_pdf_to_img(abspdf, temp_out)
os.remove(temp_in)
return temp_out
def get_pdf_title(provider, file):
from PyPDF2 import PdfFileReader
from PyPDF2.generic import TextStringObject
from PyPDF2.generic import IndirectObject
pdf = PdfFileReader(provider.read(file))
info = pdf.getDocumentInfo()
if info:
if type(info.title) == TextStringObject:
return str(info.title)
if type(info.title_raw) == IndirectObject:
o = pdf.getObject(info.title_raw)
return str(o)
return None
+39
View File
@@ -0,0 +1,39 @@
from sync.image import sync_image
from sync.teacher import Teacher
from utils.fn import key_mapper
from utils.text.transform import interpolate_swift
def resolve_value(param, store):
"""
:param param: \(nv-andreeva)
:param store: function should return value by key nv-andreeva
:return:
"""
i = interpolate_swift(param)
return store(i)
unpop_image = key_mapper('image', lambda i: sync_image(i)['_id'])
def resolve_teacher(i):
sync = Teacher()
return resolve_value(i, lambda i: sync.read({'id': i}))
def create_product(doc):
# author, image, title, awards, teacher, date
unpop_teacher = key_mapper('teacher', lambda i: i['_id'])
product = {**doc}
unpop_image(product)
product['teacher'] = resolve_teacher(doc['teacher'])
if(product['teacher']):
unpop_teacher(product)
return product