import repository from arizona
[raven.git] / lib / arizona-lib / aztransfer.py
1 #! /usr/bin/env python
2 """
3 <Purpose>
4    This tool is used to exercise the protocols used in arizonatransfer.
5 """
6
7 #           [option, long option,     variable,      action,        data,     default,                           metavar,     description]
8 """arizonaconfig
9    options=[
10             ["-C",   "--configfile",  "configfile",  "store",       "string", "aztransfer.conf", "FILE",   "use a different config file (arizonaconfigDebug.conf is the default)"],
11             ["",     "--host",        "host",        "store",       "string", "stork-repository.cs.arizona.edu/packageinfo", "HOST", "host and path"],
12             ["",     "--hash",        "hash",        "append",      "string", None, None, "hashes"],
13             ["",     "--hashfuncs",   "hashfuncs",   "append",      "string", None, None, "hash functions (default, package, ...)"],
14             ["",     "--protocol",    "protocol",    "store",       "string", None, "PROTOCOL", "force the use of a specific protocol (http, ftp, coblitz, etc)"],
15             ["",     "--destdir",     "destdir",     "store",       "string", None, "DIR", "destinarion directory (defaults to cwd)"]]
16    includes=[]
17 """
18
19 import os
20 import sys
21 import arizonaconfig
22 import arizonageneral
23 import arizonatransfer
24 import arizonareport
25
26 import ravenlib.package.storkpackage
27
28 def main():
29    args = arizonaconfig.init_options(os.path.basename(__file__), configfile_optvar=None)
30
31    if not args:
32       print "Error: no filenames specified on command line"
33       return
34
35    protocol = arizonaconfig.get_option("protocol")
36    if (protocol != None):
37        arizonaconfig.set_option("transfermethod", [protocol])
38
39    hashlist = arizonaconfig.get_option("hash")
40
41    hashfuncs = []
42    if arizonaconfig.get_option("hashfuncs"):
43       for hashname in arizonaconfig.get_option("hashfuncs"):
44          if hashname == "default":
45             hashfuncs.append(arizonatransfer.default_hashfunc)
46          elif hashname == "package":
47             hashfuncs.append(ravenlib.package.storkpackage.get_package_metadata_hash)
48          else:
49             print "unknown hashfunc ", hashname
50             sys.exit(1)
51
52    filelist = []
53    for i,fn in enumerate(args):
54       if hashlist and len(hashlist) > i:
55          hash = hashlist[i]
56       else:
57          hash = None
58
59       dict = {'filename': fn}
60       if hash:
61          dict['hash'] = hash
62
63       if hashfuncs:
64          dict['hashfuncs'] = hashfuncs
65
66       filelist.append( dict )
67
68    destdir = arizonaconfig.get_option("destdir")
69    if (destdir != None):
70        arizonageneral.makedirs_existok(destdir)
71    else:
72        destdir = "."
73
74    host = arizonaconfig.get_option("host")
75
76    print "host = ", host
77    print "filelist = ", filelist
78    print "protocols = ", arizonaconfig.get_option("transfermethod")
79
80    if filelist[0]['filename'] == "sync":
81       arizonageneral.makedirs_existok("sync")
82       (result, grabbed_list, all_list) = arizonatransfer.sync_remote_dir(host, "sync", hashfuncs=hashfuncs)
83    else:
84       (result, grabbed_list) = arizonatransfer.getfiles1(host, filelist, destdir, None, False)
85
86    print "result = ", result
87    print "grabbed_list = ", grabbed_list
88
89 if __name__ == "__main__":
90    main()