wip: started to test filter for dump

This commit is contained in:
Swann
2019-09-22 22:41:27 +02:00
parent db4dea94ed
commit 6f429a19ed
2 changed files with 20 additions and 10 deletions

View File

@ -68,18 +68,24 @@ class BlMaterial(BlDatablock):
def dump(self, pointer=None):
assert(pointer)
data = utils.dump_datablock(pointer, 2)
if pointer.use_nodes:
# nodes inputs
nodes = {}
for node in pointer.node_tree.nodes:
dumper = utils.dump_anything.Dumper()
dumper.exclude_filter = [
"dimensions",
"select",
]
for node in pointer.node_tree.nodes:
if node.type == 'TEX_IMAGE':
dumper.depth = 2
else:
dumper.depth = 4
dumper.depth = 3
dumper.filter = ["inputs"]
nodes[node.name] = dumper.dump(node)
data["node_tree"]['nodes'] = nodes
utils.dump_datablock_attibutes(
pointer.node_tree, ["links"], 3, data['node_tree'])
@ -111,6 +117,7 @@ class BlMaterial(BlDatablock):
def is_valid(self):
return bpy.data.materials.get(self.buffer['name'])
bl_id = "materials"
bl_class = bpy.types.Material
bl_rep_class = BlMaterial

View File

@ -78,6 +78,8 @@ class Dumper:
self._build_inline_dump_functions()
self._build_match_elements()
self.type_subset = self.match_subset_all
self.filter = []
self.exclude_filter = []
# self._atomic_types = [] # TODO future option?
def dump(self, any):
@ -85,7 +87,6 @@ class Dumper:
def _dump_any(self, any, depth):
for filter_function, dump_function in self.type_subset:
if filter_function(any):
# print(any)
return dump_function[not (depth >= self.depth)](any, depth + 1)
@ -142,6 +143,8 @@ class Dumper:
def _dump_default_as_branch(self, default, depth):
def is_valid_property(p):
try:
if (self.filter and default not in self.exclude_filter) or \
not self.exclude_filter:
getattr(default, p)
except AttributeError:
return False
@ -153,7 +156,7 @@ class Dumper:
return False
return True
all_property_names = [p for p in dir(default) if is_valid_property(p)]
all_property_names = [p for p in dir(default) if is_valid_property(p) and p != '']
dump = {}
for p in all_property_names:
dp = self._dump_any(getattr(default, p), depth)