Merge pull request 'Basic Redis configuration' (#2) from redis-configuration into main
This commit is contained in:
commit
d80db89989
9 changed files with 105 additions and 6 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,3 +3,4 @@ venv/
|
||||||
dist/
|
dist/
|
||||||
rectes.egg-info/
|
rectes.egg-info/
|
||||||
build/
|
build/
|
||||||
|
conf/rectes.toml
|
||||||
|
|
|
@ -3,7 +3,7 @@ repos:
|
||||||
rev: 22.3.0
|
rev: 22.3.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
language_version: python3.10
|
language_version: python3.11
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.3.0
|
rev: v4.3.0
|
||||||
|
|
51
README.md
51
README.md
|
@ -10,12 +10,61 @@ on a server will be IP address of the client that made request to the server.
|
||||||
|
|
||||||
Service is built with Python, FastAPI and is using Redis for data storage.
|
Service is built with Python, FastAPI and is using Redis for data storage.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- Python 3.11+
|
||||||
|
- Redis
|
||||||
|
- Python development libraries (optional, only needed for `hiredis` module installation)
|
||||||
|
|
||||||
|
### How to install
|
||||||
|
|
||||||
|
#### TL/DR
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git clone git@git.ivnglkv.ru:ivnglkv/rectes.git
|
||||||
|
$ python3 -m venv venv
|
||||||
|
$ . ./venv/bin/activate
|
||||||
|
$ pip install .
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Steps to install Rectes:
|
||||||
|
|
||||||
|
1. Clone repository
|
||||||
|
2. (optional) Create virtual environment
|
||||||
|
3. Install package
|
||||||
|
|
||||||
|
### Running Rectes server
|
||||||
|
|
||||||
|
After installation is done, you can start rectes with `rectes` command.
|
||||||
|
The web server will be started with `uvicorn` ASGI web server.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ rectes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Configuration is done through config file. By default, path is `/etc/rectes/rectes.toml`.
|
||||||
|
You can override this by setting environment variable `RECTES_CONF_FILE` value to actual file
|
||||||
|
location, i.e.:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ RECTES_CONF_FILE=/home/user/.conf/rectes.toml rectes
|
||||||
|
```
|
||||||
|
|
||||||
|
You can find all available configuration options in the example file, located
|
||||||
|
at [conf/rectes.toml.example](conf/rectes.toml.example) under Git root.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Codestyle is enforced with Black, and additional checks are done with the help of pre-commit-hooks,
|
Codestyle is enforced with Black, and additional checks are done with the help of pre-commit-hooks,
|
||||||
Flake8 and isort. Prior to making any commits, install `pre-commit` tool and install hooks:
|
Flake8 and isort. Prior to making any commits, install `pre-commit` tool and install hooks:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
# Alternatively, you could use 'pip install ".[development]"'
|
# Alternatively, you could use 'pip install ".[development]"'
|
||||||
$ pip install pre-commit==2.19.0
|
$ pip install pre-commit==2.19.0
|
||||||
$ pre-commit install
|
$ pre-commit install
|
||||||
|
|
1
conf/rectes.toml.example
Normal file
1
conf/rectes.toml.example
Normal file
|
@ -0,0 +1 @@
|
||||||
|
redis.url = 'redis://localhost'
|
12
setup.cfg
12
setup.cfg
|
@ -7,14 +7,18 @@ package_dir = = src
|
||||||
packages = find:
|
packages = find:
|
||||||
install_requires =
|
install_requires =
|
||||||
fastapi==0.78.0
|
fastapi==0.78.0
|
||||||
aioredis==2.0.1
|
redis[hiredis]==4.4.0
|
||||||
python_requires = >=3.10
|
click==8.1.3
|
||||||
|
python_requires = >=3.11
|
||||||
|
|
||||||
[options.extras_require]
|
[options.extras_require]
|
||||||
hiredis =
|
|
||||||
hiredis==2.0.0
|
|
||||||
development =
|
development =
|
||||||
|
uvicorn
|
||||||
pre-commit==2.19.0
|
pre-commit==2.19.0
|
||||||
|
|
||||||
|
[options.entry_points]
|
||||||
|
console_scripts =
|
||||||
|
rectes = rectes:cli
|
||||||
|
|
||||||
[options.packages.find]
|
[options.packages.find]
|
||||||
where = src
|
where = src
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
__all__ = [
|
||||||
|
"cli",
|
||||||
|
]
|
||||||
|
|
||||||
|
from .cli import cli
|
6
src/rectes/cli.py
Normal file
6
src/rectes/cli.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import click
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def cli():
|
||||||
|
print("Hello, world")
|
6
src/rectes/redis_db.py
Normal file
6
src/rectes/redis_db.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# noinspection PyUnresolvedReferences,PyProtectedMember
|
||||||
|
from redis import asyncio as aioredis
|
||||||
|
|
||||||
|
from rectes.settings import settings
|
||||||
|
|
||||||
|
redis = aioredis.from_url(settings.redis.url)
|
27
src/rectes/settings.py
Normal file
27
src/rectes/settings.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
import tomllib
|
||||||
|
|
||||||
|
|
||||||
|
class Settings:
|
||||||
|
def __init__(self, data: dict = None):
|
||||||
|
if data:
|
||||||
|
self._data = data
|
||||||
|
else:
|
||||||
|
with open(
|
||||||
|
os.getenv("RECTES_CONF_FILE", "/etc/rectes/rectes.toml"), "rb"
|
||||||
|
) as f:
|
||||||
|
self._data = tomllib.load(f)
|
||||||
|
|
||||||
|
def __getattr__(self, item):
|
||||||
|
try:
|
||||||
|
value = self._data[item]
|
||||||
|
except KeyError:
|
||||||
|
raise AttributeError
|
||||||
|
if isinstance(value, dict):
|
||||||
|
return Settings(data=value)
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
settings = Settings()
|
Loading…
Reference in a new issue