summaryrefslogtreecommitdiffstats
path: root/feed/sse_grab.py
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-11-21 23:06:55 +0000
committerLennart Poettering <lennart@poettering.net>2005-11-21 23:06:55 +0000
commit71e7248cba9a5b78531aeaac7a58e811ec701dba (patch)
tree85087eaf6464bb47c14419e61243f5d01dbf050f /feed/sse_grab.py
parente2df88d73130ed8237efeff3bdae9fd9f5e0c0a3 (diff)
a days work
git-svn-id: file:///home/lennart/svn/public/sse/trunk@16 5fbabb74-0606-0410-a5e4-b5cc6a42724e
Diffstat (limited to 'feed/sse_grab.py')
-rw-r--r--feed/sse_grab.py79
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()
+