[Sync] Sync Image from folders

This commit is contained in:
Roman Timashev committed 2017-10-15 00:53:03 +03:00
1 parent 374b80a0eb
commit 287c2854af
3 files changed
+45 -3

No files matched your search

+1
View File
@@ -146,6 +146,7 @@ dir_articles = f('Articles')
dir_collective = f('Collective')
dir_albums = f('Gallery')
dir_pages = './Pages'
dir_images = './Images'
page_url_base = 'https://static.shlisselburg.org/art/images/page-{page}-{id}-{size}{ext}'
+8
View File
@@ -7,6 +7,7 @@ from sync.data.yandexdisk import YDProvider
import asyncio
import logging
from sync.models.Image import Image
from sync.models.Album import Album
from sync.models.Article import Article
from sync.models.Page import Page
@@ -80,6 +81,12 @@ async def run(run_interval=0):
model=Settings,
)
sync_images = Sync(
provider=io(settings.provider_root),
model=Image,
)
sync_images.strict_origin = True
while True:
await asyncio.wait([
run_sync(sync_documents),
@@ -89,6 +96,7 @@ async def run(run_interval=0):
run_sync(sync_schedules),
run_sync(sync_albums),
run_sync(sync_settings),
run_sync(sync_images),
])
if run_interval == 0:
+36 -3
View File
@@ -7,10 +7,11 @@ from typing import Optional, List
import settings
from db import collection
from sync.data import request
from sync.data import request, list_images
from sync.models import Model
from utils.hash import md5
from utils.image import image_magick_resize
from utils.text.transform import url_encode_text
logger = logging.getLogger(settings.name + '.Image')
@@ -32,6 +33,14 @@ class Image(Model):
document = store.find_one(query)
return document
@staticmethod
async def find(query):
return store.find(query)
@staticmethod
async def delete(query):
return store.find_one_and_delete(query)
@staticmethod
async def new(provider, file, sizes, url_factory=None):
url_factory = url_factory if url_factory else default_url_factory
@@ -49,15 +58,36 @@ class Image(Model):
return img
@staticmethod
async def scan(provider):
scan_path = settings.dir_images
documents = list_images(provider, scan_path)
return [Image.read_path(provider, i) for i in documents]
@staticmethod
def read_path(provider, path):
return Image(
provider,
path,
data=None,
url_factory=default_url_factory
)
def __init__(self, provider, file, data, url_factory):
self.origin = None
self.data = data
self.url_factory = url_factory
super().__init__(provider, store, file)
def init(self):
self.id = self.__get_id()
self.hash = self.__get_hash()
self.origin = f"{settings.origin}:{os.path.dirname(self.file)}"
async def is_changed(self):
i = await Image.find_one({'file': self.file})
return self._is_changed_hash(i)
@@ -97,7 +127,9 @@ class Image(Model):
def bake(self):
return {
'id': self.id,
'file': self.file,
'origin': self.origin,
'hash': self.hash,
'data': self.data,
}
@@ -110,8 +142,9 @@ class Image(Model):
def __filename(self):
return os.path.basename(self.file)
def __set_id(self, value):
self.id = value
def __get_id(self):
filename = os.path.basename(self.file)
return url_encode_text(filename)
def __get_hash(self):
return self.provider.hash(self.file)