Mercurial > eagle-eye
annotate ikweb/ikweb/gaeo/session/memcache.py @ 247:7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
author | "Hisn Yi, Chen <ossug.hychen@gmail.com>" |
---|---|
date | Mon, 01 Dec 2008 00:27:22 +0800 |
parents | |
children |
rev | line source |
---|---|
247
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
2 # |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
3 # Copyright 2008 Lin-Chieh Shangkuan & Liang-Heng Chen |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
4 # |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
5 # Licensed under the Apache License, Version 2.0 (the "License"); |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
6 # you may not use this file except in compliance with the License. |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
7 # You may obtain a copy of the License at |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
8 # |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
9 # http://www.apache.org/licenses/LICENSE-2.0 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
10 # |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
11 # Unless required by applicable law or agreed to in writing, software |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
12 # distributed under the License is distributed on an "AS IS" BASIS, |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
14 # See the License for the specific language governing permissions and |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
15 # limitations under the License. |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
16 # |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
17 """ GAEO Session - memcache store """ |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
18 import random |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
19 import pickle |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
20 import logging |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
21 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
22 from google.appengine.api import memcache |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
23 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
24 from gaeo import session |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
25 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
26 class MemcacheSession(session.Session): |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
27 """ session that uses memcache """ |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
28 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
29 def __init__(self, hnd, name = 'gaeo_session', timeout = 60 * 60): |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
30 super(MemcacheSession, self).__init__(hnd, name, timeout) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
31 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
32 # check from cookie |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
33 if name in hnd.request.cookies: |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
34 self._id = hnd.request.cookies[name] |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
35 session_data = memcache.get(self._id) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
36 if session_data: |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
37 self.update(pickle.loads(session_data)) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
38 memcache.set(self._id, session_data, timeout) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
39 else: # not in the cookie, set it |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
40 cookie = '%s=%s' % (name, self._id) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
41 hnd.response.headers.add_header('Set-Cookie', cookie) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
42 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
43 def put(self): |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
44 if not self._invalidated: |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
45 memcache.set(self._id, pickle.dumps(self.copy()), self._timeout) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
46 |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
47 def invalidate(self): |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
48 """Invalidates the session data""" |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
49 self._hnd.response.headers.add_header( |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
50 'Set-Cookie', |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
51 '%s=; expires=Thu, 1-Jan-1970 00:00:00 GMT;' % self._name |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
52 ) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
53 memcache.delete(self._id) |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
54 self.clear() |
7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
"Hisn Yi, Chen <ossug.hychen@gmail.com>"
parents:
diff
changeset
|
55 self._invalidated = True |