Exemple #1
0
def main():
    with open(readme_path) as f:
        text = f.read()

    parser = make_parser()
    usage_stub = '```\n$ firefed -h\n{help}```\n'
    usage_text = usage_stub.format(help=parser.format_help())

    sub_cmds = parser._subparsers._group_actions[0].choices
    features_stub = '### {name}\n\n{description}\n\n```\n{help}```\n\n'
    features = Feature.feature_map()
    features_text = ''
    for name, cmd in sub_cmds.items():
        feature = features[name]
        ds_parts = feature.__doc__.split('\n')
        ds = ds_parts[0] + '\n' + dedent('\n'.join(ds_parts[1:]))
        features_text += features_stub.format(
            name=feature.__name__,
            description=ds,
            help=cmd.format_help(),
        )

    text = add_section(text, usage_text, 'usage')
    text = add_section(text, features_text, 'features')

    with open(readme_path, 'w') as f:
        f.write(text)
    print('Commands written to "%s".' % readme_path)
Exemple #2
0
 def test_all_csvs(self, mock_session, stdout):
     """All features with a CSV formatter should be CSV-parseable."""
     for Feature_ in Feature.feature_map().values():
         if 'csv' in Feature_.formatters():
             kwargs = {'password': '******'} if Feature_ is Logins else {}
             Feature_(mock_session, format='csv', **kwargs)()
             res = parse_csv(stdout())
             assert len(set(len(row) for row in res)) == 1
Exemple #3
0
def make_parser():
    from firefed.feature import Feature
    parser = argparse.ArgumentParser(
        'firefed',
        description=version.__description__,
    )
    parser.add_argument(
        '-V',
        '--version',
        action='version',
        version='%(prog)s v' + version.__version__,
    )
    parser.add_argument(
        '-P',
        '--profiles',
        help='show all local profiles',
        action='store_true',
        dest='show_profiles',
    )
    parser.add_argument(
        '-p',
        '--profile',
        help='profile name or directory to be used when running a feature',
    )
    parser.add_argument(
        '-v',
        '--verbose',
        help='verbose output (can be used multiple times)',
        action='count',
        dest='verbosity',
        default=0,
    )
    parser.add_argument(
        '-f',
        '--force',
        help='treat target as a profile directory even if it doesn\'t'
        ' look like one',
        action='store_true',
        default=False,
    )
    subparsers = parser.add_subparsers(
        title='features',
        metavar='FEATURE',
        description='Set the feature you want to run as positional argument. '
        'Each feature has its own sub arguments which can be listed with '
        '`firefed <feature> -h`.',
        dest='feature',
    )
    for name, feature in Feature.feature_map().items():
        feature_parser = subparsers.add_parser(name,
                                               help=feature.description())
        for args, kwargs in feature.cli_args():
            feature_parser.add_argument(*args, **kwargs)
    return parser
Exemple #4
0
def run():
    parser = util.make_parser()
    args = vars(parser.parse_args())
    if args.pop('show_profiles'):
        show_profiles()
        return
    feature_name = args.pop('feature')
    if feature_name is None:
        # Show help message end exit
        parser.parse_args(['-h'])
    try:
        profile = util.profile_dir(args.pop('profile'))
    except util.ProfileNotFoundError as e:
        fatal(e)
    session = Session(profile, verbosity=args.pop('verbosity'))
    ChosenFeature = Feature.feature_map()[feature_name]
    force = args.pop('force')
    feature = ChosenFeature(session, **args)
    if not feature.profile_path('times.json').exists() and not force:
        fatal('"%s" doesn\'t look like a profile directory. Use -f/--force if '
              'you insist it is.' % session.profile)
    feature()
Exemple #5
0
 def csv(self):
     Feature.csv_from_items(self.logins)
Exemple #6
0
 def csv(self):
     Feature.csv_from_items(self.addons)
Exemple #7
0
 def csv(self):
     Feature.csv_from_items(self.perms)
Exemple #8
0
 def format_csv(self):
     Feature.csv_from_items(self.entries)
Exemple #9
0
 def test_feature_map(self):
     fmap = Feature.feature_map()
     assert len(fmap) > 1
     assert fmap['summary'] is Summary
     assert Feature not in fmap.values()
Exemple #10
0
 def format_csv(self):
     Feature.csv_from_items(self.cookies)
Exemple #11
0
 def csv(self):
     Feature.csv_from_items(self.visits)