rasbt / pyprind

PyPrind - Python Progress Indicator Utility
BSD 3-Clause "New" or "Revised" License
547 stars 65 forks source link

email notifications #34

Open dzaytsev91 opened 7 years ago

dzaytsev91 commented 7 years ago

Implementation of task complete email notifications. It seems like the setup.py install doesn't install packages from requirements.txt, I had to fix it because travis shows errors.

You can test it by calling: pyprind.setup_email(smtp_server, smtp_port, username, password)

rasbt commented 7 years ago

Thanks a lot, looks great so far. Will give it a more thorough look over the weekend and let you know if I have any suggestions! Btw. do you know if it also works on Windows or is it posix only? (Oh, and btw don't worry about squashing commits, GitHub has this handy squash button now so that I can take care of it upon merging)

screen shot 2016-09-03 at 10 08 42 am

rasbt commented 7 years ago

Hm, not sure why, but it's not sending messages in my case. However, when I just ran a simple test

server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.login('pyprind@gmail.com', passw)  
msg = "\r\n".join([
  "From: pyprind@gmail.com",
  "To: pyprind@gmail.com",
  "Subject: Some test message",
  "",
  "Test"
  ])
server_ssl.sendmail('pyprind@gmail.com', ['pyprind@gmail.com'], msg)
server_ssl.close()

it seems to work fine. I am not getting any error messages via pyprind with email=True after running the email setup, but for some reason, nothing gets send. There are a few other things I found, and it would be great if you could take a look at it

      package_data={'': ['LICENSE',
                         'README.md',
                         'requirements.txt'
                         'CHANGELOG.md',
                         'CONTRIBUTING.md'],
                    'tests': ['tests/test_percentage_indicator.py',
                              'tests/test_progress_bar.py']},
def get_pyprind_config_dir():
    home = os.path.expanduser("~")
    config_path = os.path.join(home, '.pyprind')
    return config_path
    106     config.set('Email', 'password', password)
    107     with open(file_path, 'wb') as f:
--> 108         config.write(f)
    109     with open(file_path, 'rb') as af:
    110         cipher.encrypt(af.read())

/Users/Sebastian/miniconda3/lib/python3.5/configparser.py in write(self, fp, space_around_delimiters)
    914         for section in self._sections:
    915             self._write_section(fp, section,
--> 916                                 self._sections[section].items(), d)
    917 
    918     def _write_section(self, fp, section_name, section_items, delimiter):

/Users/Sebastian/miniconda3/lib/python3.5/configparser.py in _write_section(self, fp, section_name, section_items, delimiter)
    918     def _write_section(self, fp, section_name, section_items, delimiter):
    919         """Write a single section to the specified `fp'."""
--> 920         fp.write("[{}]\n".format(section_name))
    921         for key, value in section_items:
    922             value = self._interpolation.before_write(self, section_name, key,

TypeError: a bytes-like object is required, not 'str'

Despite these little points mentioned above, it looks great so far! I really appreciate the contribution!

dzaytsev91 commented 7 years ago

Thanks a lot for your feedback! I will try to fix all the notes as soon as possible

rasbt commented 7 years ago

Thanks a lot for your feedback! I will try to fix all the notes as soon as possible

Thanks! And no need to rush :)

pep8speaks commented 7 years ago

Hello @dzaytsev91! Thanks for updating the PR.

dzaytsev91 commented 7 years ago

Thanks! And no need to rush :)

Hey, sorry for such a delay I've been busy a bit :) I've made all the changes that you manchioned and it would be nice if you could take a look at it.

About setup_email function, maybe I should write a simple example in README? According to a test with sending an email message I run your simple test and in my case it worked good and sends the email. How do you think what could be the reason why it doesn't work for you?

I would really appreciate any comments!

rasbt commented 7 years ago

No need to apologize! And thanks for the updated PR :). A short example in the Readme (and in the example Jupyter notebook) would be nice! I will give it another try then and take a closer look at the code., Thanks!