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