"""Shared TypedDicts for ISPConfig response shapes. We use ``TypedDict`` with ``total=False`` because SOAP returns dicts and the schema varies by ISPConfig version. This gives type hints without forcing runtime validation (no pydantic). Field values from the API are mostly strings (PHP stringifies DB output); callers that want integers should cast explicitly. """ from __future__ import annotations from typing import TypedDict class WebDomain(TypedDict, total=False): """Row from ``web_domain`` — returned by ``sites_web_domain_get``.""" domain_id: str sys_userid: str sys_groupid: str server_id: str ip_address: str ipv6_address: str domain: str type: str parent_domain_id: str vhost_type: str document_root: str system_user: str system_group: str hd_quota: str traffic_quota: str cgi: str ssi: str suexec: str php: str fastcgi_php_version: str server_php_id: str pm: str pm_max_children: str pm_start_servers: str pm_min_spare_servers: str pm_max_spare_servers: str ssl: str ssl_letsencrypt: str rewrite_to_https: str active: str class DnsZone(TypedDict, total=False): id: str sys_userid: str sys_groupid: str server_id: str origin: str ns: str mbox: str serial: str refresh: str retry: str expire: str minimum: str ttl: str active: str dnssec_wanted: str dnssec_initialized: str class DnsRr(TypedDict, total=False): id: str zone: str name: str type: str data: str aux: str ttl: str active: str class MailDomain(TypedDict, total=False): domain_id: str sys_groupid: str server_id: str domain: str dkim: str dkim_private: str dkim_public: str dkim_selector: str active: str class MailUser(TypedDict, total=False): mailuser_id: str sys_groupid: str server_id: str email: str login: str password: str name: str maildir: str quota: str cc: str homedir: str autoresponder: str postfix: str access: str disableimap: str disablepop3: str disablesmtp: str class MailForward(TypedDict, total=False): forwarding_id: str sys_groupid: str server_id: str source: str destination: str type: str active: str class Database(TypedDict, total=False): database_id: str sys_groupid: str server_id: str type: str database_name: str database_user_id: str database_ro_user_id: str database_charset: str remote_access: str remote_ips: str backup_copies: str active: str class DatabaseUser(TypedDict, total=False): database_user_id: str sys_groupid: str database_user: str database_password: str class Client(TypedDict, total=False): client_id: str sys_userid: str sys_groupid: str username: str contact_name: str company_name: str email: str customer_no: str limit_web_domain: str limit_mail_domain: str limit_database: str