1
2
3 """
4 get a key
5
6 This is the guts of the command-line front-end app fcpget
7 """
8
9
10
11 import argparse
12 import sys, traceback
13
14 from . import node
15 from .arguments import add_default_arguments
16
17
18
19 progname = sys.argv[0]
20
21
22
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
85
86 -def main(argv=sys.argv[1:]):
87 """
88 Front end for fcpget utility
89 """
90
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
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
127 try:
128
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
139
140
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
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
153 try:
154 fcp_node.shutdown()
155 except:
156 pass
157 sys.exit(0)
158
159
160
161
162
163
164