diff --git a/paramecio/citoplasma/sessions.py b/paramecio/citoplasma/sessions.py index 3b9e420..b747435 100644 --- a/paramecio/citoplasma/sessions.py +++ b/paramecio/citoplasma/sessions.py @@ -6,6 +6,11 @@ from bottle import request, response import os import json import fcntl +import errno +import time +import shutil +import uuid +from diskcache import Cache try: @@ -72,12 +77,6 @@ class ParamecioSession: def save(self): # Here get the function for load session - """ - path_cookie=config.session_opts['session.data_dir']+'/session_'+self.session['token'] - - with open(path_cookie, 'w') as f: - f.write(json.dumps(self.session)) - """ save_session(self.session['token'], self.session) @@ -118,23 +117,6 @@ def get_session(): # Here get the function for load session - """ - path_cookie=config.session_opts['session.data_dir']+'/session_'+cookie - - if os.path.isfile(path_cookie): - - with open(path_cookie) as f: - - json_txt=f.read() - - if(json_txt).strip()!='': - s=json.loads(json_txt) - else: - s={'token': cookie} - else: - s={'token': cookie} - """ - s=load_session(cookie) request.environ['session']=s @@ -146,7 +128,11 @@ def get_session(): return ParamecioSession(s) -if config.session_opts['session.type']=='redis': +if config.session_opts['session.type']=='mysql': + + pass + +elif config.session_opts['session.type']=='redis': import redis @@ -173,53 +159,31 @@ if config.session_opts['session.type']=='redis': r.set(token, json.dumps(session)) + def after_session(): + pass + else: + + cache=Cache(config.session_opts['session.data_dir']) def load_session(token): # Here get the function for load session - - path_cookie=config.session_opts['session.data_dir']+'/session_'+token - - if os.path.isfile(path_cookie): - - with open(path_cookie) as f: - - json_txt=f.read() - - if(json_txt).strip()!='': - s=json.loads(json_txt) - else: - s={'token': token} + + if token in cache: + s=json.loads(cache[token]) else: - # Need regenerate session + s={'token': token} + cache.add(token, json.dumps(s)) - s=generate_session() - return s def save_session(token, session): - - path_cookie=config.session_opts['session.data_dir']+'/session_'+token - - with open(path_cookie, 'w') as f: + cache[token]=json.dumps(session) + #pass + pass #Lock file, if cannot lock wait - - while True: - try: - fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB) - break - except IOError as e: - # raise on unrelated IOErrors - if e.errno != errno.EAGAIN: - raise - else: - time.sleep(0.1) - - f.write(json.dumps(session)) - - fcntl.flock(f, fcntl.LOCK_UN) """ def generate_session(): @@ -235,11 +199,11 @@ def get_session(): return request.environ.get(config.cookie_name) #ParamecioSession() else: - return None + return ParamecioSession({}) except: - return None + return ParamecioSession({}) """ """ try: diff --git a/paramecio/index.py b/paramecio/index.py index af35cab..4ea8391 100644 --- a/paramecio/index.py +++ b/paramecio/index.py @@ -9,6 +9,7 @@ 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 +#from paramecio.citoplasma.sessions import after_session modules_pass=False @@ -23,6 +24,19 @@ modules_pass=False workdir=os.getcwd() arr_module_path={} +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) + """ + @app.hook('after_request') + def clean_session(): + after_session() + """ + def prepare_app(): def print_memory(): @@ -46,14 +60,6 @@ def prepare_app(): #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() diff --git a/setup.py b/setup.py index 7c67f76..80aa55e 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ setup(name='paramecio', url='http://paramecioproject.com/', packages=['paramecio', 'paramecio.i18n'], include_package_data=True, - install_requires=['bottle', 'mako', 'mysqlclient', 'sqlalchemy', 'beaker>=1.8.0', 'itsdangerous', 'colorama','cherrypy', 'arrow'], + install_requires=['bottle', 'mako', 'mysqlclient', 'sqlalchemy', 'diskcache', 'itsdangerous', 'colorama','cherrypy', 'arrow'], entry_points={'console_scripts': [ 'paramecio = paramecio.console:start', ]},