[PATCH 6/n] pwclient: diagnose hash_parser errors gracefully
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Mon Sep 8 21:22:38 EST 2014
[Please keep me CC'ed]
On Fri, Aug 29, 2014 at 03:14:35PM +0000, Keller, Jacob E wrote:
>On Fri, 2014-08-29 at 14:02 +0200, Bernhard Reutner-Fischer wrote:
>> @@ -618,6 +620,23 @@ def main():
>> if hash_str != None:
>> patch_ids = [patch_id_from_hash(rpc, project_str, hash_str)]
>>
>> + # helper for non_empty() to print correct helptext
>> + h = None
>> + try:
>> + h = locals()[action + '_parser']
>> + except:
>> + pass # never happens
>
>This is bad. Why blindly pass any exceptions here?? If you "know" it
>never happens then you shouldn't have an except block, since that will
>prevent debugging real exceptions that could occur. Unless you are
>specifically blocking some exception you know will happen? but then it
>should be typed to only catch the ones you know of.......
Iff we update to an argparse that supports aliases and we do not
deprecate action == "search" as an alias for "list" then we might end up
with no search_parser here. As that is not a real show-stopper, i did
choose to just not print the corresponding parser's help-text if there
is no such parser. Note that this currently cannot happen since we
cannot use aliases with argparse from python-2.7 (AFAICS).
thanks,
>
>> + # Require either hash_str or IDs for
>> + def non_empty(h, patch_ids):
>> + """Error out if no patch IDs were specified"""
>> + if patch_ids == None or len(patch_ids) < 1:
>> + sys.stderr.write("Error: Missing Argument! " +
>> + "Either [-h HASH] or [ID [ID ...]] are required\n")
>> + if h:
>> + h.print_help()
>> + sys.exit(1)
>> + return patch_ids
>> +
>> if action == 'list' or action == 'search':
>> if args.get('patch_name') != None:
>> filt.add("name__icontains", args.get('patch_name'))
>> @@ -630,29 +649,31 @@ def main():
>> action_states(rpc)
>>
>> elif action == 'view':
>> - for patch_id in patch_ids:
>> + for patch_id in non_empty(h, patch_ids):
>> s = rpc.patch_get_mbox(patch_id)
>> if len(s) > 0:
>> print unicode(s).encode("utf-8")
More information about the Patchwork
mailing list