diff options
| -rwxr-xr-x | debdate | 84 | 
1 files changed, 59 insertions, 25 deletions
@@ -7,7 +7,12 @@  # License, Version 2, as published by Sam Hocevar. See  # http://www.wtfpl.net/ for more details. +# Debian release dates can be found in the package distro-info-data, +# but an hardcoded fallback is included to run this script where such +# package is not available. +  import argparse +import csv  import datetime  from dateutil import relativedelta, parser  import unittest @@ -32,9 +37,31 @@ MSG = "Today is day {dody} of year {yodr} of the {release}"  class DebDate: +    def __init__(self, distro_info_file='/usr/share/distro-info/debian.csv'): +        self.releases = [] +        try: +            with open(distro_info_file) as fp: +                releases = csv.reader(fp, delimiter=',') +                for row in releases: +                    if len(row) > 4: +                        try: +                            date = datetime.datetime.strptime( +                                row[4], +                                '%Y-%m-%d' +                                ) +                        except ValueError: +                            pass +                        else: +                            self.releases.append((date.date(), row[1])) +        except FileNotFoundError: +            releases = [] +        self.releases.sort(key=lambda x: x[0], reverse=True) +        if not self.releases: +            self.releases = RELEASES +      def get_release(self, day):          data = {} -        for r in RELEASES: +        for r in self.releases:              epoch = r[0]              data['release'] = r[1]              if day > epoch: @@ -62,38 +89,45 @@ class OutsideTimeError(ValueError):  class TestDebDate(unittest.TestCase):      def setUp(self): -        self.debdate = DebDate() +        self.debdates = [ +            DebDate(), +            DebDate(distro_info_file='/no/such/file'), +            ]      def testFirstYearRelease(self): -        r = RELEASES[-1] -        d = r[0] + relativedelta.relativedelta(days=10) -        data = self.debdate.get_release(d) -        self.assertEqual(data['dody'], 10) -        self.assertEqual(data['yodr'], 1) -        self.assertEqual(data['release'], r[1]) +        for debdate in self.debdates: +            r = debdate.releases[-1] +            d = r[0] + relativedelta.relativedelta(days=10) +            data = debdate.get_release(d) +            self.assertEqual(data['dody'], 10) +            self.assertEqual(data['yodr'], 1) +            self.assertEqual(data['release'], r[1])      def testSecondYearRelease(self): -        r = RELEASES[-6] -        d = r[0] + relativedelta.relativedelta(years=1) -        data = self.debdate.get_release(d) -        self.assertEqual(data['dody'], 227) -        self.assertEqual(data['yodr'], 2) -        self.assertEqual(data['release'], r[1]) +        for debdate in self.debdates: +            r = debdate.releases[-6] +            d = r[0] + relativedelta.relativedelta(years=1) +            data = debdate.get_release(d) +            self.assertEqual(data['dody'], 227) +            self.assertEqual(data['yodr'], 2) +            self.assertEqual(data['release'], r[1])      def testPastLatestRelease(self): -        r = RELEASES[0] -        d = r[0] + relativedelta.relativedelta(years=5) -        data = self.debdate.get_release(d) -        # Day Of The Year will change depending on when is the latest -        # release, so we do not check it -        self.assertEqual(data['yodr'], 6) -        self.assertEqual(data['release'], r[1]) +        for debdate in self.debdates: +            r = debdate.releases[0] +            d = r[0] + relativedelta.relativedelta(years=5) +            data = debdate.get_release(d) +            # Day Of The Year will change depending on when is the latest +            # release, so we do not check it +            self.assertEqual(data['yodr'], 6) +            self.assertEqual(data['release'], r[1])      def testBeforeBeginningOfTime(self): -        r = RELEASES[-1] -        d = r[0] + relativedelta.relativedelta(days=-1) -        with self.assertRaises(OutsideTimeError): -            self.debdate.get_release(d) +        for debdate in self.debdates: +            r = debdate.releases[-1] +            d = r[0] + relativedelta.relativedelta(days=-1) +            with self.assertRaises(OutsideTimeError): +                debdate.get_release(d)  class Command:  | 
