annotate pyweek-upload.py @ 498:62b9a4e21f1a

chickens in closed buildings deselected. building opens if you put in chickens and it's not full. opening building with move or select tool allows rearrangement of chickens in building. fixed multiselect in buildings.
author Adrianna Pińska <adrianna.pinska@gmail.com>
date Wed, 25 Nov 2009 23:51:33 +0000
parents 615a5afaf1a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 '''
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2 Upload script specifically engineered for the PyWeek challenge.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4 Handles authentication and gives upload progress feedback.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 '''
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6 import sys, os, httplib, cStringIO, socket, time, getopt
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8 class Upload:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9 def __init__(self, filename):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10 self.filename = filename
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12 boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13 sep_boundary = '\n--' + boundary
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 end_boundary = sep_boundary + '--'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
15
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16 def mimeEncode(data, sep_boundary=sep_boundary, end_boundary=end_boundary):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 '''Take the mapping of data and construct the body of a
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 multipart/form-data message with it using the indicated boundaries.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 '''
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20 ret = cStringIO.StringIO()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21 for key, value in data.items():
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22 # handle multiple entries for the same name
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23 if type(value) != type([]): value = [value]
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24 for value in value:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 ret.write(sep_boundary)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 if isinstance(value, Upload):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 ret.write('\nContent-Disposition: form-data; name="%s"'%key)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 filename = os.path.basename(value.filename)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 ret.write('; filename="%s"\n\n'%filename)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30 value = open(os.path.join(value.filename), "rb").read()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31 else:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 ret.write('\nContent-Disposition: form-data; name="%s"'%key)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 ret.write("\n\n")
76
615a5afaf1a4 Make integer data keys (i.e. the API version number) work.
Simon Cross <hodgestar@gmail.com>
parents: 2
diff changeset
34 value = str(value)
615a5afaf1a4 Make integer data keys (i.e. the API version number) work.
Simon Cross <hodgestar@gmail.com>
parents: 2
diff changeset
35 ret.write(value)
2
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36 if value and value[-1] == '\r':
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
37 ret.write('\n') # write an extra newline
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
38 ret.write(end_boundary)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
39 return ret.getvalue()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
40
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
41 class Progress:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
42 def __init__(self, info, data):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
43 self.info = info
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
44 self.tosend = len(data)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
45 self.total = self.tosend/1024
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
46 self.data = cStringIO.StringIO(data)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
47 self.start = self.now = time.time()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
48 self.sent = 0
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
49 self.num = 0
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
50 self.stepsize = self.total / 100 or 1
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
51 self.steptimes = []
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
52 self.display()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
53
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
54 def __iter__(self): return self
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
55
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
56 def next(self):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
57 self.num += 1
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
58 if self.sent >= self.tosend:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
59 print self.info, 'done', ' '*(75-len(self.info)-6)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
60 sys.stdout.flush()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
61 raise StopIteration
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
62
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
63 chunk = self.data.read(1024)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
64 self.sent += len(chunk)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
65 #print (self.num, self.stepsize, self.total, self.sent, self.tosend)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
66
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
67 if self.num % self.stepsize:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
68 return chunk
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
69 self.display()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
70 return chunk
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
71
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
72 def display(self):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
73 # figure how long we've spent - guess how long to go
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
74 now = time.time()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
75 steptime = now - self.now
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
76 self.steptimes.insert(0, steptime)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
77 if len(self.steptimes) > 5:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
78 self.steptimes.pop()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
79 steptime = sum(self.steptimes) / len(self.steptimes)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
80 self.now = now
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
81 eta = steptime * ((self.total - self.num)/self.stepsize)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
82
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
83 # tell it like it is (or might be)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
84 if now - self.start > 3:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
85 M = eta / 60
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
86 H = M / 60
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
87 M = M % 60
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
88 S = eta % 60
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
89 if self.total:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
90 s = '%s %2d%% (ETA %02d:%02d:%02d)'%(self.info,
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
91 self.num * 100. / self.total, H, M, S)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
92 else:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
93 s = '%s 0%% (ETA %02d:%02d:%02d)'%(self.info, H, M, S)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
94 elif self.total:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
95 s = '%s %2d%%'%(self.info, self.num * 100. / self.total)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
96 else:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
97 s = '%s %d done'%(self.info, self.num)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
98 sys.stdout.write(s + ' '*(75-len(s)) + '\r')
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
99 sys.stdout.flush()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
100
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
101 class progressHTTPConnection(httplib.HTTPConnection):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
102 def progress_send(self, str):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
103 """Send `str' to the server."""
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
104 if self.sock is None:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
105 self.connect()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
106
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
107 p = Progress('Uploading', str)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
108 for chunk in p:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
109 sent = 0
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
110 while sent != len(chunk):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
111 try:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
112 sent += self.sock.send(chunk)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
113 except socket.error, v:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
114 if v[0] == 32: # Broken pipe
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
115 self.close()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
116 raise
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
117 p.display()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
118
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
119 class progressHTTP(httplib.HTTP):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
120 _connection_class = progressHTTPConnection
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
121 def _setup(self, conn):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
122 httplib.HTTP._setup(self, conn)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
123 self.progress_send = self._conn.progress_send
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
124
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
125 def http_request(data, server, port, url):
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
126 h = progressHTTP(server, port)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
127
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
128 data = mimeEncode(data)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
129 h.putrequest('POST', url)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
130 h.putheader('Content-type', 'multipart/form-data; boundary=%s'%boundary)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
131 h.putheader('Content-length', str(len(data)))
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
132 h.putheader('Host', server)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
133 h.endheaders()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
134
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
135 h.progress_send(data)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
136
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
137 errcode, errmsg, headers = h.getreply()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
138
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
139 f = h.getfile()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
140 response = f.read().strip()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
141 f.close()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
142
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
143 print '%s %s'%(errcode, errmsg)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
144 if response: print response
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
145
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
146 def usage():
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
147 print '''This program is to be used to upload files to the PyWeek system.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
148 You may use it to upload screenshots or code submissions.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
149
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
150 REQUIRED ARGUMENTS:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
151 -u username
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
152 -p password
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
153 -d description of file
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
154 -c file to upload
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
155 -e entry short name
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
156
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
157 OPTIONAL ARGUMENTS:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
158 -s file is a screenshot
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
159 -f file is FINAL submission
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
160 -h override default host name (www.pyweek.org)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
161 -P override default host port (80)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
162
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
163 In order to qualify for judging at the end of the challenge, you MUST
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
164 upload your source and check the "Final Submission" checkbox.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
165 '''
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
166
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
167
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
168 if __name__ == '__main__':
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
169 try:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
170 optlist, args = getopt.getopt(sys.argv[1:], 'e:u:p:sfd:h:P:c:')
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
171 except getopt.GetoptError, message:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
172 print message
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
173 usage()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
174 sys.exit(1)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
175 host = 'www.pyweek.org'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
176 port = 80
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
177 data = dict(version=2)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
178 optional = {}
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
179 url = None
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
180 for opt, arg in optlist:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
181 if opt == '-u': data['user'] = arg
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
182 elif opt == '-p': data['password'] = arg
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
183 elif opt == '-s': optional['is_screenshot'] = 'yes'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
184 elif opt == '-f': optional['is_final'] = 'yes'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
185 elif opt == '-d': data['description'] = arg
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
186 elif opt == '-c': data['content_file'] = Upload(arg)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
187 elif opt == '-e': url = '/e/%s/oup/'%arg
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
188 elif opt == '-h': host = arg
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
189 elif opt == '-P': port = int(arg)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
190
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
191 if len(data) < 4 or url is None:
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
192 print 'Required argument missing'
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
193 usage()
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
194 sys.exit(1)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
195
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
196 data.update(optional)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
197 http_request(data, host, port, url)
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
198