Name | solrstice JSON |
Version |
0.6.0
JSON |
| download |
home_page | None |
Summary | A Solr client library written in Rust |
upload_time | 2024-10-27 18:59:06 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT 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.
## 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 import SolrBasicAuth, SolrServerContext, SolrSingleServerHost, AsyncSolrCloudClient, UpdateQuery, \
SelectQuery, DeleteQuery
# 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 import SolrBasicAuth, BlockingSolrCloudClient, SolrServerContext, SolrSingleServerHost, 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
from solrstice import GroupingComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
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
from solrstice import GroupingComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
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
from solrstice import LuceneQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
query_parser = LuceneQuery(df="population")
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
response = (await client.select(select_builder, "example_collection")).get_docs_response()
assert response is not None
docs = response.get_docs()
```
### Dismax
```python
from solrstice import DismaxQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
query_parser = DismaxQuery(qf="interests^20", bq=["interests:cars^20"])
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
response = (await client.select(select_builder, "example_collection")).get_docs_response()
assert response is not None
docs = response.get_docs()
```
### Edismax
```python
from solrstice import EdismaxQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
query_parser = EdismaxQuery(qf="interests^20", bq=["interests:cars^20"])
select_builder = SelectQuery(q="outdoors", def_type=query_parser)
response = (await client.select(select_builder, "example_collection")).get_docs_response()
assert response is not None
docs = response.get_docs()
```
## FacetSet Component
### Pivot facet
```python
from solrstice import FacetSetComponent, PivotFacetComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
select_builder = SelectQuery(facet_set=FacetSetComponent(pivots=PivotFacetComponent(["interests,age"])))
response = await client.select(select_builder, "example_collection")
facets = response.get_facet_set()
pivots = facets.get_pivots()
interests_age = pivots.get("interests,age")
```
### Field facet
```python
from solrstice import FacetSetComponent, FieldFacetComponent, FieldFacetEntry, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
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
from solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, FacetSetComponent, FacetSetComponent
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
select_builder = SelectQuery(facet_set=FacetSetComponent(queries=["age:[0 TO 59]"]))
response = await client.select(select_builder, "example_collection")
facets = response.get_facet_set()
queries = facets.get_queries()
query = queries.get("age:[0 TO 59]")
```
## Json Facet Component
### Query
```python
from solrstice import JsonFacetComponent, JsonQueryFacet, SelectQuery, SolrServerContext, AsyncSolrCloudClient
async def main():
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
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
from solrstice import JsonFacetComponent, JsonStatFacet, SelectQuery, SolrServerContext, AsyncSolrCloudClient
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
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
from solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, JsonFacetComponent, JsonTermsFacet
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
select_builder = SelectQuery(
json_facet=JsonFacetComponent(facets={"age": JsonTermsFacet("age")})
)
response = await client.select(select_builder, "example_collection")
facets = response.get_json_facets()
age_buckets = facets.get_nested_facets().get("age").get_buckets()
assert len(age_buckets) == 3
```
### Nested
```python
from solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, JsonFacetComponent, JsonQueryFacet, JsonStatFacet
client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))
async def main():
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
from solrstice import SolrServerContext, SolrSingleServerHost, SolrBasicAuth, AsyncSolrCloudClient
context = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))
client = AsyncSolrCloudClient(context)
```
### Multiple servers
```python
from solrstice import SolrServerContext, SolrMultipleServerHost, SolrBasicAuth, AsyncSolrCloudClient
# 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
from solrstice import SolrServerContext, ZookeeperEnsembleHostConnector, SolrBasicAuth, AsyncSolrCloudClient
async def main():
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.
* Pyo3, the Rust library for creating bindings does not allow overriding the `__init__` method on objects from
Rust. `__new__` has to be overridden instead.
For example, if you want to create a simpler way to create a client
```python
from typing import Optional
from solrstice import SolrServerContext, SolrSingleServerHost, SolrBasicAuth, AsyncSolrCloudClient, SolrAuth
class SolrClient(AsyncSolrCloudClient):
def __new__(cls, host: str, auth: Optional[SolrAuth] = None):
context = SolrServerContext(SolrSingleServerHost(host), auth)
return super().__new__(cls, context=context)
client = SolrClient("localhost:8983", SolrBasicAuth("username", "password"))
```
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/80/1b/9aed6b8a0bed91d4a2c56734e86225212952e976736a584180b2ff2a32e2/solrstice-0.6.0.tar.gz",
"platform": null,
"description": "# Solrstice: A Solr 8+ Client for Rust and Python\n\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.\n\n## Features\n\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\n## Installation\n\n```bash\npip install solrstice\n```\n\n## Basic Usage\n\n### Async\n\n```python\nimport asyncio\n\nfrom solrstice import SolrBasicAuth, SolrServerContext, SolrSingleServerHost, AsyncSolrCloudClient, UpdateQuery, \\\n SelectQuery, DeleteQuery\n\n# A SolrServerContext specifies how the library should interact with Solr\ncontext = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))\nclient = AsyncSolrCloudClient(context)\n\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\n### Blocking\n\n```python\nfrom solrstice import SolrBasicAuth, BlockingSolrCloudClient, SolrServerContext, SolrSingleServerHost, DeleteQuery, \\\n 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\n### Field grouping\n\n```python\nfrom solrstice import GroupingComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n group_builder = GroupingComponent(fields=[\"age\"], limit=10)\n select_builder = SelectQuery(fq=[\"age:[* TO *]\"], grouping=group_builder)\n groups = (await client.select(select_builder, \"example_collection\")).get_groups()\n age_group = groups[\"age\"]\n docs = age_group.get_field_result()\n```\n\n### Query grouping\n\n```python\nfrom solrstice import GroupingComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n group_builder = GroupingComponent(queries=[\"age:[0 TO 59]\", \"age:[60 TO *]\"], limit=10)\n select_builder = SelectQuery(fq=[\"age:[* TO *]\"], grouping=group_builder)\n groups = (await client.select(select_builder, \"example_collection\")).get_groups()\n age_group = groups[\"age:[0 TO 59]\"]\n group = age_group.get_query_result()\n docs = group.get_docs()\n```\n\n## Query parsers\n\n### Lucene\n\n```python\nfrom solrstice import LuceneQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n query_parser = LuceneQuery(df=\"population\")\n select_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\n response = (await client.select(select_builder, \"example_collection\")).get_docs_response()\n assert response is not None\n docs = response.get_docs()\n```\n\n### Dismax\n\n```python\nfrom solrstice import DismaxQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n query_parser = DismaxQuery(qf=\"interests^20\", bq=[\"interests:cars^20\"])\n select_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\n response = (await client.select(select_builder, \"example_collection\")).get_docs_response()\n assert response is not None\n docs = response.get_docs()\n```\n\n### Edismax\n\n```python\nfrom solrstice import EdismaxQuery, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n query_parser = EdismaxQuery(qf=\"interests^20\", bq=[\"interests:cars^20\"])\n select_builder = SelectQuery(q=\"outdoors\", def_type=query_parser)\n response = (await client.select(select_builder, \"example_collection\")).get_docs_response()\n assert response is not None\n docs = response.get_docs()\n```\n\n## FacetSet Component\n\n### Pivot facet\n\n```python\nfrom solrstice import FacetSetComponent, PivotFacetComponent, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n select_builder = SelectQuery(facet_set=FacetSetComponent(pivots=PivotFacetComponent([\"interests,age\"])))\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_facet_set()\n pivots = facets.get_pivots()\n interests_age = pivots.get(\"interests,age\")\n```\n\n### Field facet\n\n```python\nfrom solrstice import FacetSetComponent, FieldFacetComponent, FieldFacetEntry, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n facet_set = FacetSetComponent(fields=FieldFacetComponent(fields=[FieldFacetEntry(\"age\")]))\n select_builder = SelectQuery(facet_set=facet_set)\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_facet_set()\n fields = facets.get_fields()\n age = fields.get(\"age\")\n```\n\n### Query facet\n\n```python\nfrom solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, FacetSetComponent, FacetSetComponent\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n select_builder = SelectQuery(facet_set=FacetSetComponent(queries=[\"age:[0 TO 59]\"]))\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_facet_set()\n queries = facets.get_queries()\n query = queries.get(\"age:[0 TO 59]\")\n```\n\n## Json Facet Component\n\n### Query\n\n```python\nfrom solrstice import JsonFacetComponent, JsonQueryFacet, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nasync def main():\n client = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n select_builder = SelectQuery(\n json_facet=JsonFacetComponent(\n facets={\"below_60\": JsonQueryFacet(\"age:[0 TO 59]\")}\n )\n )\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_json_facets()\n below_60 = facets.get_nested_facets().get(\"below_60\")\n assert below_60.get_count() == 4\n```\n\n### Stat\n\n```python\nfrom solrstice import JsonFacetComponent, JsonStatFacet, SelectQuery, SolrServerContext, AsyncSolrCloudClient\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n select_builder = SelectQuery(\n json_facet=JsonFacetComponent(\n facets={\"total_people\": JsonStatFacet(\"sum(count)\")}\n )\n )\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_json_facets()\n total_people = facets.get_flat_facets().get(\"total_people\")\n assert total_people == 1000\n```\n\n### Terms\n\n```python\nfrom solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, JsonFacetComponent, JsonTermsFacet\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n select_builder = SelectQuery(\n json_facet=JsonFacetComponent(facets={\"age\": JsonTermsFacet(\"age\")})\n )\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_json_facets()\n age_buckets = facets.get_nested_facets().get(\"age\").get_buckets()\n assert len(age_buckets) == 3\n```\n\n### Nested\n\n```python\nfrom solrstice import AsyncSolrCloudClient, SolrServerContext, SelectQuery, JsonFacetComponent, JsonQueryFacet, JsonStatFacet\nclient = AsyncSolrCloudClient(SolrServerContext('localhost:8983'))\n\nasync def main():\n select_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 )\n response = await client.select(select_builder, \"example_collection\")\n facets = response.get_json_facets()\n total_people = (\n facets.get_nested_facets()\n .get(\"below_60\")\n .get_flat_facets()\n .get(\"total_people\")\n )\n assert total_people == 750.0\n```\n\n## Hosts\n\n### Single Server\n\n```python\nfrom solrstice import SolrServerContext, SolrSingleServerHost, SolrBasicAuth, AsyncSolrCloudClient\n\ncontext = SolrServerContext(SolrSingleServerHost('localhost:8983'), SolrBasicAuth('solr', 'SolrRocks'))\nclient = AsyncSolrCloudClient(context)\n```\n\n### Multiple servers\n\n```python\nfrom solrstice import SolrServerContext, SolrMultipleServerHost, SolrBasicAuth, AsyncSolrCloudClient\n\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\n### Zookeeper\n\n```python\nfrom solrstice import SolrServerContext, ZookeeperEnsembleHostConnector, SolrBasicAuth, AsyncSolrCloudClient\n\nasync def main():\n context = SolrServerContext(\n await ZookeeperEnsembleHostConnector([\"localhost:2181\"], 30).connect(),\n SolrBasicAuth('solr', 'SolrRocks'),\n )\n client = AsyncSolrCloudClient(context)\n```\n\n## Notes\n\n* Multiprocessing does not work, and will block forever. Normal multithreading works fine.\n* Pyo3, the Rust library for creating bindings does not allow overriding the `__init__` method on objects from\n Rust. `__new__` has to be overridden instead.\n\n For example, if you want to create a simpler way to create a client\n ```python\n from typing import Optional\n from solrstice import SolrServerContext, SolrSingleServerHost, SolrBasicAuth, AsyncSolrCloudClient, SolrAuth\n class SolrClient(AsyncSolrCloudClient):\n def __new__(cls, host: str, auth: Optional[SolrAuth] = None):\n context = SolrServerContext(SolrSingleServerHost(host), auth)\n return super().__new__(cls, context=context)\n client = SolrClient(\"localhost:8983\", SolrBasicAuth(\"username\", \"password\"))\n ```\n",
"bugtrack_url": null,
"license": "MIT OR Apache-2.0",
"summary": "A Solr client library written in Rust",
"version": "0.6.0",
"project_urls": null,
"split_keywords": [
"solr",
" rust",
" search"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "acc9f7d458200122ef8935980597cc5c8d8ffff77fce06ca702572f74e7ee9c9",
"md5": "91eee302647ff5c08234ebec0ec45a2c",
"sha256": "61e659b37584d7137da333a9e571506d1f35dd24138e97855908113fc954dfc0"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "91eee302647ff5c08234ebec0ec45a2c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3516641,
"upload_time": "2024-10-27T18:58:47",
"upload_time_iso_8601": "2024-10-27T18:58:47.524661Z",
"url": "https://files.pythonhosted.org/packages/ac/c9/f7d458200122ef8935980597cc5c8d8ffff77fce06ca702572f74e7ee9c9/solrstice-0.6.0-cp38-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "30e69b2e191696644df027a0f3a885ed2a9a83b827733073288ade8ba0297695",
"md5": "43f9b709fc0f4d37c8ece05d9a7fa5a9",
"sha256": "a89386dfb89d3e594787ee88f0c39acbea2868baa0b913be531a7143daf65d76"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "43f9b709fc0f4d37c8ece05d9a7fa5a9",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3378811,
"upload_time": "2024-10-27T18:58:49",
"upload_time_iso_8601": "2024-10-27T18:58:49.561098Z",
"url": "https://files.pythonhosted.org/packages/30/e6/9b2e191696644df027a0f3a885ed2a9a83b827733073288ade8ba0297695/solrstice-0.6.0-cp38-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "776d32cda7f06a99c443137776d76ee1fa5936ac29d0c7b8e15836479628d363",
"md5": "4e5cc0af3b9675b66e23e9b6efaf5764",
"sha256": "756f2664691d173d336534d4c189cb1cf1ad80decc91445081a8e24b3c28be42"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "4e5cc0af3b9675b66e23e9b6efaf5764",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3798834,
"upload_time": "2024-10-27T18:58:51",
"upload_time_iso_8601": "2024-10-27T18:58:51.800356Z",
"url": "https://files.pythonhosted.org/packages/77/6d/32cda7f06a99c443137776d76ee1fa5936ac29d0c7b8e15836479628d363/solrstice-0.6.0-cp38-abi3-manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5fd44d449bf162184c35f3919b2b91f391c73475bc2cd76642f4d4da3b62245e",
"md5": "6c5238879c5cb27f2fd7f492d39d6d3b",
"sha256": "210c970477c032db00e3d8695685811351752e6d1208f19206432408a4b622e9"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-manylinux_2_28_armv7l.whl",
"has_sig": false,
"md5_digest": "6c5238879c5cb27f2fd7f492d39d6d3b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3565354,
"upload_time": "2024-10-27T18:58:53",
"upload_time_iso_8601": "2024-10-27T18:58:53.812697Z",
"url": "https://files.pythonhosted.org/packages/5f/d4/4d449bf162184c35f3919b2b91f391c73475bc2cd76642f4d4da3b62245e/solrstice-0.6.0-cp38-abi3-manylinux_2_28_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1fcb681c828f0341035d38b55cf8a0bffceafe5abb205024b0dc57ddcf459ad5",
"md5": "d932c4613f09cdf5d4f49c28796d9bb4",
"sha256": "c408827a8e6f151091da5950cdfa7e6a2f4b1bda0c0d8b2328d1dd1d30936e35"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-manylinux_2_28_ppc64le.whl",
"has_sig": false,
"md5_digest": "d932c4613f09cdf5d4f49c28796d9bb4",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3921571,
"upload_time": "2024-10-27T18:58:56",
"upload_time_iso_8601": "2024-10-27T18:58:56.031423Z",
"url": "https://files.pythonhosted.org/packages/1f/cb/681c828f0341035d38b55cf8a0bffceafe5abb205024b0dc57ddcf459ad5/solrstice-0.6.0-cp38-abi3-manylinux_2_28_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cf28e1e7e7e37b626299ac093997a1ec34eadb8140621c56a128f0561907ef3d",
"md5": "ca606f3d0aca800abd161b4e1d1e015c",
"sha256": "10a7101e0905d984c287d163eee706e6005385248b5f6b410bf8a573157e50c2"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-manylinux_2_28_s390x.whl",
"has_sig": false,
"md5_digest": "ca606f3d0aca800abd161b4e1d1e015c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 4242775,
"upload_time": "2024-10-27T18:58:58",
"upload_time_iso_8601": "2024-10-27T18:58:58.156204Z",
"url": "https://files.pythonhosted.org/packages/cf/28/e1e7e7e37b626299ac093997a1ec34eadb8140621c56a128f0561907ef3d/solrstice-0.6.0-cp38-abi3-manylinux_2_28_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b81e9314e49bcb24a9efe51bebfcf587b544841dcbee1da0b5560256fb80655e",
"md5": "86beedc0aa5350dd0bf526b8358906f0",
"sha256": "e976f3f6a77aff97b00c8a5da150a18e27b1051c909b989e2161d9df23f6e7f5"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "86beedc0aa5350dd0bf526b8358906f0",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3911383,
"upload_time": "2024-10-27T18:59:00",
"upload_time_iso_8601": "2024-10-27T18:59:00.016229Z",
"url": "https://files.pythonhosted.org/packages/b8/1e/9314e49bcb24a9efe51bebfcf587b544841dcbee1da0b5560256fb80655e/solrstice-0.6.0-cp38-abi3-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b593c59174b344316ed921a75d16ddd1f6a7e42bad6e011500cc65e1cfa2d7ea",
"md5": "8f46024df6220fed4273e769d7756f92",
"sha256": "7f7f6260a2931a88ec09fedbc5d216b52a797511d14ba7903168f1226b2f2be4"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-win32.whl",
"has_sig": false,
"md5_digest": "8f46024df6220fed4273e769d7756f92",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2711598,
"upload_time": "2024-10-27T18:59:02",
"upload_time_iso_8601": "2024-10-27T18:59:02.310282Z",
"url": "https://files.pythonhosted.org/packages/b5/93/c59174b344316ed921a75d16ddd1f6a7e42bad6e011500cc65e1cfa2d7ea/solrstice-0.6.0-cp38-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fb49ca98e537cb9104124ad98aa062a69352bb577dc79a25a900d97406f5ff5a",
"md5": "b67318d50bbdcf03209f0a527d1b4338",
"sha256": "d36520173b089f5bef0851b90fe76263fc6681c6ae8434d9873a0ba7740cabda"
},
"downloads": -1,
"filename": "solrstice-0.6.0-cp38-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "b67318d50bbdcf03209f0a527d1b4338",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3203385,
"upload_time": "2024-10-27T18:59:04",
"upload_time_iso_8601": "2024-10-27T18:59:04.877743Z",
"url": "https://files.pythonhosted.org/packages/fb/49/ca98e537cb9104124ad98aa062a69352bb577dc79a25a900d97406f5ff5a/solrstice-0.6.0-cp38-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "801b9aed6b8a0bed91d4a2c56734e86225212952e976736a584180b2ff2a32e2",
"md5": "dbf79616409a165e306a6435b67d4e61",
"sha256": "eca49f60c7ddaaffce2230b4e6be489bdf209530dacedf3b459cbd67e74e5b50"
},
"downloads": -1,
"filename": "solrstice-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "dbf79616409a165e306a6435b67d4e61",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 94660,
"upload_time": "2024-10-27T18:59:06",
"upload_time_iso_8601": "2024-10-27T18:59:06.408410Z",
"url": "https://files.pythonhosted.org/packages/80/1b/9aed6b8a0bed91d4a2c56734e86225212952e976736a584180b2ff2a32e2/solrstice-0.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-27 18:59:06",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "solrstice"
}