Fastbase
=============
**DEV MESSAGE: Fastbase is currently still in development and in its current state is unfit for production. Check
back again for updates.**
Role-based Access Contral (RBAC) via Firebase `idtoken` authententication using FastAPI and SQLModel.
Documentation: https://enchance.github.io/fastbase/class/fastbase/
Installation
-----------
```bash
pip install fastbase
```
or
```bash
poetry add fastbase
```
Overview
----------------
Fastbase assumes a headless setup using a frontend such as React, Angular, etc.
- **API Endpoints:** Managed by FastAPI
- **Authentication:** Managed by Firebase Auth
- **Authorization:** Managed by Fastbase
- **Database ORM:** SQLModel
### Fastbase process
1. Authentication happens in the frontend (JS) using the official Firebase JS package. An `idtoken` will be
generated if successful.
1. Insert this token in your `Authorization` header (`Bearer <idtoken>`) when hitting restricted APIs.
1. Upon reaching the server the `idtoken` is verified.
Endpoints
-----------------------------------------
To follow
Dependencies
-----------------------------------------
To follow
Sample Code
-----------------------------------------
### models.py
Your required `User` model. Optional models include `TaxonomyMod` and `OptionMod` which should be extended if you want
to use them. Add any additional fields you need.
```python
from fastbase.models import UserMod, TaxonomyMod, OptionMod
# Required
class User(UserMod, table=True):
__tablename__ = 'auth_user'
# Add any fields and methods you need
# Optional
class Taxonomy(TaxonomyMod, table=True):
__tablename__ = 'app_taxonomy'
# Add any fields and methods you need
# Optional
class Option(OptionMod, table=True):
__tablename__ = 'app_option'
# Add any fields and methods you need
```
### main.py
Initialize Fastbase
```python
from sqlalchemy.ext.asyncio import create_async_engine
from fastapi import FastAPI
from fastbase import Fastbase
from contextlib import asynccontextmanager
from .models import User
# .env file
DATABASE_URL = 'postgresql+asyncpg://user:password@localhost:5432/dbname'
# DB engine
engine = create_async_engine(DATABASE_URL, echo=True, pool_size=10)
@asynccontextmanager
async def lifespan(_: FastAPI):
"""Insert in lifespan events on start: https://fastapi.tiangolo.com/advanced/events/"""
fbase = Fastbase()
fbase.initialize(engine=engine, user_model=User)
print('RUNNING')
yield
print('STOPPED')
```
Raw data
{
"_id": null,
"home_page": "https://github.com/enchance/fastbase.git",
"name": "fastbase",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.11,<4.0",
"maintainer_email": "",
"keywords": "firebase,fastapi,sqlmodel,authentication,api,rest",
"author": "enchance",
"author_email": "enchance@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/40/07/c62fe6c949b60dc111779a33f3d3cfbb2aec6ad06dfb9e42c6a2d624cb5d/fastbase-0.4.0.tar.gz",
"platform": null,
"description": "Fastbase\n=============\n\n**DEV MESSAGE: Fastbase is currently still in development and in its current state is unfit for production. Check \nback again for updates.**\n\nRole-based Access Contral (RBAC) via Firebase `idtoken` authententication using FastAPI and SQLModel.\n\nDocumentation: https://enchance.github.io/fastbase/class/fastbase/\n\n\nInstallation\n-----------\n\n```bash\npip install fastbase\n```\n\nor\n```bash\npoetry add fastbase\n```\n\n\nOverview\n----------------\n\nFastbase assumes a headless setup using a frontend such as React, Angular, etc.\n\n- **API Endpoints:** Managed by FastAPI\n- **Authentication:** Managed by Firebase Auth\n- **Authorization:** Managed by Fastbase\n- **Database ORM:** SQLModel\n\n### Fastbase process\n\n1. Authentication happens in the frontend (JS) using the official Firebase JS package. An `idtoken` will be \n generated if successful.\n1. Insert this token in your `Authorization` header (`Bearer <idtoken>`) when hitting restricted APIs. \n1. Upon reaching the server the `idtoken` is verified.\n\n\nEndpoints\n-----------------------------------------\nTo follow\n\n\nDependencies\n-----------------------------------------\nTo follow\n\n\nSample Code\n-----------------------------------------\n\n### models.py\nYour required `User` model. Optional models include `TaxonomyMod` and `OptionMod` which should be extended if you want \nto use them. Add any additional fields you need.\n\n```python\nfrom fastbase.models import UserMod, TaxonomyMod, OptionMod \n\n# Required\nclass User(UserMod, table=True):\n __tablename__ = 'auth_user'\n # Add any fields and methods you need\n\n \n# Optional\nclass Taxonomy(TaxonomyMod, table=True):\n __tablename__ = 'app_taxonomy'\n # Add any fields and methods you need\n\n\n# Optional\nclass Option(OptionMod, table=True):\n __tablename__ = 'app_option'\n # Add any fields and methods you need\n```\n\n### main.py\nInitialize Fastbase\n\n```python\nfrom sqlalchemy.ext.asyncio import create_async_engine\nfrom fastapi import FastAPI\nfrom fastbase import Fastbase\nfrom contextlib import asynccontextmanager\n\nfrom .models import User\n\n# .env file\nDATABASE_URL = 'postgresql+asyncpg://user:password@localhost:5432/dbname'\n\n# DB engine\nengine = create_async_engine(DATABASE_URL, echo=True, pool_size=10)\n\n@asynccontextmanager\nasync def lifespan(_: FastAPI):\n \"\"\"Insert in lifespan events on start: https://fastapi.tiangolo.com/advanced/events/\"\"\"\n fbase = Fastbase()\n fbase.initialize(engine=engine, user_model=User)\n print('RUNNING')\n yield\n print('STOPPED')\n```",
"bugtrack_url": null,
"license": "MIT",
"summary": "",
"version": "0.4.0",
"project_urls": {
"Homepage": "https://github.com/enchance/fastbase.git",
"Repository": "https://github.com/enchance/fastbase.git"
},
"split_keywords": [
"firebase",
"fastapi",
"sqlmodel",
"authentication",
"api",
"rest"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "849608c2fb90a2df83ac388c20bebcd9baf9ca31fb7017458e2dd97f9f058042",
"md5": "6b4766cd5f800934a18d5b616c076777",
"sha256": "7208cc24cfc80a0cc2bd140ec8a00ed705f2db2497ab75e62301c4ef4775e54b"
},
"downloads": -1,
"filename": "fastbase-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6b4766cd5f800934a18d5b616c076777",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11,<4.0",
"size": 12955,
"upload_time": "2023-12-29T12:51:29",
"upload_time_iso_8601": "2023-12-29T12:51:29.588901Z",
"url": "https://files.pythonhosted.org/packages/84/96/08c2fb90a2df83ac388c20bebcd9baf9ca31fb7017458e2dd97f9f058042/fastbase-0.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4007c62fe6c949b60dc111779a33f3d3cfbb2aec6ad06dfb9e42c6a2d624cb5d",
"md5": "0753af0083f32876e9dab98caccbbde1",
"sha256": "c8ca010947613bda21d10fde68a1b4916b421d137b4d36a8133677cb180660b9"
},
"downloads": -1,
"filename": "fastbase-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "0753af0083f32876e9dab98caccbbde1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11,<4.0",
"size": 10430,
"upload_time": "2023-12-29T12:51:31",
"upload_time_iso_8601": "2023-12-29T12:51:31.628445Z",
"url": "https://files.pythonhosted.org/packages/40/07/c62fe6c949b60dc111779a33f3d3cfbb2aec6ad06dfb9e42c6a2d624cb5d/fastbase-0.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-29 12:51:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "enchance",
"github_project": "fastbase",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "fastbase"
}