Files
hudozka/utils/Sync/sync/data/__init__.py
T
2017-02-21 17:53:41 +03:00

108 lines
2.2 KiB
Python

import os
from io import BytesIO
import requests
from utils.fn import combine, lmap
class Provider:
def __init__(self, root):
super().__init__()
self.root = root
def read(self, path):
return BytesIO(bytes())
def scan(self, path):
return []
def glob(self, pattr):
return []
def type_filter(self, path, ext):
return []
def copy(self, path, out):
pass
def hash(self, path):
return None
def size(self, path):
return 0
def exists(self, path):
return True
def get_abs(self, path):
a = os.path.join(self.root, path)
return os.path.normpath(a)
def get_rel(self, path):
rel = os.path.relpath(path, self.root)
return rel
def get_local(self, path):
return path
def is_dir(self, path):
return False
def scan_subdirs(provider, ext, path='.'):
"""
Creates flat list of files with specific ext
It iterates only one level of sub directories
:param provider: instance of Provider
:param ext: file extension like .jpg of .pdf for file filtering
:param path: optional path prefix
:return: list of files relative to provider.root
"""
items = provider.scan(path)
items = list(filter(
lambda i: provider.is_dir(i),
items
))
items = lmap(
lambda folder: provider.type_filter(folder, ext),
items
)
items = combine(items)
return items
def get_data(provider, path, transform):
data = provider.read(path)
return transform(data)
def list_images(provider, path):
image_types = ['.jpg', '.JPG', '.png', '.PNG']
return combine(lmap(
lambda ext: provider.type_filter(path, ext),
image_types
))
def upload(file_path, relative_path):
"""
/path/to/file, /url/path -> https://static.shlisselburg.org/art/url/path
:param file_path:
:param relative_path:
:return:
"""
files = {'file': open(file_path, 'rb')}
url = 'https://static.shlisselburg.org/upload/art{}'.format(relative_path)
r = requests.put(
url=url,
files=files,
auth=('uploader', '1207690962638465')
)
if r.status_code == 200:
return url
else:
return None