[Sync] Image update: do not compile unchanged images

This commit is contained in:
Roman Timashev committed 2017-09-11 19:22:28 +03:00
1 parent 63796dfab3
commit 98f9de7d60
2 files changed
+43 -5

No files matched your search

+23 -4
View File
@@ -13,7 +13,9 @@ import logging
import settings
from utils.image.resize import optimize, thumbnail
logger = logging.getLogger(settings.name)
logger = logging.getLogger(settings.name + '.Image')
store = collection(settings.collection_images)
def get_upload_url(url):
@@ -21,12 +23,25 @@ def get_upload_url(url):
class Image(Model):
@staticmethod
async def find_one(query):
document = store.find_one(query)
return document
@staticmethod
async def new(provider, file, sizes, url_factory):
img = Image(provider, file, url_factory)
await img.compile(sizes)
await img.upload()
await img.save()
changed = await img.is_changed()
if changed:
await img.compile(sizes)
await img.upload()
await img.save()
else:
doc = await Image.find_one({'file': file})
img.image = [i for i in doc['data'].values()]
img.id = doc['_id']
return img
def __init__(self, provider, file, url_factory):
@@ -38,6 +53,10 @@ class Image(Model):
def init(self):
self.hash = self.__get_hash()
async def is_changed(self):
i = await Image.find_one({'file': self.file})
return self._is_changed_hash(i)
async def compile(self, sizes):
img_in = self.provider.get_abs(self.file)
img_out = tempfile.mkdtemp()
+20 -1
View File
@@ -1,3 +1,12 @@
def find(store, item_id: str):
q = {'id': item_id}
try:
return store.find_one(q)
except ValueError:
pass
return None
class Model:
def __init__(self, provider, store, file):
super().__init__()
@@ -19,7 +28,17 @@ class Model:
return None
async def is_changed(self):
return False
i = find(self.store, self.id)
return self._is_changed_hash(i)
def _is_changed_hash(self, item):
if not item:
return True
if 'hash' not in item:
return True
return not (self.hash == item['hash'])
async def save(self):
pass