-
Notifications
You must be signed in to change notification settings - Fork 0
/
aliases.py
69 lines (60 loc) · 2.05 KB
/
aliases.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
67
68
69
import boto3
from boto3.dynamodb.conditions import Key
_aka = dict()
ALIASES = 'aliases'
ddb = boto3.resource('dynamodb', region_name='us-west-2')
table_carpoolers = 'carpoolers'
def _load_aliases(req):
global _aka
if _aka:
return
carpoolers = ddb.Table(table_carpoolers)
response = carpoolers.query(
KeyConditionExpression=Key('team_id').eq(req.team_id)
)
for pooler in response['Items']:
name = pooler['user_name']
_aka[name.lower()] = name
aliases = pooler.get(ALIASES, [])
for alias in aliases:
_aka[alias.lower()] = name
def resolve_aliases(req, aliases, is_object = False):
global _aka
_load_aliases(req)
results = []
for alias in aliases:
alias = alias.lower().lstrip('@')
if alias in _aka:
results.append(_aka[alias])
elif (is_object and alias == 'me') or (
not is_object and alias == 'i'):
results.append(req.user_name)
elif alias == 'and' and len(aliases) > 2:
pass
else:
results.append(alias) # not a member
return results
def resolve_alias(req, alias, is_object = False):
return resolve_aliases(req, (alias,), is_object)[0]
def register_alias(req, user, alias, illegals):
# user should already be looked-up through resolve_aliases
global _aka
lalias = alias.lower()
if lalias in _aka:
return "Alias {} already exists for {}".format(repr(alias), _aka[lalias])
if lalias in illegals or alias == 'and':
return "Alias {} is a reserved word".format(repr(alias))
_aka[lalias] = user
carpoolers = ddb.Table(table_carpoolers)
response = carpoolers.get_item(
Key=dict(team_id=req.team_id, user_name=user)
)
if 'Item' not in response:
return "User {} not found".format(user)
a = response['Item'].get(ALIASES, [])
a.append(alias)
carpoolers.update_item(
Key=dict(team_id=req.team_id, user_name=user),
AttributeUpdates={ALIASES: dict(Value=a, Action='PUT')}
)
return "ok"