[Bf-blender-cvs] [3d755243a27] asset-engine: Add first edit operation on Amber repository - we can now remove an asset, houra :P

Bastien Montagne noreply at git.blender.org
Mon Aug 21 17:38:11 CEST 2017


Commit: 3d755243a2758ab83b5a432823f0f4b96e12cf51
Author: Bastien Montagne
Date:   Mon Aug 21 17:37:12 2017 +0200
Branches: asset-engine
https://developer.blender.org/rB3d755243a2758ab83b5a432823f0f4b96e12cf51

Add first edit operation on Amber repository - we can now remove an asset, houra :P

Also fixed more various issues.

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

M	release/scripts/startup/bl_operators/amber/engine.py
M	release/scripts/startup/bl_operators/amber/operators.py
M	release/scripts/startup/bl_operators/amber/repository.py
M	release/scripts/startup/bl_operators/amber/ui.py
M	release/scripts/startup/bl_operators/amber/utils.py

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

diff --git a/release/scripts/startup/bl_operators/amber/engine.py b/release/scripts/startup/bl_operators/amber/engine.py
index e8d95a400a8..37a3626d049 100644
--- a/release/scripts/startup/bl_operators/amber/engine.py
+++ b/release/scripts/startup/bl_operators/amber/engine.py
@@ -35,7 +35,6 @@ from bpy.props import (
         )
 
 import concurrent.futures as futures
-import json
 import os
 import stat
 import time
diff --git a/release/scripts/startup/bl_operators/amber/operators.py b/release/scripts/startup/bl_operators/amber/operators.py
index 6bd59617466..02f55327595 100644
--- a/release/scripts/startup/bl_operators/amber/operators.py
+++ b/release/scripts/startup/bl_operators/amber/operators.py
@@ -21,5 +21,71 @@
 # Note: This will be a simple addon later, but until it gets to master, it's simpler to have it
 #       as a startup module!
 
+import bpy
+from bpy.types import (
+        Operator,
+        )
+#~ from bpy.props import (
+        #~ BoolProperty,
+        #~ CollectionProperty,
+        #~ EnumProperty,
+        #~ IntProperty,
+        #~ IntVectorProperty,
+        #~ PointerProperty,
+        #~ StringProperty,
+        #~ )
 
-classes = ()
+import os
+
+from . import (repository, utils)
+
+from .repository import (
+        AmberDataRepository,
+        )
+
+
+class AmberOps():
+    """Base Amber asset engine operators class."""
+    @classmethod
+    def poll(cls, context):
+        space = context.space_data
+        if space and space.type == 'FILE_BROWSER':
+            ae = space.asset_engine
+            if ae and space.asset_engine_type == "AssetEngineAmber":
+                return True
+        return False
+
+
+class AmberOpsEditing(AmberOps):
+    """Base Amber asset engine operators class for editing repositories."""
+    @classmethod
+    def poll(cls, context):
+        space = context.space_data
+        if space and space.type == 'FILE_BROWSER':
+            return (space.active_operator is None) and AmberOps.poll(context)
+        return False
+
+
+class AmberOpsAssetDelete(Operator, AmberOpsEditing):
+    """Delete active Amber asset from the repository (WARNING! No undo!)"""
+    bl_idname = "amber.asset_delete"
+    bl_label = "Delete Asset"
+    bl_options = set()
+
+    def execute(self, context):
+        ae = context.space_data.asset_engine
+        ae.repository_pg.assets.remove(ae.repository_pg.asset_index_active)
+
+        repository = getattr(ae, "repository", None)
+        if repository is None:
+            repository = ae.repository = AmberDataRepository()
+        repository.from_pg(ae.repository_pg)
+
+        repository.wrt_repo(os.path.join(ae.repository.path, utils.AMBER_DB_NAME), ae.repository.to_dict())
+
+        return {'FINISHED'}
+
+
+classes = (
+    AmberOpsAssetDelete,
+    )
diff --git a/release/scripts/startup/bl_operators/amber/repository.py b/release/scripts/startup/bl_operators/amber/repository.py
index 1f499ea5b7e..3691ffbfade 100644
--- a/release/scripts/startup/bl_operators/amber/repository.py
+++ b/release/scripts/startup/bl_operators/amber/repository.py
@@ -40,7 +40,6 @@ import json
 import os
 import stat
 import time
-import random
 
 from . import utils
 
@@ -97,7 +96,7 @@ class AmberDataTagPG(PropertyGroup):
             removed_tags = set(t.name for t in pg) - set(subset or tags)
             added_tags = set(subset or tags) - set(t.name for t in pg)
             for tag_name in removed_tags:
-                del pg[tag_name]
+                pg.remove(pg.find(tag_name))
             for tag_pg in pg:
                 tag_pg.priority = tags[tag_pg.name]
             for tag_name in added_tags:
@@ -148,7 +147,7 @@ class AmberDataAssetRevision():
                 "timestamp": rev.timestamp,
                 "path": rev.path,
             }
-            for rev in revisions
+            for rev in revisions.values()
         }
 
         return revisions_dict
@@ -241,7 +240,7 @@ class AmberDataAssetVariant():
                 "revisions": AmberDataAssetRevision.to_dict(var.revisions),
                 "revision_default": utils.uuid_pack(var.revision_default.uuid),
             }
-            for var in variants
+            for var in variants.values()
         }
 
         return variants_dict
@@ -354,7 +353,7 @@ class AmberDataAsset():
                 "variants": AmberDataAssetVariant.to_dict(asset.variants),
                 "variant_default": utils.uuid_pack(asset.variant_default.uuid),
             }
-            for asset in assets
+            for asset in assets.values()
         }
 
         return entries_dict
@@ -459,9 +458,9 @@ class AmberDataRepository:
         return repo_dict
 
     @classmethod
-    def wrt_repo(db_path, repo_dict):
+    def wrt_repo(cls, db_path, repo_dict):
         with open(db_path, 'w') as db_f:
-            json.dump(repo_dict, db_f)
+            json.dump(repo_dict, db_f, indent=4)
 
     def from_dict(self, repo_dict, root_path):
         self.clear()
diff --git a/release/scripts/startup/bl_operators/amber/ui.py b/release/scripts/startup/bl_operators/amber/ui.py
index 6b9059387ae..21af9f8fc0a 100644
--- a/release/scripts/startup/bl_operators/amber/ui.py
+++ b/release/scripts/startup/bl_operators/amber/ui.py
@@ -46,7 +46,7 @@ class AmberPanelEditing(AmberPanel):
     def poll(cls, context):
         space = context.space_data
         if space and space.type == 'FILE_BROWSER':
-            return (space.active_operator is None) and super(cls).poll(context)
+            return (space.active_operator is None) and AmberPanel.poll(context)
         return False
 
 
@@ -158,10 +158,11 @@ class AMBER_PT_assets(Panel, AmberPanel):
     def draw(self, context):
         ae = context.space_data.asset_engine
 
-        # Note: This is *ultra-primitive*!
-        #       A good UI will most likely need new widget option anyway (template). Or maybe just some UIList...
-        #~ self.layout.props_enum(ae, "tags")
-        self.layout.template_list("AMBER_UL_assets", "", ae.repository_pg, "assets", ae.repository_pg, "asset_index_active")
+        row = self.layout.row()
+        row.template_list("AMBER_UL_assets", "", ae.repository_pg, "assets", ae.repository_pg, "asset_index_active")
+
+        col = row.column()
+        col.operator("AMBER_OT_asset_delete", text="", icon='ZOOMOUT')
 
 
 classes = (
diff --git a/release/scripts/startup/bl_operators/amber/utils.py b/release/scripts/startup/bl_operators/amber/utils.py
index 8f669de6347..adb20cc25a6 100644
--- a/release/scripts/startup/bl_operators/amber/utils.py
+++ b/release/scripts/startup/bl_operators/amber/utils.py
@@ -91,7 +91,7 @@ def uuid_unpack(uuid_hexstr):
 
 
 def uuid_pack(uuid_iv4):
-    return binascii.hexlify(struct.pack("!iiii", *uuid_iv4))
+    return binascii.hexlify(struct.pack("!iiii", *uuid_iv4)).decode()
 
 
 # XXX Hack, once this becomes a real addon we'll just use addons' config system, for now store that in some own config.



More information about the Bf-blender-cvs mailing list