Skip to content

Commit be95a83

Browse files
committed
Add command to create feedbacks from emails.
See ietf-tools#975 - Legacy-Id: 5596
1 parent 69c704d commit be95a83

4 files changed

Lines changed: 71 additions & 2 deletions

File tree

ietf/nomcom/management/__init__.py

Whitespace-only changes.

ietf/nomcom/management/commands/__init__.py

Whitespace-only changes.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from optparse import make_option
2+
from email.utils import parseaddr
3+
import syslog
4+
5+
from django.core.management.base import BaseCommand, CommandError
6+
7+
from ietf.nomcom.utils import parse_email
8+
from ietf.nomcom.models import Nominee, NomCom, Feedback
9+
10+
11+
class Command(BaseCommand):
12+
help = (u"Send a remind to each SDO Liaison Manager to update the list of persons authorized to send liaison statements on behalf of his SDO")
13+
option_list = BaseCommand.option_list + (
14+
make_option('--nomcom-year', dest='year', help='NomCom year'),
15+
make_option('--email-file', dest='email', help='Feedback email'),
16+
)
17+
18+
def handle(self, *args, **options):
19+
email = options.get('email', None)
20+
year = options.get('year', None)
21+
msg = None
22+
nominee = None
23+
nomcom = None
24+
help_message = 'Usage: feeback_email --nomcom-year <nomcom-year> --email-file <email-file>'
25+
26+
if not year:
27+
raise CommandError(help_message)
28+
29+
if not email:
30+
raise CommandError(help_message)
31+
else:
32+
msg = open(email, "r").read()
33+
34+
try:
35+
nomcom = NomCom.objects.get(group__acronym__icontains=year,
36+
group__state__slug='active')
37+
except NomCom.DoesNotExist:
38+
raise CommandError('NomCom %s does not exist' % year)
39+
40+
by, subject, body = parse_email(msg)
41+
name, addr = parseaddr(by)
42+
try:
43+
nominee = Nominee.objects.get_by_nomcom(nomcom).not_duplicated().get(email__address__icontains=addr)
44+
except Nominee.DoesNotExist:
45+
pass
46+
47+
feedback = Feedback(nomcom=nomcom,
48+
comments=body)
49+
if nominee:
50+
feedback.nominee = nominee
51+
feedback.save()
52+
syslog.syslog(u"Read feedback email by %s" % by)

ietf/nomcom/utils.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import hashlib
22
import re
3+
import email
34

45
from django.conf import settings
56
from django.core.exceptions import PermissionDenied
@@ -45,8 +46,8 @@ def get_year_by_nomcom(nomcom):
4546

4647
def get_user_email(user):
4748
emails = Email.objects.filter(person__user=user)
48-
email = emails and emails[0] or None
49-
return email
49+
mail = emails and emails[0] or None
50+
return mail
5051

5152

5253
def is_nomcom_member(user, nomcom):
@@ -139,3 +140,19 @@ def store_nomcom_private_key(request, year, private_key):
139140
if error:
140141
out = ''
141142
request.session['NOMCOM_PRIVATE_KEY_%s' % year] = out
143+
144+
145+
def extract_body(payload):
146+
if isinstance(payload, str):
147+
return payload
148+
else:
149+
return '\n'.join([extract_body(part.get_payload()) for part in payload])
150+
151+
152+
def parse_email(text):
153+
msg = email.message_from_string(text.encode("utf-8"))
154+
155+
# comment
156+
body = extract_body(msg.get_payload())
157+
158+
return msg['From'], msg['Subject'], body

0 commit comments

Comments
 (0)