kdbxtool.templates

Entry templates for common account types.

This module provides typed template classes for creating entries with predefined fields and icons. Templates follow KeePass conventions for icon IDs and provide full IDE autocompletion for field names.

Example

>>> from kdbxtool import Database, Templates
>>> db = Database.create(password="secret")
>>> entry = db.root_group.create_entry(
...     title="GitHub",
...     template=Templates.Login(),
...     username="user@example.com",
...     password="secret123",
...     url="https://github.com",
... )
>>> entry = db.root_group.create_entry(
...     title="Visa Card",
...     template=Templates.CreditCard(
...         card_number="4111111111111111",
...         expiry_date="12/25",
...         cvv="123",
...     ),
... )
Custom templates can be created by subclassing EntryTemplate:
>>> from dataclasses import dataclass
>>> from typing import ClassVar
>>> from kdbxtool import EntryTemplate, IconId
>>>
>>> @dataclass
... class VPNConnection(EntryTemplate):
...     _icon_id: ClassVar[int] = IconId.TERMINAL_ENCRYPTED
...     _protected_fields: ClassVar[frozenset[str]] = frozenset({"certificate"})
...
...     server: str | None = None
...     protocol: str = "OpenVPN"
...     certificate: str | None = None

Classes

BankAccount([bank_name, account_type, ...])

Bank account entry template.

CreditCard([card_number, expiry_date, cvv, ...])

Credit card entry template.

DatabaseConnection([database_type, host, ...])

Database connection entry template.

Email([email_address, imap_server, ...])

Email account entry template.

EntryTemplate()

Base class for entry templates.

IconId(*values)

KeePass standard icon IDs.

Identity([first_name, last_name, email, ...])

Identity/personal information entry template.

Login()

Standard login entry template.

SecureNote()

Secure note entry template.

Server([hostname, port, ssh_key])

Server/SSH entry template.

SoftwareLicense([license_key, ...])

Software license entry template.

Templates()

Namespace containing all built-in entry templates.

WirelessRouter([ssid, security_type, ...])

Wireless router entry template.

class kdbxtool.templates.IconId(*values)[source]

Bases: IntEnum

KeePass standard icon IDs.

These correspond to the PwIcon enumeration in KeePass. There are 69 standard icons (0-68) built into KeePass/KeePassXC.

KEY = 0
WORLD = 1
WARNING = 2
NETWORK_SERVER = 3
MARKED_DIRECTORY = 4
USER_COMMUNICATION = 5
PARTS = 6
NOTEPAD = 7
WORLD_SOCKET = 8
IDENTITY = 9
PAPER_READY = 10
DIGICAM = 11
IR_COMMUNICATION = 12
MULTI_KEYS = 13
ENERGY = 14
SCANNER = 15
WORLD_STAR = 16
CDROM = 17
MONITOR = 18
EMAIL = 19
CONFIGURATION = 20
CLIPBOARD_READY = 21
PAPER_NEW = 22
SCREEN = 23
ENERGY_CAREFUL = 24
EMAIL_BOX = 25
DISK = 26
DRIVE = 27
PAPER_Q = 28
TERMINAL_ENCRYPTED = 29
CONSOLE = 30
PRINTER = 31
PROGRAM_ICONS = 32
RUN = 33
SETTINGS = 34
WORLD_COMPUTER = 35
ARCHIVE = 36
HOMEBANKING = 37
DRIVE_WINDOWS = 38
CLOCK = 39
PAPER_FLAG = 41
MEMORY = 42
TRASH_BIN = 43
NOTE = 44
EXPIRED = 45
INFO = 46
PACKAGE = 47
FOLDER = 48
FOLDER_OPEN = 49
FOLDER_PACKAGE = 50
LOCK_OPEN = 51
PAPER_LOCKED = 52
CHECKED = 53
PEN = 54
THUMBNAIL = 55
BOOK = 56
LIST = 57
USER_KEY = 58
TOOL = 59
HOME = 60
STAR = 61
TUX = 62
FEATHER = 63
APPLE = 64
WIKI = 65
MONEY = 66
CERTIFICATE = 67
BLACKBERRY = 68
class kdbxtool.templates.EntryTemplate[source]

Bases: object

Base class for entry templates. Subclass to create custom templates.

Class variables to override:

_icon_id: Icon for entries using this template (default: KEY) _include_standard: Whether to populate username/password/url (default: True) _protected_fields: Field names that should be memory-protected

Example

>>> @dataclass
... class VPNConnection(EntryTemplate):
...     _icon_id: ClassVar[int] = IconId.TERMINAL_ENCRYPTED
...     _protected_fields: ClassVar[frozenset[str]] = frozenset({"certificate"})
...
...     server: str | None = None
...     protocol: str = "OpenVPN"
...     certificate: str | None = None
...
>>> entry = group.create_entry(
...     title="Work VPN",
...     template=VPNConnection(server="vpn.company.com"),
... )
__init__()
Return type:

None

class kdbxtool.templates.Login[source]

Bases: EntryTemplate

Standard login entry template.

Uses standard fields (title, username, password, url) without additional custom fields.

__init__()
Return type:

None

class kdbxtool.templates.CreditCard(card_number=None, expiry_date=None, cvv=None, cardholder_name=None, pin=None)[source]

Bases: EntryTemplate

Credit card entry template.

Includes card number, expiry date, CVV, cardholder name, and PIN. Sensitive fields (card_number, cvv, pin) are memory-protected. Does not use standard username/password fields.

Parameters:
  • card_number (str | None)

  • expiry_date (str | None)

  • cvv (str | None)

  • cardholder_name (str | None)

  • pin (str | None)

card_number: str | None = None
expiry_date: str | None = None
cvv: str | None = None
cardholder_name: str | None = None
pin: str | None = None
__init__(card_number=None, expiry_date=None, cvv=None, cardholder_name=None, pin=None)
Parameters:
  • card_number (str | None)

  • expiry_date (str | None)

  • cvv (str | None)

  • cardholder_name (str | None)

  • pin (str | None)

Return type:

None

class kdbxtool.templates.SecureNote[source]

Bases: EntryTemplate

Secure note entry template.

For storing text without standard credential fields. Use the notes parameter in create_entry() for content.

__init__()
Return type:

None

class kdbxtool.templates.Identity(first_name=None, last_name=None, email=None, phone=None, address=None, city=None, state=None, postal_code=None, country=None)[source]

Bases: EntryTemplate

Identity/personal information entry template.

Includes name, contact, and address fields. Does not use standard username/password fields.

Parameters:
  • first_name (str | None)

  • last_name (str | None)

  • email (str | None)

  • phone (str | None)

  • address (str | None)

  • city (str | None)

  • state (str | None)

  • postal_code (str | None)

  • country (str | None)

first_name: str | None = None
last_name: str | None = None
email: str | None = None
phone: str | None = None
address: str | None = None
city: str | None = None
state: str | None = None
postal_code: str | None = None
country: str | None = None
__init__(first_name=None, last_name=None, email=None, phone=None, address=None, city=None, state=None, postal_code=None, country=None)
Parameters:
  • first_name (str | None)

  • last_name (str | None)

  • email (str | None)

  • phone (str | None)

  • address (str | None)

  • city (str | None)

  • state (str | None)

  • postal_code (str | None)

  • country (str | None)

Return type:

None

class kdbxtool.templates.BankAccount(bank_name=None, account_type=None, account_number=None, routing_number=None, swift_bic=None, iban=None, pin=None)[source]

Bases: EntryTemplate

Bank account entry template.

Includes account details and routing information. Sensitive fields (account_number, iban, pin) are memory-protected. Does not use standard username/password fields.

Parameters:
  • bank_name (str | None)

  • account_type (str | None)

  • account_number (str | None)

  • routing_number (str | None)

  • swift_bic (str | None)

  • iban (str | None)

  • pin (str | None)

bank_name: str | None = None
account_type: str | None = None
account_number: str | None = None
routing_number: str | None = None
swift_bic: str | None = None
iban: str | None = None
pin: str | None = None
__init__(bank_name=None, account_type=None, account_number=None, routing_number=None, swift_bic=None, iban=None, pin=None)
Parameters:
  • bank_name (str | None)

  • account_type (str | None)

  • account_number (str | None)

  • routing_number (str | None)

  • swift_bic (str | None)

  • iban (str | None)

  • pin (str | None)

Return type:

None

class kdbxtool.templates.Server(hostname=None, port='22', ssh_key=None)[source]

Bases: EntryTemplate

Server/SSH entry template.

Includes hostname, port, and SSH key fields. Uses standard username/password fields for credentials. SSH key is memory-protected.

Parameters:
  • hostname (str | None)

  • port (str)

  • ssh_key (str | None)

hostname: str | None = None
port: str = '22'
ssh_key: str | None = None
__init__(hostname=None, port='22', ssh_key=None)
Parameters:
  • hostname (str | None)

  • port (str)

  • ssh_key (str | None)

Return type:

None

class kdbxtool.templates.WirelessRouter(ssid=None, security_type='WPA2', admin_url=None, admin_username=None, admin_password=None)[source]

Bases: EntryTemplate

Wireless router entry template.

Includes SSID, security type, and admin credentials. Admin password is memory-protected.

Parameters:
  • ssid (str | None)

  • security_type (str)

  • admin_url (str | None)

  • admin_username (str | None)

  • admin_password (str | None)

ssid: str | None = None
security_type: str = 'WPA2'
admin_url: str | None = None
admin_username: str | None = None
admin_password: str | None = None
__init__(ssid=None, security_type='WPA2', admin_url=None, admin_username=None, admin_password=None)
Parameters:
  • ssid (str | None)

  • security_type (str)

  • admin_url (str | None)

  • admin_username (str | None)

  • admin_password (str | None)

Return type:

None

class kdbxtool.templates.Email(email_address=None, imap_server=None, imap_port='993', smtp_server=None, smtp_port='587')[source]

Bases: EntryTemplate

Email account entry template.

Includes email address and server settings. Uses standard username/password fields for credentials.

Parameters:
  • email_address (str | None)

  • imap_server (str | None)

  • imap_port (str)

  • smtp_server (str | None)

  • smtp_port (str)

email_address: str | None = None
imap_server: str | None = None
imap_port: str = '993'
smtp_server: str | None = None
smtp_port: str = '587'
__init__(email_address=None, imap_server=None, imap_port='993', smtp_server=None, smtp_port='587')
Parameters:
  • email_address (str | None)

  • imap_server (str | None)

  • imap_port (str)

  • smtp_server (str | None)

  • smtp_port (str)

Return type:

None

class kdbxtool.templates.SoftwareLicense(license_key=None, registered_email=None, registered_name=None, purchase_date=None, download_url=None)[source]

Bases: EntryTemplate

Software license entry template.

Includes license key and registration information. License key is memory-protected. Does not use standard username/password fields.

Parameters:
  • license_key (str | None)

  • registered_email (str | None)

  • registered_name (str | None)

  • purchase_date (str | None)

  • download_url (str | None)

license_key: str | None = None
registered_email: str | None = None
registered_name: str | None = None
purchase_date: str | None = None
download_url: str | None = None
__init__(license_key=None, registered_email=None, registered_name=None, purchase_date=None, download_url=None)
Parameters:
  • license_key (str | None)

  • registered_email (str | None)

  • registered_name (str | None)

  • purchase_date (str | None)

  • download_url (str | None)

Return type:

None

class kdbxtool.templates.DatabaseConnection(database_type='PostgreSQL', host=None, port='5432', database_name=None, connection_string=None)[source]

Bases: EntryTemplate

Database connection entry template.

Includes database type, host, port, and connection details. Connection string is memory-protected. Uses standard username/password fields for credentials.

Parameters:
  • database_type (str)

  • host (str | None)

  • port (str)

  • database_name (str | None)

  • connection_string (str | None)

database_type: str = 'PostgreSQL'
host: str | None = None
port: str = '5432'
database_name: str | None = None
connection_string: str | None = None
__init__(database_type='PostgreSQL', host=None, port='5432', database_name=None, connection_string=None)
Parameters:
  • database_type (str)

  • host (str | None)

  • port (str)

  • database_name (str | None)

  • connection_string (str | None)

Return type:

None

class kdbxtool.templates.Templates[source]

Bases: object

Namespace containing all built-in entry templates.

Provides discoverability via IDE autocompletion.

Usage:
>>> from kdbxtool import Templates
>>>
>>> entry = group.create_entry(
...     title="My Card",
...     template=Templates.CreditCard(
...         card_number="4111111111111111",
...         cvv="123",
...     ),
... )
Available templates:
  • Login: Standard login (username, password, url)

  • CreditCard: Card number, expiry, CVV, cardholder, PIN

  • SecureNote: Notes-only entry

  • Identity: Personal information (name, address, etc.)

  • BankAccount: Account and routing numbers

  • Server: Hostname, port, SSH key

  • WirelessRouter: SSID, security type, admin credentials

  • Email: Email address and server settings

  • SoftwareLicense: License key and registration info

  • Database: Database connection details

class Login

Bases: EntryTemplate

Standard login entry template.

Uses standard fields (title, username, password, url) without additional custom fields.

__init__()
Return type:

None

class CreditCard(card_number=None, expiry_date=None, cvv=None, cardholder_name=None, pin=None)

Bases: EntryTemplate

Credit card entry template.

Includes card number, expiry date, CVV, cardholder name, and PIN. Sensitive fields (card_number, cvv, pin) are memory-protected. Does not use standard username/password fields.

Parameters:
  • card_number (str | None)

  • expiry_date (str | None)

  • cvv (str | None)

  • cardholder_name (str | None)

  • pin (str | None)

__init__(card_number=None, expiry_date=None, cvv=None, cardholder_name=None, pin=None)
Parameters:
  • card_number (str | None)

  • expiry_date (str | None)

  • cvv (str | None)

  • cardholder_name (str | None)

  • pin (str | None)

Return type:

None

card_number: str | None = None
cardholder_name: str | None = None
cvv: str | None = None
expiry_date: str | None = None
pin: str | None = None
class SecureNote

Bases: EntryTemplate

Secure note entry template.

For storing text without standard credential fields. Use the notes parameter in create_entry() for content.

__init__()
Return type:

None

class Identity(first_name=None, last_name=None, email=None, phone=None, address=None, city=None, state=None, postal_code=None, country=None)

Bases: EntryTemplate

Identity/personal information entry template.

Includes name, contact, and address fields. Does not use standard username/password fields.

Parameters:
  • first_name (str | None)

  • last_name (str | None)

  • email (str | None)

  • phone (str | None)

  • address (str | None)

  • city (str | None)

  • state (str | None)

  • postal_code (str | None)

  • country (str | None)

__init__(first_name=None, last_name=None, email=None, phone=None, address=None, city=None, state=None, postal_code=None, country=None)
Parameters:
  • first_name (str | None)

  • last_name (str | None)

  • email (str | None)

  • phone (str | None)

  • address (str | None)

  • city (str | None)

  • state (str | None)

  • postal_code (str | None)

  • country (str | None)

Return type:

None

address: str | None = None
city: str | None = None
country: str | None = None
email: str | None = None
first_name: str | None = None
last_name: str | None = None
phone: str | None = None
postal_code: str | None = None
state: str | None = None
class BankAccount(bank_name=None, account_type=None, account_number=None, routing_number=None, swift_bic=None, iban=None, pin=None)

Bases: EntryTemplate

Bank account entry template.

Includes account details and routing information. Sensitive fields (account_number, iban, pin) are memory-protected. Does not use standard username/password fields.

Parameters:
  • bank_name (str | None)

  • account_type (str | None)

  • account_number (str | None)

  • routing_number (str | None)

  • swift_bic (str | None)

  • iban (str | None)

  • pin (str | None)

__init__(bank_name=None, account_type=None, account_number=None, routing_number=None, swift_bic=None, iban=None, pin=None)
Parameters:
  • bank_name (str | None)

  • account_type (str | None)

  • account_number (str | None)

  • routing_number (str | None)

  • swift_bic (str | None)

  • iban (str | None)

  • pin (str | None)

Return type:

None

account_number: str | None = None
account_type: str | None = None
bank_name: str | None = None
iban: str | None = None
pin: str | None = None
routing_number: str | None = None
swift_bic: str | None = None
class Server(hostname=None, port='22', ssh_key=None)

Bases: EntryTemplate

Server/SSH entry template.

Includes hostname, port, and SSH key fields. Uses standard username/password fields for credentials. SSH key is memory-protected.

Parameters:
  • hostname (str | None)

  • port (str)

  • ssh_key (str | None)

__init__(hostname=None, port='22', ssh_key=None)
Parameters:
  • hostname (str | None)

  • port (str)

  • ssh_key (str | None)

Return type:

None

hostname: str | None = None
port: str = '22'
ssh_key: str | None = None
class WirelessRouter(ssid=None, security_type='WPA2', admin_url=None, admin_username=None, admin_password=None)

Bases: EntryTemplate

Wireless router entry template.

Includes SSID, security type, and admin credentials. Admin password is memory-protected.

Parameters:
  • ssid (str | None)

  • security_type (str)

  • admin_url (str | None)

  • admin_username (str | None)

  • admin_password (str | None)

__init__(ssid=None, security_type='WPA2', admin_url=None, admin_username=None, admin_password=None)
Parameters:
  • ssid (str | None)

  • security_type (str)

  • admin_url (str | None)

  • admin_username (str | None)

  • admin_password (str | None)

Return type:

None

admin_password: str | None = None
admin_url: str | None = None
admin_username: str | None = None
security_type: str = 'WPA2'
ssid: str | None = None
class Email(email_address=None, imap_server=None, imap_port='993', smtp_server=None, smtp_port='587')

Bases: EntryTemplate

Email account entry template.

Includes email address and server settings. Uses standard username/password fields for credentials.

Parameters:
  • email_address (str | None)

  • imap_server (str | None)

  • imap_port (str)

  • smtp_server (str | None)

  • smtp_port (str)

__init__(email_address=None, imap_server=None, imap_port='993', smtp_server=None, smtp_port='587')
Parameters:
  • email_address (str | None)

  • imap_server (str | None)

  • imap_port (str)

  • smtp_server (str | None)

  • smtp_port (str)

Return type:

None

email_address: str | None = None
imap_port: str = '993'
imap_server: str | None = None
smtp_port: str = '587'
smtp_server: str | None = None
class SoftwareLicense(license_key=None, registered_email=None, registered_name=None, purchase_date=None, download_url=None)

Bases: EntryTemplate

Software license entry template.

Includes license key and registration information. License key is memory-protected. Does not use standard username/password fields.

Parameters:
  • license_key (str | None)

  • registered_email (str | None)

  • registered_name (str | None)

  • purchase_date (str | None)

  • download_url (str | None)

__init__(license_key=None, registered_email=None, registered_name=None, purchase_date=None, download_url=None)
Parameters:
  • license_key (str | None)

  • registered_email (str | None)

  • registered_name (str | None)

  • purchase_date (str | None)

  • download_url (str | None)

Return type:

None

download_url: str | None = None
license_key: str | None = None
purchase_date: str | None = None
registered_email: str | None = None
registered_name: str | None = None
Database

alias of DatabaseConnection