Files
hudozka/utils/Sync/sync/core/SyncPage.py
T
2017-09-12 01:26:18 +03:00

78 lines
2.1 KiB
Python

import os
import logging
import settings
from sync import untouched
from sync.core import Sync
from sync.data import Provider
from sync.models.Page import Page
from utils.text.transform import url_encode_text
logger = logging.getLogger(settings.name + '.Page')
class SyncPage(Sync):
def __init__(self, provider: Provider, collection):
super().__init__(provider, collection)
async def clean(self):
pass
async def run(self):
logger.info('Checking for update')
documents = await Page.scan(self.provider)
documents_id = [doc.id for doc in documents]
# self.validate(documents)
logger.info('Found {} Page(s)'.format(len(documents)))
# SKIP UNTOUCHED DOCUMENTS
documents = await untouched(documents)
logger.info('Changed {} Pages(s)'.format(len(documents)))
# UPDATING
if settings.update_enabled:
if len(documents) == 0:
logger.info('No Pages to update')
for document in documents:
logger.info('Updating Page {}'.format(document.id))
await document.setup_images(settings.image_sizes, get_image_url_fn(document.id))
await document.save()
logger.info('Updated Page {}'.format(document.id))
# DELETING
if settings.delete_enabled:
documents_delete = list(self.query({'id': {'$nin': documents_id}}))
if len(documents_delete) == 0:
logger.info('No Pages to delete')
else:
for document in documents_delete:
logger.info('Deleting Page {}'.format(document['id']))
q = {'_id': document['_id']}
self.delete(q)
await self.clean()
def get_image_url_fn(page_id: str):
image_id = lambda filename: url_encode_text(
os.path.splitext(os.path.basename(filename))[0]
)
def img_url_fn(file, size, ext):
return settings.page_url_base.format(
page=page_id,
id=image_id(file),
size=size,
ext=ext
)
return img_url_fn