Source code for papers_without_code.bin.pwoc_app
#!/usr/bin/env python
import argparse
import logging
import os
import sys
import traceback
from flask import Flask
from papers_without_code.app import STATIC_DIR, views
###############################################################################
log = logging.getLogger(__name__)
###############################################################################
[docs]
class Args(argparse.Namespace):
def __init__(self) -> None:
self.__parse()
def __parse(self) -> None:
p = argparse.ArgumentParser(
prog="pwoc-web-app",
description="Papers without Code: Run the web application.",
)
p.add_argument(
"--debug",
dest="debug",
action="store_true",
help=(
"Run with debug logging. "
"Note: the web server is always ran in debug mode, this is for other "
"functional logging."
),
)
p.parse_args(namespace=self)
def _pwoc_app() -> None:
# Create
app = Flask(
__name__,
static_folder=STATIC_DIR,
)
# Load views
app.register_blueprint(views.views, url_prefix="/")
# Print os.environ has GITHUB_TOKEN
runner_has_gh_token = "GITHUB_TOKEN" in os.environ
log.info(f"App has access to GitHub Token: {runner_has_gh_token}")
# Run (debug allows live reloading)
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
[docs]
def main() -> None:
# Get args
args = Args()
# Determine log level
if args.debug:
log_level = logging.DEBUG
else:
log_level = logging.INFO
# Setup logging
logging.basicConfig(
level=log_level,
format="[%(levelname)4s: %(module)s:%(lineno)4s %(asctime)s] %(message)s",
)
# Manage servers
try:
_pwoc_app()
except Exception as e:
log.error("=============================================")
log.error("\n\n" + traceback.format_exc())
log.error("=============================================")
log.error("\n\n" + str(e) + "\n")
log.error("=============================================")
sys.exit(1)
###############################################################################
# Allow caller to directly run this module (usually in development scenarios)
if __name__ == "__main__":
main()