forked from brianr/uuss
-
Notifications
You must be signed in to change notification settings - Fork 0
/
__init__.py
66 lines (53 loc) · 2.24 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from lolapps.util.adapters import chunking
import logging
log = logging.getLogger(__name__)
## game names for use with the UUMS and UUSS
DANE='dane'
INDIA='india'
RICH='rich'
VICTORIA='victoria'
ALL_GAMES = [ DANE, INDIA, RICH, VICTORIA ]
class UserstateException(Exception):
pass
class UserIdMissingException(UserstateException):
pass
class WrongUserIdException(UserstateException):
pass
def check_user_id(user_id, state, chunk_config={}, game=None):
if state is None:
return
# if we get a str, this is a chunked state and needs to have the master record reconstitued so we can check the user_id
if isinstance(state, str):
if chunk_config == {}:
config = chunking.get_saved_chunk_config(state)
if isinstance(config, list):
# we can't check for the user id and game in the old format list chunk config
state = chunking.reconstitute_chunks(state, True)
else:
# If no chunk config passed in to check, just check the values in the chunk config
state = config
else:
# reconstitute so we can check the chunks
state = chunking.reconstitute_chunks(state, True)
if game is not None:
if 'game' not in state:
log.debug("game not set in state, adding")
state['game'] = game
elif state['game'] != game:
raise UserstateException("state['game'] (%r) != game (%r)" % (state['game'], game))
if 'user_id' not in state:
raise UserIdMissingException("user_id missing for '%s'" % user_id)
elif state['user_id'] != str(user_id):
raise WrongUserIdException("wrong user_id in state for '%s', found '%s'" % (user_id, state['user_id']))
for chunk_name, chunk_path in chunk_config.iteritems():
container = state
for key in chunk_path[:-1]:
if key not in container:
container = None
break
container = container[key]
if container is None:
continue
chunk_key = chunk_path[-1]
if chunk_key in container and container[chunk_key] is None:
raise UserstateException("Chunk %r is None for user %r" % (chunk_name, user_id))