|
|
|
import random
|
|
|
|
from datetime import datetime
|
|
|
|
from parse_rss_feeds import parse_rss_feeds
|
|
|
|
|
|
|
|
|
|
|
|
class Column:
|
|
|
|
def __init__(self, title, urls):
|
|
|
|
self.title = title
|
|
|
|
self.urls = urls
|
|
|
|
self.entries = None
|
|
|
|
self.sort_order = None
|
|
|
|
self.limit = None
|
|
|
|
|
|
|
|
def set_sort_order(self, sort_order):
|
|
|
|
self.sort_order = sort_order
|
|
|
|
|
|
|
|
def set_limit(self, limit):
|
|
|
|
self.limit = limit
|
|
|
|
|
|
|
|
def _sort_by_order(self):
|
|
|
|
entrylist = list(self.entries.items())
|
|
|
|
if self.sort_order.lower() == "reverse":
|
|
|
|
entrylist.reverse()
|
|
|
|
self.entries = dict(entrylist)
|
|
|
|
return
|
|
|
|
if self.sort_order.lower() == "random":
|
|
|
|
random.shuffle(entrylist)
|
|
|
|
self.entries = dict(entrylist)
|
|
|
|
return
|
|
|
|
if self.sort_order.lower() == "chronological":
|
|
|
|
entrylist.sort(
|
|
|
|
key=lambda x: datetime.strptime(
|
|
|
|
x[1][1], "%a, %d %b %Y %H:%M:%S %z"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
self.entries = dict(entrylist)
|
|
|
|
return
|
|
|
|
if self.sort_order.lower() == "reverse-chronological":
|
|
|
|
entrylist.sort(
|
|
|
|
key=lambda x: datetime.strptime(
|
|
|
|
x[1][1], "%a, %d %b %Y %H:%M:%S %z"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
entrylist.reverse()
|
|
|
|
self.entries = dict(entrylist)
|
|
|
|
return
|
|
|
|
|
|
|
|
def _enforce_limit(self):
|
|
|
|
while len(self.entries) > self.limit:
|
|
|
|
self.entries.popitem()
|
|
|
|
|
|
|
|
def load_content_from_feeds(self):
|
|
|
|
entries = parse_rss_feeds(self.urls)
|
|
|
|
self.entries = entries
|
|
|
|
if self.sort_order:
|
|
|
|
self._sort_by_order()
|
|
|
|
if self.limit:
|
|
|
|
self._enforce_limit()
|