diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-10 07:52:03 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-10 07:52:03 +0000 |
| commit | 82fce1f26fc2af856ec91a0d91984f969084583c (patch) | |
| tree | 7a20c21ab577a288a2e4bc14cf427daab3900622 | |
| parent | 875189a522f1a2323b0abbbf15710d62489c9cf4 (diff) | |
automatic import of python-xmltodict
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-xmltodict.spec | 825 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 827 insertions, 0 deletions
@@ -0,0 +1 @@ +/xmltodict-0.13.0.tar.gz diff --git a/python-xmltodict.spec b/python-xmltodict.spec new file mode 100644 index 0000000..07b26c5 --- /dev/null +++ b/python-xmltodict.spec @@ -0,0 +1,825 @@ +%global _empty_manifest_terminate_build 0 +Name: python-xmltodict +Version: 0.13.0 +Release: 1 +Summary: Makes working with XML feel like you are working with JSON +License: MIT +URL: https://github.com/martinblech/xmltodict +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/39/0d/40df5be1e684bbaecdb9d1e0e40d5d482465de6b00cbb92b84ee5d243c7f/xmltodict-0.13.0.tar.gz +BuildArch: noarch + + +%description +# xmltodict + +`xmltodict` is a Python module that makes working with XML feel like you are working with [JSON](http://docs.python.org/library/json.html), as in this ["spec"](http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html): + +[](https://travis-ci.com/martinblech/xmltodict) + +```python +>>> print(json.dumps(xmltodict.parse(""" +... <mydocument has="an attribute"> +... <and> +... <many>elements</many> +... <many>more elements</many> +... </and> +... <plus a="complex"> +... element as well +... </plus> +... </mydocument> +... """), indent=4)) +{ + "mydocument": { + "@has": "an attribute", + "and": { + "many": [ + "elements", + "more elements" + ] + }, + "plus": { + "@a": "complex", + "#text": "element as well" + } + } +} +``` + +## Namespace support + +By default, `xmltodict` does no XML namespace processing (it just treats namespace declarations as regular node attributes), but passing `process_namespaces=True` will make it expand namespaces for you: + +```python +>>> xml = """ +... <root xmlns="http://defaultns.com/" +... xmlns:a="http://a.com/" +... xmlns:b="http://b.com/"> +... <x>1</x> +... <a:y>2</a:y> +... <b:z>3</b:z> +... </root> +... """ +>>> xmltodict.parse(xml, process_namespaces=True) == { +... 'http://defaultns.com/:root': { +... 'http://defaultns.com/:x': '1', +... 'http://a.com/:y': '2', +... 'http://b.com/:z': '3', +... } +... } +True +``` + +It also lets you collapse certain namespaces to shorthand prefixes, or skip them altogether: + +```python +>>> namespaces = { +... 'http://defaultns.com/': None, # skip this namespace +... 'http://a.com/': 'ns_a', # collapse "http://a.com/" -> "ns_a" +... } +>>> xmltodict.parse(xml, process_namespaces=True, namespaces=namespaces) == { +... 'root': { +... 'x': '1', +... 'ns_a:y': '2', +... 'http://b.com/:z': '3', +... }, +... } +True +``` + +## Streaming mode + +`xmltodict` is very fast ([Expat](http://docs.python.org/library/pyexpat.html)-based) and has a streaming mode with a small memory footprint, suitable for big XML dumps like [Discogs](http://discogs.com/data/) or [Wikipedia](http://dumps.wikimedia.org/): + +```python +>>> def handle_artist(_, artist): +... print(artist['name']) +... return True +>>> +>>> xmltodict.parse(GzipFile('discogs_artists.xml.gz'), +... item_depth=2, item_callback=handle_artist) +A Perfect Circle +Fantômas +King Crimson +Chris Potter +... +``` + +It can also be used from the command line to pipe objects to a script like this: + +```python +import sys, marshal +while True: + _, article = marshal.load(sys.stdin) + print(article['title']) +``` + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | myscript.py +AccessibleComputing +Anarchism +AfghanistanHistory +AfghanistanGeography +AfghanistanPeople +AfghanistanCommunications +Autism +... +``` + +Or just cache the dicts so you don't have to parse that big XML file again. You do this only once: + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | gzip > enwiki.dicts.gz +``` + +And you reuse the dicts with every script that needs them: + +```sh +$ gunzip enwiki.dicts.gz | script1.py +$ gunzip enwiki.dicts.gz | script2.py +... +``` + +## Roundtripping + +You can also convert in the other direction, using the `unparse()` method: + +```python +>>> mydict = { +... 'response': { +... 'status': 'good', +... 'last_updated': '2014-02-16T23:10:12Z', +... } +... } +>>> print(unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<response> + <status>good</status> + <last_updated>2014-02-16T23:10:12Z</last_updated> +</response> +``` + +Text values for nodes can be specified with the `cdata_key` key in the python dict, while node properties can be specified with the `attr_prefix` prefixed to the key name in the python dict. The default value for `attr_prefix` is `@` and the default value for `cdata_key` is `#text`. + +```python +>>> import xmltodict +>>> +>>> mydict = { +... 'text': { +... '@color':'red', +... '@stroke':'2', +... '#text':'This is a test' +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<text stroke="2" color="red">This is a test</text> +``` + +Lists that are specified under a key in a dictionary use the key as a tag for each item. But if a list does have a parent key, for example if a list exists inside another list, it does not have a tag to use and the items are converted to a string as shown in the example below. To give tags to nested lists, use the `expand_iter` keyword argument to provide a tag as demonstrated below. Note that using `expand_iter` will break roundtripping. + +```python +>>> mydict = { +... "line": { +... "points": [ +... [1, 5], +... [2, 6], +... ] +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points>[1, 5]</points> + <points>[2, 6]</points> +</line> +>>> print(xmltodict.unparse(mydict, pretty=True, expand_iter="coord")) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points> + <coord>1</coord> + <coord>5</coord> + </points> + <points> + <coord>2</coord> + <coord>6</coord> + </points> +</line> +``` + +## Ok, how do I get it? + +### Using pypi + +You just need to + +```sh +$ pip install xmltodict +``` + +### RPM-based distro (Fedora, RHEL, …) + +There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict). + +```sh +$ sudo yum install python-xmltodict +``` + +### Arch Linux + +There is an [official Arch Linux package for xmltodict](https://www.archlinux.org/packages/community/any/python-xmltodict/). + +```sh +$ sudo pacman -S python-xmltodict +``` + +### Debian-based distro (Debian, Ubuntu, …) + +There is an [official Debian package for xmltodict](https://tracker.debian.org/pkg/python-xmltodict). + +```sh +$ sudo apt install python-xmltodict +``` + +### FreeBSD + +There is an [official FreeBSD port for xmltodict](https://svnweb.freebsd.org/ports/head/devel/py-xmltodict/). + +```sh +$ pkg install py36-xmltodict +``` + +### openSUSE/SLE (SLE 15, Leap 15, Tumbleweed) + +There is an [official openSUSE package for xmltodict](https://software.opensuse.org/package/python-xmltodict). + +```sh +# Python2 +$ zypper in python2-xmltodict + +# Python3 +$ zypper in python3-xmltodict +``` + + + + +%package -n python3-xmltodict +Summary: Makes working with XML feel like you are working with JSON +Provides: python-xmltodict +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-xmltodict +# xmltodict + +`xmltodict` is a Python module that makes working with XML feel like you are working with [JSON](http://docs.python.org/library/json.html), as in this ["spec"](http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html): + +[](https://travis-ci.com/martinblech/xmltodict) + +```python +>>> print(json.dumps(xmltodict.parse(""" +... <mydocument has="an attribute"> +... <and> +... <many>elements</many> +... <many>more elements</many> +... </and> +... <plus a="complex"> +... element as well +... </plus> +... </mydocument> +... """), indent=4)) +{ + "mydocument": { + "@has": "an attribute", + "and": { + "many": [ + "elements", + "more elements" + ] + }, + "plus": { + "@a": "complex", + "#text": "element as well" + } + } +} +``` + +## Namespace support + +By default, `xmltodict` does no XML namespace processing (it just treats namespace declarations as regular node attributes), but passing `process_namespaces=True` will make it expand namespaces for you: + +```python +>>> xml = """ +... <root xmlns="http://defaultns.com/" +... xmlns:a="http://a.com/" +... xmlns:b="http://b.com/"> +... <x>1</x> +... <a:y>2</a:y> +... <b:z>3</b:z> +... </root> +... """ +>>> xmltodict.parse(xml, process_namespaces=True) == { +... 'http://defaultns.com/:root': { +... 'http://defaultns.com/:x': '1', +... 'http://a.com/:y': '2', +... 'http://b.com/:z': '3', +... } +... } +True +``` + +It also lets you collapse certain namespaces to shorthand prefixes, or skip them altogether: + +```python +>>> namespaces = { +... 'http://defaultns.com/': None, # skip this namespace +... 'http://a.com/': 'ns_a', # collapse "http://a.com/" -> "ns_a" +... } +>>> xmltodict.parse(xml, process_namespaces=True, namespaces=namespaces) == { +... 'root': { +... 'x': '1', +... 'ns_a:y': '2', +... 'http://b.com/:z': '3', +... }, +... } +True +``` + +## Streaming mode + +`xmltodict` is very fast ([Expat](http://docs.python.org/library/pyexpat.html)-based) and has a streaming mode with a small memory footprint, suitable for big XML dumps like [Discogs](http://discogs.com/data/) or [Wikipedia](http://dumps.wikimedia.org/): + +```python +>>> def handle_artist(_, artist): +... print(artist['name']) +... return True +>>> +>>> xmltodict.parse(GzipFile('discogs_artists.xml.gz'), +... item_depth=2, item_callback=handle_artist) +A Perfect Circle +Fantômas +King Crimson +Chris Potter +... +``` + +It can also be used from the command line to pipe objects to a script like this: + +```python +import sys, marshal +while True: + _, article = marshal.load(sys.stdin) + print(article['title']) +``` + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | myscript.py +AccessibleComputing +Anarchism +AfghanistanHistory +AfghanistanGeography +AfghanistanPeople +AfghanistanCommunications +Autism +... +``` + +Or just cache the dicts so you don't have to parse that big XML file again. You do this only once: + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | gzip > enwiki.dicts.gz +``` + +And you reuse the dicts with every script that needs them: + +```sh +$ gunzip enwiki.dicts.gz | script1.py +$ gunzip enwiki.dicts.gz | script2.py +... +``` + +## Roundtripping + +You can also convert in the other direction, using the `unparse()` method: + +```python +>>> mydict = { +... 'response': { +... 'status': 'good', +... 'last_updated': '2014-02-16T23:10:12Z', +... } +... } +>>> print(unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<response> + <status>good</status> + <last_updated>2014-02-16T23:10:12Z</last_updated> +</response> +``` + +Text values for nodes can be specified with the `cdata_key` key in the python dict, while node properties can be specified with the `attr_prefix` prefixed to the key name in the python dict. The default value for `attr_prefix` is `@` and the default value for `cdata_key` is `#text`. + +```python +>>> import xmltodict +>>> +>>> mydict = { +... 'text': { +... '@color':'red', +... '@stroke':'2', +... '#text':'This is a test' +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<text stroke="2" color="red">This is a test</text> +``` + +Lists that are specified under a key in a dictionary use the key as a tag for each item. But if a list does have a parent key, for example if a list exists inside another list, it does not have a tag to use and the items are converted to a string as shown in the example below. To give tags to nested lists, use the `expand_iter` keyword argument to provide a tag as demonstrated below. Note that using `expand_iter` will break roundtripping. + +```python +>>> mydict = { +... "line": { +... "points": [ +... [1, 5], +... [2, 6], +... ] +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points>[1, 5]</points> + <points>[2, 6]</points> +</line> +>>> print(xmltodict.unparse(mydict, pretty=True, expand_iter="coord")) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points> + <coord>1</coord> + <coord>5</coord> + </points> + <points> + <coord>2</coord> + <coord>6</coord> + </points> +</line> +``` + +## Ok, how do I get it? + +### Using pypi + +You just need to + +```sh +$ pip install xmltodict +``` + +### RPM-based distro (Fedora, RHEL, …) + +There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict). + +```sh +$ sudo yum install python-xmltodict +``` + +### Arch Linux + +There is an [official Arch Linux package for xmltodict](https://www.archlinux.org/packages/community/any/python-xmltodict/). + +```sh +$ sudo pacman -S python-xmltodict +``` + +### Debian-based distro (Debian, Ubuntu, …) + +There is an [official Debian package for xmltodict](https://tracker.debian.org/pkg/python-xmltodict). + +```sh +$ sudo apt install python-xmltodict +``` + +### FreeBSD + +There is an [official FreeBSD port for xmltodict](https://svnweb.freebsd.org/ports/head/devel/py-xmltodict/). + +```sh +$ pkg install py36-xmltodict +``` + +### openSUSE/SLE (SLE 15, Leap 15, Tumbleweed) + +There is an [official openSUSE package for xmltodict](https://software.opensuse.org/package/python-xmltodict). + +```sh +# Python2 +$ zypper in python2-xmltodict + +# Python3 +$ zypper in python3-xmltodict +``` + + + + +%package help +Summary: Development documents and examples for xmltodict +Provides: python3-xmltodict-doc +%description help +# xmltodict + +`xmltodict` is a Python module that makes working with XML feel like you are working with [JSON](http://docs.python.org/library/json.html), as in this ["spec"](http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html): + +[](https://travis-ci.com/martinblech/xmltodict) + +```python +>>> print(json.dumps(xmltodict.parse(""" +... <mydocument has="an attribute"> +... <and> +... <many>elements</many> +... <many>more elements</many> +... </and> +... <plus a="complex"> +... element as well +... </plus> +... </mydocument> +... """), indent=4)) +{ + "mydocument": { + "@has": "an attribute", + "and": { + "many": [ + "elements", + "more elements" + ] + }, + "plus": { + "@a": "complex", + "#text": "element as well" + } + } +} +``` + +## Namespace support + +By default, `xmltodict` does no XML namespace processing (it just treats namespace declarations as regular node attributes), but passing `process_namespaces=True` will make it expand namespaces for you: + +```python +>>> xml = """ +... <root xmlns="http://defaultns.com/" +... xmlns:a="http://a.com/" +... xmlns:b="http://b.com/"> +... <x>1</x> +... <a:y>2</a:y> +... <b:z>3</b:z> +... </root> +... """ +>>> xmltodict.parse(xml, process_namespaces=True) == { +... 'http://defaultns.com/:root': { +... 'http://defaultns.com/:x': '1', +... 'http://a.com/:y': '2', +... 'http://b.com/:z': '3', +... } +... } +True +``` + +It also lets you collapse certain namespaces to shorthand prefixes, or skip them altogether: + +```python +>>> namespaces = { +... 'http://defaultns.com/': None, # skip this namespace +... 'http://a.com/': 'ns_a', # collapse "http://a.com/" -> "ns_a" +... } +>>> xmltodict.parse(xml, process_namespaces=True, namespaces=namespaces) == { +... 'root': { +... 'x': '1', +... 'ns_a:y': '2', +... 'http://b.com/:z': '3', +... }, +... } +True +``` + +## Streaming mode + +`xmltodict` is very fast ([Expat](http://docs.python.org/library/pyexpat.html)-based) and has a streaming mode with a small memory footprint, suitable for big XML dumps like [Discogs](http://discogs.com/data/) or [Wikipedia](http://dumps.wikimedia.org/): + +```python +>>> def handle_artist(_, artist): +... print(artist['name']) +... return True +>>> +>>> xmltodict.parse(GzipFile('discogs_artists.xml.gz'), +... item_depth=2, item_callback=handle_artist) +A Perfect Circle +Fantômas +King Crimson +Chris Potter +... +``` + +It can also be used from the command line to pipe objects to a script like this: + +```python +import sys, marshal +while True: + _, article = marshal.load(sys.stdin) + print(article['title']) +``` + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | myscript.py +AccessibleComputing +Anarchism +AfghanistanHistory +AfghanistanGeography +AfghanistanPeople +AfghanistanCommunications +Autism +... +``` + +Or just cache the dicts so you don't have to parse that big XML file again. You do this only once: + +```sh +$ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | gzip > enwiki.dicts.gz +``` + +And you reuse the dicts with every script that needs them: + +```sh +$ gunzip enwiki.dicts.gz | script1.py +$ gunzip enwiki.dicts.gz | script2.py +... +``` + +## Roundtripping + +You can also convert in the other direction, using the `unparse()` method: + +```python +>>> mydict = { +... 'response': { +... 'status': 'good', +... 'last_updated': '2014-02-16T23:10:12Z', +... } +... } +>>> print(unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<response> + <status>good</status> + <last_updated>2014-02-16T23:10:12Z</last_updated> +</response> +``` + +Text values for nodes can be specified with the `cdata_key` key in the python dict, while node properties can be specified with the `attr_prefix` prefixed to the key name in the python dict. The default value for `attr_prefix` is `@` and the default value for `cdata_key` is `#text`. + +```python +>>> import xmltodict +>>> +>>> mydict = { +... 'text': { +... '@color':'red', +... '@stroke':'2', +... '#text':'This is a test' +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<text stroke="2" color="red">This is a test</text> +``` + +Lists that are specified under a key in a dictionary use the key as a tag for each item. But if a list does have a parent key, for example if a list exists inside another list, it does not have a tag to use and the items are converted to a string as shown in the example below. To give tags to nested lists, use the `expand_iter` keyword argument to provide a tag as demonstrated below. Note that using `expand_iter` will break roundtripping. + +```python +>>> mydict = { +... "line": { +... "points": [ +... [1, 5], +... [2, 6], +... ] +... } +... } +>>> print(xmltodict.unparse(mydict, pretty=True)) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points>[1, 5]</points> + <points>[2, 6]</points> +</line> +>>> print(xmltodict.unparse(mydict, pretty=True, expand_iter="coord")) +<?xml version="1.0" encoding="utf-8"?> +<line> + <points> + <coord>1</coord> + <coord>5</coord> + </points> + <points> + <coord>2</coord> + <coord>6</coord> + </points> +</line> +``` + +## Ok, how do I get it? + +### Using pypi + +You just need to + +```sh +$ pip install xmltodict +``` + +### RPM-based distro (Fedora, RHEL, …) + +There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict). + +```sh +$ sudo yum install python-xmltodict +``` + +### Arch Linux + +There is an [official Arch Linux package for xmltodict](https://www.archlinux.org/packages/community/any/python-xmltodict/). + +```sh +$ sudo pacman -S python-xmltodict +``` + +### Debian-based distro (Debian, Ubuntu, …) + +There is an [official Debian package for xmltodict](https://tracker.debian.org/pkg/python-xmltodict). + +```sh +$ sudo apt install python-xmltodict +``` + +### FreeBSD + +There is an [official FreeBSD port for xmltodict](https://svnweb.freebsd.org/ports/head/devel/py-xmltodict/). + +```sh +$ pkg install py36-xmltodict +``` + +### openSUSE/SLE (SLE 15, Leap 15, Tumbleweed) + +There is an [official openSUSE package for xmltodict](https://software.opensuse.org/package/python-xmltodict). + +```sh +# Python2 +$ zypper in python2-xmltodict + +# Python3 +$ zypper in python3-xmltodict +``` + + + + +%prep +%autosetup -n xmltodict-0.13.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-xmltodict -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.13.0-1 +- Package Spec generated @@ -0,0 +1 @@ +1ece0a5bbd494bac414058405606475e xmltodict-0.13.0.tar.gz |
