- reorganize source to build a python module
[opensuse:osc.git] / osc / othermethods.py
1 #!/usr/bin/python
2
3 # Copyright (C) 2006 Peter Poeml.  All rights reserved.
4 # This program is free software; it may be used, copied, modified
5 # and distributed under the terms of the GNU General Public Licence,
6 # either version 2, or (at your option) any later version.
7
8
9 """
10 This file is provided because urllib2 doesn't have support for the DELETE and
11 PUT methods.
12
13 """
14
15 import httplib 
16 import base64 
17 import os 
18 import urlparse
19
20 BLOCKSIZE=1024
21
22 def delfile(url, file, username, password):
23
24     auth_string = base64.encodestring('%s:%s' % (username, password)) 
25
26     u = urlparse.urlparse(url)
27     host = u[1]
28     path = u[2]
29
30     conn = httplib.HTTP(host) 
31     conn.putrequest('DELETE', '%s' % path) 
32     conn.putheader('Host', host)
33     conn.putheader('Authorization', 'Basic %s' % auth_string) 
34     conn.endheaders() 
35
36
37     reply, msg, headers = conn.getreply() 
38
39     if reply == 200:
40         #print 'done'
41         pass
42     else:
43         print 'error deleting %s' % file
44         print 'upload-DELETE reply=', reply, ' msg=', msg, 'headers=', headers
45
46 def putfile(url, file, username, password):
47
48     size = os.stat(file)[6] 
49
50     auth_string = base64.encodestring('%s:%s' % (username, password)) 
51
52     u = urlparse.urlparse(url)
53     host = u[1]
54     path = u[2]
55
56     conn = httplib.HTTP(host) 
57     conn.putrequest('PUT', '%s' % path) 
58     conn.putheader('Host', host)
59     conn.putheader('Content-Type', 'text/plain') 
60     conn.putheader('Content-Length', str(size)) 
61     conn.putheader('Authorization', 'Basic %s' % auth_string) 
62     conn.endheaders() 
63
64     fp = open(file, 'rb') 
65     n = 0 
66     while 1: 
67         buf = fp.read(BLOCKSIZE) 
68         n+=1 
69         if n % 10 == 0: 
70             #print 'upload-sending blocknum=', n 
71             #print '.',
72             pass
73
74         if not buf: break 
75         conn.send(buf) 
76     fp.close() 
77
78     reply, msg, headers = conn.getreply() 
79
80     if reply == 200:
81         pass
82         #print 'done'
83     else:
84         print 'error uploading %s' % file
85         print 'upload-PUT reply=', reply, ' msg=', msg, 'headers=', headers
86
87
88 def main():
89     import sys 
90
91     username = 'yourusername' 
92     password = 'yourpassword' 
93     file = sys.argv[1]
94     url = 'http://api.opensuse.org/source/exim/exim/%s' % os.path.basename(file)
95     
96     putfile(url, file, username, password)
97
98     delfile(url, file, username, password)
99
100
101 if __name__ == '__main__':
102     main()