diff --git a/requirements-complete.txt b/requirements-complete.txt deleted file mode 100644 index 5dc4f24..0000000 --- a/requirements-complete.txt +++ /dev/null @@ -1,51 +0,0 @@ -astroid==2.7.3 -attrs==21.4.0 -behave==1.2.6 -black==21.9b0 -click==8.0.3 -compare==0.2b0 -coverage==6.2 -dominate==2.6.0 -Flask==2.3.2 -Flask-Bootstrap==3.3.7.1 -gevent==21.12.0 -greenlet==1.1.2 -gunicorn==20.1.0 -iniconfig==1.1.1 -isort==5.10.1 -itsdangerous==2.0.1 -Jinja2==3.0.3 -lazy-object-proxy==1.7.1 -MarkupSafe==2.0.1 -mccabe==0.6.1 -mypy-extensions==0.4.3 -packaging==21.3 -parse==1.19.0 -parse-type==0.5.2 -pathspec==0.9.0 -pdoc==10.0.2 -platformdirs==2.4.1 -pluggy==1.0.0 -prometheus-client==0.14.1 -prometheus-flask-exporter==0.20.1 -py==1.11.0 -Pygments==2.15.0 -PyHamcrest==2.0.3 -pylint==2.10.2 -pyparsing==3.0.6 -pytest==6.2.5 -pytest-cov==3.0.0 -pytest-testinfra==6.5.0 -PyYAML==5.4.1 -redis==4.5.4 -regex==2021.11.10 -six==1.16.0 -testinfra==6.0.0 -toml==0.10.2 -tomli==1.2.3 -typing_extensions==4.0.1 -visitor==0.1.3 -Werkzeug>=2.2.3 -wrapt==1.12.1 -zope.event==4.5.0 -zope.interface==5.4.0 diff --git a/run_gunicorn.sh b/run_gunicorn.sh index 9c84585..bff9da3 100755 --- a/run_gunicorn.sh +++ b/run_gunicorn.sh @@ -1,9 +1,7 @@ #!/bin/sh # # Init database if defined -# export FLASK_ENV=development -# export FLASK_APP=test_server -# export DB_TYPE=sqlite +export FLASK_APP=test_server flask init-db # Start the application server diff --git a/test_server/__init__.py b/test_server/__init__.py index e45cc9c..3cd3b40 100644 --- a/test_server/__init__.py +++ b/test_server/__init__.py @@ -20,7 +20,9 @@ def create_app(test_config=None): Returns: a Flask application object """ - + print( + f"INFO!Flask app {__name__} started by PID {os.getpid()}." + ) app = Flask(__name__, instance_relative_config=False) # Initialize Prometheus metrics @@ -53,17 +55,27 @@ def create_app(test_config=None): # Modify database name if SQLite is used. if 'sqlite' == app.config['DB_TYPE']: - if app.config['DB_PATH'] is None: - app.config['DB_PATH'] = app.instance_path - app.config['DATABASE'] = os.path.join( - app.config['DB_PATH'], - app.config['DB_NAME'] + '.sqlite') - print(f"Database: {app.config['DB_PATH']}/{app.config['DB_NAME']}.{app.config['DB_TYPE']}") - # ensure the instance folder exists - try: - os.makedirs(app.config['DB_PATH']) - except FileExistsError: - print("WARNING! File already exists, reusing.") + # Prevent duplicate initialization. + if None is app.config.get('DATABASE'): + if app.config['DB_PATH'] is None: + app.config['DB_PATH'] = app.instance_path + if app.config['DB_NAME'] is None: + app.config['DB_NAME'] = app.name + app.config['DATABASE'] = os.path.join( + app.config['DB_PATH'], + app.config['DB_NAME'] + '.sqlite') + print( + f"INFO! Setting database {app.config['DATABASE']} ." + ) + + # ensure the instance folder exists + try: + os.makedirs(app.config['DB_PATH']) + print(f"INFO! Creating SQLite Path {app.config['DB_PATH']} .") + except FileExistsError: + print( + f"WARNING! SQLite Path {app.config['DB_PATH']} already exists, reusing." + ) @@ -79,6 +91,7 @@ def health(): from . import db db.init_app(app) + # Echo page returns the call with some additional information from . import echo app.register_blueprint(echo.bp) @@ -101,5 +114,4 @@ def health(): from . import echo_api app.register_blueprint(echo_api.bp) - return app diff --git a/test_server/db.py b/test_server/db.py index 5c3ee0f..5d32400 100644 --- a/test_server/db.py +++ b/test_server/db.py @@ -16,7 +16,6 @@ def get_db(): if 'db' not in g: my_db= new_db() if my_db: - # g.db= new_db() g.db= my_db else: raise NameError("No valid database configured.") @@ -84,7 +83,7 @@ def init_db(): with current_app.open_resource('sql/schema.sql') as schema: my_db.executescript(schema.read().decode('utf8')) except sqlite3.OperationalError as exc: - print(f"ERROR! Initializing database. Caught {exc}") + print(f"WARNING! Initializing database. Caught {exc}") @click.command('init-db') diff --git a/test_server/echo_data.py b/test_server/echo_data.py index 0b9bf8b..c82986b 100644 --- a/test_server/echo_data.py +++ b/test_server/echo_data.py @@ -19,7 +19,6 @@ class EchoData(): headers = {} def __init__(self, my_request): - # self.local_data = self.set_local_data() self.remote_data = self.set_remote_data(my_request) def get_remote_data(self): @@ -28,11 +27,10 @@ def get_remote_data(self): def set_remote_data(self, my_request): """ Set class data from http request.""" - # self.remote_data = my_request.headers return { 'remote_addr': self.get_remote_ip(my_request), 'url': my_request.url, - 'url_charset': my_request.url_charset, + 'url_charset': my_request.content_encoding, 'referrer': my_request.referrer, 'user_agent': my_request.user_agent.string, } @@ -40,11 +38,10 @@ def set_remote_data(self, my_request): @staticmethod def get_http_headers(my_request): """ Get HTTP headers from request.""" - # self.headers = self.get_remote_data(my_request) result = {} - for header in my_request.headers.envrion: + for header in my_request.headers.environ: if header.startswith('HTTP_'): - result[header]=my_request.headers.envrion[header] + result[header]=my_request.headers.environ[header] return result diff --git a/test_server/local_data.py b/test_server/local_data.py index 6834428..95b6634 100644 --- a/test_server/local_data.py +++ b/test_server/local_data.py @@ -51,14 +51,12 @@ def set_server_state(): """ hostname = socket.gethostname() sys_metrics = subprocess.check_output("uptime").decode("utf-8") - # uptime = re.search(r' up (.+?), \d* users', sys_metrics).group(1) uptime = "" uptime_re = re.search(r' up (.+?), \d* users', sys_metrics) if uptime_re: uptime = uptime_re.group(1) load = "" - # load = re.search(r' averages: ((\d*\.\d+ ?)+)', sys_metrics).group(1) load_re = re.search(r' averages: ((\d*\.\d+ ?)+)', sys_metrics) if load_re: load = load_re.group(1) diff --git a/test_server/test_server.cfg b/test_server/test_server.cfg index 49e152e..84a5ae7 100644 --- a/test_server/test_server.cfg +++ b/test_server/test_server.cfg @@ -27,7 +27,7 @@ REDIS_API_COUNTER = os.environ.get('REDIS_API_COUNTER') or'api_srv_counter' DB_TYPE = os.environ.get("DB_TYPE") or 'sqlite' DB_USER = os.environ.get("DB_USER") or 'root' DB_USER_PASSWORD = os.environ.get("DB_USER_PASSWORD") or 'password' -DATABASE = os.environ.get("DATABASE") or 'test_server' +DATABASE = os.environ.get("DATABASE") or None DB_NAME = os.environ.get("DB_NAME") or 'testserver' DB_PATH = os.environ.get("DB_PATH") or None DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1' diff --git a/tests/test_factory.py b/tests/test_factory.py index fe00eee..7654089 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -1,11 +1,21 @@ +''' +Test general app creation functions +''' from test_server import create_app def test_config(): + ''' Test app config loading. ''' assert not create_app().testing assert create_app({'TESTING': True, 'DB_TYPE': None}).testing +def test_app_defaults(): + ''' Test default db name.''' + app = create_app() + assert 'sqlite' == app.config['DB_TYPE'] + assert 'testserver' == app.config['DB_NAME'] def test_hello(client): + ''' Test health endpoint. ''' response = client.get('/health') - assert response.data == b'test_server is healthy.' \ No newline at end of file + assert response.data == b'test_server is healthy.' diff --git a/wsgi.py b/wsgi.py index 811a5e1..1ac50a0 100644 --- a/wsgi.py +++ b/wsgi.py @@ -1,11 +1,12 @@ """ Wsgi definition for Flask application.""" import sys -project_home = u'/home/web/test_server' -if project_home not in sys.path: - sys.path = [project_home] + sys.path +PROJECT_HOME = u'/home/web/test_server' +if PROJECT_HOME not in sys.path: + sys.path = [PROJECT_HOME] + sys.path from test_server import create_app app = create_app() if __name__ == "__main__": - app.run() \ No newline at end of file + app.run() + \ No newline at end of file