[Bf-extensions-cvs] [2f9bd3f0] master: BlenderKit: enable uploading private assets -fix queue, the handler was getting lost after file load. -some comments

Vilem Duha noreply at git.blender.org
Sun May 19 16:02:55 CEST 2019


Commit: 2f9bd3f0ffff093dfc5bdfdce0aeaada243423ae
Author: Vilem Duha
Date:   Tue Apr 30 00:55:11 2019 +0200
Branches: master
https://developer.blender.org/rBA2f9bd3f0ffff093dfc5bdfdce0aeaada243423ae

BlenderKit: enable uploading private assets
-fix queue, the handler was getting lost after file load.
-some comments

===================================================================

M	blenderkit/__init__.py
M	blenderkit/categories.py
M	blenderkit/oauth.py
M	blenderkit/search.py
M	blenderkit/tasks_queue.py
M	blenderkit/ui_panels.py
M	blenderkit/upload.py
M	blenderkit/utils.py

===================================================================

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
 
+ at 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:



More information about the Bf-extensions-cvs mailing list