mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Adding necessary exception handling to text view.
This commit is contained in:
parent
fe1d7177ec
commit
679195aadd
4 changed files with 42 additions and 13 deletions
|
@ -1848,9 +1848,10 @@ class MStory(mongo.Document):
|
||||||
|
|
||||||
def fetch_original_text(self, force=False, request=None):
|
def fetch_original_text(self, force=False, request=None):
|
||||||
original_text_z = self.original_text_z
|
original_text_z = self.original_text_z
|
||||||
|
feed = Feed.get_by_id(self.story_feed_id)
|
||||||
|
|
||||||
if not original_text_z or force:
|
if not original_text_z or force:
|
||||||
ti = TextImporter(self, request=request)
|
ti = TextImporter(self, feed=feed, request=request)
|
||||||
original_text = ti.fetch()
|
original_text = ti.fetch()
|
||||||
else:
|
else:
|
||||||
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
||||||
|
@ -1958,9 +1959,10 @@ class MStarredStory(mongo.Document):
|
||||||
|
|
||||||
def fetch_original_text(self, force=False, request=None):
|
def fetch_original_text(self, force=False, request=None):
|
||||||
original_text_z = self.original_text_z
|
original_text_z = self.original_text_z
|
||||||
|
feed = Feed.get_by_id(self.story_feed_id)
|
||||||
|
|
||||||
if not original_text_z or force:
|
if not original_text_z or force:
|
||||||
ti = TextImporter(self, request=request)
|
ti = TextImporter(self, feed, request=request)
|
||||||
original_text = ti.fetch()
|
original_text = ti.fetch()
|
||||||
else:
|
else:
|
||||||
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
||||||
|
|
|
@ -1,33 +1,50 @@
|
||||||
import requests
|
import requests
|
||||||
import zlib
|
import zlib
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from socket import error as SocketError
|
||||||
from vendor.readability import readability
|
from vendor.readability import readability
|
||||||
from utils import log as logging
|
from utils import log as logging
|
||||||
|
from utils.feed_functions import timelimit, TimeoutError
|
||||||
|
|
||||||
class TextImporter:
|
class TextImporter:
|
||||||
|
|
||||||
def __init__(self, story, request=None):
|
def __init__(self, story, feed, request=None):
|
||||||
self.story = story
|
self.story = story
|
||||||
|
self.feed = feed
|
||||||
self.request = request
|
self.request = request
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def headers(self):
|
def headers(self):
|
||||||
return {
|
return {
|
||||||
'User-Agent': 'NewsBlur Content Fetcher - %s '
|
'User-Agent': 'NewsBlur Content Fetcher - %s subscriber%s - %s '
|
||||||
'(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) '
|
'(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) '
|
||||||
'AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 '
|
'AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 '
|
||||||
'Safari/534.48.3)' % (
|
'Safari/534.48.3)' % (
|
||||||
settings.NEWSBLUR_URL
|
self.feed.num_subscribers,
|
||||||
|
's' if self.feed.num_subscribers != 1 else '',
|
||||||
|
self.feed.permalink,
|
||||||
),
|
),
|
||||||
'Connection': 'close',
|
'Connection': 'close',
|
||||||
}
|
}
|
||||||
|
|
||||||
def fetch(self, skip_save=False):
|
def fetch(self, skip_save=False):
|
||||||
html = requests.get(self.story.story_permalink, headers=self.headers, verify=False)
|
try:
|
||||||
text = html.text
|
resp = self.fetch_request()
|
||||||
if html.encoding and html.encoding != 'utf-8':
|
except TimeoutError:
|
||||||
text = text.encode(html.encoding)
|
logging.user(self.request, "~SN~FRFailed~FY to fetch ~FGoriginal text~FY: timed out")
|
||||||
original_text_doc = readability.Document(text, url=html.url, debug=settings.DEBUG)
|
resp = None
|
||||||
|
|
||||||
|
if not resp:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
text = resp.text
|
||||||
|
except (LookupError, TypeError):
|
||||||
|
text = resp.content
|
||||||
|
|
||||||
|
if resp.encoding and resp.encoding != 'utf-8':
|
||||||
|
text = text.encode(resp.encoding)
|
||||||
|
original_text_doc = readability.Document(text, url=resp.url, debug=settings.DEBUG)
|
||||||
content = original_text_doc.summary(html_partial=True)
|
content = original_text_doc.summary(html_partial=True)
|
||||||
|
|
||||||
if content:
|
if content:
|
||||||
|
@ -44,3 +61,12 @@ class TextImporter:
|
||||||
)), warn_color=False)
|
)), warn_color=False)
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
@timelimit(10)
|
||||||
|
def fetch_request(self):
|
||||||
|
try:
|
||||||
|
r = requests.get(self.story.story_permalink, headers=self.headers, verify=False)
|
||||||
|
except (AttributeError, SocketError, requests.ConnectionError), e:
|
||||||
|
logging.user(self.request, "~SN~FRFailed~FY to fetch ~FGoriginal text~FY: %s" % e)
|
||||||
|
return
|
||||||
|
return r
|
||||||
|
|
|
@ -1984,9 +1984,10 @@ class MSharedStory(mongo.Document):
|
||||||
|
|
||||||
def fetch_original_text(self, force=False, request=None):
|
def fetch_original_text(self, force=False, request=None):
|
||||||
original_text_z = self.original_text_z
|
original_text_z = self.original_text_z
|
||||||
|
feed = Feed.get_by_id(self.story_feed_id)
|
||||||
|
|
||||||
if not original_text_z or force:
|
if not original_text_z or force:
|
||||||
ti = TextImporter(self, request=request)
|
ti = TextImporter(self, feed, request=request)
|
||||||
original_text = ti.fetch()
|
original_text = ti.fetch()
|
||||||
else:
|
else:
|
||||||
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
logging.user(request, "~FYFetching ~FGoriginal~FY story text, ~SBfound.")
|
||||||
|
|
Loading…
Add table
Reference in a new issue