130 lines
3.2 KiB
Python
130 lines
3.2 KiB
Python
import settings
|
|
from sync.core import Sync
|
|
from sync.core.SyncDocument import SyncDocument
|
|
from sync.data.fs import FSProvider
|
|
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
|
|
from sync.models.Person import Person
|
|
from sync.models.Schedule import Schedule
|
|
from sync.models.Settings import Settings
|
|
|
|
|
|
def init_logger(name: str, file: str):
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
# create file handler which logs even debug messages
|
|
fh = logging.FileHandler(file)
|
|
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 run_sync(sync: Sync):
|
|
await sync.run()
|
|
|
|
|
|
async def run(run_interval=0):
|
|
io = lambda root: get_provider(settings.provider_name, root)
|
|
|
|
sync_documents = SyncDocument(
|
|
provider=io(settings.provider_root),
|
|
sizes=settings.image_sizes,
|
|
)
|
|
sync_documents.strict_origin = True
|
|
|
|
sync_pages = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Page,
|
|
)
|
|
|
|
sync_persons = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Person,
|
|
)
|
|
sync_persons.validate_urls = False
|
|
|
|
sync_articles = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Article,
|
|
)
|
|
sync_articles.validate_urls = False
|
|
|
|
sync_schedules = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Schedule,
|
|
)
|
|
sync_schedules.validate_urls = False
|
|
|
|
sync_albums = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Album,
|
|
)
|
|
sync_albums.validate_urls = False
|
|
|
|
sync_settings = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Settings,
|
|
)
|
|
sync_settings.validate_urls = False
|
|
|
|
sync_images = Sync(
|
|
provider=io(settings.provider_root),
|
|
model=Image,
|
|
)
|
|
sync_images.strict_origin = True
|
|
|
|
while True:
|
|
await asyncio.wait([
|
|
run_sync(sync_documents),
|
|
run_sync(sync_pages),
|
|
run_sync(sync_persons),
|
|
run_sync(sync_articles),
|
|
run_sync(sync_schedules),
|
|
run_sync(sync_albums),
|
|
run_sync(sync_settings),
|
|
run_sync(sync_images),
|
|
])
|
|
|
|
if run_interval == 0:
|
|
break
|
|
else:
|
|
await asyncio.sleep(run_interval)
|
|
|
|
|
|
def get_provider(provider_type, root):
|
|
if provider_type == 'fs':
|
|
return FSProvider(root)
|
|
elif provider_type == 'yd':
|
|
return YDProvider(root, settings.yandex_disk_access_token)
|
|
return None
|
|
|
|
|
|
if __name__ == '__main__':
|
|
init_logger(settings.name, 'hudozka.log')
|
|
|
|
interval = settings.interval
|
|
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(run(interval))
|
|
loop.close()
|