From 574dc150a38a04c195c9b7aa248445ee81e792b6 Mon Sep 17 00:00:00 2001 From: "petr.kalis" Date: Tue, 21 Jul 2020 12:37:39 +0200 Subject: [PATCH] Better import --- pype/modules/sync_server/providers/gdrive.py | 39 +++++++++++++------ .../providers/{providers.py => lib.py} | 3 +- pype/modules/sync_server/sync_server.py | 6 +-- 3 files changed, 32 insertions(+), 16 deletions(-) rename pype/modules/sync_server/providers/{providers.py => lib.py} (92%) diff --git a/pype/modules/sync_server/providers/gdrive.py b/pype/modules/sync_server/providers/gdrive.py index 27d38c8631..8d91887f3a 100644 --- a/pype/modules/sync_server/providers/gdrive.py +++ b/pype/modules/sync_server/providers/gdrive.py @@ -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: + """ + pass + def list_folders(self): """ Lists all folders in GDrive. Used to build in-memory structure of path to folder ids model. diff --git a/pype/modules/sync_server/providers/providers.py b/pype/modules/sync_server/providers/lib.py similarity index 92% rename from pype/modules/sync_server/providers/providers.py rename to pype/modules/sync_server/providers/lib.py index c537730f75..6b82ec927a 100644 --- a/pype/modules/sync_server/providers/providers.py +++ b/pype/modules/sync_server/providers/lib.py @@ -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) \ No newline at end of file +factory.register_provider('gdrive', GDriveHandler) diff --git a/pype/modules/sync_server/sync_server.py b/pype/modules/sync_server/sync_server.py index 4489ab063b..6a5fc0a488 100644 --- a/pype/modules/sync_server/sync_server.py +++ b/pype/modules/sync_server/sync_server.py @@ -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: