summaryrefslogtreecommitdiffstats
path: root/feed/sse_fm.py
blob: dd45d587786fe388f35b5986cd3cc4cbe53daf34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/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)