[Bf-blender-cvs] [ed7ce9251d3] asset-engine: Fix tag filtering, move repo reading to AmberDataRepository class, cleanup some uuid utils.

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


Commit: ed7ce9251d3e2cf0b27b1de661ebbf21564e178f
Author: Bastien Montagne
Date:   Mon Aug 21 16:28:23 2017 +0200
Branches: asset-engine
https://developer.blender.org/rBed7ce9251d3e2cf0b27b1de661ebbf21564e178f

Fix tag filtering, move repo reading to AmberDataRepository class, cleanup some uuid utils.

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

M	release/scripts/startup/bl_operators/amber/engine.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 17df5157cff..e8d95a400a8 100644
--- a/release/scripts/startup/bl_operators/amber/engine.py
+++ b/release/scripts/startup/bl_operators/amber/engine.py
@@ -43,6 +43,11 @@ import random
 
 from . import (repository, utils)
 
+from .repository import (
+        AmberDataRepository,
+        AmberDataRepositoryPG,
+        )
+
 
 #############
 # Amber Jobs.
@@ -55,21 +60,6 @@ class AmberJob:
 
 
 class AmberJobList(AmberJob):
-    @staticmethod
-    def ls_repo(db_path):
-        repo = None
-        with open(db_path, 'r') as db_f:
-            repo = json.load(db_f)
-        if isinstance(repo, dict):
-            repo_ver = repo.get(utils.AMBER_DBK_VERSION, "")
-            if repo_ver != "1.0.1":
-                # Unsupported...
-                print("WARNING: unsupported Amber repository version '%s'." % repo_ver)
-                repo = None
-        else:
-            repo = None
-        return repo
-
     @staticmethod
     def ls(path):
         repo = None
@@ -77,7 +67,7 @@ class AmberJobList(AmberJob):
         tmp = os.listdir(path)
         if utils.AMBER_DB_NAME in tmp:
             # That dir is an Amber repo, we only list content define by our amber 'db'.
-            repo = AmberJobList.ls_repo(os.path.join(path, utils.AMBER_DB_NAME))
+            repo = AmberDataRepository.ls_repo(os.path.join(path, utils.AMBER_DB_NAME))
         if repo is None:
             ret += tmp
         #~ time.sleep(0.1)  # 100% Artificial Lag (c)
@@ -211,13 +201,13 @@ class AssetEngineAmber(AssetEngine):
     bl_label = "Amber"
     bl_version = (0 << 16) + (0 << 8) + 4  # Usual maj.min.rev version scheme...
 
-    repository_pg = PointerProperty(name="Repository", type=repository.AmberDataRepositoryPG, description="Current Amber repository")
+    repository_pg = PointerProperty(name="Repository", type=AmberDataRepositoryPG, description="Current Amber repository")
 
     def __init__(self):
         self.executor = futures.ThreadPoolExecutor(8)  # Using threads for now, if issues arise we'll switch to process.
         self.jobs = {}
         self.repos = {}
-        self.repository = repository.AmberDataRepository()
+        self.repository = AmberDataRepository()
 
         self.reset()
 
@@ -439,7 +429,7 @@ class AssetEngineAmber(AssetEngine):
             assert(repo_uuid in utils.amber_repos)
             repo = self.repos.get(repo_uuid, None)
             if repo is None:
-                repo = self.repos[repo_uuid] = AmberJobList.ls_repo(os.path.join(utils.amber_repos[repo_uuid], utils.AMBER_DB_NAME))
+                repo = self.repos[repo_uuid] = AmberDataRepository.ls_repo(os.path.join(utils.amber_repos[repo_uuid], utils.AMBER_DB_NAME))
             self.repository.from_dict(repo, utils.amber_repos[repo_uuid])
             euuid = uuid.uuid_asset[:]
             vuuid = uuid.uuid_variant[:]
@@ -500,21 +490,21 @@ class AssetEngineAmber(AssetEngine):
                         file_type.add('BLENLIB')
                         blen_type = params.filter_id
 
-                for ent in self.repository.assets.values():
-                    if filter_search and filter_search not in (ent.name + ent.description):
+                for asset in self.repository.assets.values():
+                    if filter_search and filter_search not in (asset.name + asset.description):
                         continue
                     if params.use_filter:
-                        if ent.file_type not in file_type:
+                        if asset.file_type not in file_type:
                             continue
-                        if params.use_library_browsing and ent.blender_type not in blen_type:
+                        if params.use_library_browsing and asset.blender_type not in blen_type:
                             continue
                         if tags_incl or tags_excl:
-                            tags = set((t.name for t in ent.tags))
+                            tags = set(asset.tags)
                             if tags_incl and ((tags_incl & tags) != tags_incl):
                                 continue
                             if tags_excl and (tags_excl & tags):
                                 continue
-                    self.sortedfiltered.append((ent.uuid[:], ent))
+                    self.sortedfiltered.append((asset.uuid[:], asset))
 
             elif self.dirs:
                 for path, size, timestamp, uuid in self.dirs:
diff --git a/release/scripts/startup/bl_operators/amber/repository.py b/release/scripts/startup/bl_operators/amber/repository.py
index 64ff2e67eed..95392a1f478 100644
--- a/release/scripts/startup/bl_operators/amber/repository.py
+++ b/release/scripts/startup/bl_operators/amber/repository.py
@@ -443,6 +443,26 @@ class AmberDataRepository:
         self.tags.clear()
         self.assets.clear()
 
+    @classmethod
+    def ls_repo(cls, db_path):
+        repo_dict = None
+        with open(db_path, 'r') as db_f:
+            repo_dict = json.load(db_f)
+        if isinstance(repo_dict, dict):
+            repo_ver = repo_dict.get(utils.AMBER_DBK_VERSION, "")
+            if repo_ver != cls.VERSION:
+                # Unsupported...
+                print("WARNING: unsupported Amber repository version '%s'." % repo_ver)
+                repo_dict = None
+        else:
+            repo_dict = None
+        return repo_dict
+
+    @classmethod
+    def wrt_repo(db_path, repo_dict):
+        with open(db_path, 'w') as db_f:
+            json.dump(repo_dict, db_f)
+
     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 2247195fea6..04098e3070a 100644
--- a/release/scripts/startup/bl_operators/amber/ui.py
+++ b/release/scripts/startup/bl_operators/amber/ui.py
@@ -96,7 +96,7 @@ class AMBER_PT_tags(Panel, AmberPanel):
     def draw(self, context):
         ae = context.space_data.asset_engine
 
-        self.layout.template_list("AMBER_UL_tags_filter", "", ae.repository, "tags", ae.repository, "tag_index_active")
+        self.layout.template_list("AMBER_UL_tags_filter", "", ae.repository_pg, "tags", ae.repository_pg, "tag_index_active")
 
 
 #######################
diff --git a/release/scripts/startup/bl_operators/amber/utils.py b/release/scripts/startup/bl_operators/amber/utils.py
index e9b5a3acd30..8f669de6347 100644
--- a/release/scripts/startup/bl_operators/amber/utils.py
+++ b/release/scripts/startup/bl_operators/amber/utils.py
@@ -83,16 +83,7 @@ def uuid_revision_gen(used_uuids, variant_uuid, number, size, time):
 
 
 def uuid_unpack_bytes(uuid_bytes):
-    return struct.unpack("!iiii", uuid_bytes.ljust(16, b'\0'))
-
-
-def uuid_unpack_old(uuid_hexstr):
-    return uuid_unpack_bytes(binascii.unhexlify(uuid_hexstr))
-
-
-def uuid_unpack_asset(uuid_repo_hexstr, uuid_asset_hexstr):
-    return uuid_unpack_bytes(binascii.unhexlify(uuid_repo_hexstr).ljust(8, b'\0') +
-                             binascii.unhexlify(uuid_asset_hexstr).ljust(8, b'\0'))
+    return struct.unpack("!iiii", uuid_bytes.rjust(16, b'\0'))
 
 
 def uuid_unpack(uuid_hexstr):



More information about the Bf-blender-cvs mailing list