diff options
Diffstat (limited to 'feed/sse_grab.py')
-rw-r--r-- | feed/sse_grab.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/feed/sse_grab.py b/feed/sse_grab.py new file mode 100644 index 0000000..6142f27 --- /dev/null +++ b/feed/sse_grab.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +import sys, urllib2, os, socket + +import sse_tar +from sse_defs import * +from sse_config import * + +socket.setdefaulttimeout(20) + +def grab_archive(meta, recid, provider_id = SSE_PROVIDER_NONE): + + try: + os.mkdir("%s/download" % HOME) + except: + pass + + fn = os.path.join(HOME, "download", recid) + + download = False + + try: + f = open(fn+".release", "r") + except: + download = True + else: + download = f.read() != meta["version"] + f.close() + + archive_url = meta["archive-url"] + + if not download: + print "File %s up-to-date." % archive_url + else: + + print "Downloading %s..." % archive_url + + dst = None + src = None + + try: + dst = file(fn, "w") + src = urllib2.urlopen(archive_url) + m = 0 + + while True: + + if m > SSE_MAX_DOWNLOAD: + os.unlink(fn) + print "WARNING: Archive too large, ignoring." + return + + data = src.read(SSE_BLOCK_SIZE) + + if len(data) <= 0: + break + + dst.write(data) + m += len(data) + + dst.close() + del src + + except IOError, e: + os.unlink(fn) + print "WARNING: Failed to download %s!" % archive_url + return + + sse_tar.process_archive(fn, meta, recid, provider_id) + os.unlink(fn) + + try: + f = open(fn+".release", "w") + except: + os.unlink(fn) + + f.write(meta["version"]) + f.close() + |