sync update: moving to ./sync.py as entry point

This commit is contained in:
tmshv committed 2016-08-05 17:54:00 +03:00
1 parent 6f144fb6de
commit 13a3a02613
8 files changed
+456 -83

No files matched your search

+11 -3
View File
@@ -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
+20 -4
View File
@@ -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))
+64
View File
@@ -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'