pysubstringsearch


Namepysubstringsearch JSON
Version 0.7.0 PyPI version JSON
download
home_pagehttps://github.com/intsights/pysubstringsearch
SummaryA Python library written in Rust that searches for substrings quickly using a Suffix Array
upload_time2023-01-10 08:03:42
maintainerNone
docs_urlNone
authorGal Ben David <gal@intsights.com>
requires_python>=3.7
licenseMIT
keywords substring pattern search suffix array rust pyo3
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
    <a href="https://github.com/Intsights/PySubstringSearch">
        <img src="https://raw.githubusercontent.com/Intsights/PySubstringSearch/master/images/logo.png" alt="Logo">
    </a>
    <h3 align="center">
        A Python library written in Rust that searches for substrings quickly using a Suffix Array
    </h3>
</p>

![license](https://img.shields.io/badge/MIT-License-blue)
![Python](https://img.shields.io/badge/Python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue)
![Build](https://github.com/Intsights/PySubstringSearch/workflows/Build/badge.svg)
[![PyPi](https://img.shields.io/pypi/v/PySubstringSearch.svg)](https://pypi.org/project/PySubstringSearch/)

## Table of Contents

- [Table of Contents](#table-of-contents)
- [About The Project](#about-the-project)
  - [Built With](#built-with)
  - [Performance](#performance)
    - [500MB File](#500mb-file)
    - [7500MB File](#7500mb-file)
  - [Installation](#installation)
- [Usage](#usage)
- [License](#license)
- [Contact](#contact)


## About The Project

PySubstringSearch is a library designed to search over an index file for substring patterns. In order to achieve speed and efficiency, the library is written in Rust. For string indexing, the library uses [libsais](https://github.com/IlyaGrebnov/libsais) suffix array construction library. The index created consists of the original text and a 32bit suffix array struct. To get around the limitations of the Suffix Array Construction implementation, the library uses a proprietary container protocol to hold the original text and index in chunks of 512MB.

The module implements a method for searching.
- `search` - Find different entries with the same substring concurrently. Concurrency increases as the index file grows in size with multiple inner chunks.
- `search_multiple` - same as `search` but accepts multiple substrings in a single call


### Built With

* [libsais](https://github.com/IlyaGrebnov/libsais)


### Performance

#### 500MB File
| Library | Function | Time | #Results | Improvement Factor |
| ------------- | ------------- | ------------- | ------------- | ------------- |
| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('google', '500mb').run().as_string.split('\n') | 47.2ms | 5943 | 1.0x |
| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('google') | 497µs | 5943 | 95x |
| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('text_two', '500mb').run().as_string.split('\n') | 44.7ms | 159 | 1.0x |
| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('text_two') | 14.9µs | 159 | 3000x |

#### 7500MB File
| Library | Function | Time | #Results | Improvement Factor |
| ------------- | ------------- | ------------- | ------------- | ------------- |
| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('google', '6000mb').run().as_string.split('\n') | 900ms | 62834 | 1.0x |
| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('google') | 10.1ms | 62834 | 89.1x |
| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('text_two', '6000mb').run().as_string.split('\n') | 820ms | 0 | 1.0x |
| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('text_two') | 200µs | 0 | 4100x |


### Installation

```sh
pip3 install PySubstringSearch
```


## Usage

Create an index
```python
import pysubstringsearch

# creating a new index file
# if a file with this name is already exists, it will be overwritten
writer = pysubstringsearch.Writer(
    index_file_path='output.idx',
)

# adding entries to the new index
writer.add_entry('some short string')
writer.add_entry('another but now a longer string')
writer.add_entry('more text to add')

# adding entries from file lines
writer.add_entries_from_file_lines('input_file.txt')

# making sure the data is dumped to the file
writer.finalize()
```

Search a substring within an index
```python
import pysubstringsearch

# opening an index file for searching
reader = pysubstringsearch.Reader(
    index_file_path='output.idx',
)

# lookup for a substring
reader.search('short')
>>> ['some short string']

# lookup for a substring
reader.search('string')
>>> ['some short string', 'another but now a longer string']

# lookup for multiple substrings
reader.search_multiple(
    [
        'short',
        'longer',
    ],
)
>>> ['some short string', 'another but now a longer string']
```



## License

Distributed under the MIT License. See `LICENSE` for more information.


## Contact

Gal Ben David - gal@intsights.com

Project Link: [https://github.com/Intsights/PySubstringSearch](https://github.com/Intsights/PySubstringSearch)


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/intsights/pysubstringsearch",
    "name": "pysubstringsearch",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "substring,pattern,search,suffix,array,rust,pyo3",
    "author": "Gal Ben David <gal@intsights.com>",
    "author_email": "Gal Ben David <gal@intsights.com>",
    "download_url": null,
    "platform": null,
    "description": "<p align=\"center\">\n    <a href=\"https://github.com/Intsights/PySubstringSearch\">\n        <img src=\"https://raw.githubusercontent.com/Intsights/PySubstringSearch/master/images/logo.png\" alt=\"Logo\">\n    </a>\n    <h3 align=\"center\">\n        A Python library written in Rust that searches for substrings quickly using a Suffix Array\n    </h3>\n</p>\n\n![license](https://img.shields.io/badge/MIT-License-blue)\n![Python](https://img.shields.io/badge/Python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue)\n![Build](https://github.com/Intsights/PySubstringSearch/workflows/Build/badge.svg)\n[![PyPi](https://img.shields.io/pypi/v/PySubstringSearch.svg)](https://pypi.org/project/PySubstringSearch/)\n\n## Table of Contents\n\n- [Table of Contents](#table-of-contents)\n- [About The Project](#about-the-project)\n  - [Built With](#built-with)\n  - [Performance](#performance)\n    - [500MB File](#500mb-file)\n    - [7500MB File](#7500mb-file)\n  - [Installation](#installation)\n- [Usage](#usage)\n- [License](#license)\n- [Contact](#contact)\n\n\n## About The Project\n\nPySubstringSearch is a library designed to search over an index file for substring patterns. In order to achieve speed and efficiency, the library is written in Rust. For string indexing, the library uses [libsais](https://github.com/IlyaGrebnov/libsais) suffix array construction library. The index created consists of the original text and a 32bit suffix array struct. To get around the limitations of the Suffix Array Construction implementation, the library uses a proprietary container protocol to hold the original text and index in chunks of 512MB.\n\nThe module implements a method for searching.\n- `search` - Find different entries with the same substring concurrently. Concurrency increases as the index file grows in size with multiple inner chunks.\n- `search_multiple` - same as `search` but accepts multiple substrings in a single call\n\n\n### Built With\n\n* [libsais](https://github.com/IlyaGrebnov/libsais)\n\n\n### Performance\n\n#### 500MB File\n| Library | Function | Time | #Results | Improvement Factor |\n| ------------- | ------------- | ------------- | ------------- | ------------- |\n| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('google', '500mb').run().as_string.split('\\n') | 47.2ms | 5943 | 1.0x |\n| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('google') | 497\u00b5s | 5943 | 95x |\n| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('text_two', '500mb').run().as_string.split('\\n') | 44.7ms | 159 | 1.0x |\n| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('text_two') | 14.9\u00b5s | 159 | 3000x |\n\n#### 7500MB File\n| Library | Function | Time | #Results | Improvement Factor |\n| ------------- | ------------- | ------------- | ------------- | ------------- |\n| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('google', '6000mb').run().as_string.split('\\n') | 900ms | 62834 | 1.0x |\n| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('google') | 10.1ms | 62834 | 89.1x |\n| [ripgrepy](https://pypi.org/project/ripgrepy/) | Ripgrepy('text_two', '6000mb').run().as_string.split('\\n') | 820ms | 0 | 1.0x |\n| [PySubstringSearch](https://github.com/Intsights/PySubstringSearch) | reader.search('text_two') | 200\u00b5s | 0 | 4100x |\n\n\n### Installation\n\n```sh\npip3 install PySubstringSearch\n```\n\n\n## Usage\n\nCreate an index\n```python\nimport pysubstringsearch\n\n# creating a new index file\n# if a file with this name is already exists, it will be overwritten\nwriter = pysubstringsearch.Writer(\n    index_file_path='output.idx',\n)\n\n# adding entries to the new index\nwriter.add_entry('some short string')\nwriter.add_entry('another but now a longer string')\nwriter.add_entry('more text to add')\n\n# adding entries from file lines\nwriter.add_entries_from_file_lines('input_file.txt')\n\n# making sure the data is dumped to the file\nwriter.finalize()\n```\n\nSearch a substring within an index\n```python\nimport pysubstringsearch\n\n# opening an index file for searching\nreader = pysubstringsearch.Reader(\n    index_file_path='output.idx',\n)\n\n# lookup for a substring\nreader.search('short')\n>>> ['some short string']\n\n# lookup for a substring\nreader.search('string')\n>>> ['some short string', 'another but now a longer string']\n\n# lookup for multiple substrings\nreader.search_multiple(\n    [\n        'short',\n        'longer',\n    ],\n)\n>>> ['some short string', 'another but now a longer string']\n```\n\n\n\n## License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n\n\n## Contact\n\nGal Ben David - gal@intsights.com\n\nProject Link: [https://github.com/Intsights/PySubstringSearch](https://github.com/Intsights/PySubstringSearch)\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Python library written in Rust that searches for substrings quickly using a Suffix Array",
    "version": "0.7.0",
    "split_keywords": [
        "substring",
        "pattern",
        "search",
        "suffix",
        "array",
        "rust",
        "pyo3"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ca83f2e0fd4d9b39f7d4edfffec6ee5ccb57ddecd5c5e30e4e5fed8f416ffc6d",
                "md5": "c059770e7093882b1c6e37cede982c3e",
                "sha256": "6b1d16d7c5a672e275c4d57b949247215376f8394c09055277cadc52b2a21946"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp310-cp310-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c059770e7093882b1c6e37cede982c3e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 226152,
            "upload_time": "2023-01-10T08:03:42",
            "upload_time_iso_8601": "2023-01-10T08:03:42.419069Z",
            "url": "https://files.pythonhosted.org/packages/ca/83/f2e0fd4d9b39f7d4edfffec6ee5ccb57ddecd5c5e30e4e5fed8f416ffc6d/pysubstringsearch-0.7.0-cp310-cp310-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1f62a36d99f6dd5893be22998fb8609470180a6dd58b94f82d864f6ca00fb942",
                "md5": "145424143e0a5d20613c7be20ea22013",
                "sha256": "58575871866ae2bc3fc5268ba2368b0983200059fe0531ccf13a0ebcf6480462"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "145424143e0a5d20613c7be20ea22013",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 241248,
            "upload_time": "2023-01-10T08:04:30",
            "upload_time_iso_8601": "2023-01-10T08:04:30.504386Z",
            "url": "https://files.pythonhosted.org/packages/1f/62/a36d99f6dd5893be22998fb8609470180a6dd58b94f82d864f6ca00fb942/pysubstringsearch-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cfa70202efedf6d289c6dcd9fdfff0822db618e9162459d3bb18ef8b13cdb83a",
                "md5": "1707f7da7ac724ac36ea28810a18304d",
                "sha256": "3b541f005420b54bd8b685bfb7186ac399eff9489c2c3065a302031682f2bc06"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1707f7da7ac724ac36ea28810a18304d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 173128,
            "upload_time": "2023-01-10T08:05:32",
            "upload_time_iso_8601": "2023-01-10T08:05:32.747175Z",
            "url": "https://files.pythonhosted.org/packages/cf/a7/0202efedf6d289c6dcd9fdfff0822db618e9162459d3bb18ef8b13cdb83a/pysubstringsearch-0.7.0-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dcc94aeac5ed1c3b56c64d07b2eb9c42c6d8103654c05f1ba52aacf19df09050",
                "md5": "510ea940f8c995f901bdc5151646f3bf",
                "sha256": "4f598c75912cdc24f4ca34aeedb4685460a442cd790fd792f8cabc125fa89440"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp311-cp311-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "510ea940f8c995f901bdc5151646f3bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 226154,
            "upload_time": "2023-01-10T08:03:33",
            "upload_time_iso_8601": "2023-01-10T08:03:33.495472Z",
            "url": "https://files.pythonhosted.org/packages/dc/c9/4aeac5ed1c3b56c64d07b2eb9c42c6d8103654c05f1ba52aacf19df09050/pysubstringsearch-0.7.0-cp311-cp311-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6924d08965e4b685ad5c59a2a6c1ef0cf93008532473a8d3f6ffbb05e6004198",
                "md5": "6d91a9bc58d1003695318448d8d2437f",
                "sha256": "1fe4a6cfb5c8dbe46231b4ced3786d92b59b4bc815c1781169fe2a3ec6a11033"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6d91a9bc58d1003695318448d8d2437f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 241250,
            "upload_time": "2023-01-10T08:04:32",
            "upload_time_iso_8601": "2023-01-10T08:04:32.186896Z",
            "url": "https://files.pythonhosted.org/packages/69/24/d08965e4b685ad5c59a2a6c1ef0cf93008532473a8d3f6ffbb05e6004198/pysubstringsearch-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f22abaca8ad27bd928353f2df5f54f61f177940b60689d1946cc2f4200c8b327",
                "md5": "8a706a4e0e0c172a1d46262438398c4e",
                "sha256": "6c1d48e849e371154b4a5e9456b7c33ef2adfa427292a9b2e3ae124b2ecdb6df"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8a706a4e0e0c172a1d46262438398c4e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 173134,
            "upload_time": "2023-01-10T08:06:23",
            "upload_time_iso_8601": "2023-01-10T08:06:23.687711Z",
            "url": "https://files.pythonhosted.org/packages/f2/2a/baca8ad27bd928353f2df5f54f61f177940b60689d1946cc2f4200c8b327/pysubstringsearch-0.7.0-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "86c3d20663d65545f9688797262b7f7859316f728bb3a0446193d5866bea2f49",
                "md5": "a0f858dd6cc0d4e6e8431144c8c25628",
                "sha256": "bf6ab82713cc09a7cc1e297dd58329e64f37632fda49a1c7e520af3de39aa55f"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp37-cp37m-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a0f858dd6cc0d4e6e8431144c8c25628",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 226320,
            "upload_time": "2023-01-10T08:03:31",
            "upload_time_iso_8601": "2023-01-10T08:03:31.804427Z",
            "url": "https://files.pythonhosted.org/packages/86/c3/d20663d65545f9688797262b7f7859316f728bb3a0446193d5866bea2f49/pysubstringsearch-0.7.0-cp37-cp37m-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9445ac1d39a626fa7783888636803a13cefc680e6718e60d82bd4dabd5a165c8",
                "md5": "3a1a6fd89ff77e685bf185b5bb082180",
                "sha256": "e779e592bebd0f700e2f3d71fe3ba604c254b4b06a998aea64b5289c6e589737"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3a1a6fd89ff77e685bf185b5bb082180",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 241390,
            "upload_time": "2023-01-10T08:03:55",
            "upload_time_iso_8601": "2023-01-10T08:03:55.300406Z",
            "url": "https://files.pythonhosted.org/packages/94/45/ac1d39a626fa7783888636803a13cefc680e6718e60d82bd4dabd5a165c8/pysubstringsearch-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8f614f7bf60c9689472443a7e5076a87e0ece73fdc96c1824c94a1d0f4fd8908",
                "md5": "1ef2c33a39fccc418963ae8637431537",
                "sha256": "8185d5072bd125af60eab8e59d2c6748773afee6c3a9521a611844e8673f2f0f"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp37-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1ef2c33a39fccc418963ae8637431537",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 173500,
            "upload_time": "2023-01-10T08:05:13",
            "upload_time_iso_8601": "2023-01-10T08:05:13.191918Z",
            "url": "https://files.pythonhosted.org/packages/8f/61/4f7bf60c9689472443a7e5076a87e0ece73fdc96c1824c94a1d0f4fd8908/pysubstringsearch-0.7.0-cp37-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b75d925c55076e78eda47b00ab5d5b30d74f3e97cc3b1f8759f62ba77a707006",
                "md5": "b77749975cd95adbf2ddf662deda72a8",
                "sha256": "923e133710024e3f5af55d28fd7ec7ebd586d62381ca4cc27487eab820411ef1"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp38-cp38-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b77749975cd95adbf2ddf662deda72a8",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 226319,
            "upload_time": "2023-01-10T08:03:44",
            "upload_time_iso_8601": "2023-01-10T08:03:44.071548Z",
            "url": "https://files.pythonhosted.org/packages/b7/5d/925c55076e78eda47b00ab5d5b30d74f3e97cc3b1f8759f62ba77a707006/pysubstringsearch-0.7.0-cp38-cp38-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "75a08987fbe2b403459324f9c215c8489b2684719c651e9d3692c667c50ef97a",
                "md5": "353eae3d676bc79983767fce5a2a52c3",
                "sha256": "75002d0a9aa82d783f81c4dc77c52a710b122c908cbddd43bc0b50a6de676f09"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "353eae3d676bc79983767fce5a2a52c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 241381,
            "upload_time": "2023-01-10T08:04:18",
            "upload_time_iso_8601": "2023-01-10T08:04:18.809050Z",
            "url": "https://files.pythonhosted.org/packages/75/a0/8987fbe2b403459324f9c215c8489b2684719c651e9d3692c667c50ef97a/pysubstringsearch-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1cde3c070fbbd5b87efd8870dfc49384f5df352043cae1d69c968ee4a189066",
                "md5": "f88d5b071c62ee43568cb744f7ca2c3f",
                "sha256": "9a572f2bb241eb4e151d2b6f51efe1b4e63d1d2c9ba5e5ef0142e067ca66e58f"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp38-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f88d5b071c62ee43568cb744f7ca2c3f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 173540,
            "upload_time": "2023-01-10T08:04:20",
            "upload_time_iso_8601": "2023-01-10T08:04:20.787495Z",
            "url": "https://files.pythonhosted.org/packages/e1/cd/e3c070fbbd5b87efd8870dfc49384f5df352043cae1d69c968ee4a189066/pysubstringsearch-0.7.0-cp38-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ff1ff93c2c5377efc7629b876f2567dfec30aefaa236fd3a574adf6728863af8",
                "md5": "5813a6538ebe2978db907b972d543a23",
                "sha256": "f9e7d2fed5eda31f46fa04a6889b9e8bdc42dcafc976832bd8e789f3eb249c10"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp39-cp39-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5813a6538ebe2978db907b972d543a23",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 226166,
            "upload_time": "2023-01-10T08:06:28",
            "upload_time_iso_8601": "2023-01-10T08:06:28.923386Z",
            "url": "https://files.pythonhosted.org/packages/ff/1f/f93c2c5377efc7629b876f2567dfec30aefaa236fd3a574adf6728863af8/pysubstringsearch-0.7.0-cp39-cp39-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0840a47d7a44134482b8aa33df2b7c893e7b9e0d1466939ff77ba668e53328c6",
                "md5": "68037ce91ccd14f4dac26809aa1009b5",
                "sha256": "50169abd259e349cbdae5cfbb08b7cd199e347224867058a9e050b969b378c34"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "68037ce91ccd14f4dac26809aa1009b5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 241204,
            "upload_time": "2023-01-10T08:04:13",
            "upload_time_iso_8601": "2023-01-10T08:04:13.325822Z",
            "url": "https://files.pythonhosted.org/packages/08/40/a47d7a44134482b8aa33df2b7c893e7b9e0d1466939ff77ba668e53328c6/pysubstringsearch-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "981a9c70c1a22ba3b75535a6ef7b79a00a0a001f67de2029880d802cbf9f40c8",
                "md5": "bfdf8a86e586127ead07108c998ad738",
                "sha256": "501c906a1772975389b7d4e8f3bae91d5b4db3c8a67f85443e2ec85d936ddf76"
            },
            "downloads": -1,
            "filename": "pysubstringsearch-0.7.0-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "bfdf8a86e586127ead07108c998ad738",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 173143,
            "upload_time": "2023-01-10T08:04:49",
            "upload_time_iso_8601": "2023-01-10T08:04:49.111899Z",
            "url": "https://files.pythonhosted.org/packages/98/1a/9c70c1a22ba3b75535a6ef7b79a00a0a001f67de2029880d802cbf9f40c8/pysubstringsearch-0.7.0-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-01-10 08:03:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "intsights",
    "github_project": "pysubstringsearch",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pysubstringsearch"
}
        
Elapsed time: 0.04054s