sync update: moving to ./sync.py as entry point
This commit is contained in:
1 parent
6f144fb6de
commit
13a3a02613
8 files changed
+456
-83
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
class Provider:
|
||||
@@ -6,8 +7,8 @@ class Provider:
|
||||
super().__init__()
|
||||
self.root = root
|
||||
|
||||
def open(self, path, mode):
|
||||
return ''
|
||||
def read(self, path):
|
||||
return BytesIO(bytes())
|
||||
|
||||
def scan(self, path):
|
||||
return []
|
||||
@@ -15,6 +16,9 @@ class Provider:
|
||||
def glob(self, pattr):
|
||||
return []
|
||||
|
||||
def type_filter(self, path, ext):
|
||||
return []
|
||||
|
||||
def copy(self, path, out):
|
||||
pass
|
||||
|
||||
@@ -29,4 +33,8 @@ class Provider:
|
||||
return os.path.normpath(abs)
|
||||
|
||||
def get_rel(self, path):
|
||||
return os.path.relpath(path, self.root)
|
||||
rel = os.path.relpath(path, self.root)
|
||||
return rel
|
||||
|
||||
def is_dir(self, path):
|
||||
return False
|
||||
@@ -4,18 +4,31 @@ from glob import glob
|
||||
from shutil import copyfile
|
||||
|
||||
from sync.data import Provider
|
||||
from utils.fn import lmap
|
||||
from utils.hash import hash_file
|
||||
|
||||
|
||||
class FSProvider(Provider):
|
||||
def open(self, path, mode):
|
||||
return open(self.get_abs(path), mode)
|
||||
def open(self, path):
|
||||
return open(self.get_abs(path), 'rb')
|
||||
|
||||
def scan(self, path):
|
||||
return os.scandir(self.get_abs(path))
|
||||
return lmap(
|
||||
self.get_rel,
|
||||
map(
|
||||
lambda i: i.path,
|
||||
os.scandir(self.get_abs(path))
|
||||
)
|
||||
)
|
||||
|
||||
def glob(self, pattr):
|
||||
return glob(self.get_abs(pattr))
|
||||
return lmap(self.get_rel, glob(self.get_abs(pattr)))
|
||||
|
||||
def type_filter(self, path, ext):
|
||||
return list(filter(
|
||||
lambda fn: os.path.splitext(fn)[1] == ext,
|
||||
self.scan(path)
|
||||
))
|
||||
|
||||
def hash(self, path):
|
||||
return hash_file(self.get_abs(path))
|
||||
@@ -28,3 +41,6 @@ class FSProvider(Provider):
|
||||
file = self.get_abs(path)
|
||||
return os.path.getsize(file)
|
||||
|
||||
def is_dir(self, path):
|
||||
return os.path.isdir(self.get_abs(path))
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import os
|
||||
|
||||
import re
|
||||
|
||||
import io
|
||||
import requests
|
||||
|
||||
from sync.data import Provider
|
||||
from utils.fn import lmap
|
||||
from yandexdisk import YDClient
|
||||
|
||||
|
||||
class YDProvider(Provider):
|
||||
def __init__(self, root, access_token):
|
||||
super().__init__(root)
|
||||
self.api = YDClient(access_token)
|
||||
|
||||
def read(self, path):
|
||||
remote = self.api.get_download_link(self.get_abs(path))
|
||||
url = remote['href']
|
||||
req = requests.get(url)
|
||||
data = req.content
|
||||
return io.BytesIO(data)
|
||||
|
||||
def scan(self, path):
|
||||
res = self.api.get_content(self.get_abs(path))
|
||||
files = []
|
||||
for item in res['_embedded']['items']:
|
||||
files.append(item['path'])
|
||||
|
||||
files = map(
|
||||
lambda fp: re.sub('disk:', '', fp),
|
||||
files
|
||||
)
|
||||
return lmap(self.get_rel, files)
|
||||
|
||||
def glob(self, pattr):
|
||||
return []
|
||||
|
||||
def type_filter(self, path, ext):
|
||||
return list(filter(
|
||||
lambda fn: os.path.splitext(fn)[1] == ext,
|
||||
self.scan(path)
|
||||
))
|
||||
|
||||
def hash(self, path):
|
||||
res = self.api.get_content(self.get_abs(path))
|
||||
return res['sha256']
|
||||
|
||||
def copy(self, path, out):
|
||||
data = self.read(path)
|
||||
f = open(out, 'wb')
|
||||
f.write(data.read())
|
||||
f.close()
|
||||
return out
|
||||
|
||||
def size(self, path):
|
||||
res = self.api.get_content(self.get_abs(path))
|
||||
return res['size']
|
||||
|
||||
def is_dir(self, path):
|
||||
res = self.api.get_content(self.get_abs(path))
|
||||
return res['type'] == 'dir'
|
||||
|
||||
Reference in new issue
Block a user