[Sync] Image update: do not compile unchanged images
This commit is contained in:
1 parent
63796dfab3
commit
98f9de7d60
2 files changed
+43
-5
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user