#!/usr/bin/python # Copyright 2012 Paul Wise # Released under the MIT/Expat license, see doc/COPYING # Creates a configuration snippet for Planet Debian derivatives based on the # logo head and RSS feed files for the blogs of all the derivatives. # # Usage: # derivative-to-planet-config import os import sys try: import Image except ImportError: pass from tempfile import NamedTemporaryFile as tempfile override = sys.argv[3] + '.override' override_dev = sys.argv[4] + '.override' name = sys.argv[1].strip() longname = sys.argv[2] blogs_rss = override if os.path.exists(override) else sys.argv[3] blogs_dev_rss = override_dev if os.path.exists(override_dev) else sys.argv[4] head = sys.argv[5] config = sys.argv[6] try: f = open(longname) longname = f.read().split('\n')[0].strip() longname_dev = longname + ' developers' f.close() except IOError: longname = None longname_dev = None try: head = Image.open(head) except (NameError, IOError): head = None try: f = open(config) old_config = f.read() f.close() except IOError: old_config = None def config_snippet(rss, name, longname, head): rss = rss.strip() if rss and not (set('[]#\n') & set(rss)): ret = ['[%s]' % rss] if longname: ret.append('name = %s' % longname) if head: ret.append('face = deriv/%s' % name) if head: ret.append('facewidth = %s' % head.size[0]) ret.append('faceheight = %s' % head.size[1]) ret.append('') return ret else: return None new_config = [] try: rf = open(blogs_rss) feeds = [config_snippet(line,name, longname, head) for line in rf] new_config += [feed for feed in feeds if feed] rf.close() except IOError: pass try: rf = open(blogs_dev_rss) feeds = [config_snippet(line,name, longname_dev, head) for line in rf] new_config += [feed for feed in feeds if feed] rf.close() except IOError: pass new_config = ['\n'.join(feed) for feed in new_config] new_config = '\n'.join(new_config) if new_config and new_config != old_config: tmp = tempfile(prefix=config+'.tmp.', dir='', delete=False) tmp.write(new_config) tmp.close() dummy = open(tmp.name+'.dummy','w') dummy.close() os.chmod(tmp.name, os.stat(dummy.name).st_mode) os.remove(dummy.name) os.rename(tmp.name, config)