]> git.phdru.name Git - phdru.name/phdru.name.git/blob - news.py
c0905929b9cdd0520eb06515f3f61242fc7f68e8
[phdru.name/phdru.name.git] / news.py
1 """News"""
2
3 from __future__ import print_function
4
5 __author__ = "Oleg Broytman <phd@phdru.name>"
6 __copyright__ = "Copyright (C) 2006-2024 PhiloSoft Design"
7 __docformat__ = "epytext en"
8
9 __all__ = ["get_news", "write_if_changed"]
10
11
12 from datetime import date
13 from urllib.parse import urljoin
14
15 std_open = open
16 def open(fname, mode):
17     return std_open(fname, mode, encoding='koi8-r')
18
19
20 class NewsItem(object):
21     baseURL = "https://phdru.name/"
22     excerpt = None
23     content = None
24     categoryList = []
25
26     def __init__(self, date, title, rel_link):
27         self.date = date
28         self.title = title
29         self.rel_link = rel_link
30
31     def URL(self):
32         return urljoin(self.baseURL, self.rel_link)
33
34     def rfc822_date(self):
35         y, m, d = self.date.split('-')
36         d = date(int(y), int(m), int(d))
37         return d.strftime("%a, %d %b %Y %H:%M:%S +0300")
38
39
40 def get_news_header(lang):
41     news_tmpl_file = open("news.tmpl-%s" % lang, 'r')
42     header = news_tmpl_file.read()
43     news_tmpl_file.close()
44
45     return header
46
47
48 def get_news_items(lang):
49     news_items_file = open("news_%s" % lang, 'r')
50     news_text = news_items_file.read()
51     news_items_file.close()
52
53     news_items = []
54     for line in news_text.split('\n'):
55         if not line: continue
56         date, rel_link, title = line.split(None, 2)
57         news_items.append(NewsItem(date, title, rel_link))
58
59     return news_items
60
61
62 def get_news(lang):
63     """Get news
64
65     @param lang: langauge
66     @type lang: a string 'en' or 'ru'
67     @return: a tuple of (lnaguge-dependent header, a list of new items)
68
69     """
70     return get_news_header(lang), get_news_items(lang)
71
72
73 def write_if_changed(filename, new_text):
74     try:
75         infile = open(filename, 'r')
76         old_text = infile.read()
77         infile.close()
78     except IOError:
79         old_text = None
80
81     if old_text != new_text:
82         print("Writing", filename)
83         outfile = open(filename, 'w')
84         outfile.write(new_text)
85         outfile.close()