# simulated PG elog def elog(message): ereport(message) # simulated PG ereport def ereport(message, detail=None, hint=None): print 'PG elog/ereport with message: %s detail: %s hint: %s' % (message, detail, hint) # existing code behaves like this: # takes an unlimited number of arguments # doesn't take keyword arguments # makes a string representation of the tuple of all arguments unless that tuple has size 1 in which case it only makes a string representation of the first one def info_existing(*args): if len(args) == 1: # special case added by Peter in 2e3b16 str_to_log = str(args[0]) else: str_to_log = str(args) elog(str_to_log) # and I'm proposing to change it to do this: # take 1 required argument and extra optional arguments for every argument accepted by ereport # accepts keyword arguments # passing too many arguments will get rejected def info_new(message, detail=None, hint=None): ereport(message, detail, hint) print 'existing behaviour'.center(40) info_existing('1: hi') info_existing('2: hi', 'another argument') info_existing('3: hi', 'another argument', 2) info_existing('4: hi', 'another argument', 2, 'lots', 'of', 'arguments') print print 'new behaviour'.center(40) info_new('1: hi') # for the documented single argument case same behaviour as existing info_new('2: hi', 'another argument') info_new('3: hi', 'another argument', 2) info_new('4: hi', 'another argument', 2, 'lots', 'of', 'arguments')