import os from flask import * from waitress import serve from paste.translogger import TransLogger from routes.helpers import configFile from routes import * from random import randint #initing app = Flask(__name__) VERSION: str = None app.config['JSON_AS_ASCII'] = False #error pages @app.errorhandler(429) def ratelimit_handler(e): return render_template('ratelimit.html'), 429 @app.errorhandler(403) def forbidden_handler(e): return render_template('forbidden.html'), 403 @app.errorhandler(404) def notfound_handler(e): return render_template('notfound.html'), 404 @app.errorhandler(405) def methodnotallowed_handler(e): return render_template('methodnotallowed.html'), 405 @app.errorhandler(500) def internalservererror_handler(e): return render_template('intervalservererror.html'), 500 @app.errorhandler(502) def badgateway_handler(e): return render_template('badgateway.html'), 502 #empty routes @app.route('/yt/api/v1', methods=['POST']) @app.route('/recognize/api/v1', methods=['POST']) @app.route('/osu/api/v1', methods=['POST']) @app.route('/jokes/api/v1', methods=['POST']) def emptyPath(): return {} @app.route('/yt/api/v1/', methods=['POST']) @app.route('/recognize/api/v1/', methods=['POST']) @app.route('/osu/api/v1/', methods=['POST']) @app.route('/jokes/api/v1/', methods=['POST']) def emptyApiWA(path): return {"status": "error", "error_code": 100, "error_details": "No method like that found"} #icon @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon') ############### #SITE ROUTES @app.route('/') def index(): return render_template('index.html') @app.route('/system/api/v1/info', methods=['POST']) def systemInfo(): return siteRoutes.systemInfo() ############### #YT SOUND API @app.route('/yt/api/v1/search', methods=['POST']) def search(): return ytApi.search(request) @app.route('/yt/api/v1/get-full', methods=['POST']) def getFull(): return ytApi.getFull(request) @app.route('/yt/api/v1/get-preview', methods=['POST']) def getPreview(): return ytApi.getPreview(request) ############### #JOKES API @app.route('/jokes/api/v1/get', methods=['POST']) def getJoke(): return jokes.getJoke(request) @app.route('/jokes/api/v1/sources', methods=['POST']) def getJokesSources(): return jokes.getSources(request) ############### #HOLIDAYS API (dont wanna document it) @app.route('/holidays/api/v1/get', methods=['POST']) def getHolidays(): return holidays.getHolidays(request) ############### #OSU API @app.route('/osu/api/v1/find-song', methods=['POST']) def findSong(): return osuApi.findSong(request) @app.route('/osu/api/v1/get-beatmap', methods=['POST']) def getBeatmap(): return osuApi.getBeatmap(request) @app.route('/osu/api/v1/get-preview', methods=['POST']) def getBMPreview(): return osuApi.getPreview(request) @app.route('/osu/api/v1/get-full', methods=['POST']) def getBMFull(): return osuApi.getFull(request) ############## # ANALYZE DATA API # deprecated @app.route('/analyzeText/api/v1/sentiment', methods=['POST']) def sentimentAnalys(): return {"status": "pass", "predicted_sentiment": "neutral"} @app.route('/analyzeText/api/v1/toxicity', methods=['POST']) def toxicityAnalys(): return {"status": "pass", "toxicity": False} ############## # INIT APP if __name__ == "__main__": config = configFile() with open(config['config-path'], "r", encoding="utf-8") as outfile: VERSION = config['buildVersion'] with open(config['openapi-yaml-path'], "r+", encoding="utf-8") as outfile: info = outfile.read() outfile.seek(0) outfile.write(info.replace('$VERSION_VARIABLE$', VERSION)) outfile.truncate() # $VERSION_VARIABLE$ serve(TransLogger(app, setup_console_handler=False), host="0.0.0.0", port=7860, threads=4, ident="FunAPI", )