1 from inspect import getcallargs |
1 from inspect import getcallargs |
2 from functools import wraps |
2 from decorator import decorator |
3 |
3 |
4 from .schema import User |
4 from .schema import User |
5 from .utils import DBDefer |
5 from .utils import DBDefer |
6 from ..validate import vuserhash, validate |
6 from ..validate import validate, vHash |
7 from ..error import UserNotFound, InterfaceException |
7 from ..error import UserNotFound, InterfaceException |
8 |
8 |
9 dbdefer=DBDefer(None) |
9 dbdefer=DBDefer(None) |
10 |
10 |
11 def setEngine(engine,autocommit=False): |
11 def setEngine(engine,autocommit=False): |
12 dbdefer.engine = engine |
12 dbdefer.engine = engine |
13 dbdefer.autocommit = autocommit |
13 dbdefer.autocommit = autocommit |
14 |
14 |
|
15 |
15 @dbdefer |
16 @dbdefer |
16 @validate(kwd="apikey", func=vuserhash) |
17 @validate(kwd="apikey", func=vHash, minlength=15, maxlength=15) |
17 def getuser(apikey, session): |
18 def getuser(apikey, session): |
18 user = session.query(User).filter_by(apikey=apikey).first() |
19 user = session.query(User).filter_by(apikey=apikey).first() |
19 if user is None: |
20 if user is None: |
20 raise UserNotFound() |
21 raise UserNotFound() |
21 else: |
22 else: |
22 return user |
23 return user |
23 |
24 |
24 def with_user(f): |
25 @decorator |
25 @wraps(f) |
26 def vUser(f,*args,**kargs): |
26 def wrapper(*args,**kargs): |
27 kp=getcallargs(f,*args,**kargs) |
27 kp=getcallargs(wrapper.original,*args,**kargs) |
28 try: |
28 try: |
29 apikey = kp["user"] |
29 apikey = kp["user"] |
30 except KeyError: |
30 except KeyError: |
31 raise InterfaceException() |
31 raise InterfaceException() |
32 |
32 |
33 def _gotResult(_user): |
33 def _gotResult(_user): |
34 kp["user"]=_user |
34 kp["user"]=_user |
35 return f(**kp) |
35 return f(**kp) |
|
36 |
36 |
37 d=getuser(apikey=apikey) |
37 d=getuser(apikey=apikey) |
38 return d.addCallback(_gotResult) |
38 return d.addCallback(_gotResult) |
39 try: |
|
40 wrapper.original=f.original |
|
41 except AttributeError: |
|
42 wrapper.original=f |
|
43 return wrapper |
|
44 |
39 |
45 |
40 |