Use timezone dates

Fixes #114
This commit is contained in:
Mouse Reeve
2020-03-29 17:40:51 -07:00
parent da69b82d8a
commit 9aada80c05
9 changed files with 61 additions and 43 deletions

View File

@ -1,5 +1,7 @@
''' functionality outline for a book data connector '''
from abc import ABC, abstractmethod
from dateutil import parser
import pytz
from fedireads import models
@ -80,6 +82,14 @@ def has_attr(obj, key):
return False
def get_date(date_string):
''' helper function to try to interpret dates '''
try:
return pytz.utc.localize(parser.parse(date_string))
except ValueError:
return None
class SearchResult(object):
''' standardized search result object '''
def __init__(self, title, key, author, year, raw_data):

View File

@ -1,11 +1,11 @@
''' using another fedireads instance as a source of book data '''
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
from django.core.files.base import ContentFile
import requests
from fedireads import models
from .abstract_connector import AbstractConnector, update_from_mappings
from .abstract_connector import AbstractConnector
from .abstract_connector import update_from_mappings, get_date
class Connector(AbstractConnector):
@ -81,7 +81,7 @@ class Connector(AbstractConnector):
book.authors.add(self.get_or_create_author(author_id))
if book.sync_cover and data.get('covers') and len(data['covers']):
book.cover.save(*self.get_cover(data['covers'][0]), save=True)
book.cover.save(*get_cover(data['covers'][0]), save=True)
return book
@ -111,19 +111,12 @@ class Connector(AbstractConnector):
return author
def get_cover(self, cover_url):
''' ask openlibrary for the cover '''
image_name = cover_url.split('/')[-1]
response = requests.get(cover_url)
if not response.ok:
response.raise_for_status()
image_content = ContentFile(response.content)
return [image_name, image_content]
def get_cover(cover_url):
''' ask openlibrary for the cover '''
image_name = cover_url.split('/')[-1]
response = requests.get(cover_url)
if not response.ok:
response.raise_for_status()
image_content = ContentFile(response.content)
return [image_name, image_content]
def get_date(date_string):
''' helper function to try to interpret dates '''
try:
datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S")
except ValueError:
return False

View File

@ -1,13 +1,12 @@
''' openlibrary data connector '''
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
from django.core.files.base import ContentFile
import re
import requests
from fedireads import models
from .abstract_connector import AbstractConnector, SearchResult, \
update_from_mappings
from .abstract_connector import AbstractConnector, SearchResult
from .abstract_connector import update_from_mappings, get_date
class Connector(AbstractConnector):
@ -58,7 +57,7 @@ class Connector(AbstractConnector):
except ObjectDoesNotExist:
# no book was found, so we start creating a new one
book = model(openlibrary_key=olkey)
self.update_book(book)
return self.update_book(book)
def update_book(self, book):
@ -156,20 +155,6 @@ class Connector(AbstractConnector):
return [image_name, image_content]
def get_date(date_string):
''' helper function to try to interpret dates '''
formats = [
'%B %Y',
'%Y',
]
for date_format in formats:
try:
return datetime.strptime(date_string, date_format)
except ValueError:
pass
return None
def get_description(description_blob):
''' descriptions can be a string or a dict '''
if isinstance(description_blob, dict):