<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"
}