Sync refactoring: split model to model + controller
This commit is contained in:
1 parent
96040267bb
commit
7bf49680cf
3 files changed
+23
-28
No files matched your search
@@ -6,7 +6,7 @@ from sync.data.yandexdisk import YDProvider
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from sync.models.Page import Page
|
||||
from sync.models.Page import Page, PageController
|
||||
|
||||
|
||||
def init_logger(name: str, file: str):
|
||||
@@ -37,11 +37,12 @@ async def run_sync(sync: Sync, **kwargs):
|
||||
|
||||
|
||||
async def run(run_interval=0):
|
||||
io = lambda root: get_provider(settings.provider_name, root)
|
||||
provider = get_provider(settings.provider_name, settings.provider_root)
|
||||
controller = PageController(provider)
|
||||
|
||||
sync_pages = Sync(
|
||||
provider=io(settings.provider_root),
|
||||
model=Page,
|
||||
ctrl=controller,
|
||||
name='Page'
|
||||
)
|
||||
sync_pages.set_options(True, True, True)
|
||||
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import logging
|
||||
|
||||
import settings
|
||||
from sync import untouched
|
||||
from sync.data import Provider
|
||||
|
||||
|
||||
class Sync:
|
||||
def __init__(self, provider: Provider, model):
|
||||
def __init__(self, ctrl, name: str):
|
||||
super().__init__()
|
||||
|
||||
self.validate_urls = True
|
||||
@@ -16,11 +14,9 @@ class Sync:
|
||||
}
|
||||
self.__delete_query = lambda item: {'_id': item['_id']}
|
||||
|
||||
name = model.__name__
|
||||
self.logger = logging.getLogger('%s.%s' % (settings.name, name))
|
||||
|
||||
self.provider = provider
|
||||
self.model = model
|
||||
self.ctrl = ctrl
|
||||
self.filter_item_fn = lambda x: True
|
||||
|
||||
self.skip_unchanged = True
|
||||
@@ -37,9 +33,6 @@ class Sync:
|
||||
self.filter_item_fn = fn
|
||||
return self
|
||||
|
||||
async def clean(self):
|
||||
pass
|
||||
|
||||
async def build(self, item):
|
||||
args = self._get_build_args()
|
||||
await item.build(**args)
|
||||
@@ -83,7 +76,7 @@ class Sync:
|
||||
"""
|
||||
self.logger.info('Checking for update')
|
||||
|
||||
items = await self.model.scan(self.provider)
|
||||
items = await self.ctrl.get_items()
|
||||
self.logger.info('Found {} Item(s)'.format(len(items)))
|
||||
all_items = items
|
||||
|
||||
@@ -132,6 +125,3 @@ class Sync:
|
||||
if len(urls) != len(unique_urls):
|
||||
self.logger.error('URLs is not unique')
|
||||
raise Exception('URLs is not unique')
|
||||
|
||||
async def upload(self):
|
||||
pass
|
||||
@@ -30,27 +30,31 @@ def find(store, item_id: str):
|
||||
return None
|
||||
|
||||
|
||||
class Page(Model):
|
||||
@staticmethod
|
||||
async def find(query):
|
||||
class PageController:
|
||||
def __init__(self, provider):
|
||||
self.provider = provider
|
||||
|
||||
async def find(self, query):
|
||||
return store.find(query)
|
||||
|
||||
@staticmethod
|
||||
async def delete(query):
|
||||
async def delete_item(self, query):
|
||||
return store.find_one_and_delete(query)
|
||||
|
||||
@staticmethod
|
||||
async def scan(provider):
|
||||
async def get_items(self):
|
||||
scan_path = settings.dir_pages
|
||||
items = [
|
||||
Page.read(provider, path)
|
||||
for path in provider.scan(scan_path)
|
||||
if provider.is_dir(path)
|
||||
Page.read(self.provider, path)
|
||||
for path in self.provider.scan(scan_path)
|
||||
if self.provider.is_dir(path)
|
||||
]
|
||||
items = [i for i in items if i]
|
||||
|
||||
return items
|
||||
|
||||
# async def read(self, path: str):
|
||||
# return Page.read(self.provider, path)
|
||||
|
||||
|
||||
class Page(Model):
|
||||
@staticmethod
|
||||
def read(provider, path):
|
||||
"""
|
||||
|
||||
Reference in new issue
Block a user