kdbxtool.merge¶
Database merge functionality for combining KDBX databases.
This module provides the Merger class for merging two KeePass databases following a UUID-based matching and timestamp-based conflict resolution algorithm similar to KeePassXC.
Example
>>> from kdbxtool import Database
>>> target = Database.open("main.kdbx", password="secret")
>>> source = Database.open("branch.kdbx", password="secret")
>>> result = target.merge(source)
>>> print(f"Added {result.entries_added} entries")
>>> target.save()
Classes
|
Record of a deleted entry or group. |
|
Merge mode determining how conflicts and deletions are handled. |
|
Result of a database merge operation. |
|
Merges two KDBX databases with configurable conflict resolution. |
- class kdbxtool.merge.MergeMode(*values)[source]¶
Bases:
EnumMerge mode determining how conflicts and deletions are handled.
- STANDARD¶
Add and update entries/groups from source. Does not delete anything from target. This is the default and safest mode.
- SYNCHRONIZE¶
Full bidirectional sync including deletions. Items deleted in source (tracked in DeletedObjects) will be deleted from target if they haven’t been modified after the deletion time.
- STANDARD = 1¶
- SYNCHRONIZE = 2¶
- class kdbxtool.merge.DeletedObject(uuid, deletion_time)[source]¶
Bases:
objectRecord of a deleted entry or group.
Used in SYNCHRONIZE mode to track deletions that should propagate to other databases during merge.
- deletion_time¶
When the deletion occurred
- Type:
- class kdbxtool.merge.MergeResult(entries_added=0, entries_updated=0, entries_relocated=0, entries_deleted=0, groups_added=0, groups_updated=0, groups_relocated=0, groups_deleted=0, history_entries_merged=0, binaries_added=0, custom_icons_added=0)[source]¶
Bases:
objectResult of a database merge operation.
Contains detailed statistics about what was changed during the merge.
- Parameters:
- __init__(entries_added=0, entries_updated=0, entries_relocated=0, entries_deleted=0, groups_added=0, groups_updated=0, groups_relocated=0, groups_deleted=0, history_entries_merged=0, binaries_added=0, custom_icons_added=0)¶
- class kdbxtool.merge.Merger(target, source, *, mode=MergeMode.STANDARD)[source]¶
Bases:
objectMerges two KDBX databases with configurable conflict resolution.
The merge algorithm follows these principles: 1. UUID-based matching: Entries and groups are matched by UUID 2. Timestamp-based resolution: Newer last_modification_time wins 3. History preservation: Losing versions are preserved in history 4. Location tracking: Entry moves are tracked via location_changed
Example
>>> merger = Merger(target_db, source_db) >>> result = merger.merge() >>> print(result.summary())
- merge()[source]¶
Execute the merge operation.
- Returns:
MergeResult with statistics about the merge
- Raises:
MergeError – If merge fails
- Return type: