#!/usr/bin/python

from sgmllib import SGMLParser
import re

def removeUnsafeChars(unsafeStr):
    "remove characters that would be illegal in a file name."
    safeChars = r"[^A-Za-z0-9\ \+\-\_\$\%\#\@\*\(\)\[\]\;\,\.\'\"]" 
    return re.sub(safeChars, "_", unsafeStr)

class opmlParser(SGMLParser):
    def reset(self):
        self.rssFeeds = {}
        SGMLParser.reset(self)

    def start_outline(self, attrs):
        name = ""
        url = ""
        isRSS = 0
        for attr in attrs:
            if attr[0] == 'xmlurl': url = attr[1]
            if attr[0] == 'title': name = removeUnsafeChars(attr[1])
            if attr[0] == 'type' and attr[1] == 'rss': isRSS = 1
        if name and url and isRSS:
            self.rssFeeds[name] = url


configTemplate = """
[general]
driver = rss
name = %s

[config]
url = %s
"""

if __name__ == "__main__":
    import os.path, sys
    if len(sys.argv) != 3:
        print """
        Usage: importOpml.py sourceFile.opml outputDir

        where outputDir is 
        <hepDir>/users/<userName>/config/sources
        """
        sys.exit()

    inputFile, outputDir = sys.argv[1:3]
    if not os.path.isfile(inputFile): raise "Input file does not exist."
    if not os.path.isdir(outputDir): raise "Output directory does not exist."

    file = open(sys.argv[1])

    opml = file.read()
    file.close()

    parser = opmlParser()
    parser.feed(opml)
    
    feeds = parser.rssFeeds
    for feedName in feeds.keys():
        outputFile = open(os.path.join(outputDir, feedName), 'w')
        outputFile.write(configTemplate % (feedName, feeds[feedName]))

    outputFile.close()

