diff --git a/pykeepass/pykeepass.py b/pykeepass/pykeepass.py index ac43ae7..e94ecd9 100644 --- a/pykeepass/pykeepass.py +++ b/pykeepass/pykeepass.py @@ -268,6 +268,43 @@ def entries(self): excluding history""" return self.find_entries() + @property + def database_name(self): + """Name of database""" + elem = self._xpath('/KeePassFile/Meta/DatabaseName', first=True) + return elem.text + + @database_name.setter + def database_name(self, name): + item = self._xpath('/KeePassFile/Meta/DatabaseName', first=True) + item.text = str(name) + + @property + def database_description(self): + """Description of the database""" + elem = self._xpath('/KeePassFile/Meta/DatabaseDescription', first=True) + return elem.text + + @database_description.setter + def database_description(self, name): + item = self._xpath('/KeePassFile/Meta/DatabaseDescription', first=True) + item.text = str(name) + + @property + def default_username(self): + """Default Username + + Returns: + user name or None if not set. + """ + elem = self._xpath('/KeePassFile/Meta/DefaultUserName', first=True) + return elem.text + + @default_username.setter + def default_username(self, name): + item = self._xpath('/KeePassFile/Meta/DefaultUserName', first=True) + item.text = str(name) + def xml(self): """Get XML part of database as string diff --git a/tests/tests.py b/tests/tests.py index 791d197..a433130 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -1364,6 +1364,61 @@ def test_open_no_decrypt(self): self.assertEqual(kp.encryption_algorithm, enc_alg) self.assertEqual(kp.version, version) + def test_database_info(self): + """Test database properties""" + + + databases = [ + 'test3.kdbx', + 'test4.kdbx', + ] + passwords = [ + 'password', + 'password', + ] + keyfiles = [ + base_dir / 'test3.key', + base_dir / 'test4.key', + ] + filenames_out = [ + base_dir / 'test3.kdbx.out', + base_dir / 'test4_aes.kdbx.out', + ] + + for database, password, keyfile, filename_out in zip(databases, passwords, keyfiles, filenames_out): + kp = PyKeePass( + os.path.join(base_dir, database), + password, + keyfile + ) + + # Test name + self.assertEqual(kp.database_name, None) + kp.database_name = "Test Name" + self.assertEqual(kp.database_name, "Test Name") + + # Test Description + self.assertEqual(kp.database_description, None) + kp.database_description = "Test Description" + self.assertEqual(kp.database_description, "Test Description") + + # Test Default User Name + self.assertEqual(kp.default_username, None) + kp.default_username = "Test User" + self.assertEqual(kp.default_username, "Test User") + + kp.save(filename_out) + kp = PyKeePass( + filename_out, + password, + keyfile + ) + + self.assertEqual(kp.database_name, "Test Name") + self.assertEqual(kp.database_description, "Test Description") + self.assertEqual(kp.default_username, "Test User") + + if __name__ == '__main__': unittest.main()