def process():
    args = get_args()
    print(args.dbpath)
    if not os.path.exists(args.dbpath):
        print("DB file path does not exist", file=sys.stderr)
        sys.exit(1)
    password = getpass()
    try:
        db = KP(args.dbpath, password=password)
    except FileNotFoundError:
        print("DB file path does not exist", file=sys.stderr)
        sys.exit(1)
    except OSError:
        print("Invalid password", file=sys.stderr)
        sys.exit(1)
    except Exception:
        print("Misc error", file=sys.stderr)
        sys.exit(1)
    groups = db.find_groups_by_name(args.groupname)
    if len(groups) == 0:
        print("Group does not exist", file=sys.stderr)
        sys.exit(1)
    if len(groups) > 1:
        print("Multiple groups of that name exist. Cannot continue",
              file=sys.stderr)
        sys.exit(1)
    group = groups[0]
    ## Only grab from root
    path = "".join([db.root_group.path, args.entrytitle])
    entries = db.find_entries_by_path(path)
    if len(entries) == 0:
        print("Entry by that title does not exist", file=sys.stderr)
    for entry in entries:
        group.append(entry)
    db.save()
예제 #2
0
파일: tests.py 프로젝트: netson/pykeepass
class GroupFunctionTests(unittest.TestCase):

    # get some things ready before testing
    def setUp(self):
        self.kp = PyKeePass(os.path.join(base_dir, 'test.kdbx'),
                            password='******',
                            keyfile=os.path.join(base_dir, 'test.key'))

    #---------- Finding groups -----------

    def test_find_groups_by_name(self):
        results = self.kp.find_groups_by_name('subgroup')
        self.assertEqual(len(results), 1)
        results = self.kp.find_groups_by_name('subgroup', first=True)
        self.assertEqual(results.name, 'subgroup')
        g = self.kp.find_groups(name='foobar_group', first=True)
        results = self.kp.find_groups(group=g, name='.*group.*', regex=True)
        self.assertEqual(len(results), 2)
        results = self.kp.find_groups(group=g,
                                      name='.*group.*',
                                      regex=True,
                                      recursive=False)
        self.assertEqual(len(results), 1)

    def test_find_groups_by_path(self):
        results = self.kp.find_groups_by_path('/foobar_group/subgroup/')
        self.assertIsInstance(results[0], Group)
        results = self.kp.find_groups_by_path('/foobar_group/subgroup/',
                                              first=True)
        self.assertEqual(results.name, 'subgroup')

    def test_find_groups_by_uuid(self):
        results = self.kp.find_groups_by_uuid('lRVaMlMXoQ/U5NDCAwJktg==',
                                              first=True)
        self.assertIsInstance(results, Group)
        results = self.kp.find_groups(uuid='^lRVaMlMX|^kwTZdSoU', regex=True)
        self.assertEqual(len(results), 2)

    def test_find_groups_by_notes(self):
        results = self.kp.find_groups(notes='group notes')
        self.assertEqual(len(results), 1)
        self.assertEqual(results[0].uuid, 'lRVaMlMXoQ/U5NDCAwJktg==')

    def test_find_groups(self):
        results = self.kp.find_groups(path='/foobar_group/subgroup/')
        self.assertIsInstance(results[0], Group)
        results = self.kp.find_groups_by_path('/foobar_group/subgroup/',
                                              first=True)
        self.assertEqual(results.name, 'subgroup')

    def test_groups(self):
        results = self.kp.groups

        self.assertEqual(len(results), 6)

    #---------- Adding/Deleting Groups -----------

    def test_add_delete_move_group(self):
        notes_text = "this is a note for a group!"
        base_group = self.kp.add_group(self.kp.root_group,
                                       'base_group',
                                       notes=notes_text)
        sub_group = self.kp.add_group(base_group, 'sub_group')
        sub_group2 = self.kp.add_group(base_group, 'sub_group2')

        self.assertEqual(base_group.notes, notes_text)
        base_group.notes = ''
        self.assertEqual(base_group.notes, '')

        results = self.kp.find_groups_by_path('base_group/sub_group/',
                                              first=True)
        self.assertIsInstance(results, Group)
        self.assertEqual(results.name, sub_group.name)

        self.kp.move_group(sub_group2, sub_group)
        results = self.kp.find_groups(path='base_group/sub_group/sub_group2/',
                                      first=True)
        self.assertEqual(results.name, sub_group2.name)

        self.kp.delete_group(sub_group)
        results = self.kp.find_groups_by_path('base_group/sub_group/',
                                              first=True)
        self.assertIsNone(results)

        # ---------- Groups representation -----------

    def test_print_groups(self):
        self.assertIsInstance(self.kp.groups.__repr__(), str)