Metadata-Version: 2.4
Name: floe
Version: 0.1.0b1
Summary: Floe
Home-page: https://github.com/happybits/floe
Author: John Loehrer
Author-email: john@happybits.co
License: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Environment :: Web Environment
Classifier: Operating System :: POSIX
Requires-Python: >=3.10
License-File: LICENSE
Requires-Dist: falcon<5.0.0,>=3.0.0
Requires-Dist: requests
Requires-Dist: opentelemetry-api
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Floe Microservice

This presents a simple key value data store with a list of ids and configurable backends.

## Configuration
You can configure docker with environmental variables.

OpenTelemetry is used for instrumentation. Configure via standard OTEL environment variables.

You can add additional environmental vars for backends.

```
FLOE_URL_FOO='file://.floe'
FLOE_URL_BAR='file:///tmp/floe'
FLOE_URL_BAZZ='mysql://root:pass@127.0.0.1:3306/test?table=bazz'
FLOE_URL_QUUX='http://127.0.0.1:995/my_namespace'
```

## API
You can add other connectors. The interface provides the following methods:

  * get
  * get_multi
  * set
  * set_multi
  * delete
  * delete_multi
  * ids
  * flush

The ids method returns a generator to iterate.
The multi methods allow you do do batch operations on multiple keys.

## Running Locally

Due to some inconsistencies with the way request bodies are handled in different WSGI implementations, PUT requests with a missing or incorrect Content-Length header may hang (https://falcon.readthedocs.io/en/stable/user/faq.html#why-does-req-stream-read-hang-for-certain-requests).

An easy workaround for this when running the server locally is to use gunicorn rather than wsgiref.simple_server

```
$ pip install gunicorn
$ gunicorn -w 4 run:app
```

## Publishing new versions

1. Set a new version number in floe/version.py
2. `./activate` to set up and enter the project venv
3. `./publish.sh` to create source and binary distributions and upload them to pypi using the `twine` tool

Credentials for pypi are stored in 1password
