mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2026-04-21 23:42:40 +02:00
Rewrite FlareSolverr from scratch in Python + Selenium
This commit is contained in:
91
src/flaresolverr.py
Normal file
91
src/flaresolverr.py
Normal file
@@ -0,0 +1,91 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
from bottle import run, response, Bottle, request
|
||||
|
||||
from bottle_plugins.error_plugin import error_plugin
|
||||
from bottle_plugins.logger_plugin import logger_plugin
|
||||
from dtos import IndexResponse, V1RequestBase
|
||||
import flaresolverr_service
|
||||
import utils
|
||||
|
||||
|
||||
class JSONErrorBottle(Bottle):
|
||||
"""
|
||||
Handle 404 errors
|
||||
"""
|
||||
def default_error_handler(self, res):
|
||||
response.content_type = 'application/json'
|
||||
return json.dumps(dict(error=res.body, status_code=res.status_code))
|
||||
|
||||
|
||||
app = JSONErrorBottle()
|
||||
|
||||
# plugin order is important
|
||||
app.install(logger_plugin)
|
||||
app.install(error_plugin)
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
"""
|
||||
Show welcome message
|
||||
"""
|
||||
res = flaresolverr_service.index_endpoint()
|
||||
return utils.object_to_dict(res)
|
||||
|
||||
|
||||
@app.route('/health')
|
||||
def health():
|
||||
"""
|
||||
Healthcheck endpoint.
|
||||
This endpoint is special because it doesn't print traces
|
||||
"""
|
||||
res = flaresolverr_service.health_endpoint()
|
||||
return utils.object_to_dict(res)
|
||||
|
||||
|
||||
@app.post('/v1')
|
||||
def controller_v1():
|
||||
"""
|
||||
Controller v1
|
||||
"""
|
||||
req = V1RequestBase(request.json)
|
||||
res = flaresolverr_service.controller_v1_endpoint(req)
|
||||
if res.__error_500__:
|
||||
response.status = 500
|
||||
return utils.object_to_dict(res)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# validate configuration
|
||||
log_level = os.environ.get('LOG_LEVEL', 'info').upper()
|
||||
log_html = utils.get_config_log_html()
|
||||
server_host = os.environ.get('HOST', '0.0.0.0')
|
||||
server_port = int(os.environ.get('PORT', 8191))
|
||||
|
||||
# configure logger
|
||||
logging.basicConfig(
|
||||
format='%(asctime)s %(levelname)-8s ReqId %(thread)s %(message)s',
|
||||
level=log_level,
|
||||
datefmt='%Y-%m-%d %H:%M:%S',
|
||||
handlers=[
|
||||
logging.StreamHandler(sys.stdout)
|
||||
]
|
||||
)
|
||||
# disable warning traces from urllib3
|
||||
logging.getLogger('urllib3').setLevel(logging.ERROR)
|
||||
logging.getLogger('selenium.webdriver.remote.remote_connection').setLevel(logging.WARNING)
|
||||
logging.getLogger('undetected_chromedriver').setLevel(logging.WARNING)
|
||||
|
||||
logging.info(f'FlareSolverr {utils.get_flaresolverr_version()}')
|
||||
logging.debug('Debug log enabled')
|
||||
|
||||
# test browser installation
|
||||
flaresolverr_service.test_browser_installation()
|
||||
|
||||
# start webserver
|
||||
# default server 'wsgiref' does not support concurrent requests
|
||||
run(app, host=server_host, port=server_port, quiet=True, server='waitress')
|
||||
Reference in New Issue
Block a user