#!/usr/bin/python import sys, urllib2, os, socket from xml.sax import ContentHandler, make_parser from sse-config import * SSE_TAR = SSE_DIR + "sse-tar" def process_tar(project, tar): print "New tar %s" % tar ret = os.system("%s '%s' '%s' '%s'" % (SSE_TAR, tar, project["name"], project["project-url"])) if ret != 0: print "WARNING: Process returned %i" % ret def process_project(project): archive_url = None for a in ("archive-tgz-url", "archive-bz2-url", "archive-zip-url"): if project.has_key(a) and project[a] != "": archive_url = project[a] break if archive_url is None: print "WARNING: Ignoring project '%s' without archive URL!" % project["name"] return fn = "%s/download/freshmeat-%i" % (HOME, int(project["id"])) download = False try: f = open(fn+".release", "r") except: download = True else: download = f.read() != project["date"].strip() if not download: print "File %s up-to-date." % archive_url else: print "Downloading %s..." % archive_url try: dst = file(fn, "w") src = urllib2.urlopen(archive_url) while True: data = src.read(1024) if len(data) <= 0: break dst.write(data) del dst del src except IOError, e: os.unlink(fn) print "WARNING: Failed to download %s!" % archive_url return try: f = open(fn+".release", "w") except: os.unlink(fn) f.write(project["date"].strip()) del f process_tar(project, fn) class docHandler(ContentHandler): project_data = {} field = None def startElement(self, name, attrs): if name == "project": self.project_data = {} self.field = None elif name == "project_id": self.field = "id" elif name == "projectname_full": self.field = "name" elif name == "url_project_page": self.field = "project-url" elif name == "url_tgz": self.field = "archive-tgz-url" elif name == "url_bz2": self.field = "archive-bz2-url" elif name == "url_zip": self.field = "archive-zip-url" elif name == "license": self.field = "license" elif name == "latest_release_date": self.field = "date" else: self.field = None def characters(self, data): if not self.field is None: if self.project_data.has_key(self.field): self.project_data[self.field] += data else: self.project_data[self.field] = data def endElement(self, name): if name == "project": process_project(self.project_data) self.project_data = None self.field = None try: os.mkdir("%s/download" % HOME) except: pass socket.setdefaulttimeout(20) dh = docHandler() parser = make_parser() parser.setContentHandler(dh) parser.parse(sys.stdin)