71 lines
2 KiB
Python
71 lines
2 KiB
Python
from datetime import datetime
|
|
|
|
from django.conf import settings
|
|
from django.db.models.fields import CharField, TextField
|
|
from django.template.defaultfilters import truncatechars
|
|
from django.utils import timezone
|
|
|
|
import pytz
|
|
import requests
|
|
|
|
from requests.exceptions import RequestException
|
|
|
|
from newsreader.news.collection.response_handler import ResponseHandler
|
|
|
|
|
|
DEFAULT_HEADERS = {"User-Agent": f"linux:rss.fudiggity.nl:{settings.VERSION}"}
|
|
|
|
|
|
def build_publication_date(dt, tz):
|
|
try:
|
|
naive_datetime = datetime(*dt[:6])
|
|
published_parsed = timezone.make_aware(naive_datetime, timezone=tz)
|
|
except (TypeError, ValueError):
|
|
return timezone.now()
|
|
|
|
return published_parsed.astimezone(pytz.utc)
|
|
|
|
|
|
def fetch(url, headers={}):
|
|
headers = {**DEFAULT_HEADERS, **headers}
|
|
|
|
with ResponseHandler() as response_handler:
|
|
try:
|
|
response = requests.get(url, headers=headers)
|
|
response_handler.handle_response(response)
|
|
except RequestException as exception:
|
|
response_handler.map_exception(exception)
|
|
|
|
return response
|
|
|
|
|
|
def post(url, data=None, auth=None, headers={}):
|
|
headers = {**DEFAULT_HEADERS, **headers}
|
|
|
|
with ResponseHandler() as response_handler:
|
|
try:
|
|
response = requests.post(url, data=data, auth=auth, headers=headers)
|
|
response_handler.handle_response(response)
|
|
except RequestException as exception:
|
|
response_handler.map_exception(exception)
|
|
|
|
return response
|
|
|
|
|
|
def truncate_text(cls, field_name, value):
|
|
field = cls._meta.get_field(field_name)
|
|
max_length = field.max_length
|
|
field_cls = type(field)
|
|
|
|
is_charfield = bool(issubclass(field_cls, CharField))
|
|
is_textfield = bool(issubclass(field_cls, TextField))
|
|
|
|
if not value or not max_length:
|
|
return value
|
|
elif not is_charfield or is_textfield:
|
|
return value
|
|
|
|
if len(value) > max_length:
|
|
return truncatechars(value, max_length)
|
|
|
|
return value
|