def post_parser(self, ctx, formatter): _dayofyear = ctx['dayofyear'] if 'year' not in ctx: ctx['year'] = 1 if 'month' in ctx: del ctx['month'] if 'day' in ctx: del ctx['day'] max_days = days_in_year(ctx['year']) if _dayofyear > max_days: raise ValueError( 'Invalid dayofyear: %.3d for year %.4d. Valid values are: 1-%s' \ % (_dayofyear, ctx['year'], max_days)) from khayyam import JalaliDate d = JalaliDate(year=ctx['year']) + timedelta(days=_dayofyear-1) ctx.update(dict( month=d.month, day=d.day ))
def test_strptime(self): """ %Z not working at all """ def check_format(jdate ,fmt): jdate_str = jdate.strftime(fmt) d2 = JalaliDate.strptime(jdate_str, fmt) self.assertEqual(jdate, d2) # Test Year self.assertEqual(JalaliDate.strptime('1361', '%Y'), JalaliDate(1361)) self.assertEqual(JalaliDate.strptime('1361%C', '%Y%C'), JalaliDate(1361)) self.assertEqual(JalaliDate.strptime('اریا1361گلگشت', 'اریا%Yگلگشت'), JalaliDate(1361)) current_century = int(JalaliDate.today().year / 100) * 100 self.assertEqual(JalaliDate.strptime('61', '%y'), JalaliDate(current_century + 61)) self.assertEqual(JalaliDate.strptime('61%C', '%y%C'), JalaliDate(current_century + 61)) self.assertEqual(JalaliDate.strptime('اریا61گلگشت', 'اریا%yگلگشت'), JalaliDate(current_century+61)) # Test months for i in range(1, 13): self.assertEqual(JalaliDate.strptime(str(i), '%m'), JalaliDate(month=i)) self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_ABBRS[i], '%Y %b'), JalaliDate(year=1345, month=i, day=1)) self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_NAMES[i], '%Y %B'), JalaliDate(year=1345, month=i, day=1)) self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_ABBRS_ASCII[i], '%Y %g'), JalaliDate(year=1345, month=i, day=1)) self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_NAMES_ASCII[i], '%Y %G'), JalaliDate(year=1345, month=i, day=1)) self.assertRaises(ValueError, JalaliDate.strptime, '13', '%m') self.assertRaises(ValueError, JalaliDate.strptime, '0', '%m') self.assertRaises(ValueError, JalaliDate.strptime, '1345 مت', '%Y %b') self.assertRaises(ValueError, JalaliDate.strptime, '1345 شتران', '%Y %B') self.assertRaises(ValueError, JalaliDate.strptime, '1345 مت', '%Y %g') self.assertRaises(ValueError, JalaliDate.strptime, '1345 شتران', '%Y %G') # Test Week and Weekdays for i in range(7): check_format(JalaliDate.min + timedelta(i), '%d %w %W %U') self.assertEqual( JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_ABBRS[i], '%Y %m %d %a'), JalaliDate(year=1345, month=10, day=10)) self.assertEqual( JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_ABBRS_ASCII[i], '%Y %m %d %e'), JalaliDate(year=1345, month=10, day=10)) self.assertEqual( JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_NAMES[i], '%Y %m %d %A'), JalaliDate(year=1345, month=10, day=10)) self.assertEqual( JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_NAMES_ASCII[i], '%Y %m %d %E'), JalaliDate(year=1345, month=10, day=10)) # Test days for i in range(1, 32): self.assertEqual(JalaliDate.strptime(str(i), '%d'), JalaliDate(day=i)) self.assertRaises(ValueError, JalaliDate.strptime, '32', '%d') self.assertRaises(ValueError, JalaliDate.strptime, '0', '%d') # Test day of year for i in range(1, 366): self.assertEqual(JalaliDate.strptime(str(i), '%j'), JalaliDate.fromordinal(i)) self.assertRaises(ValueError, JalaliDate.strptime, '366', '%j') self.assertRaises(ValueError, JalaliDate.strptime, '0', '%j') self.assertEqual(JalaliDate.strptime('1345 5', '%Y %j'), JalaliDate(year=1345, month=1, day=5)) self.assertEqual(JalaliDate.strptime('1302 123 3 4', '%Y %j %m %d'), JalaliDate(year=1302, month=4, day=30)) self.assertEqual(JalaliDate.strptime('1302 3 4', '%Y %m %d'), JalaliDate(year=1302, month=3, day=4)) self.assertEqual(JalaliDate.strptime(u'جمعه 01 اردیبهشت 0001', '%A %d %B %Y'), JalaliDate(month=2, day=1)) self.assertEqual(JalaliDate.strptime(u'جمعه 01 فروردین 0001', '%x'), JalaliDate.min) self.assertEqual(JalaliDate.strptime(u'جمعه 31 فروردین 1375%', '%x%%'), JalaliDate(1375, 1, 31)) check_format(JalaliDate(1375, 1, 31), "%Y-%m-%d %%") check_format(JalaliDate(1375, 1, 31), "%Y-%m-%d %% %% %%") for i in xrange(1, 400): check_format(JalaliDate.fromordinal(i), "%Y-%m-%d %a%A%b%B%j%w%W%e%E%g%G%x %% %% %%") d = JalaliDate.today().replace(month=1, day=1) for i in xrange(1, algorithms.days_in_year(d.year)): check_format(d + timedelta(i), "%y-%m-%d")