X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=icalparse.py;h=d52ac7e0f476558db2cb4855ef27b8afe6f4a8b2;hb=refs%2Ftags%2F0.7.2;hp=47db2256b9777f7c1d88766a26acf2e3ce3050bd;hpb=2fbe03f8749d964a4e062870068a170f138afd99;p=frenchie%2Ficalparse.git diff --git a/icalparse.py b/icalparse.py index 47db225..d52ac7e 100755 --- a/icalparse.py +++ b/icalparse.py @@ -23,6 +23,7 @@ import sys import urlparse import os +from cgi import parse_header class InvalidICS(Exception): pass @@ -125,22 +126,24 @@ def getContent(url='',stdin=False): content = sys.stdin.read() return (content, encoding) - if not parsedURL[0]: - try: content = open(os.path.abspath(url),'r').read() - except (IOError, OSError), e: - sys.stderr.write('%s\n'%e) - sys.exit(1) - return (content, encoding) + if not parsedURL[0]: url = 'file://' + os.path.abspath(url) # If we've survived, use python's generic URL opening library to handle it import urllib2 try: res = urllib2.urlopen(url) content = res.read() + ct = res.info().getplist() res.close() except (urllib2.URLError, OSError), e: sys.stderr.write('%s\n'%e) sys.exit(1) + + for param in ct: + if 'charset' in param: + encoding = param.split('=')[1] + break + return (content, encoding) @@ -155,6 +158,8 @@ def getHTTPContent(url='',cache='.httplib2-cache'): if not url: return ('','') + if not 'http' in urlparse.urlparse(url)[0]: return ('','') + if 'httplib2' in sys.modules: try: h = httplib2.Http('.httplib2-cache') except OSError: h = httplib2.Http() @@ -167,8 +172,15 @@ def getHTTPContent(url='',cache='.httplib2-cache'): sys.stderr.write('%s\n'%e) sys.exit(1) - content = req[1] - if 'content-type' in req[0]: ct = req[0]['content-type'] + resp, content = req + if 'content-type' in resp: + ct = 'Content-Type: %s'%req[0]['content-type'] + ct = parse_header(ct) + if 'charset' in ct[1]: encoding = ct[1]['charset'] + else: encoding = '' + else: + ct = '' + encoding = '' else: try: @@ -178,11 +190,11 @@ def getHTTPContent(url='',cache='.httplib2-cache'): sys.exit(1) content = req.read() - info = req.info() - - ct = info['content-type'] - - encoding = 'charset' in ct and ct.split(';')[-1].lower().split('=')[-1].strip() or '' + ct = req.info().getplist() + for param in ct: + if 'charset' in param: + encoding = param.split('=')[1] + break return (content, encoding)