[sync] updated: config based; async loop; Documents adopted to new system
This commit is contained in:
1 parent
b0b518fd8c
commit
06965bebee
23 files changed
+1078
-346
No files matched your search
+70
-22
@@ -1,6 +1,9 @@
|
||||
import settings
|
||||
from db import db, collection
|
||||
from sync.album import sync_albums
|
||||
from sync.core import Sync
|
||||
from sync.core.SyncDocument import SyncDocument
|
||||
from sync.data import Provider
|
||||
from sync.data.fs import FSProvider
|
||||
from sync.data.yandexdisk import YDProvider
|
||||
from sync.document import sync_documents
|
||||
@@ -11,6 +14,65 @@ from sync.schedule import sync_schedules
|
||||
from utils.fn import lprint_json
|
||||
from utils.image import thumbnail
|
||||
|
||||
import asyncio
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
# create logger with 'spam_application'
|
||||
logger = logging.getLogger(settings.name)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
# create file handler which logs even debug messages
|
||||
fh = logging.FileHandler('hudozka.log')
|
||||
fh.setLevel(logging.DEBUG)
|
||||
|
||||
# create console handler with a higher log level
|
||||
ch = logging.StreamHandler()
|
||||
# ch.setLevel(logging.ERROR)
|
||||
ch.setLevel(logging.DEBUG)
|
||||
|
||||
# create formatter and add it to the handlers
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
fh.setFormatter(formatter)
|
||||
ch.setFormatter(formatter)
|
||||
|
||||
# add the handlers to the logger
|
||||
logger.addHandler(fh)
|
||||
logger.addHandler(ch)
|
||||
|
||||
|
||||
async def main(sync: Sync):
|
||||
await sync.run()
|
||||
|
||||
|
||||
async def run(run_interval=0):
|
||||
io = lambda root: get_provider(settings.provider_name, root)
|
||||
c = collection
|
||||
|
||||
documents = SyncDocument(
|
||||
provider=io(settings.dir_documents),
|
||||
collection=c(settings.collection_documents),
|
||||
sizes=settings.image_sizes,
|
||||
)
|
||||
|
||||
while True:
|
||||
# main(io(settings.dir_documents), sync_documents, settings.collection_documents)
|
||||
# main(io(settings.dir_awards), sync_documents, settings.collection_awards)
|
||||
# main(io(settings.dir_schedules), sync_schedules, settings.collection_schedules)
|
||||
# main(io(settings.dir_articles), sync_posts, settings.collection_articles)
|
||||
# main(io(settings.dir_collective), sync_persons, settings.collection_collective)
|
||||
# main(io(settings.dir_gallery), sync_albums, settings.collection_albums)
|
||||
# main(io(settings.dir_pages), sync_pages, settings.collection_pages)
|
||||
|
||||
await asyncio.wait([
|
||||
main(documents),
|
||||
])
|
||||
|
||||
if run_interval == 0:
|
||||
break
|
||||
else:
|
||||
await asyncio.sleep(run_interval)
|
||||
|
||||
|
||||
def get_provider(provider_type, root):
|
||||
if provider_type == 'fs':
|
||||
@@ -20,27 +82,13 @@ def get_provider(provider_type, root):
|
||||
return None
|
||||
|
||||
|
||||
def main(provider, fn, collection_name):
|
||||
if provider:
|
||||
print('SYNC: %s' % (collection_name.upper()))
|
||||
u, d = fn(provider, collection(collection_name), update=settings.do_update, delete=settings.do_update)
|
||||
|
||||
print('DELETE %s: %s' % (collection_name.upper(), 'NO' if not settings.do_delete else str(len(d))))
|
||||
lprint_json(d)
|
||||
|
||||
print('UPDATE %s: %s' % (collection_name.upper(), 'NO' if not settings.do_update else str(len(u))))
|
||||
lprint_json(u)
|
||||
|
||||
print('')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
io = lambda root: get_provider(settings.sync_provider_type, root)
|
||||
interval = 0
|
||||
# interval = 5
|
||||
|
||||
main(io(settings.dir_documents), sync_documents, settings.collection_documents)
|
||||
main(io(settings.dir_awards), sync_documents, settings.collection_awards)
|
||||
main(io(settings.dir_schedules), sync_schedules, settings.collection_schedules)
|
||||
main(io(settings.dir_articles), sync_posts, settings.collection_articles)
|
||||
main(io(settings.dir_collective), sync_persons, settings.collection_collective)
|
||||
main(io(settings.dir_gallery), sync_albums, settings.collection_albums)
|
||||
main(io(settings.dir_pages), sync_pages, settings.collection_pages)
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(run(interval))
|
||||
loop.close()
|
||||
|
||||
# Да, 968×504 пискеля это меньше минимально рекомендованных Фейсбуком 1200×630.
|
||||
# Зато при таком размере и ратио картинку нигде не кропят, и выглядит она отлично.
|
||||
Reference in new issue
Block a user