pybluemonday


Namepybluemonday JSON
Version 0.0.14 PyPI version JSON
download
home_pagehttps://github.com/ColdHeat/pybluemonday
SummaryPython bindings for the bluemonday HTML sanitizer
upload_time2024-09-26 22:27:52
maintainerNone
docs_urlNone
authorKevin Chung
requires_python>=3.7
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pybluemonday

[![PyPI](https://img.shields.io/pypi/v/pybluemonday)](https://pypi.org/project/pybluemonday/)

pybluemonday is a library for sanitizing HTML very quickly via [bluemonday](https://github.com/microcosm-cc/bluemonday).

pybluemonday takes untrusted user generated content as an input, and will return HTML that has been sanitised against a whitelist of approved HTML elements and attributes so that you can safely include the content in your web page.

**Note**: This library is in a useable state but is still experimental. It may not have feature parity with the actual bluemonday and is likely to sanitize HTML slightly differently than other libraries. PRs and feedback are welcome on improving this library.

## Installation

```
pip install pybluemonday
```

## Examples

```python
from pybluemonday import UGCPolicy
s = UGCPolicy()

print(s.sanitize("<script>alert(1)</script><b class='stuff'>testing</b>"))
# <b>testing</b>

s.AllowAttrs("class", "style").Globally()
print(s.sanitize("<script>alert(1)</script><b class='stuff' style='color: red;'>testing</b>"))
# <b class="stuff" style="color: red;">testing</b>
```

```python
from pybluemonday import StrictPolicy
s = StrictPolicy()

s.sanitize("<center><b>Blog Post Title</b></center>")
# Blog Post Title
```

## How does this work?

pybluemonday is a binding to [bluemonday](https://github.com/microcosm-cc/bluemonday) through a shared library built through cgo. However, instead of replicating the entire API, pybluemonday uses reflection on the Go side and some type checking on the Python side to call the right bluemonday function when you try to call a method.

Essentially you want to create a Policy with the provided `pybluemonday.UGCPolicy`, `pybluemonday.StrictPolicy`, and `pybluemonday.NewPolicy` classes and then call methods that map to the appropriate [bluemonday struct method](https://pkg.go.dev/github.com/microcosm-cc/bluemonday#Policy).

This is an open area of improvement but gets reasonable coverage of the original bluemonday interface.

Also because it's difficult to share Go structs over to Python, pybluemonday keeps an ID reference to the struct in the Go side and passes the reference for every Go call. This means that if you corrupt or change the ID for some nonsensical reason you may likely end up with a memory leak. This is also an open area of improvement.

## Performance

Most Python based HTML sanitizing libraries will need to rely on [html5lib](https://html5lib.readthedocs.io/en/latest/) for parsing HTML in a reasoanble way. Because of this you will likely see performance hits when using these libraries.

Since pybluemonday is just bindings for [bluemonday](https://github.com/microcosm-cc/bluemonday) it has *very* good performance because all parsing and processing is done in Go by bluemonday. Go also ships an [HTML5 parser](https://godoc.org/golang.org/x/net/html) which means we avoid html5lib but still process HTML pretty well.

Always take benchmarks with a grain of salt but when compared to other similar Python sanitizing libraries pybluemonday executes far faster:

![](benchmarks.png)

```
❯ python benchmarks.py
bleach (20000 sanitizations): 37.613802053
html_sanitizer (20000 sanitizations): 17.645683948
lxml Cleaner (20000 sanitizations): 10.500760227999997
pybluemonday (20000 sanitizations): 0.6188559669999876
```

Benchmarks taken on a MacBook Pro 15-inch, 2016 (2.7 GHz Intel Core i7, 16 GB RAM)



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ColdHeat/pybluemonday",
    "name": "pybluemonday",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": "Kevin Chung",
    "author_email": "kchung@nyu.edu",
    "download_url": null,
    "platform": null,
    "description": "# pybluemonday\n\n[![PyPI](https://img.shields.io/pypi/v/pybluemonday)](https://pypi.org/project/pybluemonday/)\n\npybluemonday is a library for sanitizing HTML very quickly via [bluemonday](https://github.com/microcosm-cc/bluemonday).\n\npybluemonday takes untrusted user generated content as an input, and will return HTML that has been sanitised against a whitelist of approved HTML elements and attributes so that you can safely include the content in your web page.\n\n**Note**: This library is in a useable state but is still experimental. It may not have feature parity with the actual bluemonday and is likely to sanitize HTML slightly differently than other libraries. PRs and feedback are welcome on improving this library.\n\n## Installation\n\n```\npip install pybluemonday\n```\n\n## Examples\n\n```python\nfrom pybluemonday import UGCPolicy\ns = UGCPolicy()\n\nprint(s.sanitize(\"<script>alert(1)</script><b class='stuff'>testing</b>\"))\n# <b>testing</b>\n\ns.AllowAttrs(\"class\", \"style\").Globally()\nprint(s.sanitize(\"<script>alert(1)</script><b class='stuff' style='color: red;'>testing</b>\"))\n# <b class=\"stuff\" style=\"color: red;\">testing</b>\n```\n\n```python\nfrom pybluemonday import StrictPolicy\ns = StrictPolicy()\n\ns.sanitize(\"<center><b>Blog Post Title</b></center>\")\n# Blog Post Title\n```\n\n## How does this work?\n\npybluemonday is a binding to [bluemonday](https://github.com/microcosm-cc/bluemonday) through a shared library built through cgo. However, instead of replicating the entire API, pybluemonday uses reflection on the Go side and some type checking on the Python side to call the right bluemonday function when you try to call a method.\n\nEssentially you want to create a Policy with the provided `pybluemonday.UGCPolicy`, `pybluemonday.StrictPolicy`, and `pybluemonday.NewPolicy` classes and then call methods that map to the appropriate [bluemonday struct method](https://pkg.go.dev/github.com/microcosm-cc/bluemonday#Policy).\n\nThis is an open area of improvement but gets reasonable coverage of the original bluemonday interface.\n\nAlso because it's difficult to share Go structs over to Python, pybluemonday keeps an ID reference to the struct in the Go side and passes the reference for every Go call. This means that if you corrupt or change the ID for some nonsensical reason you may likely end up with a memory leak. This is also an open area of improvement.\n\n## Performance\n\nMost Python based HTML sanitizing libraries will need to rely on [html5lib](https://html5lib.readthedocs.io/en/latest/) for parsing HTML in a reasoanble way. Because of this you will likely see performance hits when using these libraries.\n\nSince pybluemonday is just bindings for [bluemonday](https://github.com/microcosm-cc/bluemonday) it has *very* good performance because all parsing and processing is done in Go by bluemonday. Go also ships an [HTML5 parser](https://godoc.org/golang.org/x/net/html) which means we avoid html5lib but still process HTML pretty well.\n\nAlways take benchmarks with a grain of salt but when compared to other similar Python sanitizing libraries pybluemonday executes far faster:\n\n![](benchmarks.png)\n\n```\n\u276f python benchmarks.py\nbleach (20000 sanitizations): 37.613802053\nhtml_sanitizer (20000 sanitizations): 17.645683948\nlxml Cleaner (20000 sanitizations): 10.500760227999997\npybluemonday (20000 sanitizations): 0.6188559669999876\n```\n\nBenchmarks taken on a MacBook Pro 15-inch, 2016 (2.7 GHz Intel Core i7, 16 GB RAM)\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python bindings for the bluemonday HTML sanitizer",
    "version": "0.0.14",
    "project_urls": {
        "Homepage": "https://github.com/ColdHeat/pybluemonday"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8bb48d6c07c9e55345ed58df28971148c3ed12a5bd26a98b048ce44af8b0bb88",
                "md5": "348d97ca10c3d3c186097f0bad81697e",
                "sha256": "0c54aaad9066049e378706ff9219f7e296ac4e27e4c422edbd942227be1ef446"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "348d97ca10c3d3c186097f0bad81697e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1261853,
            "upload_time": "2024-09-26T22:27:52",
            "upload_time_iso_8601": "2024-09-26T22:27:52.547547Z",
            "url": "https://files.pythonhosted.org/packages/8b/b4/8d6c07c9e55345ed58df28971148c3ed12a5bd26a98b048ce44af8b0bb88/pybluemonday-0.0.14-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3defa7d9dfcc38b3d5f199e418a6e40932eec6beed306b0964e080f148a73bac",
                "md5": "457d12d51504159a09f575c5f04d7808",
                "sha256": "48cde9971f58bc1b319bc21bc515fc88e48438f5e07e9775a544d8cba3717a60"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "457d12d51504159a09f575c5f04d7808",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1195395,
            "upload_time": "2024-09-26T22:27:53",
            "upload_time_iso_8601": "2024-09-26T22:27:53.856021Z",
            "url": "https://files.pythonhosted.org/packages/3d/ef/a7d9dfcc38b3d5f199e418a6e40932eec6beed306b0964e080f148a73bac/pybluemonday-0.0.14-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5adeb47e81065b136296b9a4ab8c7fe14bc169ab2ccccb1224b1ad6552c65fb7",
                "md5": "01f61949b08858ad92f7e3a6c12f93b8",
                "sha256": "071a02c2609e9c6be48eb1632096c2f8e280b23e1999ae1ea1a4183c06c0d44f"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "01f61949b08858ad92f7e3a6c12f93b8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1216053,
            "upload_time": "2024-09-26T22:09:29",
            "upload_time_iso_8601": "2024-09-26T22:09:29.929569Z",
            "url": "https://files.pythonhosted.org/packages/5a/de/b47e81065b136296b9a4ab8c7fe14bc169ab2ccccb1224b1ad6552c65fb7/pybluemonday-0.0.14-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b37bfad24f283155611a546829635865ac59596c181f3d1a738b3421cba096f6",
                "md5": "3e8f7ba1bb33258ad8866f348a84ce87",
                "sha256": "2ca6d6f723bda37f0edb9ad32579c827d6b83267fb547b45322f5ada13ce345c"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3e8f7ba1bb33258ad8866f348a84ce87",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 1261853,
            "upload_time": "2024-09-26T22:27:55",
            "upload_time_iso_8601": "2024-09-26T22:27:55.017267Z",
            "url": "https://files.pythonhosted.org/packages/b3/7b/fad24f283155611a546829635865ac59596c181f3d1a738b3421cba096f6/pybluemonday-0.0.14-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fd68a9273da583437fc850ccf31ef75f6c27246b40b0293a5a164c9ea4b1df5c",
                "md5": "a154289d1653563cdf7692435a7540a3",
                "sha256": "ca00cfb7395bc50ac254476d4ce6fc224dd9bc6170c8af4fca80cd4aff6c20f6"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a154289d1653563cdf7692435a7540a3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 1195390,
            "upload_time": "2024-09-26T22:27:56",
            "upload_time_iso_8601": "2024-09-26T22:27:56.795740Z",
            "url": "https://files.pythonhosted.org/packages/fd/68/a9273da583437fc850ccf31ef75f6c27246b40b0293a5a164c9ea4b1df5c/pybluemonday-0.0.14-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2efd7961464a24c5f55e3bb00f4a8723e5cbde0d3fadc8136f4136d09ad3c279",
                "md5": "bfaf163b25a5039fd6ed06662166eaf0",
                "sha256": "8ca95c92f116390904541d2d18705585dab2a76fe14e3e1dc5bb38cc88fabb50"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bfaf163b25a5039fd6ed06662166eaf0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 1262010,
            "upload_time": "2024-09-26T22:27:58",
            "upload_time_iso_8601": "2024-09-26T22:27:58.012652Z",
            "url": "https://files.pythonhosted.org/packages/2e/fd/7961464a24c5f55e3bb00f4a8723e5cbde0d3fadc8136f4136d09ad3c279/pybluemonday-0.0.14-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e20a389aede10997e5897fd9dedd44eca6e74cf53be4f4b8c308d7f39a7db1a0",
                "md5": "78fbc7412419fce0db7b482bf09be92e",
                "sha256": "72d81ab23b33a7527f47ab6531194c48223ea548df81f106ddf46b83335782d9"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "78fbc7412419fce0db7b482bf09be92e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 1195379,
            "upload_time": "2024-09-26T22:27:59",
            "upload_time_iso_8601": "2024-09-26T22:27:59.361366Z",
            "url": "https://files.pythonhosted.org/packages/e2/0a/389aede10997e5897fd9dedd44eca6e74cf53be4f4b8c308d7f39a7db1a0/pybluemonday-0.0.14-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9b5bd786b264ad4e5bc696881fa4aeff8607ecb8968f94b8f93155ac4cdab051",
                "md5": "d2a996c6a64db17b22cbde4f0552abc1",
                "sha256": "b2d930efb40d40e3f42512ecd0ce46a10ecbcc907da0b4db20b6ee10a11ab595"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d2a996c6a64db17b22cbde4f0552abc1",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.7",
            "size": 1262009,
            "upload_time": "2024-09-26T22:28:00",
            "upload_time_iso_8601": "2024-09-26T22:28:00.497349Z",
            "url": "https://files.pythonhosted.org/packages/9b/5b/d786b264ad4e5bc696881fa4aeff8607ecb8968f94b8f93155ac4cdab051/pybluemonday-0.0.14-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a6402f8614b864eddccd8aac227b3c2f186543d3e439b600ba7b1820f22a30f4",
                "md5": "f037c2a75c6aba261f42a60dc9e8b696",
                "sha256": "038f04bf8ac50db3b9044eaf68b696826e739906627f285fffbdbe7a0cdcac4e"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f037c2a75c6aba261f42a60dc9e8b696",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.7",
            "size": 1195378,
            "upload_time": "2024-09-26T22:28:02",
            "upload_time_iso_8601": "2024-09-26T22:28:02.141644Z",
            "url": "https://files.pythonhosted.org/packages/a6/40/2f8614b864eddccd8aac227b3c2f186543d3e439b600ba7b1820f22a30f4/pybluemonday-0.0.14-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5314335ef31ed47a27f950f1f518bd8ad92fcdd97a35c3ef7001b6fb9e6dbbc6",
                "md5": "62e3d50c61d3f1a1d7a4ccf06b2e9f59",
                "sha256": "d1e34c01531c7853faedb34c47ee83f7a6c5ed9aa6ff465b0ef07c24a9f7c0d8"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "62e3d50c61d3f1a1d7a4ccf06b2e9f59",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 1261922,
            "upload_time": "2024-09-26T22:28:03",
            "upload_time_iso_8601": "2024-09-26T22:28:03.297368Z",
            "url": "https://files.pythonhosted.org/packages/53/14/335ef31ed47a27f950f1f518bd8ad92fcdd97a35c3ef7001b6fb9e6dbbc6/pybluemonday-0.0.14-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "93a7eabccb87c268486bf50985d833513830e4c56aeed1e59aa43ffb6ecdb978",
                "md5": "083e8f062272920d8ecb97f0c004a7a4",
                "sha256": "bc05e2e8b370121c785d258065c467c9f18c2e5b144b7312f737cd90b3f76975"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "083e8f062272920d8ecb97f0c004a7a4",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 1215993,
            "upload_time": "2024-09-26T22:09:31",
            "upload_time_iso_8601": "2024-09-26T22:09:31.856638Z",
            "url": "https://files.pythonhosted.org/packages/93/a7/eabccb87c268486bf50985d833513830e4c56aeed1e59aa43ffb6ecdb978/pybluemonday-0.0.14-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a5685edb69bf92a2fefdbf145d5956cfed82da9cd54c640b3810ceac7597ebdb",
                "md5": "6117239109a86af326ca9ab3d1e5f9bb",
                "sha256": "1ec0104f6239c1c4ce4c45482f29c12d0f35f3edb86e5fa035bf23a22fa9776f"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6117239109a86af326ca9ab3d1e5f9bb",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1258973,
            "upload_time": "2024-09-26T22:28:04",
            "upload_time_iso_8601": "2024-09-26T22:28:04.638947Z",
            "url": "https://files.pythonhosted.org/packages/a5/68/5edb69bf92a2fefdbf145d5956cfed82da9cd54c640b3810ceac7597ebdb/pybluemonday-0.0.14-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e68f2eb06d7ab5a32fa865dece7b36be6a4ad1d3439a5e487da5eb8cbf271358",
                "md5": "00139e2a9af6412ceeb3bd824b2cf1c6",
                "sha256": "a614f1f1b87c1e41804731764d86a76af517cd3d50008b4b72cbbc27617e6e31"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "00139e2a9af6412ceeb3bd824b2cf1c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1195364,
            "upload_time": "2024-09-26T22:28:06",
            "upload_time_iso_8601": "2024-09-26T22:28:06.204481Z",
            "url": "https://files.pythonhosted.org/packages/e6/8f/2eb06d7ab5a32fa865dece7b36be6a4ad1d3439a5e487da5eb8cbf271358/pybluemonday-0.0.14-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2f8c2669869d3f977812205b1af8cdeddee5c4edfc48ee2932797fcb8903f72",
                "md5": "a1644a8dfe3eea836dd870dc17a587b7",
                "sha256": "2349104d691f3bb7f1e86c7d18e9fc6949172c6759ab8ba4e711bc4b0c792044"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a1644a8dfe3eea836dd870dc17a587b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1216112,
            "upload_time": "2024-09-26T22:09:33",
            "upload_time_iso_8601": "2024-09-26T22:09:33.436858Z",
            "url": "https://files.pythonhosted.org/packages/b2/f8/c2669869d3f977812205b1af8cdeddee5c4edfc48ee2932797fcb8903f72/pybluemonday-0.0.14-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f4fefa3a5fd06fe0a3772b19ac12629a25ff982dfa640447ca5d7f0f5d8a0ba",
                "md5": "b287966d6bf80b087ca13afe24c5a45f",
                "sha256": "25bb2dace226fe3fd3d3cdf8e8593bcfb21c409aae84854276452cd0efa81af1"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b287966d6bf80b087ca13afe24c5a45f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1261840,
            "upload_time": "2024-09-26T22:28:07",
            "upload_time_iso_8601": "2024-09-26T22:28:07.435616Z",
            "url": "https://files.pythonhosted.org/packages/0f/4f/efa3a5fd06fe0a3772b19ac12629a25ff982dfa640447ca5d7f0f5d8a0ba/pybluemonday-0.0.14-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea94c401133882d5bba2f0f304bffcf0c54051d462b0f9eb34877f78760c9260",
                "md5": "a2e35e4b8d62a494e034d85a814a574b",
                "sha256": "ca640de42fddc69825ce6c4ebdfd84ea198bcafbdc122164565e7e3c69a4c708"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a2e35e4b8d62a494e034d85a814a574b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1195379,
            "upload_time": "2024-09-26T22:28:08",
            "upload_time_iso_8601": "2024-09-26T22:28:08.969080Z",
            "url": "https://files.pythonhosted.org/packages/ea/94/c401133882d5bba2f0f304bffcf0c54051d462b0f9eb34877f78760c9260/pybluemonday-0.0.14-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4df641edc3bad804bdfe5f6f1f09f81d94c1d234888f18580bfb1abe2bc6375c",
                "md5": "3999d24599d21d8ba9b8ce2cf401e9c4",
                "sha256": "11fc1d768c4495ce2c4fab5e5bba5488aae2c2786c21874d07e8c4426848182d"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3999d24599d21d8ba9b8ce2cf401e9c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1216047,
            "upload_time": "2024-09-26T22:09:35",
            "upload_time_iso_8601": "2024-09-26T22:09:35.034122Z",
            "url": "https://files.pythonhosted.org/packages/4d/f6/41edc3bad804bdfe5f6f1f09f81d94c1d234888f18580bfb1abe2bc6375c/pybluemonday-0.0.14-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c08ef51ef9b15b0cb5ce2895fccecf67db0cc7fbd2ea309fec95e00bd5c539ba",
                "md5": "93c7e2f3bbdd361cd7ccec9d6f927b49",
                "sha256": "3f72f37ef7ddee7f264758977865c979dd8b5b0157be36755a7c117a285060d6"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "93c7e2f3bbdd361cd7ccec9d6f927b49",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 1259481,
            "upload_time": "2024-09-26T22:28:10",
            "upload_time_iso_8601": "2024-09-26T22:28:10.134928Z",
            "url": "https://files.pythonhosted.org/packages/c0/8e/f51ef9b15b0cb5ce2895fccecf67db0cc7fbd2ea309fec95e00bd5c539ba/pybluemonday-0.0.14-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ae2efde22d830178e28436b5e03bc31a1506329c32d18df1f5836f0e05d5249a",
                "md5": "3795e753f109ee2092d35615ceb4c55e",
                "sha256": "4c8a5c82a860cd5e40b93f50f907f9ca136a00be51f8b81afcf54d447895d846"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3795e753f109ee2092d35615ceb4c55e",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 1191834,
            "upload_time": "2024-09-26T22:28:11",
            "upload_time_iso_8601": "2024-09-26T22:28:11.641585Z",
            "url": "https://files.pythonhosted.org/packages/ae/2e/fde22d830178e28436b5e03bc31a1506329c32d18df1f5836f0e05d5249a/pybluemonday-0.0.14-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "731c3a1c8671e18b106d9841247942828b999034cf3008543644ca2fe58508f9",
                "md5": "ba0df458d42440c209154fbf8986dd92",
                "sha256": "50ac0b8fa70d0c977a675dbaaa2a7d37116272562e54e3aaa2d07c94e66f5326"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ba0df458d42440c209154fbf8986dd92",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 1259428,
            "upload_time": "2024-09-26T22:28:12",
            "upload_time_iso_8601": "2024-09-26T22:28:12.825937Z",
            "url": "https://files.pythonhosted.org/packages/73/1c/3a1c8671e18b106d9841247942828b999034cf3008543644ca2fe58508f9/pybluemonday-0.0.14-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "84fa6fdac57c833a41557ba132500abd9e09bae3564eab48b0fcd5f4b9878184",
                "md5": "60aabbc55b14d902a327f53b567f23cf",
                "sha256": "420050e5f04180c68e09ff7512a383f43eeff242ec11edaafd4a085f9a195ddb"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp37-pypy37_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "60aabbc55b14d902a327f53b567f23cf",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 1212626,
            "upload_time": "2024-09-26T22:09:36",
            "upload_time_iso_8601": "2024-09-26T22:09:36.718623Z",
            "url": "https://files.pythonhosted.org/packages/84/fa/6fdac57c833a41557ba132500abd9e09bae3564eab48b0fcd5f4b9878184/pybluemonday-0.0.14-pp37-pypy37_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5448642098e0545fd8305df63a4e78f83584da710da0f089f0653a0e9ba9f82f",
                "md5": "5c6ede3b992c4f658e74e454fd7023ba",
                "sha256": "67a270faa70b38929e184aaef2dad672173b5cc8f968685fa55b7c1ed7020491"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5c6ede3b992c4f658e74e454fd7023ba",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 1259462,
            "upload_time": "2024-09-26T22:28:13",
            "upload_time_iso_8601": "2024-09-26T22:28:13.946660Z",
            "url": "https://files.pythonhosted.org/packages/54/48/642098e0545fd8305df63a4e78f83584da710da0f089f0653a0e9ba9f82f/pybluemonday-0.0.14-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d8c170e4bc7d4606d223ade5f489187842b062be5fa07058bbf8ffd56d94d7ab",
                "md5": "54de31ef352926bfe7bee8a29050820e",
                "sha256": "32da1831e81b15a9c36058e85fe9b0f272f40368b47e878ce6c80a0c7b7c76ec"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "54de31ef352926bfe7bee8a29050820e",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 1191820,
            "upload_time": "2024-09-26T22:28:15",
            "upload_time_iso_8601": "2024-09-26T22:28:15.134176Z",
            "url": "https://files.pythonhosted.org/packages/d8/c1/70e4bc7d4606d223ade5f489187842b062be5fa07058bbf8ffd56d94d7ab/pybluemonday-0.0.14-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "df390308608b292dee23bad977146f1f69ce144db5fdd3fb90ac8ef9f0d6c90a",
                "md5": "a13c10254882f8be804ece23fc77ec25",
                "sha256": "16c0e0ddb50d2effbb1e805e4a49874e1b13f64f2b8ab2cd35bd61e22bf82689"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp38-pypy38_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a13c10254882f8be804ece23fc77ec25",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 1212611,
            "upload_time": "2024-09-26T22:09:38",
            "upload_time_iso_8601": "2024-09-26T22:09:38.132055Z",
            "url": "https://files.pythonhosted.org/packages/df/39/0308608b292dee23bad977146f1f69ce144db5fdd3fb90ac8ef9f0d6c90a/pybluemonday-0.0.14-pp38-pypy38_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "945af5163782203132827465ef4308975a1432315252e1dad931ad459086d506",
                "md5": "da439810459d6dd1ebb8ccabf62bad20",
                "sha256": "e629729b024fa52850614cc507a2330684a0138b524388f8177a8496fbee62b5"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "da439810459d6dd1ebb8ccabf62bad20",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 1259477,
            "upload_time": "2024-09-26T22:28:16",
            "upload_time_iso_8601": "2024-09-26T22:28:16.749361Z",
            "url": "https://files.pythonhosted.org/packages/94/5a/f5163782203132827465ef4308975a1432315252e1dad931ad459086d506/pybluemonday-0.0.14-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e8fd5dc7ce0447cb9470cd3b74303b47b911c2d91d8d18007118817581f9a4f0",
                "md5": "b2dc418b672a6ee6f86ecff37a29e52c",
                "sha256": "c94fe64b139c1d18b26355461ae9674d43082002b77fb82637c19905c7e1724e"
            },
            "downloads": -1,
            "filename": "pybluemonday-0.0.14-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b2dc418b672a6ee6f86ecff37a29e52c",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 1191824,
            "upload_time": "2024-09-26T22:28:18",
            "upload_time_iso_8601": "2024-09-26T22:28:18.138099Z",
            "url": "https://files.pythonhosted.org/packages/e8/fd/5dc7ce0447cb9470cd3b74303b47b911c2d91d8d18007118817581f9a4f0/pybluemonday-0.0.14-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-26 22:27:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ColdHeat",
    "github_project": "pybluemonday",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pybluemonday"
}
        
Elapsed time: 0.49496s