Replaced getopt with optparse (which will need to be replaced again)
authorJames French <[email protected]>
Sun, 1 Aug 2010 06:11:22 +0000 (14:11 +0800)
committerJames French <[email protected]>
Sun, 1 Aug 2010 06:11:22 +0000 (14:11 +0800)
icalparse.py

index 5c3a34f..6cb7c39 100755 (executable)
@@ -1,17 +1,17 @@
 #!/usr/bin/python
 #
 # Copyright (c) 2010 James French <[email protected]>
-# 
+#
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
 # in the Software without restriction, including without limitation the rights
 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 # copies of the Software, and to permit persons to whom the Software is
 # furnished to do so, subject to the following conditions:
-# 
+#
 # The above copyright notice and this permission notice shall be included in
 # all copies or substantial portions of the Software.
-# 
+#
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
 import sys
 import re
-
-try:
-       import httplib2
-       urllib = False
-except ImportError:
-       try:
-               import urllib
-               urllib = True
-       except:
-               sys.stderr.write('Failed to find a suitable http downloader\n')
-               raise
+from optparse import OptionParser
 
 class InvalidICS(Exception): pass
 class notJoined(Exception): pass
 
 # RFC5545 and RFC5546 iCalendar registries contain upper case letters
 # and dashes only and are separated from the value by a colon (:)
-itemstart = re.compile('^[A-Z\-]+:.*')
+icalEntry = re.compile('^[A-Z\-]+:.*')
+
 def lineJoiner(oldcal):
-       '''Unfolds a calendar so that items can be parsed'''    
-       
+       '''Unfolds a calendar so that items can be parsed'''
+
        cal = []
-       
+
        # Strip newlines (
        for line in oldcal:
                line = line.rstrip('\r\n')
@@ -57,7 +48,7 @@ def lineJoiner(oldcal):
                        if not cal: raise InvalidICS, 'First line of ICS must be element'
                        line = line[1:len(line)]
                        cal[-1] += line
-               elif not itemstart.match(line):
+               elif not icalEntry.match(line):
                        if not cal: raise InvalidICS, 'First line of ICS must be element'
                        cal[-1] += '\\n' + line
                else:
@@ -87,3 +78,28 @@ def lineSplitter(oldcal, length=75):
                        cal += brokenline
 
        return cal
+
+if __name__ == '__main__':
+       # If the user passed us a 'stdin' argument, we'll go with that,
+       # otherwise we'll try for a url opener
+
+       parser = OptionParser()
+       parser.add_option('-s', '--stdin', action='store_true', dest='stdin',
+               default=False, help='Take a calendar from standard input')
+       parser.add_option('-o', '--output', dest='outfile', default='',
+               help='Specify output file (defaults to standard output)')
+
+       (options, args) = parser.parse_args()
+
+       if not options.stdin:
+               try:
+                       import httplib2
+                       urllib = False
+               except ImportError:
+                       try:
+                               import urllib
+                               urllib = True
+                       except ImportError:
+                               sys.stderr.write('Failed to find a suitable http downloader\n')
+                               raise
+

UCC git Repository :: git.ucc.asn.au