def test_get_config_dict_bool(self, home_dir): # boolean values are interpolated correctly config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "caps = Off", ""])) conf_dict = get_config_dict() assert "caps" in conf_dict.keys() assert conf_dict["caps"] is False config_file.write("\n".join(["[diceware]", "caps = On", ""])) assert get_config_dict()["caps"] is True
def test_get_config_dict_int(self, home_dir): # integer values are interpolated correctly config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "num=3", ""])) conf_dict = get_config_dict() assert "num" in conf_dict.keys() assert conf_dict["num"] == 3
def test_get_config_dict(self, home_dir): # we can get config values from files as a dict. config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "num = 3", ""])) conf_dict = get_config_dict() assert len(conf_dict) == len(OPTIONS_DEFAULTS) assert conf_dict != OPTIONS_DEFAULTS
def test_get_config_dict_string_quotes_stripped(self, home_dir): # preceding/trailing quotes are stripped from string values config_file = home_dir / ".diceware.ini" for string_in_conf, expected_parsed in ( ('" "', " "), ("' '", " "), ('"\t\t"', "\t\t")): config_file.write("[diceware]\ndelimiter=%s \n" % string_in_conf) conf_dict = get_config_dict() assert conf_dict["delimiter"] == expected_parsed
def test_get_config_dict_arg_path_list(self, home_dir): # we can give the paths searched. config_file_default = home_dir / ".diceware.ini" config_file_default.write("[diceware]\nnum=4\n") config_file_custom = home_dir / "some-new-file" config_file_custom.write("[diceware]\nnum=42\n") conf_dict = get_config_dict( path_list=[str(config_file_custom), ]) assert conf_dict['num'] == 42
def handle_options(args): """Handle commandline options. """ random_sources = get_random_sources().keys() wordlist_names = get_wordlist_names() defaults = get_config_dict() parser = argparse.ArgumentParser( description="Create a passphrase", epilog="Wordlists are stored in %s" % WORDLISTS_DIR ) parser.add_argument( '-n', '--num', default=6, type=int, help='number of words to concatenate. Default: 6') cap_group = parser.add_mutually_exclusive_group() cap_group.add_argument( '-c', '--caps', action='store_true', help='Capitalize words. This is the default.') cap_group.add_argument( '--no-caps', action='store_false', dest='caps', help='Turn off capitalization.') parser.add_argument( '-s', '--specials', default=0, type=int, metavar='NUM', help="Insert NUM special chars into generated word.") parser.add_argument( '-d', '--delimiter', default='', help="Separate words by DELIMITER. Empty string by default.") parser.add_argument( '-r', '--randomsource', default='system', choices=random_sources, metavar="SOURCE", help=( "Get randomness from this source. Possible values: `%s'. " "Default: system" % "', `".join(sorted(random_sources)))) parser.add_argument( '-w', '--wordlist', default='en_securedrop', choices=wordlist_names, metavar="NAME", help=( "Use words from this wordlist. Possible values: `%s'. " "Wordlists are stored in the folder displayed below. " "Default: en_securedrop" % "', `".join(wordlist_names))) parser.add_argument( 'infile', nargs='?', metavar='INFILE', default=None, type=argparse.FileType('r'), help="Input wordlist. `-' will read from stdin.", ) parser.add_argument( '--version', action='store_true', help='output version information and exit.', ) parser.set_defaults(**defaults) args = parser.parse_args(args) return args
def test_get_config_dict_arg_section(self, home_dir): # we can set the section name to look for in config files. config_file = home_dir / ".diceware.ini" config_file.write("[diceware]\nnum=4\n[foo]\nnum=5\n[bar]\nnum=6\n") conf_dict = get_config_dict(section='foo') assert conf_dict['num'] == 5
def test_get_config_dict_arg_defaults_dict(self, home_dir): # we can change the dict of defaults used. custom_defaults = dict(num=42) conf_dict = get_config_dict(defaults_dict=custom_defaults) assert conf_dict == dict(num=42) assert conf_dict is not custom_defaults
def test_get_config_dict_no_diceware_section(self, home_dir): # we cope with config files, if they do not contain a diceware config config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[not-diceware]", "num = 3", ""])) conf_dict = get_config_dict() assert conf_dict == OPTIONS_DEFAULTS
def test_get_config_dict_no_config_file(self, home_dir): # we get config values even without a config file. conf_dict = get_config_dict() assert conf_dict == OPTIONS_DEFAULTS assert conf_dict is not OPTIONS_DEFAULTS
def test_get_config_dict_string_empty(self, home_dir): # we can set empty string values config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "delimiter=", ""])) conf_dict = get_config_dict() assert conf_dict["delimiter"] == ""
def test_get_config_dict_string(self, home_dir): # string values are interpolated correctly config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "delimiter=!", ""])) conf_dict = get_config_dict() assert conf_dict["delimiter"] == "!"
def test_get_config_dict_ignore_irrelevant(self, home_dir): # values that have no default are ignored config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "foo = bar", ""])) conf_dict = get_config_dict() assert "foo" not in conf_dict.keys()
def handle_options(args): """Handle commandline options. """ plugins = get_random_sources() random_sources = plugins.keys() wordlist_names = get_wordlist_names() defaults = get_config_dict() parser = argparse.ArgumentParser( description="Create a passphrase", epilog="Wordlists are stored in %s" % WORDLISTS_DIR ) parser.add_argument( '-n', '--num', default=6, type=int, help='number of words to concatenate. Default: 6') cap_group = parser.add_mutually_exclusive_group() cap_group.add_argument( '-c', '--caps', action='store_true', help='Capitalize words. This is the default.') cap_group.add_argument( '--no-caps', action='store_false', dest='caps', help='Turn off capitalization.') parser.add_argument( '-s', '--specials', default=0, type=int, metavar='NUM', help="Insert NUM special chars into generated word.") parser.add_argument( '-d', '--delimiter', default='', help="Separate words by DELIMITER. Empty string by default.") parser.add_argument( '-r', '--randomsource', default='system', choices=random_sources, metavar="SOURCE", help=( "Get randomness from this source. Possible values: `%s'. " "Default: system" % "', `".join(sorted(random_sources)))) parser.add_argument( '-w', '--wordlist', default='en_eff', choices=wordlist_names, metavar="NAME", help=( "Use words from this wordlist. Possible values: `%s'. " "Wordlists are stored in the folder displayed below. " "Default: en_eff" % "', `".join(wordlist_names))) realdice_group = parser.add_argument_group( "Arguments related to `realdice' randomsource", ) realdice_group.add_argument( '--dice-sides', default=6, type=int, metavar="N", help='Number of sides of dice. Default: 6' ) parser.add_argument( 'infile', nargs='?', metavar='INFILE', default=None, type=argparse.FileType('r'), help="Input wordlist. `-' will read from stdin.", ) parser.add_argument( '-v', '--verbose', action='count', help='Be verbose. Use several times for increased verbosity.') parser.add_argument( '--version', action='store_true', help='output version information and exit.', ) for plugin in plugins.values(): if hasattr(plugin, "update_argparser"): parser = plugin.update_argparser(parser) parser.set_defaults(**defaults) args = parser.parse_args(args) return args
def handle_options(args): """Handle commandline options. """ plugins = get_random_sources() random_sources = plugins.keys() wordlist_names = get_wordlist_names() defaults = get_config_dict() parser = argparse.ArgumentParser( description="Create a passphrase", epilog="Wordlists are stored in %s" % get_wordlists_dir() ) parser.add_argument( '-n', '--num', default=6, type=int, help='number of words to concatenate. Default: 6') cap_group = parser.add_mutually_exclusive_group() cap_group.add_argument( '-c', '--caps', action='store_true', help='Capitalize words. This is the default.') cap_group.add_argument( '--no-caps', action='store_false', dest='caps', help='Turn off capitalization.') parser.add_argument( '-s', '--specials', default=0, type=int, metavar='NUM', help="Insert NUM special chars into generated word.") parser.add_argument( '-d', '--delimiter', default='', help="Separate words by DELIMITER. Empty string by default.") parser.add_argument( '-r', '--randomsource', default='system', choices=random_sources, metavar="SOURCE", help=( "Get randomness from this source. Possible values: `%s'. " "Default: system" % "', `".join(sorted(random_sources)))) parser.add_argument( '-w', '--wordlist', default='en_eff', choices=wordlist_names, metavar="NAME", help=( "Use words from this wordlist. Possible values: `%s'. " "Wordlists are stored in the folder displayed below. " "Default: en_eff" % "', `".join(wordlist_names))) realdice_group = parser.add_argument_group( "Arguments related to `realdice' randomsource", ) realdice_group.add_argument( '--dice-sides', default=6, type=int, metavar="N", help='Number of sides of dice. Default: 6' ) parser.add_argument( 'infile', nargs='?', metavar='INFILE', default=None, help="Input wordlist. `-' will read from stdin.", ) parser.add_argument( '-v', '--verbose', action='count', help='Be verbose. Use several times for increased verbosity.') parser.add_argument( '--version', action='store_true', help='output version information and exit.', ) for plugin in plugins.values(): if hasattr(plugin, "update_argparser"): parser = plugin.update_argparser(parser) parser.set_defaults(**defaults) args = parser.parse_args(args) return args
def test_get_config_dict_returns_wordlists_as_list(self, home_dir): # wordlist settings are returned as lists config_file = home_dir / ".diceware.ini" config_file.write("\n".join(["[diceware]", "wordlist=en_eff", ""])) config_dict = get_config_dict() assert config_dict["wordlist"] == ["en_eff"]