Merge pull request #734 from pypeclub/bugfix/731-sync-server-crashes-with-missing-presets

#731 - better handling of missing presets
This commit is contained in:
Milan Kolar 2020-11-20 14:11:39 +01:00 committed by GitHub
commit 4415d5fb97
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 19 deletions

View file

@ -6,8 +6,8 @@ from googleapiclient import errors
from .abstract_provider import AbstractProvider
from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
from pype.api import Logger
from pype.lib import timeit
from pype.api import config
from ..utils import time_function
SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly',
'https://www.googleapis.com/auth/drive.file',
@ -119,7 +119,7 @@ class GDriveHandler(AbstractProvider):
return roots
@timeit
@time_function
def _build_tree(self, folders):
"""
Create in-memory structure resolving paths to folder id as
@ -467,7 +467,7 @@ class GDriveHandler(AbstractProvider):
"""
pass
@timeit
@time_function
def list_folders(self):
""" Lists all folders in GDrive.
Used to build in-memory structure of path to folder ids model.

View file

@ -1,5 +1,4 @@
from pype.api import config, Logger
from pype.lib import timeit
import threading
import asyncio
@ -14,6 +13,7 @@ import os
from avalon import io
from avalon.api import AvalonMongoDB
from .utils import time_function
log = Logger().get_logger("SyncServer")
@ -93,25 +93,25 @@ class SyncServer():
try:
self.presets = config.get_presets()["sync_server"]["config"]
self.sync_server_thread = SyncServerThread(self)
self.active_site = self.presets["active_site"]
self.remote_site = self.presets["remote_site"]
# try to activate providers, need to have valid credentials
self.active_sites = []
for provider in lib.factory.providers.keys():
for site in lib.factory.providers[provider][0].get_presets(). \
keys():
handler = lib.factory.get_provider(provider, site)
if handler.is_active():
self.active_sites.append((provider, site))
except KeyError:
log.debug(("There are not set presets for SyncServer."
" No credentials provided, no syncing possible").
format(str(self.presets)))
self.sync_server_thread = SyncServerThread(self)
self.active_site = self.presets["active_site"]
self.remote_site = self.presets["remote_site"]
# try to activate providers, need to have valid credentials
self.active_sites = []
for provider in lib.factory.providers.keys():
for site in lib.factory.providers[provider][0].get_presets().\
keys():
handler = lib.factory.get_provider(provider, site)
if handler.is_active():
self.active_sites.append((provider, site))
@property
def active_site(self):
"""
@ -166,7 +166,7 @@ class SyncServer():
"""
return self.connection.database.collection_names(False)
@timeit
@time_function
def get_sync_representations(self, collection, active_site, remote_site):
"""
Get representations that should be synced, these could be

View file

@ -0,0 +1,24 @@
import time
from pype.api import Logger
log = Logger().get_logger("SyncServer")
def time_function(method):
""" Decorator to print how much time function took.
For debugging.
Depends on presence of 'log' object
"""
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
if 'log_time' in kw:
name = kw.get('log_name', method.__name__.upper())
kw['log_time'][name] = int((te - ts) * 1000)
else:
log.debug('%r %2.2f ms' % (method.__name__, (te - ts) * 1000))
print('%r %2.2f ms' % (method.__name__, (te - ts) * 1000))
return result
return timed