Metadata-Version: 2.4
Name: untangle
Version: 1.3.0
Summary: Converts XML to Python objects
Author: Christian Stefanescu
License-Expression: MIT
Requires-Dist: defusedxml==0.7.1
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# untangle

[![Build Status](https://github.com/stchris/untangle/actions/workflows/build.yml/badge.svg)](https://github.com/stchris/untangle/actions)
[![PyPi version](https://img.shields.io/pypi/v/untangle.svg)](https://pypi.python.org/pypi/untangle)

[Documentation](http://readthedocs.org/docs/untangle/en/latest/)

* Converts XML to a Python object.
* Siblings with similar names are grouped into a list.
* Children can be accessed with `parent.child`, attributes with `element['attribute']`.
* You can call the `parse()` method with a filename, an URL or an XML string.
* Substitutes `-`, `.` and `:` with `_` `<foobar><foo-bar/></foobar>` can be accessed with `foobar.foo_bar`, `<foo.bar.baz/>` can be accessed with `foo_bar_baz` and `<foo:bar><foo:baz/></foo:bar>` can be accessed with `foo_bar.foo_baz`

## Installation

With pip:
```bash
pip install untangle
```

## Usage

(See and run <a href="https://github.com/stchris/untangle/blob/main/examples.py">examples.py</a> or this blog post: [Read XML painlessly](http://pythonadventures.wordpress.com/2011/10/30/read-xml-painlessly/) for more info)

```python
import untangle

obj = untangle.parse(resource)
```

`resource` can be:

* a URL
* a filename (a string or an `os.PathLike` object such as `pathlib.Path`)
* an XML string

Running the above code and passing this XML:

```xml
<?xml version="1.0"?>
<root>
	<child name="child1"/>
</root>
```
allows it to be navigated from the `untangle`d object like this:

```python
obj.root.child["name"]  # u'child1'
```

## Development

`untangle` uses [uv](https://docs.astral.sh/uv/) for builds and virtualenv management:
```
$ uv sync
```

Run tests:
```
$ uv run pytest
```

Run linter:
```
$ uv run ruff check .
```

Run formatter checks:
```
$ uv run ruff format --check
```

Run type hint checks:
```
$ uv run ty check .
```

## Changelog

see CHANGELOG.md
