From 2f9bd3f0ffff093dfc5bdfdce0aeaada243423ae Mon Sep 17 00:00:00 2001 From: Vilem Duha Date: Tue, 30 Apr 2019 00:55:11 +0200 Subject: BlenderKit: enable uploading private assets -fix queue, the handler was getting lost after file load. -some comments --- blenderkit/__init__.py | 8 +++++++- blenderkit/categories.py | 2 -- blenderkit/oauth.py | 4 +++- blenderkit/search.py | 4 ++-- blenderkit/tasks_queue.py | 27 +++++++++++++++++++-------- blenderkit/ui_panels.py | 12 +++++++----- blenderkit/upload.py | 3 +++ blenderkit/utils.py | 9 ++++++--- 8 files changed, 47 insertions(+), 22 deletions(-) (limited to 'blenderkit') diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py index 929a900a..c9f80c1e 100644 --- a/blenderkit/__init__.py +++ b/blenderkit/__init__.py @@ -449,6 +449,10 @@ class BlenderKitCommonUploadProps(object): default='royalty_free', description='License. Please read our help for choosing the right licenses', ) + is_private: BoolProperty(name="Asset is Private", + description="If not marked private, your asset will go into the validation process automatically\n" + "Private assets are limited by quota.", + default=False) is_free: BoolProperty(name="Free for Everyone", description="You consent you want to release this asset as free for everyone", @@ -1405,12 +1409,12 @@ def register(): ui.register_ui() ui_panels.register_ui_panels() bg_blender.register() - bpy.app.handlers.load_post.append(scene_load) utils.load_prefs() overrides.register_overrides() oauth.register() tasks_queue.register() + bpy.app.handlers.load_post.append(scene_load) def unregister(): @@ -1439,3 +1443,5 @@ def unregister(): for cls in classes: bpy.utils.unregister_class(cls) + + bpy.app.handlers.load_post.remove(scene_load) diff --git a/blenderkit/categories.py b/blenderkit/categories.py index e2dfed3d..794b15b1 100644 --- a/blenderkit/categories.py +++ b/blenderkit/categories.py @@ -58,8 +58,6 @@ def copy_categories(): def fetch_categories(API_key): - BLENDERKIT_API_MAIN = "https://www.blenderkit.com/api/v1/" - url = paths.get_api_url() + 'categories/' headers = utils.get_headers(API_key) diff --git a/blenderkit/oauth.py b/blenderkit/oauth.py index f2cdf3e8..b0359157 100644 --- a/blenderkit/oauth.py +++ b/blenderkit/oauth.py @@ -26,7 +26,7 @@ from urllib.parse import parse_qs, urlparse import requests import threading import blenderkit -from blenderkit import tasks_queue, utils, paths +from blenderkit import tasks_queue, utils, paths, search CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F" PORTS = [62485, 1234] @@ -125,7 +125,9 @@ def write_tokens(auth_token, refresh_token): preferences.api_key_refresh = refresh_token preferences.login_attempt = False props = utils.get_search_props() + props.report = 'Login success!' + search.get_profile() class RegisterLoginOnline(bpy.types.Operator): diff --git a/blenderkit/search.py b/blenderkit/search.py index 45865391..9f19bf41 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -560,7 +560,7 @@ def write_profile(adata): adata['user']['sumAssetFilesSize'] = str(round(adata['user']['sumAssetFilesSize'] / 1024 / 1024)) + ' Mb' adata['user']['sumPrivateAssetFilesSize'] = str( round(adata['user']['sumPrivateAssetFilesSize'] / 1024 / 1024)) + ' Mb' - adata['user']['remainingPrivateQuota'] = str(round(adata['user']['remainingPrivateQuota'] / 1024 / 1024)) + ' Mb' + adata['user']['remainingPrivateQuota'] = str(max(0,round(adata['user']['remainingPrivateQuota'] / 1024 / 1024))) + ' Mb' bpy.context.window_manager['bkit profile'] = adata @@ -571,7 +571,7 @@ def fetch_profile(api_key): headers = utils.get_headers(api_key) r = requests.get(a_url, headers=headers) adata = r.json() - if not hasattr(adata, 'user'): + if adata.get('user') is None: utils.p(adata) utils.p('getting profile failed') return diff --git a/blenderkit/tasks_queue.py b/blenderkit/tasks_queue.py index 55029753..2e09dcfd 100644 --- a/blenderkit/tasks_queue.py +++ b/blenderkit/tasks_queue.py @@ -1,13 +1,22 @@ import bpy +from bpy.app.handlers import persistent import queue from blenderkit import utils +@persistent +def scene_load(context): + if not(bpy.app.timers.is_registered(queue_worker)): + bpy.app.timers.register(queue_worker) + def get_queue(): - if not hasattr(bpy.types.VIEW3D_PT_blenderkit_unified, 'task_queue'): - bpy.types.VIEW3D_PT_blenderkit_unified.task_queue = queue.Queue() - return bpy.types.VIEW3D_PT_blenderkit_unified.task_queue + # we pick just a random one of blender types, to try to get a persistent queue + t = bpy.types.Scene + + if not hasattr(t, 'task_queue'): + t.task_queue = queue.Queue() + return t.task_queue def add_task(task): @@ -15,12 +24,12 @@ def add_task(task): q.put(task) -def every_2_seconds(): +def queue_worker(): q = get_queue() - + utils.p('queue timer') while not q.empty(): utils.p('as a task: ') - q = bpy.types.VIEW3D_PT_blenderkit_unified.task_queue + print('window manager', bpy.context.window_manager) task = q.get() try: task[0](*task[1]) @@ -31,8 +40,10 @@ def every_2_seconds(): def register(): - bpy.app.timers.register(every_2_seconds) + bpy.app.handlers.load_post.append(scene_load) + def unregister(): - bpy.app.timers.unregister(every_2_seconds) + bpy.app.handlers.load_post.remove(scene_load) + diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index f97a9088..478a1b54 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -134,9 +134,11 @@ def draw_upload_common(layout, props, asset_type, context): if asset_type == 'MODEL' and props.subcategory != '': # by now block this for other asset types. layout.prop(props, 'subcategory') + layout.prop(props, 'is_private') layout.prop(props, 'license') + def poll_local_panels(): user_preferences = bpy.context.preferences.addons['blenderkit'].preferences return user_preferences.panel_behaviour == 'BOTH' or user_preferences.panel_behaviour == 'LOCAL' @@ -414,9 +416,11 @@ class VIEW3D_PT_blenderkit_profile(Panel): me = me['user'] layout.label(text='User: %s %s' % (me['firstName'], me['lastName'])) layout.label(text='Email: %s' % (me['email'])) - layout.label(text='Public assets sum: %s ' % (me['sumAssetFilesSize'])) - layout.label(text='Private assets sum: %s ' % (me['sumPrivateAssetFilesSize'])) + layout.label(text='Public assets: %s ' % (me['sumAssetFilesSize'])) + layout.label(text='Private assets: %s ' % (me['sumPrivateAssetFilesSize'])) layout.label(text='Remaining private storage: %s' % (me['remainingPrivateQuota'])) + layout.operator("wm.url_open", text="See my uploads", + icon='URL').url = paths.BLENDERKIT_USER_ASSETS layout.operator("wm.blenderkit_logout", text="Logout", icon='URL') @@ -621,9 +625,7 @@ class VIEW3D_PT_blenderkit_unified(Panel): label_multiline(layout, text='switch to paint or sculpt mode.', width=context.region.width) return - # blocking this now. It became terribly slow. - layout.operator("wm.url_open", text="See my uploads", - icon='URL').url = paths.BLENDERKIT_USER_ASSETS + elif ui_props.down_up == 'UPLOAD': if not ui_props.assetbar_on: text = 'Show asset preview - ;' diff --git a/blenderkit/upload.py b/blenderkit/upload.py index 6a512e4a..15c0bf83 100644 --- a/blenderkit/upload.py +++ b/blenderkit/upload.py @@ -445,6 +445,7 @@ def get_upload_data(self, context, asset_type): upload_data["category"] = props.subcategory upload_data["license"] = props.license upload_data["isFree"] = props.is_free + upload_data["isPrivate"] = props.is_private upload_data["token"] = user_preferences.api_key if props.asset_base_id != '': @@ -570,6 +571,7 @@ def start_upload(self, context, asset_type, as_new, metadata_only): try: r = requests.post(url, json=json_metadata, headers=headers, verify=True) # files = files, props.upload_state = 'uploaded metadata' + utils.p(r.text) except requests.exceptions.RequestException as e: print(e) props.upload_state = str(e) @@ -592,6 +594,7 @@ def start_upload(self, context, asset_type, as_new, metadata_only): props.uploading = False return {'CANCELLED'} + # props.upload_state = 'step 1' if metadata_only: props.uploading = False diff --git a/blenderkit/utils.py b/blenderkit/utils.py index 1a1d4ed7..13b11481 100644 --- a/blenderkit/utils.py +++ b/blenderkit/utils.py @@ -267,15 +267,18 @@ def get_brush_props(context): return brush.blenderkit return None -def p(text): - if bpy.app.debug != 0: - print(p) +def p(text,text1 = '',text2 = '',text3 = '',text4 = '',text5 = ''): + '''debug printing depending on blender's debug value''' + if bpy.app.debug_value != 0: + print(text, text1, text2, text3, text4,text5) def pprint(data): + '''pretty print jsons''' print(json.dumps(data, indent=4, sort_keys=True)) def get_hierarchy(ob): + '''get all objects in a tree''' obs = [] doobs = [ob] while len(doobs) > 0: -- cgit v1.2.3