{ "info": { "author": "Matthias Kestenholz", "author_email": "mk@feinheit.ch", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development" ], "description": "==============\nHTML sanitizer\n==============\n\n.. image:: https://travis-ci.org/matthiask/html-sanitizer.svg?branch=master\n :target: https://travis-ci.org/matthiask/html-sanitizer\n\nThis is a allowlist-based and very opinionated HTML sanitizer that\ncan be used both for untrusted and trusted sources. It attempts to clean\nup the mess made by various rich text editors and or copy-pasting to\nmake styling of webpages simpler and more consistent. It builds on the\nexcellent HTML cleaner in lxml_ to make the result both valid and safe.\n\nHTML sanitizer goes further than e.g. bleach_ in that it not only\nensures that content is safe and tags and attributes conform to a given\nallowlist, but also applies additional transforms to HTML fragments.\n\nGoals\n=====\n\n- Clean up HTML fragments using a very restricted set of allowed tags\n and attributes.\n- Convert *some* tags (such as ````, ```` and\n ````) into either ```` or ```` (but never both).\n- Absolutely disallow all inline styles.\n- Normalize whitespace by removing repeated line breaks, empty\n paragraphs and other empty elements.\n- Merge adjacent tags of the same type (such as several ```` or\n ``

`` directly after each other.\n- Automatically remove redundant list markers inside ``
  • `` tags.\n- Clean up some uglyness such as paragraphs inside paragraphs or list\n elements etc.\n- Normalize unicode.\n\nUsage\n=====\n\n >>> from html_sanitizer import Sanitizer\n >>> sanitizer = Sanitizer() # default configuration\n >>> sanitizer.sanitize('some text')\n 'some text'\n\nSettings\n========\n\n- Bold spans and ``b`` tags are converted into ``strong`` tags, italic\n spans and ``i`` tags into ``em`` tags (if ``strong`` and ``em`` are\n allowed at all)\n- Inline styles and scripts will always be dropped.\n- A ``div`` element is used to wrap the HTML fragment for the parser,\n therefore ``div`` tags are not allowed.\n\nThe default settings are::\n\n DEFAULT_SETTINGS = {\n \"tags\": {\n \"a\", \"h1\", \"h2\", \"h3\", \"strong\", \"em\", \"p\", \"ul\", \"ol\",\n \"li\", \"br\", \"sub\", \"sup\", \"hr\",\n },\n \"attributes\": {\"a\": (\"href\", \"name\", \"target\", \"title\", \"id\", \"rel\")},\n \"empty\": {\"hr\", \"a\", \"br\"},\n \"separate\": {\"a\", \"p\", \"li\"},\n \"whitespace\": {\"br\"},\n \"keep_typographic_whitespace\": False,\n \"add_nofollow\": False,\n \"autolink\": False,\n \"sanitize_href\": sanitize_href,\n \"element_preprocessors\": [\n # convert span elements into em/strong if a matching style rule\n # has been found. strong has precedence, strong & em at the same\n # time is not supported\n bold_span_to_strong,\n italic_span_to_em,\n tag_replacer(\"b\", \"strong\"),\n tag_replacer(\"i\", \"em\"),\n tag_replacer(\"form\", \"p\"),\n target_blank_noopener,\n ],\n \"element_postprocessors\": [],\n \"is_mergeable\": lambda e1, e2: True,\n }\n\nThe keys' meaning is as follows:\n\n- ``tags``: A ``set()`` of allowed tags.\n- ``attributes``: A ``dict()`` mapping tags to their allowed attributes.\n- ``empty``: Tags which are allowed to be empty. By default, empty tags\n (containing no text or only whitespace) are dropped.\n- ``separate``: Tags which are not merged if they appear as siblings. By\n default, tags of the same type are merged.\n- ``whitespace``: Tags which are treated as whitespace and removed from\n the beginning or end of other tags' content.\n- ``keep_typographic_whitespace``: Keep typographically used space\n characters like non-breaking space etc.\n- ``add_nofollow``: Whether to add ``rel=\"nofollow\"`` to all links.\n- ``autolink``: Enable lxml_'s autolinker_. May be either a boolean or a\n dictionary; a dictionary is passed as keyword arguments to\n ``autolink``.\n- ``sanitize_href``: A callable that gets anchor's ``href`` value and\n returns a sanitized version. The default implementation checks whether\n links start with a few allowed prefixes, and if not, returns a single\n hash (``#``).\n- ``element_preprocessors`` and ``element_postprocessors``: Additional\n filters that are called on all elements in the tree. The tree is\n processed in reverse depth-first order. Under certain circumstances\n elements are processed more than once (search the code for\n ``backlog.append``). Preprocessors are run before whitespace\n normalization, postprocessors afterwards.\n- ``is_mergeable``: Adjacent elements which aren't kept ``separate`` are\n merged by default. This callable can be used to prevent merging of\n adjacent elements e.g. when their classes do not match\n (``lambda e1, e2: e1.get('class') == e2.get('class')``)\n\nSettings can be specified partially when initializing a sanitizer\ninstance, but are still checked for consistency. For example, it is not\nallowed to have tags in ``empty`` that are not in ``tags``, that is,\ntags that are allowed to be empty but at the same time not allowed at\nall. The ``Sanitizer`` constructor raises ``TypeError`` exceptions when\nit detects inconsistencies.\n\nAn example for an even more restricted configuration might be::\n\n >>> from html_sanitizer import Sanitizer\n >>> sanitizer = Sanitizer({\n ... 'tags': ('h1', 'h2', 'p'),\n ... 'attributes': {},\n ... 'empty': set(),\n ... 'separate': set(),\n ... })\n\nThe rationale for such a restricted set of allowed tags (e.g. no\nimages) is documented in the `design decisions`_ section of\ndjango-content-editor_'s documentation.\n\nDjango\n======\n\nHTML sanitizer does not depend on Django, but ships with a module which\nmakes configuring sanitizers using Django settings easier. Usage is as\nfollows::\n\n >>> from html_sanitizer.django import get_sanitizer\n >>> sanitizer = get_sanitizer([name=...])\n\nDifferent sanitizers can be configured. The default configuration is\naptly named ``'default'``. Example settings follow::\n\n HTML_SANITIZERS = {\n 'default': {\n 'tags': ...,\n },\n ...\n }\n\nThe ``'default'`` configuration is special: If it isn't explicitly\ndefined, the default configuration above is used instead. Non-existing\nconfigurations will lead to ``ImproperlyConfigured`` exceptions.\n\nThe ``get_sanitizer`` function caches sanitizer instances, so feel free\nto call it as often as you want to.\n\n\n.. _bleach: https://bleach.readthedocs.io/\n.. _Django: https://www.djangoproject.com/\n.. _django-content-editor: http://django-content-editor.readthedocs.io/\n.. _FeinCMS: https://pypi.python.org/pypi/FeinCMS\n.. _feincms-cleanse: https://pypi.python.org/pypi/feincms-cleanse\n.. _design decisions: http://django-content-editor.readthedocs.io/en/latest/#design-decisions\n.. _lxml: http://lxml.de/\n.. _autolinker: http://lxml.de/api/lxml.html.clean-module.html\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/matthiask/html-sanitizer/", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "html-sanitizer", "package_url": "https://pypi.org/project/html-sanitizer/", "platform": "OS Independent", "project_url": "https://pypi.org/project/html-sanitizer/", "project_urls": { "Homepage": "https://github.com/matthiask/html-sanitizer/" }, "release_url": "https://pypi.org/project/html-sanitizer/1.7.3/", "requires_dist": [ "beautifulsoup4", "lxml (>=3.6.1)" ], "requires_python": "", "summary": "HTML sanitizer", "version": "1.7.3" }, "last_serial": 5877959, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "02438f50ff262f36201f8d2f41fb0bb6", "sha256": "123ca7229b9d8ab457327e2921498309c5f14752fe041b51bff8fbe791604667" }, "downloads": -1, "filename": "html_sanitizer-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02438f50ff262f36201f8d2f41fb0bb6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11398, "upload_time": "2017-05-02T08:24:52", "url": "https://files.pythonhosted.org/packages/c9/0e/becda78107626a4168e44d926b15daa631d79b57654fd1a57d88204de332/html_sanitizer-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa6d8395ba10cd99e26a1c76f9612a1b", "sha256": "6b3bdeaf059b9313309393620d52bea5dcfc017bd808a63882190df5c9e0dc3a" }, "downloads": -1, "filename": "html-sanitizer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "fa6d8395ba10cd99e26a1c76f9612a1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8678, "upload_time": "2017-05-02T08:24:55", "url": "https://files.pythonhosted.org/packages/05/0a/0f6c770b68b720525e15b22916c79b7dcd6f4703c32f6f62e9f148108ca8/html-sanitizer-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "b907094b087c9554b6089b4d908db4d7", "sha256": "40f7fff8a91e97244ee4c40b560d8e0824e1284803c7183007c9b2facb23e1df" }, "downloads": -1, "filename": "html_sanitizer-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b907094b087c9554b6089b4d908db4d7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12313, "upload_time": "2017-05-02T15:04:08", "url": "https://files.pythonhosted.org/packages/ee/ae/843674dac7c24668df277cc83cb9d0640a47249bb3f280576d639dd3253b/html_sanitizer-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "247fb0029afb53733b43a9a5dc87f577", "sha256": "5b0f5f06555a47e239e122c3587d76ab9bd493df4775fa7763cc6e77286ff5c4" }, "downloads": -1, "filename": "html-sanitizer-1.1.0.tar.gz", "has_sig": false, "md5_digest": "247fb0029afb53733b43a9a5dc87f577", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9177, "upload_time": "2017-05-02T15:04:10", "url": "https://files.pythonhosted.org/packages/4b/4b/88c6487182ab3a5acf522d169d6c52a3c75d29309c16c49332a6a8507d8b/html-sanitizer-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "9c63d0dc519f974a6d8f4768db78509a", "sha256": "95465577bc26bb49e8a0ef8f2a8a8266d5ab278077987ffa16fe1491393e7ab6" }, "downloads": -1, "filename": "html_sanitizer-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c63d0dc519f974a6d8f4768db78509a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12323, "upload_time": "2017-05-02T15:23:52", "url": "https://files.pythonhosted.org/packages/f4/35/90586305971625bdeae03043084c0813b55b8539f9953efe565c0454c6f0/html_sanitizer-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9f9e17ee804dd54292209b08c0d77d3", "sha256": "1986d13e1fe6b8c1cb248c21639f5ed1ad2208d3389ea207d5866f64c6620bc7" }, "downloads": -1, "filename": "html-sanitizer-1.1.1.tar.gz", "has_sig": false, "md5_digest": "b9f9e17ee804dd54292209b08c0d77d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9188, "upload_time": "2017-05-02T15:23:53", "url": "https://files.pythonhosted.org/packages/8a/78/88f4145564d26a93f06bc7f9887fb83f33376bbd9fa7f0d3895ea490ec59/html-sanitizer-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "3004d4eb37d3a5bad0b3898c7ab630c1", "sha256": "fa8d090bdbae46f685e3740bbcefb0533a0f5884a72e44035c1e5672998530dd" }, "downloads": -1, "filename": "html_sanitizer-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3004d4eb37d3a5bad0b3898c7ab630c1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12367, "upload_time": "2017-05-03T07:57:31", "url": "https://files.pythonhosted.org/packages/07/c7/cd761772ebc577fcd235e768999f5c564ee1f7b7a3b0aab9ce5a0c468756/html_sanitizer-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa09fe026e8c0c5b0d2e2f96520b0915", "sha256": "d498b1637d31ed1c1714ab1f8ec8f6a3e34a27c6ffd371fba8dfeb4fbdf6ab28" }, "downloads": -1, "filename": "html-sanitizer-1.1.2.tar.gz", "has_sig": false, "md5_digest": "aa09fe026e8c0c5b0d2e2f96520b0915", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9224, "upload_time": "2017-05-03T07:57:32", "url": "https://files.pythonhosted.org/packages/c9/18/99ea20666a314f93efa7638a8261dbbaf9f06fe857fbeed24164a06d025c/html-sanitizer-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "d1f63ff87a2a0cecb2e6c743788c1b44", "sha256": "4f32106de3fb0e5d9dd80281f284dbafd9ef4824b43cd20ef0d63134d7f6848b" }, "downloads": -1, "filename": "html_sanitizer-1.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d1f63ff87a2a0cecb2e6c743788c1b44", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12462, "upload_time": "2017-05-10T14:48:25", "url": "https://files.pythonhosted.org/packages/b4/80/7bd2e53fe5f68b78fe9a861bce5cac30115cc208b1f0010d073d9c907042/html_sanitizer-1.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47272e015e3798587cb12784e3ffe970", "sha256": "7fcfdcb1469bb25e5528690d27e3336e8a1725f3c5d804b76fd594b7e2e8a598" }, "downloads": -1, "filename": "html-sanitizer-1.1.3.tar.gz", "has_sig": false, "md5_digest": "47272e015e3798587cb12784e3ffe970", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9314, "upload_time": "2017-05-10T14:48:26", "url": "https://files.pythonhosted.org/packages/4b/fb/a5d7b9cd5cfa24cf3bae0677de3be2a64d3a2c8ef8de5f206c049d8ff209/html-sanitizer-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "384b2f3751eb49ca1216bc1bb182d40c", "sha256": "19f03d2034785cc55d389a78a197a4ef631c44f562ed514f8ed22148ddb11844" }, "downloads": -1, "filename": "html_sanitizer-1.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "384b2f3751eb49ca1216bc1bb182d40c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12503, "upload_time": "2017-05-12T14:32:54", "url": "https://files.pythonhosted.org/packages/f3/2b/4ba268b31bc6bad6c63f486250855efa1853a063b218484d58c26c0e0fa5/html_sanitizer-1.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef47fee051f1f089059b9d80284428d4", "sha256": "90f47501f6ac673f82c2e84e326953da985c8cbaa26d9c2f3e423aaef74cbc08" }, "downloads": -1, "filename": "html-sanitizer-1.1.4.tar.gz", "has_sig": false, "md5_digest": "ef47fee051f1f089059b9d80284428d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9348, "upload_time": "2017-05-12T14:32:56", "url": "https://files.pythonhosted.org/packages/a0/ff/38fd81e25d88a53e8bbc67ca5b311c9e472eec300dd16ca82c74466190d1/html-sanitizer-1.1.4.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "544aee6d2f33616b9790bd0857e0aa88", "sha256": "8432967039bc33a182c745b97bbaa4d821f833ecc8b24cf32c0fe2b7abc5c647" }, "downloads": -1, "filename": "html_sanitizer-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "544aee6d2f33616b9790bd0857e0aa88", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12862, "upload_time": "2017-05-25T09:26:47", "url": "https://files.pythonhosted.org/packages/eb/ae/fc9131cc42889f2a552561384d3785296c3f255b050b4256bcb4f58176d8/html_sanitizer-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46b27ef8da9c03d30c57b2c623019517", "sha256": "0cb868835adfeb209e4a7b7dc13fefc67c375ffcdf9dcd62afdea87f8ecb217c" }, "downloads": -1, "filename": "html-sanitizer-1.2.0.tar.gz", "has_sig": false, "md5_digest": "46b27ef8da9c03d30c57b2c623019517", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10370, "upload_time": "2017-05-25T09:26:49", "url": "https://files.pythonhosted.org/packages/9d/66/3c50501cb3579c89f9342df1d040563ae9a54aa71fa5be6d1f8e983945ef/html-sanitizer-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "a79ff5a94059d89e65e2a597b764a551", "sha256": "c3bbfbd55012a9a7ca83b8db68b6cbc720127b72262c5e269b301e8a8ca4a8f7" }, "downloads": -1, "filename": "html_sanitizer-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a79ff5a94059d89e65e2a597b764a551", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12880, "upload_time": "2017-06-08T08:38:12", "url": "https://files.pythonhosted.org/packages/cf/cc/8c560404b96bf4b14fb3126485aba06bcb2b0cf62716e0bad1954058bc52/html_sanitizer-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e449f009ec1005381e734c9ffdda5504", "sha256": "542c5d8743fa615bf91c7e99498fd04a069ffd2842f0d9614715fa3810b83b93" }, "downloads": -1, "filename": "html-sanitizer-1.2.1.tar.gz", "has_sig": false, "md5_digest": "e449f009ec1005381e734c9ffdda5504", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10413, "upload_time": "2017-06-08T08:38:14", "url": "https://files.pythonhosted.org/packages/7a/24/3f98f5169160b1c684e33e151006619bee6aa77f0842e6b2fe423e71d92e/html-sanitizer-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "14b5f676aecde35f4501fb843c329585", "sha256": "c7e0f6921a445fb2cf03a6bbf57441df4e1cc753572141fae7bc1a24604c8727" }, "downloads": -1, "filename": "html_sanitizer-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14b5f676aecde35f4501fb843c329585", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13193, "upload_time": "2017-09-22T08:46:15", "url": "https://files.pythonhosted.org/packages/22/d1/2e818b3842cf2d9b8fdf165d42a0ed0f954fca6c1caac08670ce39103956/html_sanitizer-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a18a5f7029d4344326f6177aa38df1a", "sha256": "3676e5075fe2e151addca713137960c888c0442987fdc3a1c35ab4700fd05cdf" }, "downloads": -1, "filename": "html-sanitizer-1.3.0.tar.gz", "has_sig": false, "md5_digest": "0a18a5f7029d4344326f6177aa38df1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10953, "upload_time": "2017-09-22T08:46:18", "url": "https://files.pythonhosted.org/packages/00/5e/d381d01cd7d5f6546fc4798d6078392095b7e548ea3bcecfa45916010e34/html-sanitizer-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "f582ecb8e31120fc43042f73f8d8d6c9", "sha256": "cbcd31118c1b6da0093aa1696a4fdb0676c00a0847954c68ba8b2bcba044970b" }, "downloads": -1, "filename": "html_sanitizer-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f582ecb8e31120fc43042f73f8d8d6c9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14053, "upload_time": "2018-03-29T14:22:37", "url": "https://files.pythonhosted.org/packages/84/08/cb9fdeb647a6006d3210934232707c1fe8ed6215da3098b3936cfbc758fe/html_sanitizer-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bafaedd070a91cc1bf0b9ac0a883da6e", "sha256": "c7e2cc81138fd92bb0fcd42df620d39ae4372fba1765aa482a32f9ed17270f26" }, "downloads": -1, "filename": "html-sanitizer-1.4.0.tar.gz", "has_sig": false, "md5_digest": "bafaedd070a91cc1bf0b9ac0a883da6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12526, "upload_time": "2018-03-29T14:22:34", "url": "https://files.pythonhosted.org/packages/dd/b3/e4990953821f7b49ab22bfbc2aea717c0e860c01f10898e099d4f5b3516d/html-sanitizer-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "fd2284a9a5587c0dbeaca11c191308a5", "sha256": "8301767db5a8d4976482d8a38805a933d440a69144efbe67c0cab140775f1b10" }, "downloads": -1, "filename": "html_sanitizer-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fd2284a9a5587c0dbeaca11c191308a5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14392, "upload_time": "2018-06-01T06:58:40", "url": "https://files.pythonhosted.org/packages/01/39/f55e490f77a46f026d5cd7871ff0f6f22b1e60adb079b53922e27e740585/html_sanitizer-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "458f8ee1a664ea140dae5c2899e6f0d1", "sha256": "963eaf6e8f23a0224301994fe1a0dee694b0ff21794a97fe1f7048cf831531a5" }, "downloads": -1, "filename": "html-sanitizer-1.5.0.tar.gz", "has_sig": false, "md5_digest": "458f8ee1a664ea140dae5c2899e6f0d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13508, "upload_time": "2018-06-01T06:58:41", "url": "https://files.pythonhosted.org/packages/58/01/7ff3c576703b93b75c4a19e816739f44a9f7dda6c0fe30fa5472953a55b7/html-sanitizer-1.5.0.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "850ee8052f2f105230f3c4c38a558eeb", "sha256": "394713d66ddc2b37e228d96f2aef01b58c74e5961663c04e3dce64f44e9c57d8" }, "downloads": -1, "filename": "html_sanitizer-1.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "850ee8052f2f105230f3c4c38a558eeb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14471, "upload_time": "2018-06-29T14:52:36", "url": "https://files.pythonhosted.org/packages/c5/77/5749c5f922e9eb7b2895f7a489380a357d41511b50aa23da96fca645dbb8/html_sanitizer-1.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55bee916e7728c37e77afcae5f1d16c1", "sha256": "fbe34f5f377bd6b461b18425ffaaf158ea530edbff95571cc34cb9f7a3c5f9ec" }, "downloads": -1, "filename": "html-sanitizer-1.6.0.tar.gz", "has_sig": false, "md5_digest": "55bee916e7728c37e77afcae5f1d16c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13559, "upload_time": "2018-06-29T14:52:38", "url": "https://files.pythonhosted.org/packages/4a/8b/e79d915f176144efed18ae39a8760a521fe04974835b485cd938dc22c325/html-sanitizer-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "b0421840dd144c448aaccd3984e2a95e", "sha256": "c884818334fe43b966ba54cb0a4e865f275a9f41412899446efba00fa235a441" }, "downloads": -1, "filename": "html_sanitizer-1.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b0421840dd144c448aaccd3984e2a95e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14662, "upload_time": "2018-07-31T13:45:12", "url": "https://files.pythonhosted.org/packages/75/25/f06b4c184c9abac8db102eedde9870cf46b1471bde0ae682e50eb9c99630/html_sanitizer-1.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5584a199b2af46bd26ac722abe3c59a5", "sha256": "1b04497f5c734c169d9121f95a61068e064c0f4e12758833f6d65351c1f272e9" }, "downloads": -1, "filename": "html-sanitizer-1.6.1.tar.gz", "has_sig": false, "md5_digest": "5584a199b2af46bd26ac722abe3c59a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13746, "upload_time": "2018-07-31T13:45:13", "url": "https://files.pythonhosted.org/packages/4f/d7/c759dfeca842c8d21350dfd8f0aba5ef840ada2ee9ffcae6f09d072390a9/html-sanitizer-1.6.1.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "c74ca096cf007bbf8ff486c0a9d7b406", "sha256": "6adcd402d71ae257e8a64691043a9011996e44888a4fb34b69a7e223150cd01d" }, "downloads": -1, "filename": "html_sanitizer-1.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c74ca096cf007bbf8ff486c0a9d7b406", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14827, "upload_time": "2018-08-21T20:02:02", "url": "https://files.pythonhosted.org/packages/ab/39/74f52a56a929e3aadb075ecb50cf8a44eaa9a2841a4488196d2b345d243b/html_sanitizer-1.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "492f6c1d23785f715b32eb0622df294b", "sha256": "a0d33dc58838c28e8e150ee58096fbd5897dc531ca1b09f578a68968f9a03b22" }, "downloads": -1, "filename": "html-sanitizer-1.6.2.tar.gz", "has_sig": false, "md5_digest": "492f6c1d23785f715b32eb0622df294b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13881, "upload_time": "2018-08-21T20:02:05", "url": "https://files.pythonhosted.org/packages/9e/67/1b4149acf742e053ed32d533d3b0c6a2fb0c0efac09c3d3a41e12014365e/html-sanitizer-1.6.2.tar.gz" } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "147f1727c317a46f8b06f6ee4db6a1cd", "sha256": "949c90190eccae96b72f16f1dc61ff896c58cd5d9ee8557c928a40e48db02c8f" }, "downloads": -1, "filename": "html_sanitizer-1.6.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "147f1727c317a46f8b06f6ee4db6a1cd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12415, "upload_time": "2018-11-04T13:13:59", "url": "https://files.pythonhosted.org/packages/6b/76/ccf98c2f130b5d7045a722901177c610f5307b4903bca187f4d2b889428f/html_sanitizer-1.6.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ebfa47ed3095cc25da72d76c785749a", "sha256": "7d764f21818adc7b872d20364bfafd9186c6d33a4c5b421afc4318e06a27af4a" }, "downloads": -1, "filename": "html-sanitizer-1.6.3.tar.gz", "has_sig": false, "md5_digest": "2ebfa47ed3095cc25da72d76c785749a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11292, "upload_time": "2018-11-04T13:14:00", "url": "https://files.pythonhosted.org/packages/da/a7/668cadf850af998ed41246c5b40b4e6e5e6ccbbda69beb923c80a6d4953b/html-sanitizer-1.6.3.tar.gz" } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "7c5b3c83a44727aa07078267c344324b", "sha256": "b234e11e57fe84f824b82b4ab0b8ca4c365c6f6e2f729083ba15c0eaa63dc1fa" }, "downloads": -1, "filename": "html_sanitizer-1.6.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c5b3c83a44727aa07078267c344324b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15147, "upload_time": "2019-02-06T15:24:51", "url": "https://files.pythonhosted.org/packages/e5/8e/def2dc09a7d5508e8308e4dcf0e7c58ec7097288f0d3ed260fd2e5cd6d6c/html_sanitizer-1.6.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94af0fdef55ee33d12e535fa3f078515", "sha256": "9941fe2997f4e32d573f4279d0552165967ab2a6fc7aa8b465a508725062eaa5" }, "downloads": -1, "filename": "html-sanitizer-1.6.4.tar.gz", "has_sig": false, "md5_digest": "94af0fdef55ee33d12e535fa3f078515", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13884, "upload_time": "2019-02-06T15:24:52", "url": "https://files.pythonhosted.org/packages/a4/36/df2903bcbf356a700f9e9a578c6a02417abeb7f865c106f49aa12e0a4c37/html-sanitizer-1.6.4.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "db4c7020311e3d92fcf78f2a84a1e33b", "sha256": "0dbf50eb8130a3767673e593d4d04b697200ff470201455cb304f648f19da4a0" }, "downloads": -1, "filename": "html_sanitizer-1.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db4c7020311e3d92fcf78f2a84a1e33b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15390, "upload_time": "2019-02-19T11:12:33", "url": "https://files.pythonhosted.org/packages/11/1a/cbb1df5f6e08388fbb3ee461efb6d8e850561b09d28beefe6148cc23e868/html_sanitizer-1.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a628bf196e350922e7fe58f49e1c0e6b", "sha256": "5c3ed33a9d2364cfd584c0361109ce705bba2af59b5d4d983859c71aa1f0c173" }, "downloads": -1, "filename": "html-sanitizer-1.7.0.tar.gz", "has_sig": false, "md5_digest": "a628bf196e350922e7fe58f49e1c0e6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14149, "upload_time": "2019-02-19T11:12:35", "url": "https://files.pythonhosted.org/packages/66/66/2cee5beff76fc19e96a601b8983e45f9f161461152de69561639434ec06b/html-sanitizer-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "0e374a9af31c9d3c5eb3a490e05e4ece", "sha256": "fbd82cfa03a8085d13fbbb93137076f83064b48f995d71253372876c5b8abd98" }, "downloads": -1, "filename": "html_sanitizer-1.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0e374a9af31c9d3c5eb3a490e05e4ece", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15472, "upload_time": "2019-04-19T11:07:15", "url": "https://files.pythonhosted.org/packages/e9/9c/27fc4fafeeaf9d5a462e15c7bab132f0b273c3a20155ed58c29c5c8e514e/html_sanitizer-1.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3783c568400582bcc3f748bf3b0eb6a", "sha256": "5ff86e77d08aca11ab8f3f8b7d5acac3fdd3660d483fdf5f8f496966ec004f24" }, "downloads": -1, "filename": "html-sanitizer-1.7.1.tar.gz", "has_sig": false, "md5_digest": "d3783c568400582bcc3f748bf3b0eb6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14202, "upload_time": "2019-04-19T11:07:16", "url": "https://files.pythonhosted.org/packages/83/75/3dd235f15bd596eed368053b6b351af4bae17606d52a2be790a6d2acf069/html-sanitizer-1.7.1.tar.gz" } ], "1.7.2": [ { "comment_text": "", "digests": { "md5": "079023c7072908663d8bbd508d39c15f", "sha256": "e7918bc906d6ee91aab5da765e9abd904912eff1f72c3fe0e9b1d2f9b45f825f" }, "downloads": -1, "filename": "html_sanitizer-1.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "079023c7072908663d8bbd508d39c15f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16383, "upload_time": "2019-04-26T10:00:05", "url": "https://files.pythonhosted.org/packages/1e/0b/fb969341c1b7a8785969b216c5bcfbd620ee55e715919fa45e3a5ee8639f/html_sanitizer-1.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a93e778e7d6d1b1128560679f6185d74", "sha256": "d6aaff794588e98f2dac0bfc288cf2fa64fff7da8d9ade20a9313b9d1ccbf4fd" }, "downloads": -1, "filename": "html-sanitizer-1.7.2.tar.gz", "has_sig": false, "md5_digest": "a93e778e7d6d1b1128560679f6185d74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15160, "upload_time": "2019-04-26T10:00:08", "url": "https://files.pythonhosted.org/packages/85/60/609a3249898707826a28f72e5a9ef73ba0d2d9698e2c473707598b4d210c/html-sanitizer-1.7.2.tar.gz" } ], "1.7.3": [ { "comment_text": "", "digests": { "md5": "27c86452ebfb3f123cebbe22613dac0d", "sha256": "1d0c6cd88905485cad9744a81f1f59ad43bb34e5d9fd452446bcd598034fe3b7" }, "downloads": -1, "filename": "html_sanitizer-1.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "27c86452ebfb3f123cebbe22613dac0d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17104, "upload_time": "2019-08-08T09:33:04", "url": "https://files.pythonhosted.org/packages/51/49/3837d0acf4af8799b2c64b812ccf2d53a5696cfa0091f5b3252415d1d09b/html_sanitizer-1.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "749a1675309110516d90dd5b39ef2cce", "sha256": "84aeae145cb209623044273e7fe3db25373d96bcc6e5724e04223406c7581dbb" }, "downloads": -1, "filename": "html-sanitizer-1.7.3.tar.gz", "has_sig": false, "md5_digest": "749a1675309110516d90dd5b39ef2cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15883, "upload_time": "2019-08-08T09:33:06", "url": "https://files.pythonhosted.org/packages/df/d9/47099b1593e5ef367e695f4a7db8338bc942f800e53f8cca26d1f90d727e/html-sanitizer-1.7.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "27c86452ebfb3f123cebbe22613dac0d", "sha256": "1d0c6cd88905485cad9744a81f1f59ad43bb34e5d9fd452446bcd598034fe3b7" }, "downloads": -1, "filename": "html_sanitizer-1.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "27c86452ebfb3f123cebbe22613dac0d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17104, "upload_time": "2019-08-08T09:33:04", "url": "https://files.pythonhosted.org/packages/51/49/3837d0acf4af8799b2c64b812ccf2d53a5696cfa0091f5b3252415d1d09b/html_sanitizer-1.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "749a1675309110516d90dd5b39ef2cce", "sha256": "84aeae145cb209623044273e7fe3db25373d96bcc6e5724e04223406c7581dbb" }, "downloads": -1, "filename": "html-sanitizer-1.7.3.tar.gz", "has_sig": false, "md5_digest": "749a1675309110516d90dd5b39ef2cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15883, "upload_time": "2019-08-08T09:33:06", "url": "https://files.pythonhosted.org/packages/df/d9/47099b1593e5ef367e695f4a7db8338bc942f800e53f8cca26d1f90d727e/html-sanitizer-1.7.3.tar.gz" } ] }