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()
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)