Write output, ready for primetime
[frenchie/icalparse.git] / icalparse.py
index cc41353..3057560 100755 (executable)
@@ -60,12 +60,13 @@ def lineFolder(oldcal, length=75):
                if len(line.rstrip()) <= length:
                        cal.append(line)
                else:
-                       brokenline = [line[0:length] + '\r\n']
+                       brokenline = [line[0:length]]
                        ll = length
-                       while ll < len(line.rstrip('\r\n')) + 1:
-                               brokenline.append(' ' + line[ll:sl+ll].rstrip('\r\n') + '\r\n')
+                       while ll < len(line) + 1:
+                               brokenline.append(line[ll:sl+ll])
                                ll += sl
-                       cal += brokenline
+                       brokenline = '\r\n '.join(brokenline)
+                       cal.append(brokenline)
 
        return cal
 
@@ -83,6 +84,12 @@ def splitFields(cal):
        return ical
 
 
+def joinFields(ical):
+       '''Takes a list of tuples that make up a calendar file and returns a list of lines'''
+
+       return [':'.join(x) for x in ical]
+
+
 def getContent(url='',stdin=False):
        '''Generic content retriever, DO NOT use this function in a CGI script as
        it can read from the local disk (which you probably don't want it to).
@@ -194,6 +201,31 @@ def applyRules(ical, rules=[], verbose=False):
 
        return ical
 
+
+def writeOutput(cal, outfile=''):
+       '''Takes a list of lines and outputs to the specified file'''
+
+       if not cal:
+               sys.stderr.write('Refusing to write out an empty file')
+               sys.exit(0)
+
+       if not outfile:
+               out = sys.stdout
+       else:
+               try:
+                       out = open(outfile, 'w')
+               except (IOError, OSError), e:
+                       sys.stderr.write('%s\n'%e)
+                       sys.exit(1)
+
+       if cal[-1]: cal.append('')
+
+       out.write('\r\n'.join(cal))
+
+       if not out == sys.stdout:
+               out.close()
+
+
 if __name__ == '__main__':
        from optparse import OptionParser
        # If the user passed us a 'stdin' argument, we'll go with that,
@@ -218,4 +250,5 @@ if __name__ == '__main__':
        content = getContent(url, options.stdin)
        cal = lineJoiner(content)
        ical = applyRules(splitFields(cal), generateRules())
-       print ical
+       output = lineFolder(joinFields(ical))
+       writeOutput(output, options.outfile)

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