Skip to content
Snippets Groups Projects

Added postgresql database

Merged Felix Delattre requested to merge feature/add-database into master
Files
7
+ 46
1
@@ -18,9 +18,13 @@
import logging
import sys
import os
from quart import Quart
from ajsonrpc.backend.quart import JSONRPCQuart
from databases import Database
from dotenv import load_dotenv
from pathlib import Path
from quart import Quart
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
@@ -28,14 +32,55 @@ logger.addHandler(logging.StreamHandler(sys.stdout))
logger.info("obmapidata has started")
load_dotenv(Path(".env").resolve())
app = Quart(__name__)
app.api = JSONRPCQuart()
# Load configuration from file
config_file = Path("config.py")
if config_file.is_file():
app.config.from_pyfile(config_file.resolve())
# Allow some environment variables to overrite configuration
if "OBM_DATA_API_DATABASE_URL" in os.environ:
app.config.update(DATABASE_URL=os.environ.get("OBM_DATA_API_DATABASE_URL"))
if "OBM_DATA_API_TESTING" in os.environ:
app.config.update(TESTING=os.environ.get("OBM_DATA_API_TESTING"))
# Define main entrypoint for JSON-RPC API
app.post(
"/v1",
)(app.api.handler)
# Add database connection
@app.before_serving
async def startup() -> None:
app.db = await _create_database_connection()
async def _create_database_connection() -> Database:
db = Database(
app.config.get("DATABASE_URL", "postgresql://postgres:@localhost:5432/dataapi")
)
await db.connect()
return db
# JSON-RPC API endpoints
@app.api.add_function
async def heartbeat() -> dict:
return {"status": "healthy"}
@app.api.add_function
async def get_building(osm_id) -> dict:
building = await app.db.fetch_val(
"SELECT osm_id FROM osm_building_polygons WHERE osm_id = :osm_id",
values={"osm_id": int(osm_id)},
)
return {"building": str(building)}
Loading