Better import

This commit is contained in:
petr.kalis 2020-07-21 12:37:39 +02:00
parent 88b6bfa840
commit 574dc150a3
3 changed files with 32 additions and 16 deletions

View file

@ -4,8 +4,9 @@ import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient import errors
import random
from .abstract_provider import AbstractProvider
# If modifying these scopes, delete the file token.pickle.
from googleapiclient.http import MediaFileUpload
@ -13,7 +14,7 @@ SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly',
'https://www.googleapis.com/auth/drive.file'] # for write|delete
class GDriveHandler():
class GDriveHandler(AbstractProvider):
FOLDER_STR = 'application/vnd.google-apps.folder'
def __init__(self):
@ -172,16 +173,22 @@ class GDriveHandler():
media = MediaFileUpload(source_path,
mimetype='application/octet-stream',
resumable=True)
if not file:
file_metadata['parents'] = [folder_id] # update doesnt like parent
file = self.service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
else:
file = self.service.files().update(fileId=file["id"],
body=file_metadata,
media_body=media,
fields='id').execute()
try:
if not file:
# update doesnt like parent
file_metadata['parents'] = [folder_id]
file = self.service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
else:
file = self.service.files().update(fileId=file["id"],
body=file_metadata,
media_body=media,
fields='id').execute()
except errors.HttpError as ex:
if ex.resp['status'] == '404':
return False
raise
return file["id"]
@ -235,6 +242,14 @@ class GDriveHandler():
except Exception:
raise ValueError("Uknown folder id {}".format(id))
def list_folder(self, folder_path):
"""
List all files and subfolders of particular path non-recursively.
:param folder_path: absolut path on provider
:return: <list>
"""
pass
def list_folders(self):
""" Lists all folders in GDrive.
Used to build in-memory structure of path to folder ids model.

View file

@ -4,6 +4,7 @@ from .gdrive import GDriveHandler
class Providers(Enum):
GDRIVE = 'gdrive'
class ProviderFactory:
"""
Factory class as a creator of multiple cloud destination.
@ -24,4 +25,4 @@ class ProviderFactory:
return creator()
factory = ProviderFactory()
factory.register_provider('gdrive', GDriveHandler)
factory.register_provider('gdrive', GDriveHandler)

View file

@ -7,7 +7,7 @@ import asyncio
from enum import Enum
import datetime
from .providers import providers
from .providers import lib
log = Logger().get_logger("SyncServer")
@ -123,7 +123,7 @@ class SyncServer():
:return:
"""
await asyncio.sleep(0.1)
handler = providers.factory.get_provider(provider)
handler = lib.factory.get_provider(provider)
local_root = representation.get("context", {}).get("root")
if not local_root:
raise ValueError("Unknown local root for file {}")
@ -215,7 +215,7 @@ class SynchServerThread(threading.Thread):
sync_representations = self.module.get_sync_representations()
for provider in providers.factory.providers: # TODO clumsy
for provider in lib.factory.providers: # TODO clumsy
for sync in sync_representations:
files = sync.get("files") or {}
if files: