Skip to content

Commit

Permalink
Add further database properties
Browse files Browse the repository at this point in the history
Add database name, database description and default user name property.
  • Loading branch information
Jan-Michael Brummer committed Apr 23, 2024
1 parent 66bc409 commit 3aadce5
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
37 changes: 37 additions & 0 deletions pykeepass/pykeepass.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
55 changes: 55 additions & 0 deletions tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

0 comments on commit 3aadce5

Please sign in to comment.