Skip to content
This repository has been archived by the owner on Jul 24, 2020. It is now read-only.

Commit

Permalink
workaround for date parsing issues #95
Browse files Browse the repository at this point in the history
  • Loading branch information
dArignac committed Jan 31, 2016
1 parent 7189fa1 commit ebace50
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
1 change: 1 addition & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Change Log
**Bugfixes:**

- StartupTask fails with exception `#94 <https://github.com/ponyriders/django-amazon-price-monitor/issues/94>`__
- Tests fail if today is the last day of November `#95 <https://github.com/ponyriders/django-amazon-price-monitor/issues/95>`__

`0.6 <https://pypi.python.org/pypi/django-amazon-price-monitor/0.6>`__
----------------------------------------------------------------------
Expand Down
10 changes: 10 additions & 0 deletions price_monitor/product_advertising_api/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,16 @@ def format_datetime(value):
:rtype: basestring
"""
if value is not None:

# date without day, e.g. 2004-11
# hotfix until https://github.com/dateutil/dateutil/issues/173 is fixed
if len(value) == 7:
# february
if value[5:] == '02':
value += '-28'
elif value[5:] == '11':
value += '-30'

try:
return parser.parse(value)
except ValueError:
Expand Down
18 changes: 13 additions & 5 deletions tests/product_advertising_api/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,10 @@ def test_item_lookup_no_price(self, product_api_init, product_api_lookup, lc):
self.assertEqual(None, values['DEMOASIN04']['eisbn'])
self.assertEqual('DVD', values['DEMOASIN04']['binding'])
# dateutil.parser.parse will find out the year and month of "2004-11" but as there is no day, the day is set to the current day
self.assertEqual(datetime.datetime(2004, 11, datetime.datetime.now().day), values['DEMOASIN04']['date_publication'])
self.assertEqual(
datetime.datetime(2004, 11, datetime.datetime.now().day if datetime.datetime.now().day < 31 else 30),
values['DEMOASIN04']['date_publication']
)
self.assertEqual(datetime.datetime(2004, 10, 27), values['DEMOASIN04']['date_release'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN04IMAGE.jpg', values['DEMOASIN04']['large_image_url'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN04IMAGE._SL160_.jpg', values['DEMOASIN04']['medium_image_url'])
Expand Down Expand Up @@ -454,7 +457,10 @@ def test_item_lookup_10_products(self, product_api_init, product_api_lookup, lc)
self.assertEqual(None, values['DEMOASIN12']['isbn'])
self.assertEqual(None, values['DEMOASIN12']['eisbn'])
self.assertEqual('DVD', values['DEMOASIN12']['binding'])
self.assertEqual(datetime.datetime(2004, 11, datetime.datetime.now().day), values['DEMOASIN12']['date_publication'])
self.assertEqual(
datetime.datetime(2004, 11, datetime.datetime.now().day if datetime.datetime.now().day < 31 else 30),
values['DEMOASIN12']['date_publication']
)
self.assertEqual(datetime.datetime(2004, 10, 27), values['DEMOASIN12']['date_release'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN12.jpg', values['DEMOASIN12']['large_image_url'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN12._SL160_.jpg', values['DEMOASIN12']['medium_image_url'])
Expand Down Expand Up @@ -563,7 +569,10 @@ def test_item_lookup_3_products(self, product_api_init, product_api_lookup, lc):
self.assertEqual(None, values['DEMOASIN16']['isbn'])
self.assertEqual(None, values['DEMOASIN16']['eisbn'])
self.assertEqual('DVD', values['DEMOASIN16']['binding'])
self.assertEqual(datetime.datetime(2004, 11, datetime.datetime.now().day), values['DEMOASIN16']['date_publication'])
self.assertEqual(
datetime.datetime(2004, 11, datetime.datetime.now().day if datetime.datetime.now().day < 31 else 30),
values['DEMOASIN16']['date_publication']
)
self.assertEqual(datetime.datetime(2004, 10, 27), values['DEMOASIN16']['date_release'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN16.jpg', values['DEMOASIN16']['large_image_url'])
self.assertEqual('http://ecx.images-amazon.com/images/I/DEMOASIN16._SL160_.jpg', values['DEMOASIN16']['medium_image_url'])
Expand Down Expand Up @@ -712,5 +721,4 @@ def test_format_datetime(self):
self.assertEqual(api.format_datetime('2014-10-11'), datetime.datetime(2014, 10, 11))
self.assertEqual(api.format_datetime('2012-12'), datetime.datetime(2012, 12, datetime.datetime.now().day))
# dateutil will use today as day value, but if today is the 31st that would not fit for february, there is no 31st february
day = datetime.datetime.now().day if datetime.datetime.now().day <= 28 else 28
self.assertEqual(api.format_datetime('2015-02'), datetime.datetime(2015, 2, day))
self.assertEqual(api.format_datetime('2015-02'), datetime.datetime(2015, 2, 28))

0 comments on commit ebace50

Please sign in to comment.