Skip to main content

A Python tool for generating Python classes and scripts from XML files

Project description

README: XML to Python Code Generator

Overview

This project is a Python-based tool that dynamically generates Python classes, instances, and dependency graphs from a given XML file. The tool analyzes the structure of the XML document and creates Python code that can:

  1. Define classes based on the XML structure.
  2. Generate instances for each XML element.
  3. Export instances to CSV files.
  4. Visualize class dependencies as a PDF graph using Graphviz.

Features

  • Automatic Class Generation: Generates Python classes with attributes and relationships derived from XML tags and attributes.
  • Instance Creation: Creates instances for each XML element.
  • CSV Export: Automatically saves instances to CSV files.
  • Dependency Graph: Generates a PDF graph of class dependencies using Graphviz.

Prerequisites

Python Libraries

This project requires the following Python libraries:

  • os
  • xml.etree.ElementTree
  • uuid
  • collections
  • keyword
  • pandas
  • graphviz

Install the required libraries using:

pip install pandas graphviz

Graphviz

The graphviz library must be installed on your system for generating dependency graphs. Follow the installation guide for your platform:

  • Ubuntu/Debian: sudo apt-get install graphviz
  • MacOS: brew install graphviz
  • Windows: Download and install from Graphviz Download Page.

Usage

Example

  1. Place your XML file (e.g., drugbank_partial.xml) in the project directory.
  2. Run the script using:
    python your_script_name.py
    

Main Function

Call the generate_python_code function with the path to your XML file:

from your_script_name import generate_python_code

generate_python_code("path_to_your_xml.xml")

Output

The script will generate the following in the generated_code directory:

  1. Class Files: Individual Python files for each class.
  2. Main Script: A generated_main.py file to initialize instances and export them to CSV.
  3. Dependency Graph: A class_dependencies.pdf file visualizing class relationships.

Functions Explained

Key Functions

escape_string(value: str) -> str

Escapes problematic characters (e.g., \, ', \n) in strings.

sanitize(name: str) -> str

Sanitizes XML tag/attribute names by:

  • Removing namespaces.
  • Replacing invalid characters with underscores.
  • Adding underscores if the name conflicts with Python keywords.

analyze_structure(root: ET.Element)

Analyzes the XML structure to:

  • Count child elements and attributes.
  • Identify potential fields for class definitions.

define_class(class_name: str, potential_fields: dict, element_counts: dict) -> str

Generates Python class code for a given class name based on the XML structure.

generate_instance(...)

Creates an instance of a class and recursively handles its child elements.

parse_element(...)

Parses an XML element and generates corresponding Python code dynamically.

generate_python_code(xml_file: str, output_dir: str = "generated_code", generate_graph: bool = True)

Main function to generate Python code and optional dependency graphs.

generate_dependency_graph(output_dir: str, potential_fields: dict)

Generates a dependency graph of classes and their relationships, saved as a PDF file.

Directory Structure

project_directory/
|-- your_script_name.py       # Main script
|-- drugbank_partial.xml      # Example XML file
|-- generated_code/           # Output directory
    |-- base_model.py         # Base model class
    |-- generated_main.py     # Main script to initialize instances
    |-- *.py                  # Generated class files
    |-- class_dependencies.pdf # Dependency graph

Customization

You can customize the behavior of the script by modifying:

  • BaseModel Class: Extend the base model functionality in base_model.py.
  • Dependency Graph: Adjust graph attributes in the generate_dependency_graph function.

Error Handling

If an error occurs, the script prints a detailed error message. Ensure the input XML file is well-formed and adheres to XML standards.

License

This project is licensed under the MIT License. Feel free to use and modify it as needed.


Happy coding!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xml_to_python_generator-1.0.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xml_to_python_generator-1.0.1-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file xml_to_python_generator-1.0.1.tar.gz.

File metadata

  • Download URL: xml_to_python_generator-1.0.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for xml_to_python_generator-1.0.1.tar.gz
Algorithm Hash digest
SHA256 46aa41b6441fa0ec48ddafa1b6d4bbdd9eef1ea13927707764cf96e29e2d4503
MD5 abd6a372314af388c19c3aab48b6347e
BLAKE2b-256 ba65d04b9f5a5b6ab01089b9d5edd613138baf5fe27b1eee798d9bf4807b4ab6

See more details on using hashes here.

File details

Details for the file xml_to_python_generator-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for xml_to_python_generator-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 52ac33a71a3cdcc4ce278255082caf7f73ac2e8ae848a96e78219d349dcc65da
MD5 1d8608365df1b5de8120a5fe52ea1fa1
BLAKE2b-256 584b326ba3be56193b38b843e87d1c0e1e0502bdefe6b0b8b57d74bc04609238

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page