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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# Copyright
"""
Tools for getting, setting, creating, and parsing the user's id. For
example,
'John Doe <jdoe@example.com>'
Note that the Arch VCS backend *enforces* ids with this format.
"""
import re
from socket import gethostname
import libbe
import libbe.storage.util.config
def get_fallback_username(self):
name = None
for env in ["LOGNAME", "USERNAME"]:
if os.environ.has_key(env):
name = os.environ[env]
break
assert name != None
return name
def get_fallback_email(self):
hostname = gethostname()
name = get_fallback_username()
return "%s@%s" % (name, hostname)
def create_user_id(name, email=None):
"""
>>> create_user_id("John Doe", "jdoe@example.com")
'John Doe <jdoe@example.com>'
>>> create_user_id("John Doe")
'John Doe'
"""
assert len(name) > 0
if email == None or len(email) == 0:
return name
else:
return "%s <%s>" % (name, email)
def parse_user_id(value):
"""
>>> parse_user_id("John Doe <jdoe@example.com>")
('John Doe', 'jdoe@example.com')
>>> parse_user_id("John Doe")
('John Doe', None)
>>> try:
... parse_user_id("John Doe <jdoe@example.com><what?>")
... except AssertionError:
... print "Invalid match"
Invalid match
"""
emailexp = re.compile("(.*) <([^>]*)>(.*)")
match = emailexp.search(value)
if match == None:
email = None
name = value
else:
assert len(match.groups()) == 3
assert match.groups()[2] == "", match.groups()
email = match.groups()[1]
name = match.groups()[0]
assert name != None
assert len(name) > 0
return (name, email)
def get_user_id(self, storage=None):
"""
Sometimes the storage will also keep track of the user id (e.g. most VCSs).
"""
user = libbe.storage.util.config.get_val('user')
if user != None:
return user
if storage != None and hasattr(storage, 'get_user_id'):
user = vcs.get_user_id()
if user != None:
return user
name = get_fallback_username()
email = get_fallback_email()
user = create_user_id(name, email)
return user
def set_user_id(self, user_id):
"""
"""
user = libbe.storage.util.config.set_val('user', user_id)
|