Skip to content

Commit 13d9253

Browse files
Day 20/
1 parent 0d20688 commit 13d9253

24 files changed

+603
-0
lines changed

Day 20/hungry/__init__.py

Whitespace-only changes.

Day 20/hungry/__main__.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from argparse import ArgumentParser
2+
3+
from data_class import UserManager
4+
from utils.templates import get_template, render_context
5+
6+
parser = ArgumentParser(prog="hungry")
7+
parser.add_argument("type", type=str, choices=['view', 'message'])
8+
#parser.add_argument("did_send", type=str, choices=['true', 'false'])
9+
parser.add_argument('-id', '--user_id', type=int)
10+
parser.add_argument('-e', '--email', type=str)
11+
12+
args = parser.parse_args()
13+
14+
15+
if args.type == "view":
16+
print(UserManager().get_user_data(user_id=args.user_id, email=args.email))
17+
elif args.type == "message":
18+
print(UserManager().message_user(user_id=args.user_id, email=args.email))
461 Bytes
Binary file not shown.
935 Bytes
Binary file not shown.

Day 20/hungry/data.csv

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
id,name,email,amount,sent,date
2+
1,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:44.378612
3+
2,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:45.074490
4+
3,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:45.570860
5+
4,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:45.986075
6+
5,John,abc@teamcfe.com,asdf,adsd,2016-06-18 21:17:51.059165
7+
6,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:51.509586
8+
7,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:51.935921
9+
8,Justin,hello@teamcfe.com,231,adsd,2016-06-18 21:17:52.364994

Day 20/hungry/data_class.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import csv
2+
import datetime
3+
from email.mime.multipart import MIMEMultipart
4+
from email.mime.text import MIMEText
5+
import smtplib
6+
import shutil
7+
import os
8+
from tempfile import NamedTemporaryFile
9+
10+
from utils.templates import get_template, render_context
11+
#file_item_path = os.path.join(os.getcwd(), "data.csv")
12+
file_item_path = os.path.join(os.path.dirname(__file__), "data.csv")
13+
14+
15+
16+
host = "smtp.gmail.com"
17+
port = 587
18+
username = "hungrypy@gmail.com"
19+
password = "iamhungry2016day19"
20+
from_email = username
21+
to_list = ["hungrypy@gmail.com"]
22+
23+
class UserManager():
24+
def render_message(self, user_data):
25+
file_ = 'templates/email_message.txt'
26+
file_html = 'templates/email_message.html'
27+
template = get_template(file_)
28+
template_html = get_template(file_html)
29+
if isinstance(user_data, dict):
30+
context = user_data
31+
plain_ = render_context(template, context)
32+
html_ = render_context(template_html, context)
33+
return (plain_, html_)
34+
return (None, None)
35+
36+
def message_user(self, user_id=None, email=None, subject="Billing Update!"):
37+
user = self.get_user_data(user_id=user_id, email=email)
38+
if user:
39+
plain_, html_ = self.render_message(user)
40+
print(plain_, html_)
41+
user_email = user.get("email", "hello@teamcfe.com")
42+
to_list.append(user_email)
43+
try:
44+
email_conn = smtplib.SMTP(host, port)
45+
email_conn.ehlo()
46+
email_conn.starttls()
47+
email_conn.login(username, password)
48+
the_msg = MIMEMultipart("alternative")
49+
the_msg['Subject'] = subject
50+
the_msg["From"] = from_email
51+
the_msg["To"] = user_email
52+
part_1 = MIMEText(plain_, 'plain')
53+
part_2 = MIMEText(html_, "html")
54+
the_msg.attach(part_1)
55+
the_msg.attach(part_2)
56+
email_conn.sendmail(from_email, to_list, the_msg.as_string())
57+
email_conn.quit()
58+
except smtplib.SMTPException:
59+
print("error sending message")
60+
return None
61+
62+
def get_user_data(self, user_id=None, email=None):
63+
filename = file_item_path
64+
with open(filename, "r") as csvfile:
65+
reader = csv.DictReader(csvfile)
66+
items = []
67+
unknown_user_id = None
68+
unknown_email = None
69+
for row in reader:
70+
if user_id is not None:
71+
if int(user_id) == int(row.get("id")):
72+
return row
73+
else:
74+
unknown_user_id = user_id
75+
if email is not None:
76+
if email == row.get("email"):
77+
return row
78+
else:
79+
unknown_email = email
80+
if unknown_user_id is not None:
81+
print("User id {user_id} not found".format(user_id=user_id))
82+
if unknown_email is not None:
83+
print("Email {email} not found".format(email=email))
84+
return None

Day 20/hungry/data_class.pyc

2.9 KB
Binary file not shown.

Day 20/hungry/data_manager.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import csv
2+
import datetime
3+
import shutil
4+
import os
5+
from tempfile import NamedTemporaryFile
6+
7+
8+
#file_item_path = os.path.join(os.getcwd(), "data.csv")
9+
file_item_path = os.path.join(os.path.dirname(__file__), "data.csv")
10+
11+
12+
def read_data(user_id=None, email=None):
13+
filename = file_item_path
14+
with open(filename, "r") as csvfile:
15+
reader = csv.DictReader(csvfile)
16+
items = []
17+
unknown_user_id = None
18+
unknown_email = None
19+
for row in reader:
20+
if user_id is not None:
21+
if int(user_id) == int(row.get("id")):
22+
return row
23+
else:
24+
unknown_user_id = user_id
25+
if email is not None:
26+
if email == row.get("email"):
27+
return row
28+
else:
29+
unknown_email = email
30+
if unknown_user_id is not None:
31+
return "User id {user_id} not found".format(user_id=user_id)
32+
if unknown_email is not None:
33+
return "Email {email} not found".format(email=email)
34+
return None

Day 20/hungry/data_manager.pyc

1.03 KB
Binary file not shown.

Day 20/hungry/old_src/custom.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import smtplib
2+
3+
host = "smtp.gmail.com"
4+
port = 587
5+
username = "hungrypy@gmail.com"
6+
password = "iamhungry2016"
7+
from_email = username
8+
to_list = ["hungrypy@gmail.com"]
9+
10+
email_conn = smtplib.SMTP(host, port)
11+
email_conn.ehlo()
12+
email_conn.starttls()
13+
email_conn.login(username, password)
14+
email_conn.sendmail(from_email, to_list, "Hello there this is an email message")
15+
email_conn.quit()
16+
17+
18+
from smtplib import SMTP
19+
20+
21+
ABC = SMTP(host, port)
22+
ABC.ehlo()
23+
ABC.starttls()
24+
ABC.login(username, password)
25+
ABC.sendmail(from_email, to_list, "Hello there this is an email message")
26+
ABC.quit()
27+
28+
29+
from smtplib import SMTP, SMTPAuthenticationError, SMTPException
30+
31+
32+
pass_wrong = SMTP(host, port)
33+
pass_wrong.ehlo()
34+
pass_wrong.starttls()
35+
try:
36+
pass_wrong.login(username, "wrong_password")
37+
pass_wrong.sendmail(from_email, to_list, "Hello there this is an email message")
38+
except SMTPAuthenticationError:
39+
print("Could not login")
40+
except:
41+
print("an error occured")
42+
43+
pass_wrong.quit()
44+
45+
46+

0 commit comments

Comments
 (0)