Last active
November 13, 2020 08:22
-
-
Save codemation/2ee308eacdee87e324e0026633703dd5 to your computer and use it in GitHub Desktop.
Database Layer Example for API with EasyRpc Extension
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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