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,19 +68,25 @@ class BlMaterial(BlDatablock):
def dump(self, pointer=None):
assert(pointer)
data = utils.dump_datablock(pointer, 2)
if pointer.use_nodes:
# nodes inputs
nodes = {}
dumper = utils.dump_anything.Dumper()
dumper.exclude_filter = [
"dimensions",
"select",
]
for node in pointer.node_tree.nodes:
dumper = utils.dump_anything.Dumper()
if node.type == 'TEX_IMAGE':
dumper.depth = 2
else:
dumper.depth = 4
dumper.depth = 3
dumper.filter = ["inputs"]
nodes[node.name] = dumper.dump(node)
nodes[node.name] = dumper.dump(node)
data["node_tree"]['nodes']= nodes
data["node_tree"]['nodes'] = nodes
utils.dump_datablock_attibutes(
pointer.node_tree, ["links"], 3, data['node_tree'])
elif pointer.is_grease_pencil:
@ -95,7 +101,7 @@ class BlMaterial(BlDatablock):
diff_rev = diff(self.dump(pointer=self.pointer), self.buffer)
return (self.bl_diff() or
len(diff_rev.keys()) > 1)
def resolve_dependencies(self):
deps = []
@ -111,10 +117,11 @@ 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
bl_delay_refresh = 10
bl_delay_apply = 10
bl_automatic_push = True
bl_icon = 'MATERIAL_DATA'
bl_icon = 'MATERIAL_DATA'

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,7 +143,9 @@ class Dumper:
def _dump_default_as_branch(self, default, depth):
def is_valid_property(p):
try:
getattr(default, p)
if (self.filter and default not in self.exclude_filter) or \
not self.exclude_filter:
getattr(default, p)
except AttributeError:
return False
if p.startswith("__"):
@ -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)