diff options
author | Vilém Duha <vilda.novak@gmail.com> | 2020-12-22 16:45:40 +0300 |
---|---|---|
committer | Vilém Duha <vilda.novak@gmail.com> | 2020-12-22 16:45:51 +0300 |
commit | 10ae0f7a5a84b0d9ac8ccbb4abe97e42ab6ca9d1 (patch) | |
tree | b742a78c088cd9baa7d1252054f5595f700dbc4b /blenderkit/upload_bg.py | |
parent | 105d485a0327976e12b34f23373079b3b2c4d834 (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.py | 142 |
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) |