Fixes for use with gunicorn reload and debug
This commit is contained in:
parent
d8d803e85a
commit
5ae46996fe
3 changed files with 90 additions and 148 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
import os, sys, traceback, inspect, resource
|
import os, sys, traceback, inspect, resource
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from bottle import route, get, post, run, default_app, abort, request, response, static_file, load, hook, error
|
from bottle import route, get, post, run, default_app, abort, request, response, static_file, load, hook, error, debug, redirect
|
||||||
from settings import config, modules
|
from settings import config
|
||||||
#from beaker.middleware import SessionMiddleware
|
#from beaker.middleware import SessionMiddleware
|
||||||
from mimetypes import guess_type
|
from mimetypes import guess_type
|
||||||
from paramecio.cromosoma.webmodel import WebModel
|
from paramecio.cromosoma.webmodel import WebModel
|
||||||
|
|
@ -9,6 +9,11 @@ from paramecio.citoplasma.datetime import set_timezone
|
||||||
from itsdangerous import JSONWebSignatureSerializer
|
from itsdangerous import JSONWebSignatureSerializer
|
||||||
from paramecio.citoplasma.keyutils import create_key_encrypt, create_key_encrypt_256, create_key
|
from paramecio.citoplasma.keyutils import create_key_encrypt, create_key_encrypt_256, create_key
|
||||||
from paramecio.wsgiapp import app
|
from paramecio.wsgiapp import app
|
||||||
|
|
||||||
|
modules_pass=False
|
||||||
|
|
||||||
|
#app.reset()
|
||||||
|
|
||||||
#from paramecio.citoplasma.sessions import generate_session
|
#from paramecio.citoplasma.sessions import generate_session
|
||||||
|
|
||||||
#Prepare links for static.
|
#Prepare links for static.
|
||||||
|
|
@ -17,6 +22,62 @@ from paramecio.wsgiapp import app
|
||||||
#def create_app():
|
#def create_app():
|
||||||
workdir=os.getcwd()
|
workdir=os.getcwd()
|
||||||
arr_module_path={}
|
arr_module_path={}
|
||||||
|
|
||||||
|
def prepare_app():
|
||||||
|
|
||||||
|
def print_memory():
|
||||||
|
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
|
||||||
|
|
||||||
|
routes={}
|
||||||
|
|
||||||
|
module_loaded=None
|
||||||
|
|
||||||
|
#Getting paths for loaded modules for use in media load files
|
||||||
|
|
||||||
|
for module in config.modules:
|
||||||
|
|
||||||
|
#controller_path=sys.modules[module]
|
||||||
|
|
||||||
|
controller_base=sys.modules[module].__path__[0]
|
||||||
|
|
||||||
|
base_module=module.split('.')[-1]
|
||||||
|
|
||||||
|
arr_module_path[base_module]=controller_base
|
||||||
|
|
||||||
|
#app.add_hook('before_request', print_memory)
|
||||||
|
|
||||||
|
if config.session_enabled==True:
|
||||||
|
#Create dir for sessions
|
||||||
|
|
||||||
|
if 'session.data_dir' in config.session_opts:
|
||||||
|
|
||||||
|
if not os.path.isdir(config.session_opts['session.data_dir']):
|
||||||
|
os.makedirs(config.session_opts['session.data_dir'], 0o700, True)
|
||||||
|
|
||||||
|
set_timezone()
|
||||||
|
|
||||||
|
|
||||||
|
# Clean last slash
|
||||||
|
|
||||||
|
@app.hook('before_request')
|
||||||
|
def strip_path():
|
||||||
|
request.environ['PATH_INFO'] = request.environ['PATH_INFO'].rstrip('/')
|
||||||
|
|
||||||
|
# Set error screen if not debug setted
|
||||||
|
|
||||||
|
if config.debug==False:
|
||||||
|
@app.error(404)
|
||||||
|
def error404(error):
|
||||||
|
return 'Error: page not found'
|
||||||
|
|
||||||
|
debug(config.debug)
|
||||||
|
|
||||||
|
#Prepare app
|
||||||
|
|
||||||
|
application=app
|
||||||
|
|
||||||
|
# Prepare static routes
|
||||||
|
|
||||||
if config.yes_static==True:
|
if config.yes_static==True:
|
||||||
|
|
||||||
@app.route('/media/<filename:path>')
|
@app.route('/media/<filename:path>')
|
||||||
|
|
@ -45,154 +106,35 @@ if config.yes_static==True:
|
||||||
else:
|
else:
|
||||||
mimetype=guess_type(path_module+'/'+filename)
|
mimetype=guess_type(path_module+'/'+filename)
|
||||||
return static_file(filename, root=path_module)
|
return static_file(filename, root=path_module)
|
||||||
"""
|
|
||||||
else:
|
|
||||||
|
|
||||||
def add_func_static_module(module):
|
# Load modules
|
||||||
pass
|
|
||||||
"""
|
|
||||||
|
|
||||||
def print_memory():
|
try:
|
||||||
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
|
|
||||||
#print(request.cookies)
|
|
||||||
|
|
||||||
routes={}
|
from settings import modules
|
||||||
|
|
||||||
module_loaded=None
|
prepare_app()
|
||||||
|
|
||||||
#Getting paths for loaded modules for use in media load files
|
except:
|
||||||
|
|
||||||
for module in config.modules:
|
@app.route('/')
|
||||||
|
def catch_errors(all='/'):
|
||||||
|
try:
|
||||||
|
from pathlib import Path
|
||||||
|
from settings import modules
|
||||||
|
import time
|
||||||
|
prepare_app()
|
||||||
|
p=Path('index.py')
|
||||||
|
p.touch()
|
||||||
|
time.sleep(1)
|
||||||
|
except:
|
||||||
|
raise
|
||||||
|
|
||||||
#controller_path=sys.modules[module]
|
redirect(request.url)
|
||||||
|
catch_errors=app.route('/<all:path>')(catch_errors)
|
||||||
|
|
||||||
controller_base=sys.modules[module].__path__[0]
|
|
||||||
|
|
||||||
base_module=module.split('.')[-1]
|
|
||||||
|
|
||||||
arr_module_path[base_module]=controller_base
|
|
||||||
|
|
||||||
#Prepare ssl
|
|
||||||
|
|
||||||
if config.ssl==True:
|
|
||||||
|
|
||||||
from citoplasma.gunicornssl import GunicornServerSSL
|
|
||||||
|
|
||||||
GunicornServerSSL.cert_pem=config.cert_pem
|
|
||||||
GunicornServerSSL.privkey_pem=config.privkey_pem
|
|
||||||
|
|
||||||
config.server_used=GunicornServerSSL
|
|
||||||
|
|
||||||
#Prepare app
|
|
||||||
|
|
||||||
application=app
|
|
||||||
|
|
||||||
#app.add_hook('before_request', print_memory)
|
|
||||||
|
|
||||||
#app.add_hook('after_request', WebModel.close)
|
|
||||||
|
|
||||||
if config.session_enabled==True:
|
|
||||||
#Create dir for sessions
|
|
||||||
|
|
||||||
if 'session.data_dir' in config.session_opts:
|
|
||||||
|
|
||||||
if not os.path.isdir(config.session_opts['session.data_dir']):
|
|
||||||
os.makedirs(config.session_opts['session.data_dir'], 0o700, True)
|
|
||||||
|
|
||||||
"""
|
|
||||||
key_encrypt=config.key_encrypt
|
|
||||||
|
|
||||||
if config.session_opts['session.type']=='file':
|
|
||||||
|
|
||||||
def load_session():
|
|
||||||
|
|
||||||
code_session=request.get_cookie(config.cookie_name, secret=config.key_encrypt)
|
|
||||||
|
|
||||||
if code_session==None:
|
|
||||||
# Send cookie
|
|
||||||
generate_session()
|
|
||||||
else:
|
|
||||||
|
|
||||||
# Check if file exists
|
|
||||||
|
|
||||||
if os.path.isfile(config.session_opts['session.data_dir']+'/session_'+code_session):
|
|
||||||
with open(config.session_opts['session.data_dir']+'/session_'+code_session, 'r') as f:
|
|
||||||
|
|
||||||
try:
|
|
||||||
|
|
||||||
s = JSONWebSignatureSerializer(key_encrypt)
|
|
||||||
session_dict=f.read()
|
|
||||||
request.environ[config.cookie_name]=s.loads(session_dict)
|
|
||||||
request.environ[config.cookie_name]['token']=code_session
|
|
||||||
|
|
||||||
except:
|
|
||||||
|
|
||||||
# Clean fake session
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.remove(config.session_opts['session.data_dir']+'/session_'+code_session)
|
|
||||||
|
|
||||||
except:
|
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
generate_session()
|
|
||||||
|
|
||||||
else:
|
|
||||||
request.environ[config.cookie_name]={'token': code_session}
|
|
||||||
|
|
||||||
def save_session():
|
|
||||||
|
|
||||||
save_session=request.environ[config.cookie_name]
|
|
||||||
if 'save' in save_session:
|
|
||||||
del save_session['save']
|
|
||||||
# Here define the session type, if memcached, save data in memcached
|
|
||||||
try:
|
|
||||||
with open(config.session_opts['session.data_dir']+'/session_'+save_session['token'], 'w') as f:
|
|
||||||
s = JSONWebSignatureSerializer(key_encrypt)
|
|
||||||
json_encode=s.dumps(save_session)
|
|
||||||
f.write(json_encode.decode('utf8'))
|
|
||||||
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
#request.environ[config.cookie_name]['save']
|
|
||||||
#def save_session()
|
|
||||||
|
|
||||||
app.add_hook('before_request', load_session)
|
|
||||||
app.add_hook('after_request', save_session)
|
|
||||||
#def
|
|
||||||
"""
|
|
||||||
#app = SessionMiddleware(app, config.session_opts, environ_key=config.cookie_name)
|
|
||||||
|
|
||||||
# Clean last slash
|
|
||||||
|
|
||||||
@app.hook('before_request')
|
|
||||||
def strip_path():
|
|
||||||
request.environ['PATH_INFO'] = request.environ['PATH_INFO'].rstrip('/')
|
|
||||||
|
|
||||||
# Set error screen if not debug setted
|
|
||||||
|
|
||||||
if config.debug==False:
|
|
||||||
@app.error(404)
|
|
||||||
def error404(error):
|
|
||||||
return 'Error: page not found'
|
|
||||||
"""
|
|
||||||
else:
|
|
||||||
@app.error(500)
|
|
||||||
def error500(error):
|
|
||||||
return error
|
|
||||||
"""
|
|
||||||
|
|
||||||
set_timezone()
|
|
||||||
|
|
||||||
def run_app(app):
|
def run_app(app):
|
||||||
|
|
||||||
run(app=app, host=config.host, server=config.server_used, port=config.port, debug=config.debug, reloader=config.reloader, interval=0.5)
|
|
||||||
"""
|
|
||||||
if __name__ == "__main__":
|
|
||||||
run(app=app, host=config.host, server=config.server_used, port=config.port, debug=config.debug, reloader=config.reloader)
|
run(app=app, host=config.host, server=config.server_used, port=config.port, debug=config.debug, reloader=config.reloader)
|
||||||
#else:
|
|
||||||
#return run(app=app, host=config.host, server=config.server_used, port=config.port, debug=config.debug, reloader=config.reloader)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ from paramecio.citoplasma.mtemplates import PTemplate, env_theme
|
||||||
from paramecio.citoplasma.urls import make_url
|
from paramecio.citoplasma.urls import make_url
|
||||||
from paramecio.wsgiapp import app
|
from paramecio.wsgiapp import app
|
||||||
from settings import config
|
from settings import config
|
||||||
|
from bottle import request
|
||||||
|
|
||||||
#t=ptemplate(__file__)
|
#t=ptemplate(__file__)
|
||||||
env=env_theme(__file__)
|
env=env_theme(__file__)
|
||||||
|
|
@ -17,7 +18,6 @@ def home():
|
||||||
|
|
||||||
@app.route('/welcome/<id:int>')
|
@app.route('/welcome/<id:int>')
|
||||||
def page(id):
|
def page(id):
|
||||||
|
|
||||||
return t.render_template('index.html', title="A simple example of a page", id=id, value=request.query.value)
|
return t.render_template('index.html', title="A simple example of a page", id=id, value=request.query.value)
|
||||||
|
|
||||||
@app.route('/welcome/test/<id:int>')
|
@app.route('/welcome/test/<id:int>')
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from bottle import Bottle
|
import bottle
|
||||||
|
|
||||||
app=Bottle()
|
app=bottle.app()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue