import repository from arizona
[raven.git] / lib / arizona-lib / transfer / arizonatransfer_s3.py
1 #! /usr/bin/env python
2 """
3 Stork Project (http://www.cs.arizona.edu/stork/)
4 Module: arizonatransfer_http
5 Description:   Provides a general file transferring by HTTP
6
7 """
8
9 import urllib
10 import urllib2
11 import os
12 import time
13 import arizonareport
14 import arizonageneral
15 import storks3
16
17 def log_transfer(function, pid, timestamp, timestampend):
18    try:
19       import storklog
20       storklog.log_transfer(function, pid, timestamp, timestampend)
21    except:
22       pass
23
24       
25 def close_transfer_program():
26    """
27    <Purpose>
28       This closes a connection (dummy function for HTTP).
29
30    <Arguments>
31       None.
32    
33    <Exceptions>
34       None.
35
36    <Side Effects>
37       None.
38
39    <Returns>
40       True.
41    """
42  
43    return True
44
45
46
47 def init_transfer_program(ignore=None, ignore2=None, ignore3=None, ignore4=None):
48    """
49    <Purpose>
50       This initializes a connection (dummy function for HTTP).
51
52    <Arguments>
53       None.
54
55    <Exceptions>
56       None.
57
58    <Side Effects>
59       None.
60
61    <Returns>
62       True.
63    """
64    # import the stork S3 module
65    storks3.init()
66    return True
67
68
69
70
71 def retrieve_files(junk_host, filelist, destdir='.', indicator=None):
72    """
73    <Purpose>
74       This retrieves files from a host to a destdir.
75
76    <Arguments>
77       host:
78          'host' holds two things, a server name and target directory.
79          For example, if you want to retrieve files from '/tmp/' directory
80          in 'quadrus.cs.arizona.edu' server, the 'host' will be
81          'quadrus.cs.arizona.edu/tmp'.
82
83       filelist:
84          'filelist' is a list of files which need to be retrieved.
85
86       destdir:
87          'destdir' is a destination directory where retrieved files will
88          be placed. A user should have 'destdir' exist before retrieving
89          files. 'destdir' should be a string. Default is a current dir.
90
91       indicator:
92          'indicator' is a module which has set_filename and
93          download_indicator functions. 'indicator' will be passed in
94          'urlretrieve' function so that progress bar will be shown
95          while downloading files. Default is 'None'.
96
97    <Exceptions>
98       None.
99
100    <Side Effects>
101       None.
102
103    <Returns>
104       (True, grabbed_list)
105       'grabbed_list' is a list of files which are retrieved
106    """
107    # set grabbed_list as a empty list. Later it will be appended with retrieved files
108    grabbed_list = []
109
110    # TODO - check type of filelist
111
112    arizonageneral.check_type_simple(destdir, "destdir", str, "arizonatransfer_s3.init")
113
114    # check that the destination directory exists
115    if not os.path.isdir(destdir):
116       arizonareport.send_syslog(arizonareport.ERR, "\nretrieve_files(): The destination directory '" + destdir + "' for a requested does not exist")
117       # return false and empty list
118       return (False, grabbed_list)
119
120    # if destdir is a empty string, then make it as a current directory
121    if destdir == '':
122       destdir = '.'
123
124    # go through every file in the file list
125    for file in filelist:
126       filename = file['filename']
127       hash = file.get('hash', None)
128
129       starttime = time.time()
130
131       destfilename = os.path.join(destdir, filename)
132       remotename = filename + '-' + hash
133
134       try:
135          arizonareport.send_out(1, "arizonatransfer_s3: attempting to retrieve " + remotename)
136
137          storks3.get_file(remotename, destfilename)
138
139          grabbed_list.append(file)
140          endtime = time.time()
141          log_transfer("s3", str(os.getpid()), str(starttime), str(endtime))
142
143       # if file is not permitted to be retrieved
144       except TypeError, e:
145          arizonareport.send_syslog(arizonareport.ERR, 'retrieve_files(): "' + str(e) + '" on the file "' + filename + '"')
146
147    if (grabbed_list) :
148       return (True, grabbed_list)
149    # if nothing in grabbed_list
150    else:
151       return (False, grabbed_list)
152
153
154
155 def transfer_name():
156    """
157    <Purpose>
158       This gives the name of this transfer method.
159
160    <Arguments>
161       None.
162
163    <Exceptions>
164       None.
165
166    <Side Effects>
167       None.
168
169    <Returns>
170       'arizona_http' as an string
171    """
172
173    return 'arizona_s3'
174
175
176