{ "info": { "author": "Ivan Sagalaev", "author_email": "maniac@softwaremaniacs.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# elementflow\n\n[![Build Status](https://travis-ci.org/isagalaev/elementflow.png)](https://travis-ci.org/isagalaev/elementflow)\n\nElementflow is a Python library for generating XML as a stream. Some existing\nXML producing libraries (like ElementTree, lxml) build a whole XML tree in\nmemory and then serialize it. It might be inefficient for moderately large XML\npayloads (think of a content-oriented Web service producing lots of XML data\noutput). Python's built-in xml.sax.saxutils.XMLGenerator is very low-level and\nrequires closing elements by hand.\n\nAlso, most XML libraries, to be honest, suck when dealing with namespaces.\n\n\n## Usage\n\nBasic XML generation:\n\n```python\nimport elementflow\nfile = open('text.xml', 'w') # can be any object with .write() method\n\nwith elementflow.xml(file, u'root') as xml:\n xml.element(u'item', attrs={u'key': u'value'}, text=u'text')\n with xml.container(u'container', attrs={u'key': u'value'}):\n xml.text(u'text')\n xml.element(u'subelement', text=u'subelement text')\n```\n\nUsing `with` is required to properly close container elements. The library\nexpects unicode strings on input and produces utf-8 encoded output (you *may*\nomit those \"u\"s for pure ASCII strings if you want to, Python will convert\nthem automatically).\n\nXML with namespaces:\n\n```python\nwith elementflow.xml(file, 'root', namespaces={'': 'urn:n', 'n1': 'urn:n1'}) as xml:\n xml.element('item')\n with xml.container('container', namespaces={'n2': 'urn:n2'):\n xml.element('n1:subelement')\n xml.element('n2:subelement')\n```\n\nElements with namespaces are defined using prefixes. You can define namespaces\nat the root level and for any container. The library will check for namespace\nprefixes that wasn't defined beforehand and will raise ValueError in that case.\n\nPretty-printing is also supported:\n\n```python\nwith elementflow.xml(file, 'root', indent=True):\n # ...\n```\n\nIn some cases it's more convenient to have such XML producer as a Python\niterator. This is easily done by wrapping XML generation code into a generator\nfunction:\n\n```python\ndef g():\n xml = elementflow.xml(elementflow.Queue(), 'root')\n with xml:\n for item in collection:\n xml.element(...)\n yield xml.file.pop()\n yield xml.file.pop()\n```\n\n`elementflow.Queue()` is a temporary buffer that accepts data from an XML\ngenerator and is cleared upon calling .pop() on it. You also might want to\nyield data from the iterator only when this buffer reaches a certain size:\n\n```python\nif len(xml.file) > BUFSIZE:\n yield xml.file.pop()\n```", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/isagalaev/elementflow", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "elementflow", "package_url": "https://pypi.org/project/elementflow/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/elementflow/", "project_urls": { "Homepage": "https://github.com/isagalaev/elementflow" }, "release_url": "https://pypi.org/project/elementflow/0.5/", "requires_dist": [ "six" ], "requires_python": null, "summary": "Python library for generating XML as a stream without building a tree in memory.", "version": "0.5" }, "last_serial": 1490092, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "8f03305ffee63509eb3378b9124db7d8", "sha256": "d88f7517caa3ebfac5f24bf9cd30c5e0f35aab41a15a057f7a241f133e6d107e" }, "downloads": -1, "filename": "elementflow-0.1.0.tar.gz", "has_sig": false, "md5_digest": "8f03305ffee63509eb3378b9124db7d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4977, "upload_time": "2010-05-18T15:39:36", "url": "https://files.pythonhosted.org/packages/90/e5/b64da8e3ba01bb061c979e241b599082c5792b10ce5f301fc4e2647339f2/elementflow-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "01cc616c72b46945c95d24167f251b2a", "sha256": "dd0365059deb29edb279397eca3c4be57feb78650b9d7251d9134d277f520307" }, "downloads": -1, "filename": "elementflow-0.2.0.tar.gz", "has_sig": false, "md5_digest": "01cc616c72b46945c95d24167f251b2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5232, "upload_time": "2010-08-17T11:07:54", "url": "https://files.pythonhosted.org/packages/7a/f2/2025347abd6b876bb6dca53e642e708f529b1eea30e1ef87693bba59f9c6/elementflow-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "93a860ce1a3df1978d6ba91aed0db181", "sha256": "28b5355ad9110fa70b01822c93479ab1e7f8d259e3a18732ce1cad3d40852c98" }, "downloads": -1, "filename": "elementflow-0.3.0.tar.gz", "has_sig": false, "md5_digest": "93a860ce1a3df1978d6ba91aed0db181", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5442, "upload_time": "2010-11-29T14:48:56", "url": "https://files.pythonhosted.org/packages/bd/21/d8b7ab567171361fd07921334e7840b183b270edd43503de5d309113fcdd/elementflow-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c2f8e97a236f516ded0ccfcd79f2d25b", "sha256": "cf84d2e6c5ed5f38fdd60670f608f278c2b7c6211fa1c3c51d99eb1e3726b8b1" }, "downloads": -1, "filename": "elementflow-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c2f8e97a236f516ded0ccfcd79f2d25b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4456, "upload_time": "2012-11-25T21:51:45", "url": "https://files.pythonhosted.org/packages/95/e2/c342fd81dd86e017d1d3a17cf4b983bff3ba0b994ffe1259cd779200f9a0/elementflow-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "ce53315b120a99ab5799f2f9e4921694", "sha256": "c7c20b845a7e7a5cf7b39bdb9f1b3395fc1e608095d89f1d005514328ecf278a" }, "downloads": -1, "filename": "elementflow-0.4.1.tar.gz", "has_sig": false, "md5_digest": "ce53315b120a99ab5799f2f9e4921694", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4457, "upload_time": "2012-12-12T09:13:10", "url": "https://files.pythonhosted.org/packages/d5/ae/34f90f0c59a1e32f4aa53840b00dbf2525761f5739c1f1ae8b064dbecefa/elementflow-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "96038a0a05286f748152e53463fab112", "sha256": "48b724eb6f5197890393d8bc7c3b0c51248b1b36e0359398d918668f33e6c656" }, "downloads": -1, "filename": "elementflow-0.4.2.tar.gz", "has_sig": false, "md5_digest": "96038a0a05286f748152e53463fab112", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4870, "upload_time": "2012-12-12T09:18:58", "url": "https://files.pythonhosted.org/packages/c0/82/dd4ed2ad82efd6a32998dca36027ac771f92993f7183ff977159f7175e52/elementflow-0.4.2.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "384a20addabf66a44adc2ca662158895", "sha256": "84b7cdaec6a9de075db9104fb5b1b829f8c4cb90ab86adc52c38eaa42e4f375e" }, "downloads": -1, "filename": "elementflow-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "384a20addabf66a44adc2ca662158895", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6742, "upload_time": "2015-04-03T20:23:29", "url": "https://files.pythonhosted.org/packages/37/bc/81c3ddb79c4e82763ca459bc6a1518093e7021262a030e59cd448e06c8b2/elementflow-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bd9c00f0412af23215be67828cb3c17", "sha256": "80d07550b92830e9f2ebdcda1b2106202ee9766e0e763b6489b9b2037bf9a445" }, "downloads": -1, "filename": "elementflow-0.5.tar.gz", "has_sig": false, "md5_digest": "6bd9c00f0412af23215be67828cb3c17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5444, "upload_time": "2015-04-03T20:23:36", "url": "https://files.pythonhosted.org/packages/f7/c3/1a91729731c2e71bce283fb081313bb5501fa9ba4f557992a3bc78e62639/elementflow-0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "384a20addabf66a44adc2ca662158895", "sha256": "84b7cdaec6a9de075db9104fb5b1b829f8c4cb90ab86adc52c38eaa42e4f375e" }, "downloads": -1, "filename": "elementflow-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "384a20addabf66a44adc2ca662158895", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6742, "upload_time": "2015-04-03T20:23:29", "url": "https://files.pythonhosted.org/packages/37/bc/81c3ddb79c4e82763ca459bc6a1518093e7021262a030e59cd448e06c8b2/elementflow-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bd9c00f0412af23215be67828cb3c17", "sha256": "80d07550b92830e9f2ebdcda1b2106202ee9766e0e763b6489b9b2037bf9a445" }, "downloads": -1, "filename": "elementflow-0.5.tar.gz", "has_sig": false, "md5_digest": "6bd9c00f0412af23215be67828cb3c17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5444, "upload_time": "2015-04-03T20:23:36", "url": "https://files.pythonhosted.org/packages/f7/c3/1a91729731c2e71bce283fb081313bb5501fa9ba4f557992a3bc78e62639/elementflow-0.5.tar.gz" } ] }