config: use from_json to read ogserver config

This patch introduces the usage of Flask.Config class so the config can
be read at startup (__init__) only once. Config keys must be uppercase
so that from_json method does take it into account.

 dormousehole.readthedocs.io/en/stable/api.html#flask.Config.from_json

Prior to this patch each request required opening and closing the
ogserver.json file via load_config in views.py.

In the future the decorated load_config function inside views.py
may be removed to avoid creating multiple instances of the OGServer
class.
multi-ogserver
Jose M. Guisado 2020-11-05 15:28:35 +00:00
parent c08aca9219
commit b708047d28
4 changed files with 11 additions and 15 deletions

View File

@ -5,10 +5,12 @@ from flask import Flask
from os import urandom
app = Flask(__name__)
app.config.from_json('cfg/ogserver.json')
app.secret_key = urandom(16)
babel = Babel(app)
csrf = CSRFProtect(app)
bootstrap = Bootstrap(app)
app.secret_key = urandom(16)
import ogcp.views

View File

@ -1,5 +1,5 @@
{
"ip": "127.0.0.1",
"port": 8888,
"api_token": "c3fe7bb0395747ec42a25df027585871"
"IP": "127.0.0.1",
"PORT": 8888,
"API_TOKEN": "c3fe7bb0395747ec42a25df027585871"
}

View File

@ -1,22 +1,17 @@
from ogcp import app
import requests
import json
class OGServer:
def __init__(self, ip='127.0.0.1', port=8888, api_token=""):
def __init__(self, ip=app.config['IP'],
port=app.config['PORT'],
api_token=app.config['API_TOKEN']):
self.ip = ip
self.port = port
self.api_token = api_token
self._prepare_requests()
def load_config(self, path):
with open(path, 'r') as f:
cfg = json.load(f)
self.ip = cfg['ip']
self.port = cfg['port']
self.api_token = cfg['api_token']
self._prepare_requests()
def _prepare_requests(self):
self.URL = f'http://{self.ip}:{self.port}'
self.HEADERS = {'Authorization' : self.api_token}

View File

@ -52,7 +52,6 @@ def parse_scopes_from_tree(tree, scope_type):
@app.before_request
def load_config():
g.server = OGServer()
g.server.load_config('ogcp/cfg/ogserver.json')
@app.errorhandler(404)
def page_not_found(error):