mirror of
https://github.com/erkin/ponysay.git
synced 2025-03-19 10:17:12 +01:00
split out the logic for randomly selecting a pony when none is selected
Signed-off-by: Mattias Andrée <maandree@operamail.com>
This commit is contained in:
parent
4ebc80ff5c
commit
91e62b4a60
1 changed files with 42 additions and 32 deletions
|
@ -448,41 +448,17 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
Returns one file with full path and ponyquote that should be used, names is filter for names, also accepts filepaths
|
Returns one file with full path and ponyquote that should be used, names is filter for names, also accepts filepaths
|
||||||
|
|
||||||
@param selection:(name:str, dirs:itr<str>, quote:bool)? Parsed command line arguments as name–directories–quoting tubles:
|
@param selection:(name:str, dirfiles:itr<str>, quote:bool)? Parsed command line arguments as name–directories–quoting tubles:
|
||||||
name: The pony name
|
name: The pony name
|
||||||
dirfiles: Files, with the directory, in the pony directories
|
dirfiles: Files, with the directory, in the pony directories
|
||||||
quote: Whether to use ponyquotes
|
quote: Whether to use ponyquotes
|
||||||
@param args:ArgParser Parsed command line arguments
|
@param args:ArgParser Parsed command line arguments
|
||||||
@param alt:bool For method internal use...
|
@param alt:bool For method internal use...
|
||||||
@return (path, quote):(str, str?) The file name of a pony, and the ponyquote that should be used if any
|
@return (path, quote):(str, str?) The file name of a pony, and the ponyquote that should be used if any
|
||||||
'''
|
'''
|
||||||
## If there is no selected ponies, choose all of them
|
## If there is no selected ponies, choose all of them
|
||||||
if (selection is None) or (len(selection) == 0):
|
if (selection is None) or (len(selection) == 0):
|
||||||
quote = args.opts['-q'] is not None ## TODO +q -Q
|
selection = [self.___selectAnypony(args)]
|
||||||
standard = (args.opts['-f'] is not None) or (args.opts['-F'] is not None) or (args.opts['-q'] is not None) ## TODO -Q
|
|
||||||
extra = (args.opts['+f'] is not None) or (args.opts['-F'] is not None) ## TODO +q -Q
|
|
||||||
if not (standard or extra):
|
|
||||||
standard = True
|
|
||||||
ponydirs = (self.ponydirs if standard else []) + (self.extraponydirs if extra else []);
|
|
||||||
quoters = self.__quoters() if standard and quote else None ## TODO +q -Q
|
|
||||||
if (quoters is not None) and (len(quoters) == 0):
|
|
||||||
printerr('Princess Celestia! All the ponies are mute!')
|
|
||||||
exit(250)
|
|
||||||
|
|
||||||
## Get all ponies, with quotes
|
|
||||||
oldponies = {}
|
|
||||||
self.__getAllPonies(standard, extra, oldponies, quoters):
|
|
||||||
|
|
||||||
## Apply restriction
|
|
||||||
ponies = self.__applyRestriction(oldponies, ponydirs)
|
|
||||||
|
|
||||||
## Select one pony and set all information
|
|
||||||
names = list(ponies.keys())
|
|
||||||
if len(names) == 0:
|
|
||||||
printerr('All the ponies are missing, call the Princess!')
|
|
||||||
exit(249)
|
|
||||||
pony = names[random.randrange(0, len(names))]
|
|
||||||
selection = [(pony, [ponies[pony]], quote)]
|
|
||||||
|
|
||||||
## Select a random pony of the choosen ones
|
## Select a random pony of the choosen ones
|
||||||
pony = selection[random.randrange(0, len(selection))]
|
pony = selection[random.randrange(0, len(selection))]
|
||||||
|
@ -513,6 +489,40 @@ class Ponysay():
|
||||||
return (file, self.__getQuote(pony[0], file) if pony[2] else None)
|
return (file, self.__getQuote(pony[0], file) if pony[2] else None)
|
||||||
|
|
||||||
|
|
||||||
|
def __selectAnypony(self, args):
|
||||||
|
'''
|
||||||
|
Randomly select a pony from all installed ponies
|
||||||
|
|
||||||
|
@param args:ArgParser Parsed command line arguments
|
||||||
|
@return (name, dirfile, quote):(str, list<str>, bool) The pony name, pony file with the directory, and whether to use ponyquotes
|
||||||
|
'''
|
||||||
|
quote = args.opts['-q'] is not None ## TODO +q -Q
|
||||||
|
standard = (args.opts['-f'] is not None) or (args.opts['-F'] is not None) or (args.opts['-q'] is not None) ## TODO -Q
|
||||||
|
extra = (args.opts['+f'] is not None) or (args.opts['-F'] is not None) ## TODO +q -Q
|
||||||
|
if not (standard or extra):
|
||||||
|
standard = True
|
||||||
|
ponydirs = (self.ponydirs if standard else []) + (self.extraponydirs if extra else []);
|
||||||
|
quoters = self.__quoters() if standard and quote else None ## TODO +q -Q
|
||||||
|
if (quoters is not None) and (len(quoters) == 0):
|
||||||
|
printerr('Princess Celestia! All the ponies are mute!')
|
||||||
|
exit(250)
|
||||||
|
|
||||||
|
## Get all ponies, with quotes
|
||||||
|
oldponies = {}
|
||||||
|
self.__getAllPonies(standard, extra, oldponies, quoters):
|
||||||
|
|
||||||
|
## Apply restriction
|
||||||
|
ponies = self.__applyRestriction(oldponies, ponydirs)
|
||||||
|
|
||||||
|
## Select one pony and set all information
|
||||||
|
names = list(ponies.keys())
|
||||||
|
if len(names) == 0:
|
||||||
|
printerr('All the ponies are missing, call the Princess!')
|
||||||
|
exit(249)
|
||||||
|
pony = names[random.randrange(0, len(names))]
|
||||||
|
return (pony, [ponies[pony]], quote)
|
||||||
|
|
||||||
|
|
||||||
def __getAllPonies(self, standard, extra, collection, quoters):
|
def __getAllPonies(self, standard, extra, collection, quoters):
|
||||||
'''
|
'''
|
||||||
Get ponies for a set of directories
|
Get ponies for a set of directories
|
||||||
|
|
Loading…
Add table
Reference in a new issue