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): def dump(self, pointer=None):
assert(pointer) assert(pointer)
data = utils.dump_datablock(pointer, 2) data = utils.dump_datablock(pointer, 2)
if pointer.use_nodes: if pointer.use_nodes:
# nodes inputs
nodes = {} nodes = {}
dumper = utils.dump_anything.Dumper()
dumper.exclude_filter = [
"dimensions",
"select",
]
for node in pointer.node_tree.nodes: for node in pointer.node_tree.nodes:
dumper = utils.dump_anything.Dumper()
if node.type == 'TEX_IMAGE': if node.type == 'TEX_IMAGE':
dumper.depth = 2 dumper.depth = 2
else: 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( utils.dump_datablock_attibutes(
pointer.node_tree, ["links"], 3, data['node_tree']) pointer.node_tree, ["links"], 3, data['node_tree'])
elif pointer.is_grease_pencil: elif pointer.is_grease_pencil:
@ -95,7 +101,7 @@ class BlMaterial(BlDatablock):
diff_rev = diff(self.dump(pointer=self.pointer), self.buffer) diff_rev = diff(self.dump(pointer=self.pointer), self.buffer)
return (self.bl_diff() or return (self.bl_diff() or
len(diff_rev.keys()) > 1) len(diff_rev.keys()) > 1)
def resolve_dependencies(self): def resolve_dependencies(self):
deps = [] deps = []
@ -111,10 +117,11 @@ class BlMaterial(BlDatablock):
def is_valid(self): def is_valid(self):
return bpy.data.materials.get(self.buffer['name']) return bpy.data.materials.get(self.buffer['name'])
bl_id = "materials" bl_id = "materials"
bl_class = bpy.types.Material bl_class = bpy.types.Material
bl_rep_class = BlMaterial bl_rep_class = BlMaterial
bl_delay_refresh = 10 bl_delay_refresh = 10
bl_delay_apply = 10 bl_delay_apply = 10
bl_automatic_push = True 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_inline_dump_functions()
self._build_match_elements() self._build_match_elements()
self.type_subset = self.match_subset_all self.type_subset = self.match_subset_all
self.filter = []
self.exclude_filter = []
# self._atomic_types = [] # TODO future option? # self._atomic_types = [] # TODO future option?
def dump(self, any): def dump(self, any):
@ -85,7 +87,6 @@ class Dumper:
def _dump_any(self, any, depth): def _dump_any(self, any, depth):
for filter_function, dump_function in self.type_subset: for filter_function, dump_function in self.type_subset:
if filter_function(any): if filter_function(any):
# print(any) # print(any)
return dump_function[not (depth >= self.depth)](any, depth + 1) 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 _dump_default_as_branch(self, default, depth):
def is_valid_property(p): def is_valid_property(p):
try: try:
getattr(default, p) if (self.filter and default not in self.exclude_filter) or \
not self.exclude_filter:
getattr(default, p)
except AttributeError: except AttributeError:
return False return False
if p.startswith("__"): if p.startswith("__"):
@ -153,7 +156,7 @@ class Dumper:
return False return False
return True 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 = {} dump = {}
for p in all_property_names: for p in all_property_names:
dp = self._dump_any(getattr(default, p), depth) dp = self._dump_any(getattr(default, p), depth)