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:
authorVilém Duha <vilda.novak@gmail.com>2020-12-22 16:45:40 +0300
committerVilém Duha <vilda.novak@gmail.com>2020-12-22 16:45:51 +0300
commit10ae0f7a5a84b0d9ac8ccbb4abe97e42ab6ca9d1 (patch)
treeb742a78c088cd9baa7d1252054f5595f700dbc4b /blenderkit/upload_bg.py
parent105d485a0327976e12b34f23373079b3b2c4d834 (diff)
BlenderKit: multiple improvements:
HDR and scene asset types - These are now available when user enables experimental features in addon preferences. Refactor Upload - no Blender instance isn't launched when not needed and everything happens in a thread, so no waiting for the user when e.g. updating metadata. improve pasted asset_id string Change asset type picking interface to fit more asset types Notify user about brush mode needs Update categories file
Diffstat (limited to 'blenderkit/upload_bg.py')
-rw-r--r--blenderkit/upload_bg.py142
1 files changed, 56 insertions, 86 deletions
diff --git a/blenderkit/upload_bg.py b/blenderkit/upload_bg.py
index a0e95535..74ae8906 100644
--- a/blenderkit/upload_bg.py
+++ b/blenderkit/upload_bg.py
@@ -25,8 +25,10 @@ if "bpy" in locals():
bg_blender = reload(bg_blender)
utils = reload(utils)
rerequests = reload(rerequests)
+ tasks_queue = reload(tasks_queue)
+ ui = reload(ui)
else:
- from blenderkit import paths, append_link, bg_blender, utils, rerequests
+ from blenderkit import paths, append_link, bg_blender, utils, rerequests, tasks_queue, ui
import sys, json, os, time
import requests
@@ -66,7 +68,9 @@ class upload_in_chunks(object):
break
self.readsofar += len(data)
percent = self.readsofar * 1e2 / self.totalsize
- bg_blender.progress('uploading %s' % self.report_name, percent)
+ tasks_queue.add_task((ui.add_report, (f"Uploading {self.report_name} {percent}%",)))
+
+ # bg_blender.progress('uploading %s' % self.report_name, percent)
# sys.stderr.write("\r{percent:3.0f}%".format(percent=percent))
yield data
@@ -77,7 +81,10 @@ class upload_in_chunks(object):
def upload_file(upload_data, f):
headers = utils.get_headers(upload_data['token'])
version_id = upload_data['id']
- bg_blender.progress(f"uploading {f['type']} {os.path.basename(f['file_path'])}")
+
+ message = f"uploading {f['type']} {os.path.basename(f['file_path'])}"
+ tasks_queue.add_task((ui.add_report, (message,)))
+
upload_info = {
'assetId': version_id,
'fileType': f['type'],
@@ -100,14 +107,17 @@ def upload_file(upload_data, f):
data=upload_in_chunks(f['file_path'], chunk_size, f['type']),
stream=True, verify=True)
- if 250>upload_response.status_code >199:
+ if 250 > upload_response.status_code > 199:
uploaded = True
else:
print(upload_response.text)
- bg_blender.progress(f'Upload failed, retry. {a}')
+ message = f"Upload failed, retry. File : {f['type']} {os.path.basename(f['file_path'])}"
+ tasks_queue.add_task((ui.add_report, (message,)))
+
except Exception as e:
print(e)
- bg_blender.progress('Upload %s failed, retrying' % f['type'])
+ message = f"Upload failed, retry. File : {f['type']} {os.path.basename(f['file_path'])}"
+ tasks_queue.add_task((ui.add_report, (message,)))
time.sleep(1)
# confirm single file upload to bkit server
@@ -115,7 +125,7 @@ def upload_file(upload_data, f):
upload_done_url = paths.get_api_url() + 'uploads_s3/' + upload['id'] + '/upload-file/'
upload_response = rerequests.post(upload_done_url, headers=headers, verify=True)
- bg_blender.progress('finished uploading')
+ tasks_queue.add_task((ui.add_report, (f"Finished file upload{os.path.basename(f['file_path'])}",)))
return uploaded
@@ -127,13 +137,13 @@ def upload_files(upload_data, files):
uploaded = upload_file(upload_data, f)
if not uploaded:
uploaded_all = False
- bg_blender.progress('finished uploading')
+ tasks_queue.add_task((ui.add_report, (f"Uploaded all files for asset {upload_data['name']}",)))
return uploaded_all
if __name__ == "__main__":
try:
- bg_blender.progress('preparing scene - append data')
+ # bg_blender.progress('preparing scene - append data')
with open(BLENDERKIT_EXPORT_DATA, 'r') as s:
data = json.load(s)
@@ -141,84 +151,44 @@ if __name__ == "__main__":
export_data = data['export_data']
upload_data = data['upload_data']
- upload_set = data['upload_set']
- if 'MAINFILE' in upload_set:
- bpy.data.scenes.new('upload')
- for s in bpy.data.scenes:
- if s.name != 'upload':
- bpy.data.scenes.remove(s)
-
- if export_data['type'] == 'MODEL':
- obnames = export_data['models']
- main_source, allobs = append_link.append_objects(file_name=data['source_filepath'],
- obnames=obnames,
- rotation=(0, 0, 0))
- g = bpy.data.collections.new(upload_data['name'])
- for o in allobs:
- g.objects.link(o)
- bpy.context.scene.collection.children.link(g)
- if export_data['type'] == 'SCENE':
- sname = export_data['scene']
- main_source = append_link.append_scene(file_name=data['source_filepath'],
- scenename=sname)
- bpy.data.scenes.remove(bpy.data.scenes['upload'])
- main_source.name = sname
- elif export_data['type'] == 'MATERIAL':
- matname = export_data['material']
- main_source = append_link.append_material(file_name=data['source_filepath'], matname=matname)
-
- elif export_data['type'] == 'BRUSH':
- brushname = export_data['brush']
- main_source = append_link.append_brush(file_name=data['source_filepath'], brushname=brushname)
-
- bpy.ops.file.pack_all()
-
- main_source.blenderkit.uploading = False
- fpath = os.path.join(data['temp_dir'], upload_data['assetBaseId'] + '.blend')
-
- bpy.ops.wm.save_as_mainfile(filepath=fpath, compress=True, copy=False)
- os.remove(data['source_filepath'])
-
- bg_blender.progress('preparing scene - open files')
-
- files = []
- if 'THUMBNAIL' in upload_set:
- files.append({
- "type": "thumbnail",
- "index": 0,
- "file_path": export_data["thumbnail_path"]
- })
- if 'MAINFILE' in upload_set:
- files.append({
- "type": "blend",
- "index": 0,
- "file_path": fpath
- })
-
- bg_blender.progress('uploading')
-
- uploaded = upload_files(upload_data, files)
-
- if uploaded:
- # mark on server as uploaded
- if 'MAINFILE' in upload_set:
- confirm_data = {
- "verificationStatus": "uploaded"
- }
-
- url = paths.get_api_url() + 'assets/'
-
- headers = utils.get_headers(upload_data['token'])
-
- url += upload_data["id"] + '/'
-
- r = rerequests.patch(url, json=confirm_data, headers=headers, verify=True) # files = files,
-
- bg_blender.progress('upload finished successfully')
- else:
- bg_blender.progress('upload failed.')
+ bpy.data.scenes.new('upload')
+ for s in bpy.data.scenes:
+ if s.name != 'upload':
+ bpy.data.scenes.remove(s)
+
+ if upload_data['assetType'] == 'model':
+ obnames = export_data['models']
+ main_source, allobs = append_link.append_objects(file_name=export_data['source_filepath'],
+ obnames=obnames,
+ rotation=(0, 0, 0))
+ g = bpy.data.collections.new(upload_data['name'])
+ for o in allobs:
+ g.objects.link(o)
+ bpy.context.scene.collection.children.link(g)
+ elif upload_data['assetType'] == 'scene':
+ sname = export_data['scene']
+ main_source = append_link.append_scene(file_name=export_data['source_filepath'],
+ scenename=sname)
+ bpy.data.scenes.remove(bpy.data.scenes['upload'])
+ main_source.name = sname
+ elif upload_data['assetType'] == 'material':
+ matname = export_data['material']
+ main_source = append_link.append_material(file_name=export_data['source_filepath'], matname=matname)
+
+ elif upload_data['assetType'] == 'brush':
+ brushname = export_data['brush']
+ main_source = append_link.append_brush(file_name=export_data['source_filepath'], brushname=brushname)
+
+ bpy.ops.file.pack_all()
+
+ main_source.blenderkit.uploading = False
+ fpath = os.path.join(export_data['temp_dir'], upload_data['assetBaseId'] + '.blend')
+
+ bpy.ops.wm.save_as_mainfile(filepath=fpath, compress=True, copy=False)
+ os.remove(export_data['source_filepath'])
+
except Exception as e:
print(e)
- bg_blender.progress(e)
+ # bg_blender.progress(e)
sys.exit(1)