Skip to main content
# Simple GEXF
A simple `.gexf` parser / writer for python

**Notice:** This is currently work in progress, and I hope to be able to create documentation in the future when I've settled on the overall structure.

## Motivation:
The official [`pygexf`](https://github.com/paulgirard/pygexf) is poorly maintained and almost not documented at all. I needed a simple abstraction layer for the `XML` format for my project.
This project uses [`xmltodict`](https://github.com/martinblech/xmltodict), which means it's much easier to understand and debug than `pygexf` which uses `lxml`.
This is a tool for those who'd rather spend their time learning about something more interesting and worthwhile than `XML`.


## Usage:

~~~python
from simplegexf import Gexf, Edge

gexf = Gexf('tags.gexf')

try:
graph = gexf.graphs[0]
except IndexError:
graph = gexf.add_graph(defaultedgetype="directed")

# Define Graph attributes
graph.define_attributes([
('description', 'string'),
('count', 'integer'),
])

# Define Edge attributes for Graph
graph.define_attributes([
('relation_type', 'string'),
], _class='edge')

nodes = {node.id: node for node in graph.nodes}

tags = [
{
id: 0,
name: 'Test tag 1',
description: 'This is a test tag',
},
{
id: 1,
name: 'Test tag 2',
description: 'This is a test tag',
parents: [0],
},
{
id: 2,
name: 'Test tag 3',
description: 'This is a test tag',
parents: [0, 1],
}
]

# Create nodes for tags:
for tag in tags:
try:
# See if node exists:
node = nodes[str(tag['id'])]
except KeyError:
# Create a new node:
node = self.graph.add_node(id=str(tag['id']), label=tag['name'])

# Update node:
node.set('viz:size', value=10.0)
node.set('viz:color', r=130, g=130, b=130)

# Update node attributes:
for attr in self.graph.node_attributes.keys():
try:
node.attributes[attr] = tag[attr]
except KeyError:
try:
del node.attributes[attr]
except IndexError:
pass

nodes = {node.id: node for node in graph.nodes}

# Create edges for tags:
for tag in tags:
try:
for parent_id in tag['parents']:
edge = Edge(parent_id, tag['id'])
graph.edges.append(edge)
# Attributes are not available before adding edge to graph
edge.attributes['relation_type'] = 'parents'
except KeyError:
pass

graph.sort_nodes(attr='count', reverse=True)

gexf.write()
~~~

Metadata

Release files for simplegexf 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for simplegexf 0.1.5
File Size Uploaded Provenance
simplegexf-0.1.5.tar.gz 4.7 kB Without provenance Details

Release files / simplegexf-0.1.5.tar.gz

Download URL simplegexf-0.1.5.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4a7347d332b20c19012072605fcf681b1b31919062b4d6f0f218868aecfe9067
BLAKE2b-256 checksum
How to use checksums
b332181ddf7471482f4098cca04209ed2f66551acecf037aebb1fe0e1bdf6858
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for simplegexf 0.1.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page