[Bf-blender-cvs] [b2ff136f9d4] asset-engine: Fix various misc points, including Assets reloading, in Amber asset engine.

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


Commit: b2ff136f9d44c165e3bafe227115d6cd2bc1e2c5
Author: Bastien Montagne
Date:   Mon Aug 21 15:31:20 2017 +0200
Branches: asset-engine
https://developer.blender.org/rBb2ff136f9d44c165e3bafe227115d6cd2bc1e2c5

Fix various misc points, including Assets reloading, in Amber asset engine.

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

M	release/scripts/startup/bl_operators/amber/engine.py
M	release/scripts/startup/bl_operators/amber/repository.py

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

diff --git a/release/scripts/startup/bl_operators/amber/engine.py b/release/scripts/startup/bl_operators/amber/engine.py
index fb7c7d7a50c..17df5157cff 100644
--- a/release/scripts/startup/bl_operators/amber/engine.py
+++ b/release/scripts/startup/bl_operators/amber/engine.py
@@ -435,7 +435,7 @@ class AssetEngineAmber(AssetEngine):
                   (self.pretty_version(uuids.asset_engine_version), self.pretty_version()))
 #            print(entries.entries[:])
         for uuid in uuids.uuids:
-            repo_uuid = tuple(uuid.uuid_asset)[:2] + (0, 0)
+            repo_uuid = uuid.uuid_asset[:2] + (0, 0)
             assert(repo_uuid in utils.amber_repos)
             repo = self.repos.get(repo_uuid, None)
             if repo is None:
@@ -452,7 +452,7 @@ class AssetEngineAmber(AssetEngine):
             entry.type = {e.file_type}
             entry.blender_type = e.blender_type
             # archive part not yet implemented!
-            entry.relpath = os.path.join(utils.amber_repos[repo_uuid], r["path"])
+            entry.relpath = os.path.join(utils.amber_repos[repo_uuid], r.path)
 #                print("added entry for", entry.relpath)
             entry.uuid = e.uuid
             var = entry.variants.add()
@@ -583,7 +583,7 @@ class AssetEngineAmber(AssetEngine):
 #        print(entries.entries[:])
         if self.repo:
             for uuid in uuids.uuids:
-                self.entry_from_uuid(entries, tuple(uuid.uuid_asset), tuple(uuid.uuid_variant), tuple(uuid.uuid_revision))
+                self.entry_from_uuid(entries, uuid.uuid_asset[:], uuid.uuid_variant[:], uuid.uuid_revision[:])
             return True
         return False
 
diff --git a/release/scripts/startup/bl_operators/amber/repository.py b/release/scripts/startup/bl_operators/amber/repository.py
index 26ee57034bf..64ff2e67eed 100644
--- a/release/scripts/startup/bl_operators/amber/repository.py
+++ b/release/scripts/startup/bl_operators/amber/repository.py
@@ -321,11 +321,13 @@ class AmberDataAsset():
         self.variant_default = None
 
     @staticmethod
-    def from_dict(assets, entries_dict):
+    def from_dict(assets, entries_dict, repo_uuid):
         # For now, fully override entries.
         assets.clear()
         for uuid_hexstr, ent in entries_dict.items():
             uuid = utils.uuid_unpack(uuid_hexstr)
+            assert(uuid[:2] == repo_uuid[:2])
+
             asset = assets[uuid] = AmberDataAsset()
 
             asset.name = ent["name"]
@@ -416,6 +418,14 @@ class AmberDataRepositoryPG(PropertyGroup):
 
 
 class AmberDataRepository:
+    """
+    Amber repository main class.
+
+    Note: Remember that in Amber, first 8 bytes of asset's UUID are same as first 8 bytes of repository UUID.
+          Repository UUID's last 8 bytes shall always be NULL.
+          This allows us to store repository identifier into all assets, and ensure we have uniqueness of
+          Amber assets UUIDs (which is mandatory from Blender point of view).
+    """
     VERSION = "1.0.1"
 
     def __init__(self):
@@ -443,12 +453,13 @@ class AmberDataRepository:
             self.name = repo_dict["name"]
             self.description = repo_dict["description"]
             self.uuid = utils.uuid_unpack(repo_dict["uuid"])
+            assert(self.uuid[2:] == (0, 0))
 
             # We update tags instead of overriding them completely...
             AmberDataTagPG.from_dict(self.tags, repo_dict["tags"])
 
             # For now, fully override entries.
-            AmberDataAsset.from_dict(self.assets, repo_dict["entries"])
+            AmberDataAsset.from_dict(self.assets, repo_dict["entries"], self.uuid)
         else:
             print("Unsupported repository version: ", self.version)
             self.clear(self.storage)
@@ -459,6 +470,8 @@ class AmberDataRepository:
         repo_dict["version"] = self.VERSION
         repo_dict["name"] = self.name
         repo_dict["description"] = self.description
+
+        assert(self.uuid[2:] == (0, 0))
         repo_dict["uuid"] = utils.uuid_pack(self.uuid)
 
         repo_dict["tags"] = AmberDataTagPG.to_dict(self.tags)



More information about the Bf-blender-cvs mailing list