solrstice


Namesolrstice JSON
Version 0.4.3 PyPI version JSON
download
home_pageNone
SummaryA Solr client library written in Rust
upload_time2024-01-20 23:16:00
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT OR Apache-2.0
keywords solr rust search
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Solrstice: A Solr 8+ Client for Rust and Python
Solrstice is a solr client library written in rust. With this wrapper you can use it in python.

Both asyncio and blocking clients are provided. All apis have type hints.
Documentation can be found at [sh1nku.github.io/solrstice/python](https://sh1nku.github.io/solrstice/python)
## Features
* Config API
* Collection API
* Alias API
* Select Documents
  * Grouping Component Query
  * DefTypes (lucene, dismax, edismax)
  * Facet Counts (Query, Field, Pivot)
  * Json Facet (Query, Stat, Terms, Nested)
* Indexing Documents
* Deleting Documents
## Installation
```bash
pip install solrstice
```
## Basic Usage
### Async
```python
import asyncio

from solrstice.auth import SolrBasicAuth
from solrstice.clients import AsyncSolrCloudClient
from solrstice.hosts import SolrServerContext, SolrSingleServerHost
from solrstice.queries import DeleteQuery, SelectQuery, UpdateQuery

# A SolrServerContext specifies how the library should interact with Solr
context = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))
client = AsyncSolrCloudClient(context)

async def main():
    # Create config and collection
    await client.upload_config('example_config', 'path/to/config')
    await client.create_collection('example_collection', 'example_config', shards=1, replication_factor=1)
    
    # Index a document
    await client.index(UpdateQuery(), 'example_collection', [{'id': 'example_document', 'title': 'Example document'}])
    
    # Search for the document
    response = await client.select(SelectQuery(fq=['title:Example document']), 'example_collection')
    docs = response.get_docs_response().get_docs()
    
    # Delete the document
    await client.delete(DeleteQuery(ids=['example_document']), 'example_collection')
    

asyncio.run(main())
```
### Blocking
```python
from solrstice.auth import SolrBasicAuth
from solrstice.clients import BlockingSolrCloudClient
from solrstice.hosts import SolrServerContext, SolrSingleServerHost
from solrstice.queries import DeleteQuery, SelectQuery, UpdateQuery

# A SolrServerContext specifies how the library should interact with Solr
context = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))
client = BlockingSolrCloudClient(context)

# Create config and collection
client.upload_config('example_config', 'path/to/config')
client.create_collection('example_collection', 'example_config', shards=1, replication_factor=1)

# Index a document
client.index(UpdateQuery(), 'example_collection', [{'id': 'example_document', 'title': 'Example document'}])

# Search for the document
response = client.select(SelectQuery(fq=['title:Example document']), 'example_collection')
docs = response.get_docs_response().get_docs()

# Delete the document
client.delete(DeleteQuery(ids=['example_document']), 'example_collection')
```

## Grouping component
### Field grouping
```python
group_builder = GroupingComponent(fields=["age"], limit=10)
select_builder = SelectQuery(fq=["age:[* TO *]"], grouping=group_builder)
groups = await client.select(select_builder, "example_collection").get_groups()
age_group = groups["age"]
docs = age_group.get_field_result()
```
### Query grouping
```python
group_builder = GroupingComponent(queries=["age:[0 TO 59]", "age:[60 TO *]"], limit=10)
select_builder = SelectQuery(fq=["age:[* TO *]"], grouping=group_builder)
groups = await client.select(select_builder, "example_collection").get_groups()
age_group = groups["age:[0 TO 59]"]
group = age_group.get_query_result()
docs = group.get_docs()
```
## Query parsers
### Lucene
```python
query_parser = LuceneQuery(df="population")
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
await client.select(select_builder, "example_collection")
docs = response.get_docs_response().get_docs()
```
### Dismax
```python
query_parser = DismaxQuery(qf="interests^20", bq=["interests:cars^20"])
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
await client.select(select_builder, "example_collection")
docs = response.get_docs_response().get_docs()
```
### Edismax
```python
query_parser = EdismaxQuery(qf="interests^20", bq=["interests:cars^20"])
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
await client.select(select_builder, "example_collection")
docs = response.get_docs_response().get_docs()
```
## FacetSet Component
### Pivot facet
```python
select_builder = SelectQuery(facet_set=FacetSetComponent(pivots=PivotFacetComponent(["interests,age"])))
await client.select(select_builder, "example_collection")
facets = response.get_facet_set()
pivots = facets.get_pivots()
interests_age = pivot.get("interests,age")
```
### Field facet
```python
facet_set = FacetSetComponent(fields=FieldFacetComponent(fields=[FieldFacetEntry("age")]))
select_builder = SelectQuery(facet_set=facet_set)
response = await client.select(select_builder, "example_collection")
facets = response.get_facet_set()
fields = facets.get_fields()
age = fields.get("age")
```
### Query facet
```python
select_builder = SelectQuery(facet_set=FacetSetComponent(queries=["age:[0 TO 59]"]))
response = await client.select(select_builder, name)
facets = response.get_facet_set()
queries = facets.get_queries()
query = queries.get("age:[0 TO 59]")
```
## Json Facet Component
### Query
```python
select_builder = SelectQuery(
  json_facet=JsonFacetComponent(
    facets={"below_60": JsonQueryFacet("age:[0 TO 59]")}
  )
)
response = await client.select(select_builder, "example_collection"")
facets = response.get_json_facets()
below_60 = facets.get_nested_facets().get("below_60")
assert below_60.get_count() == 4
```
### Stat
```python
select_builder = SelectQuery(
    json_facet=JsonFacetComponent(
        facets={"total_people": JsonStatFacet("sum(count)")}
    )
)
response = await client.select(select_builder, "example_collection")
facets = response.get_json_facets()
total_people = facets.get_flat_facets().get("total_people")
assert total_people == 1000
```
### Terms
```python
select_builder = SelectQuery(
    json_facet=JsonFacetComponent(facets={"age": JsonTermsFacet("age")})
)
response = await config.async_client.select(select_builder, name)
facets = response.get_json_facets()
age_buckets = facets.get_nested_facets().get("age").get_buckets()
assert len(age_buckets) == 3
```
### Nested
```python
select_builder = SelectQuery(
    json_facet=JsonFacetComponent(
        facets={
            "below_60": JsonQueryFacet(
                "age:[0 TO 59]",
                facets={"total_people": JsonStatFacet("sum(count)")},
            )
        }
    )
)
response = await client.select(select_builder, "example_collection")
facets = response.get_json_facets()
total_people = (
    facets.get_nested_facets()
    .get("below_60")
    .get_flat_facets()
    .get("total_people")
)
assert total_people == 750.0
```
## Hosts
### Single Server
```python
context = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))
client = AsyncSolrCloudClient(context)
```
### Multiple servers
```python
# The client will randomly select a server to send requests to. It will wait 5 seconds for a response, before trying another server.
context = SolrServerContext(
  SolrMultipleServerHost(["localhost:8983", "localhost:8984"], 5),
  SolrBasicAuth('solr', 'SolrRocks'),
)
client = AsyncSolrCloudClient(context)
```
### Zookeeper
```python
context = SolrServerContext(
    await ZookeeperEnsembleHostConnector(["localhost:2181"], 30).connect(),
    SolrBasicAuth('solr', 'SolrRocks'),
)
client = AsyncSolrCloudClient(context)
```

## Notes
* Multiprocessing does not work, and will block forever. Normal multithreading works fine.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "solrstice",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "solr,rust,search",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/7d/f3/0f2dcff95a6aa322288a1aa68c291bd45f07c6ee301858329047b4a42086/solrstice-0.4.3.tar.gz",
    "platform": null,
    "description": "# Solrstice: A Solr 8+ Client for Rust and Python\nSolrstice is a solr client library written in rust. With this wrapper you can use it in python.\n\nBoth asyncio and blocking clients are provided. All apis have type hints.\nDocumentation can be found at [sh1nku.github.io/solrstice/python](https://sh1nku.github.io/solrstice/python)\n## Features\n* Config API\n* Collection API\n* Alias API\n* Select Documents\n  * Grouping Component Query\n  * DefTypes (lucene, dismax, edismax)\n  * Facet Counts (Query, Field, Pivot)\n  * Json Facet (Query, Stat, Terms, Nested)\n* Indexing Documents\n* Deleting Documents\n## Installation\n```bash\npip install solrstice\n```\n## Basic Usage\n### Async\n```python\nimport asyncio\n\nfrom solrstice.auth import SolrBasicAuth\nfrom solrstice.clients import AsyncSolrCloudClient\nfrom solrstice.hosts import SolrServerContext, SolrSingleServerHost\nfrom solrstice.queries import DeleteQuery, SelectQuery, UpdateQuery\n\n# A SolrServerContext specifies how the library should interact with Solr\ncontext = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))\nclient = AsyncSolrCloudClient(context)\n\nasync def main():\n    # Create config and collection\n    await client.upload_config('example_config', 'path/to/config')\n    await client.create_collection('example_collection', 'example_config', shards=1, replication_factor=1)\n    \n    # Index a document\n    await client.index(UpdateQuery(), 'example_collection', [{'id': 'example_document', 'title': 'Example document'}])\n    \n    # Search for the document\n    response = await client.select(SelectQuery(fq=['title:Example document']), 'example_collection')\n    docs = response.get_docs_response().get_docs()\n    \n    # Delete the document\n    await client.delete(DeleteQuery(ids=['example_document']), 'example_collection')\n    \n\nasyncio.run(main())\n```\n### Blocking\n```python\nfrom solrstice.auth import SolrBasicAuth\nfrom solrstice.clients import BlockingSolrCloudClient\nfrom solrstice.hosts import SolrServerContext, SolrSingleServerHost\nfrom solrstice.queries import DeleteQuery, SelectQuery, UpdateQuery\n\n# A SolrServerContext specifies how the library should interact with Solr\ncontext = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))\nclient = BlockingSolrCloudClient(context)\n\n# Create config and collection\nclient.upload_config('example_config', 'path/to/config')\nclient.create_collection('example_collection', 'example_config', shards=1, replication_factor=1)\n\n# Index a document\nclient.index(UpdateQuery(), 'example_collection', [{'id': 'example_document', 'title': 'Example document'}])\n\n# Search for the document\nresponse = client.select(SelectQuery(fq=['title:Example document']), 'example_collection')\ndocs = response.get_docs_response().get_docs()\n\n# Delete the document\nclient.delete(DeleteQuery(ids=['example_document']), 'example_collection')\n```\n\n## Grouping component\n### Field grouping\n```python\ngroup_builder = GroupingComponent(fields=[\"age\"], limit=10)\nselect_builder = SelectQuery(fq=[\"age:[* TO *]\"], grouping=group_builder)\ngroups = await client.select(select_builder, \"example_collection\").get_groups()\nage_group = groups[\"age\"]\ndocs = age_group.get_field_result()\n```\n### Query grouping\n```python\ngroup_builder = GroupingComponent(queries=[\"age:[0 TO 59]\", \"age:[60 TO *]\"], limit=10)\nselect_builder = SelectQuery(fq=[\"age:[* TO *]\"], grouping=group_builder)\ngroups = await client.select(select_builder, \"example_collection\").get_groups()\nage_group = groups[\"age:[0 TO 59]\"]\ngroup = age_group.get_query_result()\ndocs = group.get_docs()\n```\n## Query parsers\n### Lucene\n```python\nquery_parser = LuceneQuery(df=\"population\")\nselect_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\nawait client.select(select_builder, \"example_collection\")\ndocs = response.get_docs_response().get_docs()\n```\n### Dismax\n```python\nquery_parser = DismaxQuery(qf=\"interests^20\", bq=[\"interests:cars^20\"])\nselect_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\nawait client.select(select_builder, \"example_collection\")\ndocs = response.get_docs_response().get_docs()\n```\n### Edismax\n```python\nquery_parser = EdismaxQuery(qf=\"interests^20\", bq=[\"interests:cars^20\"])\nselect_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\nawait client.select(select_builder, \"example_collection\")\ndocs = response.get_docs_response().get_docs()\n```\n## FacetSet Component\n### Pivot facet\n```python\nselect_builder = SelectQuery(facet_set=FacetSetComponent(pivots=PivotFacetComponent([\"interests,age\"])))\nawait client.select(select_builder, \"example_collection\")\nfacets = response.get_facet_set()\npivots = facets.get_pivots()\ninterests_age = pivot.get(\"interests,age\")\n```\n### Field facet\n```python\nfacet_set = FacetSetComponent(fields=FieldFacetComponent(fields=[FieldFacetEntry(\"age\")]))\nselect_builder = SelectQuery(facet_set=facet_set)\nresponse = await client.select(select_builder, \"example_collection\")\nfacets = response.get_facet_set()\nfields = facets.get_fields()\nage = fields.get(\"age\")\n```\n### Query facet\n```python\nselect_builder = SelectQuery(facet_set=FacetSetComponent(queries=[\"age:[0 TO 59]\"]))\nresponse = await client.select(select_builder, name)\nfacets = response.get_facet_set()\nqueries = facets.get_queries()\nquery = queries.get(\"age:[0 TO 59]\")\n```\n## Json Facet Component\n### Query\n```python\nselect_builder = SelectQuery(\n  json_facet=JsonFacetComponent(\n    facets={\"below_60\": JsonQueryFacet(\"age:[0 TO 59]\")}\n  )\n)\nresponse = await client.select(select_builder, \"example_collection\"\")\nfacets = response.get_json_facets()\nbelow_60 = facets.get_nested_facets().get(\"below_60\")\nassert below_60.get_count() == 4\n```\n### Stat\n```python\nselect_builder = SelectQuery(\n    json_facet=JsonFacetComponent(\n        facets={\"total_people\": JsonStatFacet(\"sum(count)\")}\n    )\n)\nresponse = await client.select(select_builder, \"example_collection\")\nfacets = response.get_json_facets()\ntotal_people = facets.get_flat_facets().get(\"total_people\")\nassert total_people == 1000\n```\n### Terms\n```python\nselect_builder = SelectQuery(\n    json_facet=JsonFacetComponent(facets={\"age\": JsonTermsFacet(\"age\")})\n)\nresponse = await config.async_client.select(select_builder, name)\nfacets = response.get_json_facets()\nage_buckets = facets.get_nested_facets().get(\"age\").get_buckets()\nassert len(age_buckets) == 3\n```\n### Nested\n```python\nselect_builder = SelectQuery(\n    json_facet=JsonFacetComponent(\n        facets={\n            \"below_60\": JsonQueryFacet(\n                \"age:[0 TO 59]\",\n                facets={\"total_people\": JsonStatFacet(\"sum(count)\")},\n            )\n        }\n    )\n)\nresponse = await client.select(select_builder, \"example_collection\")\nfacets = response.get_json_facets()\ntotal_people = (\n    facets.get_nested_facets()\n    .get(\"below_60\")\n    .get_flat_facets()\n    .get(\"total_people\")\n)\nassert total_people == 750.0\n```\n## Hosts\n### Single Server\n```python\ncontext = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))\nclient = AsyncSolrCloudClient(context)\n```\n### Multiple servers\n```python\n# The client will randomly select a server to send requests to. It will wait 5 seconds for a response, before trying another server.\ncontext = SolrServerContext(\n  SolrMultipleServerHost([\"localhost:8983\", \"localhost:8984\"], 5),\n  SolrBasicAuth('solr', 'SolrRocks'),\n)\nclient = AsyncSolrCloudClient(context)\n```\n### Zookeeper\n```python\ncontext = SolrServerContext(\n    await ZookeeperEnsembleHostConnector([\"localhost:2181\"], 30).connect(),\n    SolrBasicAuth('solr', 'SolrRocks'),\n)\nclient = AsyncSolrCloudClient(context)\n```\n\n## Notes\n* Multiprocessing does not work, and will block forever. Normal multithreading works fine.\n",
    "bugtrack_url": null,
    "license": "MIT OR Apache-2.0",
    "summary": "A Solr client library written in Rust",
    "version": "0.4.3",
    "project_urls": null,
    "split_keywords": [
        "solr",
        "rust",
        "search"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9c4c0beafde7a3ce39cf87428be42fcad95c208656241dd917f3495dd79ccc46",
                "md5": "303c0bcdbf432d5b8de46d92c41b5e1b",
                "sha256": "d478ce3770b57346f276bd91b330df4227c4eeb83467c18f9ec38faf3f807c76"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "303c0bcdbf432d5b8de46d92c41b5e1b",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3799155,
            "upload_time": "2024-01-20T23:15:36",
            "upload_time_iso_8601": "2024-01-20T23:15:36.825988Z",
            "url": "https://files.pythonhosted.org/packages/9c/4c/0beafde7a3ce39cf87428be42fcad95c208656241dd917f3495dd79ccc46/solrstice-0.4.3-cp38-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "821c51819e62b28af3e6e3d04c3688231506b7c7ab5a6620f2f8f1b39d122f57",
                "md5": "dec379c1ad96510f9e690ab3cc6a611c",
                "sha256": "0e7361eec365c974d039b32e97b069063634cad4f5d260fbed5eb311ef1f1845"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "dec379c1ad96510f9e690ab3cc6a611c",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3658376,
            "upload_time": "2024-01-20T23:15:39",
            "upload_time_iso_8601": "2024-01-20T23:15:39.011374Z",
            "url": "https://files.pythonhosted.org/packages/82/1c/51819e62b28af3e6e3d04c3688231506b7c7ab5a6620f2f8f1b39d122f57/solrstice-0.4.3-cp38-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e3eb20790381f9bc77ba843784c51fd8be615e43cd633ccbcd39b293899b607b",
                "md5": "8cb0eebd212d5b8c24223c1eef5f5ef5",
                "sha256": "0fc7b180ce09470caf93ceed9778228f6f82c97da64e567fea2098e9c2b3789a"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8cb0eebd212d5b8c24223c1eef5f5ef5",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 5059069,
            "upload_time": "2024-01-20T23:15:42",
            "upload_time_iso_8601": "2024-01-20T23:15:42.048475Z",
            "url": "https://files.pythonhosted.org/packages/e3/eb/20790381f9bc77ba843784c51fd8be615e43cd633ccbcd39b293899b607b/solrstice-0.4.3-cp38-abi3-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a17605f750887f2479b9eda4abf6bb9cd9c8bfccb03eede4bd6256da741adf4d",
                "md5": "956ec8f6b9ced619ea7915236185dcd8",
                "sha256": "6c5907d38d39320d028f632db10cbc2449d7fe467ab8427f49b926ca9579b768"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-manylinux_2_28_armv7l.whl",
            "has_sig": false,
            "md5_digest": "956ec8f6b9ced619ea7915236185dcd8",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 4991223,
            "upload_time": "2024-01-20T23:15:44",
            "upload_time_iso_8601": "2024-01-20T23:15:44.616034Z",
            "url": "https://files.pythonhosted.org/packages/a1/76/05f750887f2479b9eda4abf6bb9cd9c8bfccb03eede4bd6256da741adf4d/solrstice-0.4.3-cp38-abi3-manylinux_2_28_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9ecd09ece4a40ec71ccadc10cacb7297181e0a4587064a7fc3a02df0a273cad2",
                "md5": "7d73bbee16d0177b1171e9c6d45f1745",
                "sha256": "60c185f1ca3a12926a58d0f3085ea1deddfa2f5a008987e34a70e05875f99a96"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-manylinux_2_28_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "7d73bbee16d0177b1171e9c6d45f1745",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 5672632,
            "upload_time": "2024-01-20T23:15:47",
            "upload_time_iso_8601": "2024-01-20T23:15:47.769392Z",
            "url": "https://files.pythonhosted.org/packages/9e/cd/09ece4a40ec71ccadc10cacb7297181e0a4587064a7fc3a02df0a273cad2/solrstice-0.4.3-cp38-abi3-manylinux_2_28_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d01e6c9518605932147c881e89c26f8358c84c3a5b31933e795e7e333982f325",
                "md5": "4e3b40d06ccb8580d1d6b9de0371a0ec",
                "sha256": "9969949196a2777e64ef45d31e4b153c45d047e2f079119b202e2c902bc9b961"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-manylinux_2_28_s390x.whl",
            "has_sig": false,
            "md5_digest": "4e3b40d06ccb8580d1d6b9de0371a0ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 5759216,
            "upload_time": "2024-01-20T23:15:50",
            "upload_time_iso_8601": "2024-01-20T23:15:50.383782Z",
            "url": "https://files.pythonhosted.org/packages/d0/1e/6c9518605932147c881e89c26f8358c84c3a5b31933e795e7e333982f325/solrstice-0.4.3-cp38-abi3-manylinux_2_28_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "94df8b37a7fc6dad36fa75693b9e24de6ee3529e837a17a6418960fcdd2c060b",
                "md5": "c0ab6230f3e5ccce1c8915daaa66e434",
                "sha256": "6d06e1b70f3f54156b5aa755bf19d857edc4f02026e5f22fd9e4d5a5e347338b"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c0ab6230f3e5ccce1c8915daaa66e434",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 5472569,
            "upload_time": "2024-01-20T23:15:53",
            "upload_time_iso_8601": "2024-01-20T23:15:53.072629Z",
            "url": "https://files.pythonhosted.org/packages/94/df/8b37a7fc6dad36fa75693b9e24de6ee3529e837a17a6418960fcdd2c060b/solrstice-0.4.3-cp38-abi3-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "17951c5b8fb139cdfbcbe6fc836daf16276ba3010b66b3370285a968245e7252",
                "md5": "3974e0a51ea5974444242f130f044dee",
                "sha256": "4590ece44f353003cea09353761c8ce263a6c87e7aeef0f84e52f27c447657e7"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "3974e0a51ea5974444242f130f044dee",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2823360,
            "upload_time": "2024-01-20T23:15:55",
            "upload_time_iso_8601": "2024-01-20T23:15:55.595232Z",
            "url": "https://files.pythonhosted.org/packages/17/95/1c5b8fb139cdfbcbe6fc836daf16276ba3010b66b3370285a968245e7252/solrstice-0.4.3-cp38-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "decf97a71da0373dd752b0e85d37bd9c13f2cce076056f27f00b5bbb041cc83f",
                "md5": "2717ff4ee764a0f4d828869316fb6226",
                "sha256": "1a21fa85bd281280cea13bb0f7061e3e422d5174ca181d39ffa2657e115e9dc1"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3-cp38-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2717ff4ee764a0f4d828869316fb6226",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 3269527,
            "upload_time": "2024-01-20T23:15:58",
            "upload_time_iso_8601": "2024-01-20T23:15:58.014395Z",
            "url": "https://files.pythonhosted.org/packages/de/cf/97a71da0373dd752b0e85d37bd9c13f2cce076056f27f00b5bbb041cc83f/solrstice-0.4.3-cp38-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7df30f2dcff95a6aa322288a1aa68c291bd45f07c6ee301858329047b4a42086",
                "md5": "5858521f5d1e7c11dbbfb304095f0264",
                "sha256": "047e9ffc656fa8541e635c7660ddbbd8b88d22f8a7bd9f0ae41343f800f3c720"
            },
            "downloads": -1,
            "filename": "solrstice-0.4.3.tar.gz",
            "has_sig": false,
            "md5_digest": "5858521f5d1e7c11dbbfb304095f0264",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 86363,
            "upload_time": "2024-01-20T23:16:00",
            "upload_time_iso_8601": "2024-01-20T23:16:00.027558Z",
            "url": "https://files.pythonhosted.org/packages/7d/f3/0f2dcff95a6aa322288a1aa68c291bd45f07c6ee301858329047b4a42086/solrstice-0.4.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-20 23:16:00",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "solrstice"
}
        
Elapsed time: 0.34058s