diff --git a/examples/demo-custom-properties-nodes-edges.py b/examples/demo-custom-properties-nodes-edges.py index abc04da..b671634 100644 --- a/examples/demo-custom-properties-nodes-edges.py +++ b/examples/demo-custom-properties-nodes-edges.py @@ -23,6 +23,7 @@ g.define_custom_property("node", "Unemployment", "double", "0.0") g.define_custom_property("node", "Environmental Engagements", "boolean", "false") g.define_custom_property("node", "Mayor", "string", "") +g.define_custom_property("node", "Country", "string", "") # Define Edge Custom Properties ''' @@ -37,6 +38,10 @@ g.define_custom_property("edge", "Toll Free", "boolean", "true") g.define_custom_property("edge", "Year of build", "string", "") +# Create Groups +g1 = g.add_group('group1', + custom_properties={"Country": "Kitchen"}) + # Create Nodes g.add_node('Pasta City', custom_properties={"Population": "13000", "Unemployment": "13.7", "Environmental Engagements": "true", diff --git a/pyyed/__init__.py b/pyyed/__init__.py index ff6421a..3f0109e 100644 --- a/pyyed/__init__.py +++ b/pyyed/__init__.py @@ -164,7 +164,7 @@ def __init__(self, group_id, parent_graph, label=None, label_alignment="center", closed="false", font_family="Dialog", underlined_text="false", font_style="plain", font_size="12", fill="#FFCC00", transparent="false", border_color="#000000", border_type="line", border_width="1.0", height=False, - width=False, x=False, y=False, description="", url=""): + width=False, x=False, y=False, custom_properties=None, description="", url=""): self.label = label if label is None: @@ -217,6 +217,20 @@ def __init__(self, group_id, parent_graph, label=None, label_alignment="center", self.description = description self.url = url + # Handle Node Custom Properties + for name, definition in Node.custom_properties_defs.items(): + if custom_properties: + for k, v in custom_properties.items(): + if k not in Node.custom_properties_defs: + raise RuntimeWarning("key %s not recognised" % k) + if name == k: + setattr(self, name, custom_properties[k]) + break + else: + setattr(self, name, definition.default_value) + else: + setattr(self, name, definition.default_value) + def add_node(self, node_name, **kwargs): if node_name in self.parent_graph.existing_entities: raise RuntimeWarning("Node %s already exists" % node_name) @@ -315,6 +329,11 @@ def convert(self): e = self.edges[edge_id].convert() graph.append(e) + # Node Custom Properties + for name, definition in Node.custom_properties_defs.items(): + node_custom_prop = ET.SubElement(node, "data", key=definition.id) + node_custom_prop.text = getattr(self, name) + return node # ProxyAutoBoundsNode crap just draws bar at top of group