Time: add 'ddate' (#1310)

* Time: add 'ddate', fix contributors, add Time.local as a package_dir in setup.py

* Time: add in license information for ddate.py

* Time: change 'ddate' command to where it will error out gracefully if 'ddate.base' isn't available

* Time: add tests, remove Time.local from package_dir
This commit is contained in:
Ken Spencer 2017-10-27 13:25:02 -04:00 committed by Valentin Lorentz
parent bee98f6711
commit 2ba7bc5c16
4 changed files with 41 additions and 4 deletions

View File

@ -42,8 +42,9 @@ __author__ = supybot.authors.jemfinch
# This is a dictionary mapping supybot.Author instances to lists of
# contributions.
__contributors__ = {'tztime': supybot.Author('Valentin Lorentz', 'ProgVal',
'progval@gmail.com')}
__contributors__ = {supybot.authors.progval: ['tztime'],
supybot.Author('Ken Spencer', 'kspencer',
'iota@electrocode.net'): ['ddate']}
from . import config

View File

View File

@ -27,17 +27,24 @@
# POSSIBILITY OF SUCH DAMAGE.
###
import sys
import time
TIME = time # For later use.
from datetime import datetime
import supybot.conf as conf
import supybot.log as log
import supybot.utils as utils
from supybot.commands import *
import supybot.callbacks as callbacks
from supybot.i18n import PluginInternationalization, internationalizeDocstring
_ = PluginInternationalization('Time')
try:
from ddate.base import DDate as _ddate
except ImportError:
log.info("'ddate' not available, disabling command.")
_ddate = None
try:
from dateutil import parser
@ -206,7 +213,22 @@ class Time(callbacks.Plugin):
irc.reply(datetime.now(timezone).strftime(format))
tztime = wrap(tztime, ['text'])
def ddate(self, irc, msg, args, year=None, month=None, day=None):
"""[<year> <month> <day>]
Returns a the Discordian date today, or an optional different date."""
if _ddate is not None:
if year is not None and month is not None and day is not None:
try:
irc.reply(_ddate(datetime(year=year, month=month, day=day)))
except ValueError as e:
irc.error("%s", e)
else:
irc.reply(_ddate())
else:
irc.error(_("The 'ddate' module is not installed."
" Use '%s -m pip install --user ddate'"
" See <https://pypi.python.org/pypi/ddate/> for more information.") % sys.executable)
ddate = wrap(ddate, [optional('positiveint'), optional('positiveint'), optional('positiveint')])
Class = Time
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:

View File

@ -43,6 +43,13 @@ except ImportError:
else:
has_dateutil = True
try:
import ddate.base
except ImportError:
has_ddate = False
else:
has_ddate = True
try:
from unittest import skipIf
except ImportError: # Python 2.6
@ -92,6 +99,13 @@ class TimeTestCase(PluginTestCase):
def testNoNestedErrors(self):
self.assertNotError('echo [seconds 4m]')
@skipIf(not has_ddate, 'ddate is missing')
def testDDate(self):
self.assertNotError('ddate')
self.assertHelp('ddate 0 0 0') # because nonsense was put in
self.assertHelp('ddate -1 1 1') # because nonsense was put in
self.assertHelp('ddate -1 -1 -1') # because nonsense was put in
# plugin.py:223 would catch these otherwise
self.assertResponse('ddate 1 1 1', 'Sweetmorn, the 1st day of Chaos in the YOLD 1167') # make sure the laws of physics and time aren't out of wack
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: