Browse code

List all Objects in all Buckets command Yet another logging improvement Version check for Python 2.5 or higher

git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3py/trunk@38 830e0280-6d2a-0410-9c65-932aecc39d9d

Michal Ludvig authored on 2007/01/10 21:52:55
Showing 2 changed files
... ...
@@ -1,5 +1,5 @@
1 1
 import logging
2
-from logging import debug, info, warn, error
2
+from logging import debug, info, warning, error
3 3
 import re
4 4
 
5 5
 class ConfigParser:
... ...
@@ -8,6 +8,7 @@ class ConfigParser:
8 8
 		self.parse_file(file, sections)
9 9
 	
10 10
 	def parse_file(self, file, sections = []):
11
+		info("ConfigParser: Reading file '%s'" % file)
11 12
 		if type(sections) != type([]):
12 13
 			sections = [sections]
13 14
 		in_our_section = True
... ...
@@ -33,6 +34,7 @@ class ConfigParser:
33 33
 				debug("ConfigParser: %s->%s" % (data["key"], data["value"]))
34 34
 				self.__setitem__(data["key"], data["value"])
35 35
 				continue
36
+			warning("Ignoring invalid line in '%s': %s" % (file, line))
36 37
 
37 38
 	def __getitem__(self, name):
38 39
 		return self.cfg[name]
... ...
@@ -44,8 +46,3 @@ class ConfigParser:
44 44
 		if self.cfg.has_key(name):
45 45
 			return self.cfg[name]
46 46
 		return default
47
-
48
-if __name__ == "__main__":
49
-	logging.basicConfig(level=logging.DEBUG, format='%(levelname)s: %(message)s')
50
-	parser = ConfigParser("/home/mludvig/.s3cfg")
51
-	print parser["access_key"]
... ...
@@ -38,6 +38,7 @@ class AwsConfig:
38 38
 		verbosity = cp.get("verbosity", "WARNING")
39 39
 		try:
40 40
 			AwsConfig.verbosity = logging._levelNames[verbosity]
41
+			print "verbosity set to "+verbosity
41 42
 		except KeyError:
42 43
 			error("AwsConfig: verbosity level '%s' is not valid" % verbosity)
43 44
 
... ...
@@ -161,8 +162,18 @@ def cmd_buckets_list_all(args):
161 161
 			bucket["Name"].ljust(maxlen),
162 162
 			)
163 163
 
164
+def cmd_buckets_list_all_all(args):
165
+	s3 = S3(AwsConfig())
166
+	response = s3.list_all_buckets()
167
+
168
+	for bucket in response["list"]:
169
+		cmd_bucket_list([bucket["Name"]])
170
+		print
171
+
172
+
164 173
 def cmd_bucket_list(args):
165 174
 	bucket = args[0]
175
+	print "Bucket '%s':" % bucket
166 176
 	s3 = S3(AwsConfig())
167 177
 	try:
168 178
 		response = s3.bucket_list(bucket)
... ...
@@ -191,30 +202,37 @@ def cmd_bucket_list(args):
191 191
 
192 192
 commands = {
193 193
 	"la" : ("List all buckets", cmd_buckets_list_all, 0),
194
+	"laa" : ("List all object in all buckets", cmd_buckets_list_all_all, 0),
194 195
 	"lb" : ("List objects in bucket", cmd_bucket_list, 1),
195 196
 #	"cb" : ("Create bucket", cmd_bucket_create, 1),
196 197
 #	"rb" : ("Remove bucket", cmd_bucket_remove, 1)
197 198
 	}
198 199
 
199 200
 if __name__ == '__main__':
201
+	if float("%d.%d" %(sys.version_info[0], sys.version_info[1])) < 2.5:
202
+		sys.stderr.write("ERROR: Python 2.5 or higher required, sorry.\n")
203
+		exit(1)
204
+
205
+	default_verbosity = AwsConfig.verbosity
200 206
 	optparser = OptionParser()
201 207
 	optparser.set_defaults(config=os.getenv("HOME")+"/.s3cfg")
202 208
 	optparser.add_option("-c", "--config", dest="config", metavar="FILE", help="Config file name")
203
-	optparser.add_option("-d", "--debug", action="store_true", help="Enable debug output")
209
+	optparser.set_defaults(verbosity = default_verbosity)
210
+	optparser.add_option("-d", "--debug", dest="verbosity", action="store_const", const=logging.DEBUG, help="Enable debug output")
211
+	optparser.add_option("-v", "--verbose", dest="verbosity", action="store_const", const=logging.INFO, help="Enable verbose output")
204 212
 	(options, args) = optparser.parse_args()
205 213
 
206 214
 	## Some mucking with logging levels to enable 
207
-	## debugging output for config file parser on request
208
-	init_logging_level = logging.INFO
209
-	if options.debug: init_logging_level = logging.DEBUG
210
-	logging.basicConfig(level=init_logging_level, format='%(levelname)s: %(message)s')
215
+	## debugging/verbose output for config file parser on request
216
+	logging.basicConfig(level=options.verbosity, format='%(levelname)s: %(message)s')
211 217
 	
212 218
 	## Now finally parse the config file
213 219
 	AwsConfig(options.config)
214 220
 
215
-	## And again some logging level adjustments, argh.
216
-	if options.debug:
217
-		AwsConfig.verbosity = logging.DEBUG
221
+	## And again some logging level adjustments
222
+	## according to configfile and command line parameters
223
+	if options.verbosity != default_verbosity:
224
+		AwsConfig.verbosity = options.verbosity
218 225
 	logging.root.setLevel(AwsConfig.verbosity)
219 226
 
220 227
 	if len(args) < 1:
... ...
@@ -226,7 +244,7 @@ if __name__ == '__main__':
226 226
 		debug("Command: " + commands[command][0])
227 227
 		## We must do this lookup in extra step to 
228 228
 		## avoid catching all KeyError exceptions
229
-		## from inner functions here. 
229
+		## from inner functions.
230 230
 		cmd_func = commands[command][1]
231 231
 	except KeyError, e:
232 232
 		error("Invalid command: %s" % e)