Skip to content

Instantly share code, notes, and snippets.

@codemation
Last active November 13, 2020 08:22
Show Gist options
  • Save codemation/2ee308eacdee87e324e0026633703dd5 to your computer and use it in GitHub Desktop.
Save codemation/2ee308eacdee87e324e0026633703dd5 to your computer and use it in GitHub Desktop.
Database Layer Example for API with EasyRpc Extension
from fastapi import FastAPI
from easyrpc.server import EasyRpcServer
from aiopyql.data import Database
server = FastAPI()
@server.on_event('startup')
async def db_setup():
# Rpc Server
db_server = await EasyRpcServer.create(
server,
'/ws/database',
server_secret='abcd1234'
)
# Database Conection
db = await Database.create(
database='easy_db',
cache_enabled=True
)
# Table Creation
if not 'keystore' in db.tables:
await db.create_table(
'keystore',
[
('key', str, 'UNIQUE NOT NULL'),
('value', str)
],
prim_key='key',
cache_enabled=True
)
server.data = {'keystore': db}
# register each func table namespace
for table in db.tables:
for func in {'select', 'update', 'insert', 'delete'}:
db_server.origin(
getattr(db.tables[table], func), # get function ref
namespace=table
)
server.db_server = db_server
@server.on_event('shutdown')
async def shutdown():
await server.data['keystore'].close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment