| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- from redmail import EmailSender
- import re
- import base64
- from pathlib import Path
- from io import BytesIO
- import pytest
- import pandas as pd
- import numpy as np
- from resources import get_mpl_fig, get_pil_image
- from convert import remove_extra_lines
- def to_encoded(s:str):
- return str(base64.b64encode(s.encode()), 'ascii')
- def test_dict_string():
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'data.txt': 'Some content'}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'data.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
- def test_dict_path(tmpdir):
- file = tmpdir.join("data.txt")
- file.write("Some content")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myfile.txt': Path(str(file))}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myfile.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
- def test_dict_dataframe_txt():
- pytest.importorskip("pandas")
- import pandas as pd
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myfile.txt': pd.DataFrame({'a': [1,2,3], 'b': ['1', '2', '3']})}
- )
- expected = str(pd.DataFrame({'a': [1,2,3], 'b': ['1', '2', '3']}))
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myfile.txt'
- assert to_encoded(expected) == data.replace('\n', '')
- def test_dict_dataframe_csv():
- pytest.importorskip("pandas")
- import pandas as pd
- df = pd.DataFrame({'a': [1,2,3], 'b': ['1', '2', '3']})
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myfile.csv': df}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myfile.csv'
- assert to_encoded(df.to_csv()) == data.replace('\n', '')
- def test_dict_dataframe_html():
- pytest.importorskip("pandas")
- import pandas as pd
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myfile.html': pd.DataFrame({'a': [1,2,3], 'b': ['1', '2', '3']})}
- )
- expected = '<table border="1" class="dataframe">\n <thead>\n <tr style="text-align: right;">\n <th></th>\n <th>a</th>\n <th>b</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>2</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>3</td>\n </tr>\n </tbody>\n</table>'
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload().replace('\n', '')
- assert filename == 'myfile.html'
- assert to_encoded(expected) == data
- def test_dict_dataframe_excel_no_error():
- pytest.importorskip("pandas")
- pytest.importorskip("openpyxl")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myfile.xlsx': pd.DataFrame({'a': [1,2,3], 'b': ['1', '2', '3']})}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myfile.html'
- # Excels are harder to verify
- def test_dict_pil_no_error():
- pil, bytes_img = get_pil_image()
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myimg.png': pil}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myimg.png'
- assert str(base64.b64encode(bytes_img), 'ascii') == data.replace('\n', '')
- def test_dict_matplotlib_no_error():
- fig, bytes_fig = get_mpl_fig()
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'myimg.png': fig}
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'myimg.png'
- assert str(base64.b64encode(bytes_fig), 'ascii') == data.replace('\n', '')
- def test_dict_multiple(tmpdir):
- file1 = tmpdir.join("file_1.txt")
- file1.write("Some content 1")
- file2 = tmpdir.join("file_2.txt")
- file2.write("Some content 2")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments={'data_1.txt': Path(file1), 'data_2.txt': Path(file2)}
- )
- expected = [('data_1.txt', 'Some content 1'), ('data_2.txt', 'Some content 2')]
- for payload, expected in zip(msg.get_payload(), expected):
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == expected[0]
- assert to_encoded(expected[1]) == data.replace('\n', '')
- # List attachments
- # ----------------
- def test_list_path(tmpdir):
- file = tmpdir.join("data.txt")
- file.write("Some content")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=[Path(str(file))]
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'data.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
- def test_list_string_path(tmpdir):
- file = tmpdir.join("data.txt")
- file.write("Some content")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=[str(file)]
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'data.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
- def test_list_string_error():
- sender = EmailSender(host=None, port=1234)
- with pytest.raises(ValueError):
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=['just something']
- )
- def test_list_multiple(tmpdir):
- file1 = tmpdir.join("data_1.txt")
- file1.write("Some content 1")
- file2 = tmpdir.join("data_2.txt")
- file2.write("Some content 2")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=[Path(str(file1)), Path(str(file2))]
- )
- expected = [('data_1.txt', 'Some content 1'), ('data_2.txt', 'Some content 2')]
- for payload, expected in zip(msg.get_payload(), expected):
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == expected[0]
- assert to_encoded(expected[1]) == data.replace('\n', '')
- def test_string_path(tmpdir):
- file = tmpdir.join("data.txt")
- file.write("Some content")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=str(file)
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'data.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
- def test_string_error():
- sender = EmailSender(host=None, port=1234)
- with pytest.raises(ValueError):
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments="just something"
- )
- def test_path(tmpdir):
- file = tmpdir.join("data.txt")
- file.write("Some content")
- sender = EmailSender(host=None, port=1234)
- msg = sender.get_message(
- sender="me@gmail.com",
- receivers="you@gmail.com",
- subject="Some news",
- attachments=Path(file)
- )
- payload = msg.get_payload(0)
- filename = payload.get_filename()
- data = payload.get_payload()
- assert filename == 'data.txt'
- assert to_encoded("Some content") == data.replace('\n', '')
|