Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVilem Duha <vilem.duha@gmail.com>2019-03-29 19:52:47 +0300
committerVilem Duha <vilem.duha@gmail.com>2019-03-29 19:52:47 +0300
commit50ea2790f91788f247225be88b8e7a97c7bfb937 (patch)
treedf7e480fe061f594823e882dca0a0a7118f4a718 /blenderkit/categories.py
parent69c01cad71191de344dbfd66c45640d0ec281bc3 (diff)
BlenderKit initial commit.
BlenderKit add-on is the official addon of the BlenderKit service for Blender 3d. (www.blenderkit.com) It enables users to upload, search, download, and rate different assets for blender. It works together with BlenderKit server.
Diffstat (limited to 'blenderkit/categories.py')
-rw-r--r--blenderkit/categories.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/blenderkit/categories.py b/blenderkit/categories.py
new file mode 100644
index 00000000..e4ff9be1
--- /dev/null
+++ b/blenderkit/categories.py
@@ -0,0 +1,89 @@
+import requests
+import json
+import os
+from blenderkit import paths
+import shutil
+import threading
+
+
+def count_to_parent(parent):
+ for c in parent['children']:
+ count_to_parent(c)
+ parent['assetCount'] += c['assetCount']
+
+
+def fix_category_counts(categories):
+ for c in categories:
+ count_to_parent(c)
+
+
+def filter_category(category):
+ if category['assetCount'] < 1:
+ return True
+ else:
+ to_remove = []
+ for c in category['children']:
+ if filter_category(c):
+ to_remove.append(c)
+ for c in to_remove:
+ category['children'].remove(c)
+
+
+def filter_categories(categories):
+ for category in categories:
+ filter_category(category)
+
+
+def get_category(categories, cat_path=()):
+ for category in cat_path:
+ for c in categories:
+ if c['slug'] == category:
+ categories = c['children']
+ if category == cat_path[-1]:
+ return (c)
+ break;
+
+
+def copy_categories():
+ # this creates the categories system on only
+ tempdir = paths.get_temp_dir()
+ categories_filepath = os.path.join(tempdir, 'categories.json')
+ if not os.path.exists(categories_filepath):
+ source_path = paths.get_addon_file(subpath='data' + os.sep + 'categories.json')
+ print('attempt to copy categories from: %s to %s' % (categories_filepath, source_path))
+ try:
+ shutil.copy(source_path, categories_filepath)
+ except:
+ print("couldn't copy categories file")
+
+
+def fetch_categories(API_key):
+ BLENDERKIT_API_MAIN = "https://www.blenderkit.com/api/v1/"
+
+ url = paths.get_bkit_url() + 'categories/'
+
+ headers = {
+ "accept": "application/json",
+ "Authorization": "Bearer %s" % API_key
+ }
+ tempdir = paths.get_temp_dir()
+ categories_filepath = os.path.join(tempdir, 'categories.json')
+
+ try:
+ r = requests.get(url, headers=headers)
+ rdata = r.json()
+ categories = rdata['results']
+ fix_category_counts(categories)
+ # filter_categories(categories) #TODO this should filter categories for search, but not for upload. by now off.
+ with open(categories_filepath, 'w') as s:
+ json.dump(categories, s, indent=4)
+ except:
+ print('category fetching failed')
+ if not os.path.exists(categories_filepath):
+ source_path = paths.get_addon_file(subpath='data' + os.sep + 'categories.json')
+ shutil.copy(source_path, categories_filepath)
+
+
+def fetch_categories_thread(API_key):
+ cat_thread = threading.Thread(target=fetch_categories, args=([API_key]), daemon=True)
+ cat_thread.start()