Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F119766373
send_feedbacks
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Jun 29, 06:39
Size
4 KB
Mime Type
text/x-python
Expires
Tue, Jul 1, 06:39 (2 d)
Engine
blob
Format
Raw Data
Handle
27057570
Attached To
R3683 Slides
send_feedbacks
View Options
#!/usr/bin/env python3
import Slides.mail_helper as mailer
import argparse
import markdown
import getpass
import os
import time
import Slides.class_helper as ch
config = ch.get_class_config()
parser = argparse.ArgumentParser(
description='Send feedbacks of homework')
parser.add_argument('-n', '--homework', type=str,
help='specify the homework label',
required=True)
parser.add_argument('-u', '--username', type=str,
help='Username to log to the SMTP server')
parser.add_argument('-t', '--target', type=str,
help='Specify the name of a mail box'
' to send test messages,'
'default : {config["teachers"][0]}',
default=config['teachers'][0])
args = parser.parse_args()
students_list = config['students']
students_list.rename(columns={"e-Mail": "email"},
inplace=True)
students_list = students_list.applymap(
lambda x: x.strip() if isinstance(x, str) else x)
students_list.set_index("email", inplace=True)
homework = config['homeworks'][args.homework]
group_list = homework['groups']
################################################################
# find feedback file
feed_back = os.path.join(config['git_root'],
'homeworks', args.homework+'.report.org')
if not os.path.exists(feed_back):
print(
f"Warning: cannot find the report file: {feed_back}")
target = args.target
username = args.username
if username:
print('login:', username)
password = getpass.getpass()
################################################################
# output info
print('total_students:', len(students_list))
print('nb_groups:', len(group_list))
################################################################
def get_group_emails(group):
emails = group.split(' ')[0].split('_')
for e in emails:
if e not in students_list.index:
raise RuntimeError(
"student email not found in student list:"
f" {e}\n{students_list.index}")
return emails
def get_group_corrector(group):
corrector = group.split(' ')[1].strip('()')
return corrector
def treat_comments(group, comments):
lines = comments.split('\n')
emails = get_group_emails(group)
emails = ' & '.join(emails)
header = '# Group: ' + emails
# commit_info = '## git_commit: ' + lines[0]
commit_info = ''
corrector = '## Corrector: ' + get_group_corrector(group)
comments = '\n'.join(lines[1:]).replace(
'---', '\n').replace('###', '\n### ').replace(
'General comments:', 'General comments:\n\n').replace(
'\n\n\n', '\n\n')
return (header + '\n' + corrector + '\n' +
commit_info + '\n' + comments)
################################################################
feed_back = open(feed_back).read()
feed_back = [s.strip() for s in feed_back.split('* ')
if s.strip() != '']
feed_backs = dict()
key = None
val = None
for i, f in enumerate(feed_back):
if i % 2 == 0:
key = f.replace('\n*', '')
if i % 2 == 1:
val = f
feed_backs[key] = treat_comments(key, val)
################################################################
feedback_message = config['feedback_template']
messages = dict()
for k, v in feed_backs.items():
messages[k] = markdown.markdown(feedback_message) + '\n' + v
################################################################
if username:
for k, m in messages.items():
# print('send to:', get_group_emails(k))
mailer.mail(
markdown=True,
username=username,
sender_email=target,
subject=f'{config["acronym"]} homework {args.homework} feedback',
message=m,
copy_emails=config['teachers']+config['assistants'],
target_emails=get_group_emails(k),
password=password
)
time.sleep(1)
else:
for k, m in messages.items():
print('send to:', get_group_emails(k))
print(m)
# print(markdown.markdown(m))
Event Timeline
Log In to Comment