Package fcp :: Module get
[hide private]
[frames] | no frames]

Source Code for Module fcp.get

  1  #@+leo-ver=4 
  2  #@+node:@file get.py 
  3  """ 
  4  get a key 
  5   
  6  This is the guts of the command-line front-end app fcpget 
  7  """ 
  8   
  9  #@+others 
 10  #@+node:imports 
 11  import argparse 
 12  import sys, traceback 
 13   
 14  from . import node 
 15  from .arguments import add_default_arguments 
 16   
 17  #@-node:imports 
 18  #@+node:globals 
 19  progname = sys.argv[0] 
 20   
 21  #@-node:globals 
 22   
23 -def create_parser():
24 ''' 25 Creates an argparse parser. 26 ''' 27 parser = argparse.ArgumentParser( 28 prog='fcpget', 29 description='A simple command-line freenet key retrieval command' 30 ) 31 add_default_arguments(parser) 32 33 parser.add_argument( 34 'key_uri', 35 help=''' 36 A freenet key URI, such as 'freenet:KSK@gpl.txt'. 37 Note that the 'freenet:' part may be omitted if you feel lazy 38 ''', 39 ) 40 41 parser.add_argument( 42 'outfile', 43 nargs='?', 44 type=argparse.FileType('w'), 45 default=sys.stdout, 46 help=''' 47 The filename to which to write the key's data. 48 If this argument is not given, the key's data will be 49 printed to standard output. 50 ''', 51 ) 52 53 parser.add_argument( 54 '--priority', 55 '-r', 56 type=int, 57 choices=range(0, 6+1), 58 default=3, 59 help='Set the priority (0 highest, 6 lowest, default 3)', 60 ) 61 62 parser.add_argument( 63 '--global', 64 '-g', 65 dest='global_queue', 66 default=False, 67 action='store_true', 68 help='Do it on the FCP global queue.', 69 ) 70 71 parser.add_argument( 72 '--persistence', 73 '-p', 74 default='connection', 75 choices=('connection', 'reboot', 'forever'), 76 help='Set the persistence type, one of "connection", "reboot" or "forever"', 77 ) 78 79 80 return parser
81 82 83 84 #@-node:help 85 #@+node:main
86 -def main(argv=sys.argv[1:]):
87 """ 88 Front end for fcpget utility 89 """ 90 # default job options 91 verbosity = node.ERROR 92 93 opts = { 94 "Verbosity" : 7, 95 } 96 97 verbose = False 98 99 parser = create_parser() 100 args = parser.parse_args(argv) 101 102 uri = args.key_uri 103 if not uri.startswith("freenet:"): 104 uri = "freenet:" + uri 105 106 opts['priority'] = args.priority 107 if args.global_queue: 108 opts['Global'] = 'true' 109 opts['persistence'] = args.persistence 110 opts['timeout'] = args.timeout 111 112 113 # try to create the node 114 try: 115 fcp_node = node.FCPNode(host=args.fcphost, 116 port=args.fcpport, 117 Global=args.global_queue, 118 verbosity=verbosity, 119 logfile=sys.stderr) 120 except: 121 if verbose: 122 traceback.print_exc(file=sys.stderr) 123 sys.stderr.write("Failed to connect to FCP service at %s:%s\n" % (args.fcphost, args.fcpport)) 124 sys.exit(1) 125 126 # try to retrieve the key 127 try: 128 # print "opts=%s" % opts 129 mimetype, data, msg = fcp_node.get(uri, **opts) 130 fcp_node.shutdown() 131 except: 132 if verbose: 133 traceback.print_exc(file=sys.stderr) 134 sys.stderr.write("%s: Failed to retrieve key %s\n" % (progname, repr(uri))) 135 fcp_node.shutdown() 136 sys.exit(1) 137 138 # try to dispose of the data 139 140 # try to save to file 141 try: 142 args.outfile.write(data) 143 args.outfile.close() 144 if verbose: 145 sys.stderr.write("Saved key to file %s\n" % args.outfile) 146 except: 147 # save failed 148 if verbose: 149 traceback.print_exc(file=sys.stderr) 150 sys.stderr.write("Failed to write data to output file %s\n" % repr(args.outfile)) 151 152 # all done 153 try: 154 fcp_node.shutdown() 155 except: 156 pass 157 sys.exit(0)
158 159 #@-node:main 160 #@-others 161 162 #@-node:@file get.py 163 #@-leo 164