| author | Sandro Knauß <knauss@netzguerilla.net> |
| Sun, 22 Jan 2012 02:36:12 +0100 | |
| branch | devel |
| changeset 102 | 85ac86f7ffc4 |
| parent 96 | 883b25b0b760 |
| permissions | -rw-r--r-- |
| 92 | 1 |
import re |
2 |
||
|
93
ee10253258ad
now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
3 |
from ..model import User |
| 92 | 4 |
|
|
93
ee10253258ad
now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
5 |
from ..error import UserNotFound, InterfaceException, ValidateException |
| 92 | 6 |
|
7 |
||
8 |
def rehash(hash): |
|
9 |
if not re.match(r'^[a-f0-9]{15,}$', hash.lower()): |
|
10 |
raise ValidateException() |
|
11 |
return True |
|
12 |
||
13 |
def validate(**kargs): |
|
14 |
def v(f): |
|
15 |
def new_f(*a,**k): |
|
16 |
for i in kargs: |
|
17 |
kargs[i](k[i]) |
|
18 |
return f(*a,**k) |
|
19 |
new_f.__name__ = f.__name__ |
|
20 |
return new_f |
|
21 |
return v |
|
22 |
||
23 |
||
24 |
@validate(userhash=rehash) |
|
|
96
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
25 |
def getuser(userhash, session): |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
26 |
user = session.query(User).filter_by(apikey=userhash).first() |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
27 |
if user is None: |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
28 |
raise UserNotFound() |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
29 |
else: |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
30 |
return user |
| 92 | 31 |
|
32 |
def with_user(f): |
|
33 |
def new_f(*args,**kargs): |
|
34 |
args=list(args) |
|
35 |
try: |
|
|
96
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
36 |
userhash = kargs["apikey"] |
| 92 | 37 |
del kargs["apikey"] |
38 |
except KeyError: |
|
39 |
try: |
|
|
96
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
40 |
userhash = args[1] |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
41 |
del args[1] |
| 92 | 42 |
except IndexError: |
43 |
raise InterfaceException() |
|
|
96
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
44 |
|
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
45 |
def _gotResult(_user): |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
46 |
kargs["user"]=_user |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
47 |
return f(*args,**kargs) |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
48 |
return getuser(userhash=userhash).addCallback(_gotResult) |
|
883b25b0b760
using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents:
93
diff
changeset
|
49 |
|
| 92 | 50 |
new_f.__name__ = f.__name__ |
51 |
return new_f |
|
52 |
||
53 |