Re: svn commit: r290569 - /httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Web Servers reviews > Apache Server configuration support > Apache Mod-Python > Re: svn commit: r290569 - /httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.




  Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    Re: svn commit: r290569 - /httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.  
Gregory (Grisha) Trubetskoy


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
09-23-05 01:47 AM


Can we have a little discussion on pros/cons of this? Does this make
mod_python dependent on sqlite?

Thanks,

Grisha


On Tue, 20 Sep 2005 nlehuen@apache.org wrote:

> Author: nlehuen
> Date: Tue Sep 20 14:28:32 2005
> New Revision: 290569
>
> URL: http://svn.apache.org/viewcvs?rev=290569&view=rev
> Log:
> A first try at implementing a session storage relying on SQLite. It is slo
wer than FileSession but could scale better ?
>
> Added:
>    httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.py
>
> Added: httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.py
> URL: http://svn.apache.org/viewcvs/httpd...90569&view=auto
>  ========================================
==================================
====
> --- httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.py (added)
> +++ httpd/mod_python/trunk/lib/python/mod_python/SQLiteSession.py Tue Sep 
20 14:28:32 2005
> @@ -0,0 +1,150 @@
> + #
> + # Copyright 2004 Apache Software Foundation
> + #
> + # Licensed under the Apache License, Version 2.0 (the "License"); you
> + # may not use this file except in compliance with the License.  You
> + # may obtain a copy of the License at
> + #
> + #      http://www.apache.org/licenses/LICENSE-2.0
> + #
> + # Unless required by applicable law or agreed to in writing, software
> + # distributed under the License is distributed on an "AS IS" BASIS,
> + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> + # implied.  See the License for the specific language governing
> + # permissions and limitations under the License.
> + #
> + # Originally developed by Gregory Trubetskoy.
> + #
> + # $Id: Session.py 231126 2005-08-09 22:26:38Z jgallacher $
> +from Session import *
> +from time import time
> +
> +try:
> +    # If this code is included into Session.py,
> +    # we don't want to add a dependency to SQLite
> +    from pysqlite2 import dbapi2 as sqlite
> +except:
> +    pass
> +else:
> +    class SQLiteSession(BaseSession):
> +        """ A session implementation using SQLite to store session data.
> +            pysqlite2 is required, see http://pysqlite.org/
> +        """
> +
> +        def __init__(self, req, filename=None, sid=0, secret=None, timeou
t=0, lock=1):
> +            # if no filename is given, get it from PythonOption
> +            if not filename:
> +                opts = req.get_options()
> +                if opts.has_key("session_filename"):
> +                    filename = opts["session_filename"]
> +                else:
> +                    # or build a session file in a temporary directory
> +                    filename = os.path.join(
> +                        opts.get('session_directory', tempdir),
> +                        'mp_sess.sqlite'
> +                    )
> +
> +            self.filename = filename
> +
> +            # check whether the sessions table exists, and create it if n
ot
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    cur.execute("""
> +                        select name from sqlite_master
> +                        where name='sessions' and type='table'
> +                    """)
> +                    if cur.fetchone() is None:
> +                        cur.execute("""
> +                            create table sessions
> +                            (id text,data blob,timeout real)
> +                        """)
> +                        cur.execute("""
> +                            create unique index idx_session on sessions (
id)
> +                        """)
> +                        db.commit()
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
> +
> +            BaseSession.__init__(self, req, sid=sid, secret=secret,
> +                                 timeout=timeout, lock=lock)
> +
> +        def count(self):
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    cur.execute("select count(*) from sessions")
> +                    return cur.fetchone()[0]
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
> +
> +        def do_cleanup(self):
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    cur.execute(
> +                        "delete from sessions where timeout<?",
> +                        (time(),)
> +                    )
> +                    db.commit()
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
> +
> +        def do_load(self):
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    cur.execute(
> +                        "select data from sessions where id=?",
> +                        (self._sid,)
> +                    )
> +                    row = cur.fetchone()
> +                    if row is None:
> +                        return None
> +                    else:
> +                        return cPickle.loads(str(row[0]))
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
> +
> +        def do_save(self, dict):
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    data = buffer(cPickle.dumps(dict,2))
> +                    timeout = self._accessed+self._timeout
> +                    cur.execute("""
> +                        insert or replace into sessions (id,data,timeout)
> +                        values (?,?,?)
> +                    """,(self._sid,data,timeout))
> +                    db.commit()
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
> +
> +        def do_delete(self):
> +            db = sqlite.connect(self.filename)
> +            try:
> +                try:
> +                    cur = db.cursor()
> +                    cur.execute(
> +                        "delete from sessions where id=?",
> +                        (self._sid,)
> +                    )
> +                finally:
> +                    cur.close()
> +            finally:
> +                db.close()
>
>






[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 11:19 AM.      Post New Thread    Post A Reply      
  Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register