Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hhatto/poyonga
Python Groonga Client
https://github.com/hhatto/poyonga
full-text-search groonga python
Last synced: 17 days ago
JSON representation
Python Groonga Client
- Host: GitHub
- URL: https://github.com/hhatto/poyonga
- Owner: hhatto
- License: mit
- Created: 2012-02-03T16:49:45.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2023-12-12T00:52:42.000Z (11 months ago)
- Last Synced: 2024-10-14T11:06:12.721Z (30 days ago)
- Topics: full-text-search, groonga, python
- Language: Python
- Homepage:
- Size: 160 KB
- Stars: 23
- Watchers: 5
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
=======
poyonga
=======.. image:: https://img.shields.io/pypi/v/poyonga.svg
:target: https://pypi.org/project/poyonga/
:alt: PyPI Version.. image:: https://github.com/hhatto/poyonga/workflows/Python%20package/badge.svg
:target: https://github.com/hhatto/poyonga/actions
:alt: Build statusPython Groonga_ Client.
poyonga support to HTTP and GQTP protocol... _Groonga: http://groonga.org/
Requrements
===========
* Python 3.8+Installation
============
from pip::pip install --upgrade poyonga
Usage
=====Setup Groonga Server
--------------------
::$ groonga -n grn.db # create groonga database file
$ groonga -s grn.db # start groonga server with GQTPBasic Usage
-----------.. code-block:: python
>>> from poyonga import Groonga
>>> g = Groonga()
>>> g.protocol
'http'
>>> ret = g.call("status")
>>> ret
>>> ret.status
0
>>> ret.body
{u'uptime': 427, u'max_command_version': 2, u'n_queries': 3,
u'cache_hit_rate': 66.6666666666667, u'version': u'1.2.8', u
'alloc_count': 156, u'command_version': 1, u'starttime': 132
8286909, u'default_command_version': 1}
>>>with eventlet
-------------
.. code-block:: pythonfrom poyonga import Groonga
import eventleteventlet.monkey_patch()
def fetch(cmd, **kwargs):
g = Groonga()
ret = g.call(cmd, **kwargs)
print ret.status
print ret.body
print "*" * 40cmds = [("status", {}),
("log_level", {"level": "warning"}),
("table_list", {})
("select", {"table": "Site"})]
pool = eventlet.GreenPool()
for cmd, kwargs in cmds:
pool.spawn_n(fetch, cmd, **kwargs)
pool.waitall()Custom prefix path
------------------
If you use the `Custom prefix path`_ and `Multi databases`_ , specify `prefix_path` ... _`Custom prefix path`: http://groonga.org/docs/server/http/comparison.html#custom-prefix-path
.. _`Multi databases`: http://groonga.org/docs/server/http/comparison.html#multi-databases.. code-block:: python
# default is '/d/'
g = Groonga(prefix_path='/db2/')with Apache Arrow
-----------------
Groonga supports `Apache Arrow`_, use it with ``load`` and ``select`` commands.use poyonga with Apache Arrow, you need pyarrow_ .
.. _`Apache Arrow`: https://arrow.apache.org/
.. _pyarrow: https://pypi.org/project/pyarrow/requrie pyarrow::
$ pip install pyarrow
and call with ``output_type="apache-arrow"`` option:
.. code-block:: python
from poyonga import Groonga
g = Groonga()
g.call(
"select",
table="Users",
match_columns="name,location_str,description",
query="東京",
output_type="apache-arrow",
output_columns="_key,name",
).. note:: `output_type` can also specify `poyonga.const.OutputType.APACHE_ARROW`.
If is not specified, `poyonga.const.OutputType.JSON` is specified by default.load with ``input_type="apache-arrow"``:
.. code-block:: python
import pyarrow as pa
from poyonga import Groonga# use Apache Arrow IPC Streaming Format
data = [pa.array(["groonga.org"])]
batch = pa.record_batch(data, names=["_key"])
sink = pa.BufferOutputStream()
with pa.ipc.new_stream(sink, batch.schema) as writer:
writer.write_batch(batch)
buf = sink.getvalue()
values = buf.to_pybytes()g = Groonga()
g.call("load", table="Site", values=values, input_type="apache-arrow").. note:: `input_type` can also specify `poyonga.const.InputType.APACHE_ARROW`.
If is not specified, `poyonga.const.InputType.JSON` is specified by default.more information:
- https://groonga.org/docs/reference/commands/load.html
example code
------------
see `examples directory`_.. _`examples directory`: https://github.com/hhatto/poyonga/tree/master/examples
for Developer
=============install dev dependencies::
$ pip install ".[dev]"
run tests::
$ pytest
run linter::
$ ruff .
run formatter::
$ black --diff .
Links
=====
* PyPI_
* GitHub_.. _PyPI: https://pypi.python.org/pypi/poyonga
.. _GitHub: https://github.com/hhatto/poyonga