From 5ae46996fed5d7e515ee65a9c1e7f4351174007c Mon Sep 17 00:00:00 2001 From: Antonio de la Rosa Date: Mon, 6 Feb 2017 04:45:31 +0100 Subject: [PATCH] Fixes for use with gunicorn reload and debug --- paramecio/index.py | 230 +++++++++++------------------ paramecio/modules/welcome/index.py | 4 +- paramecio/wsgiapp.py | 4 +- 3 files changed, 90 insertions(+), 148 deletions(-) diff --git a/paramecio/index.py b/paramecio/index.py index 2603581..11fbe63 100644 --- a/paramecio/index.py +++ b/paramecio/index.py @@ -1,7 +1,7 @@ import os, sys, traceback, inspect, resource from importlib import import_module -from bottle import route, get, post, run, default_app, abort, request, response, static_file, load, hook, error -from settings import config, modules +from bottle import route, get, post, run, default_app, abort, request, response, static_file, load, hook, error, debug, redirect +from settings import config #from beaker.middleware import SessionMiddleware from mimetypes import guess_type from paramecio.cromosoma.webmodel import WebModel @@ -9,6 +9,11 @@ from paramecio.citoplasma.datetime import set_timezone from itsdangerous import JSONWebSignatureSerializer from paramecio.citoplasma.keyutils import create_key_encrypt, create_key_encrypt_256, create_key from paramecio.wsgiapp import app + +modules_pass=False + +#app.reset() + #from paramecio.citoplasma.sessions import generate_session #Prepare links for static. @@ -17,6 +22,62 @@ from paramecio.wsgiapp import app #def create_app(): workdir=os.getcwd() 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: @app.route('/media/') @@ -45,154 +106,35 @@ if config.yes_static==True: else: mimetype=guess_type(path_module+'/'+filename) return static_file(filename, root=path_module) -""" -else: + +# Load modules + +try: + + from settings import modules - def add_func_static_module(module): - pass -""" - -def print_memory(): - print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) - #print(request.cookies) - -routes={} - -module_loaded=None - -#Getting paths for loaded modules for use in media load files - -for module in config.modules: + prepare_app() - #controller_path=sys.modules[module] - - controller_base=sys.modules[module].__path__[0] - - base_module=module.split('.')[-1] - - arr_module_path[base_module]=controller_base +except: -#Prepare ssl + @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 + + redirect(request.url) + catch_errors=app.route('/')(catch_errors) -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): - 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) - #else: - #return run(app=app, host=config.host, server=config.server_used, port=config.port, debug=config.debug, reloader=config.reloader) -""" diff --git a/paramecio/modules/welcome/index.py b/paramecio/modules/welcome/index.py index e5c60d8..d8b9b21 100644 --- a/paramecio/modules/welcome/index.py +++ b/paramecio/modules/welcome/index.py @@ -4,6 +4,7 @@ from paramecio.citoplasma.mtemplates import PTemplate, env_theme from paramecio.citoplasma.urls import make_url from paramecio.wsgiapp import app from settings import config +from bottle import request #t=ptemplate(__file__) env=env_theme(__file__) @@ -12,12 +13,11 @@ t=PTemplate(env) @app.route('/welcome') def home(): - + return t.render_template('welcome.html', title="Welcome to Paramecio!!!", content="The simple web framework writed in Python3!!!") @app.route('/welcome/') def page(id): - return t.render_template('index.html', title="A simple example of a page", id=id, value=request.query.value) @app.route('/welcome/test/') diff --git a/paramecio/wsgiapp.py b/paramecio/wsgiapp.py index fb0f088..f037da2 100644 --- a/paramecio/wsgiapp.py +++ b/paramecio/wsgiapp.py @@ -1,5 +1,5 @@ -from bottle import Bottle +import bottle -app=Bottle() +app=bottle.app()