sso general utility for services connected to sso
Project description
Awesome SSO
A library designed to host common components for a cluster of microservices sharing a single sign on.
Feature
- A common exception class, supporting both status code and custom error code to map to more detailed error message or serve as i18n key.
Usage
Installation
pip install awesome-sso
Exceptions
Using fast API as example, we may simply throw exception with a proper status code, and an optional error code. We may also supply arbitrary key value in args dict, to help frontend render better error message.
from awesome_sso.exceptions import NotFound
from fastapi import APIRouter
router = APIRouter()
@router.get('/transactions')
def get(id: str):
try:
obj = find_by_id(id)
except Exception as e:
raise NotFound(message='transaction not found' % id, error_code='A0001', args={id: id})
...
And we may implement a common error handler to convert all these errors to proper response schema
from awesome_sso.exceptions import HTTPException
from fastapi.requests import Request
from fastapi.responses import JSONResponse
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={
'detail': exc.detail,
'error_code': exc.error_code,
}
)
This would result in a response with status code 404, and body
{
"status_code": 404,
"detail": {
"message": "transaction not found",
"id": "some_id",
},
"error_code": "A0001"
}
With this response, frontend can decide to simply render detail, or map it to detailed message. If error_code "A0001" correspond to the following i18 n entry
"error.A0001": {"en-US": "transaction can not be found with supplied {id}: {message}"}
we may format message accordingly with
errorMessage = formatMessage({ id: `error.${error.data.error_code}` }, error.data.detail);
Note that error code is not supplied, is default to status code. So it is always safe to simply use error_code in frontend to decide what to render.
Data Store
Minio
refer to tests/test_minio.py
Mongo
from awesome_sso.store.mongo import MongoDB
db = MongoDB(
host=MONGODB_HOST,
port=MONGODB_PORT,
username=MONGODB_USERNAME,
password=MONGODB_PASSWORD,
database=MONGODB_DB,
)
db.engine.save(some_odmantic_model)
db.engine.get(SomeOdmanticModel, query string)
refer to odmantic document on how to use odmantic engine.
Development
Installing Poetry
- create your own environment for poetry, and simply run:
pip install poetry
- alternatively, you can refer to poetry's official page
- to be able to use
poe
directly,pip install poethepoet
Contributing
- project setup:
poetry install
- create your own branch to start developing new feature.
- before creating pr, make sure you pass
poe lint
and./run_test.sh
.- what happened inside
./run_test.sh
is that a minio server is setup for you temporarily, and teardown and unit test is finished. - notice that
poe test
would also work if you already have a minio up and running. You need the following env variable:MINIO_ACCESS_KEY
,MINIO_SECRET_KEY
,MINIO_ADDRESS
upon runningpoe test
.
- what happened inside
- for a list of available poe command,
poe
- after you submit a pr, you should check if pipeline is successful.
Releasing
- update version in
pyproject.toml
. - merge to master, and a release pipeline will be triggered. A package with version specified in
pyproject.toml
will be pushed to pypi.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file awesome-sso-0.1.4.tar.gz
.
File metadata
- Download URL: awesome-sso-0.1.4.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.8.12 Linux/5.11.0-1021-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fac19e8b96bf337cecf0e9232ff302b6787bcd8ba96a5f7c58a5a60c2693bb5 |
|
MD5 | 4e89127779d828aa6b09865e6d3aaa23 |
|
BLAKE2b-256 | 302362acd3ef8d32166dcacbc59be1d6f41107371ecb0e55a20af3775d2358d2 |
File details
Details for the file awesome_sso-0.1.4-py3-none-any.whl
.
File metadata
- Download URL: awesome_sso-0.1.4-py3-none-any.whl
- Upload date:
- Size: 15.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.8.12 Linux/5.11.0-1021-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2d55e854706ab52d601fda2f97a43aec48e5da400c17852f65313cbcc087c45 |
|
MD5 | db5299c951d68e13ce4d8fabe235e16b |
|
BLAKE2b-256 | 49d0ef1c608841b764cef30a36fd582997806f4ee2fd3258238b200c417b5dde |