devctrl.utility.email.SmtpSettings#

class SmtpSettings(host: str = 'smtp.example.com', port: int = 587, username: str = '', password: str = '', use_tls: bool = True, sender_email: str = 'sender@example.com', sender_name: str | None = None)[source]#

Bases: SettingsClass

Configuration for sending emails via SMTP.

Methods

as_dict

Convenience wrapper for dataclasses.asdict(self)

from_dict

Recursively construct a SettingsClass from a dictionary.

load_yaml

save_yaml

Attributes

__annotations__ = {'host': <class 'str'>, 'password': <class 'str'>, 'port': <class 'int'>, 'sender_email': <class 'str'>, 'sender_name': typing.Optional[str], 'use_tls': <class 'bool'>, 'username': <class 'str'>}#
__dataclass_fields__ = {'host': Field(name='host',type=<class 'str'>,default='smtp.example.com',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP server hostname or IP address.'}),kw_only=False,_field_type=_FIELD), 'password': Field(name='password',type=<class 'str'>,default='',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP password for authentication.'}),kw_only=False,_field_type=_FIELD), 'port': Field(name='port',type=<class 'int'>,default=587,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP server port number.'}),kw_only=False,_field_type=_FIELD), 'sender_email': Field(name='sender_email',type=<class 'str'>,default='sender@example.com',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Email address used as the sender.'}),kw_only=False,_field_type=_FIELD), 'sender_name': Field(name='sender_name',type=typing.Optional[str],default=None,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Optional sender name. If None, the email address will be used.'}),kw_only=False,_field_type=_FIELD), 'use_tls': Field(name='use_tls',type=<class 'bool'>,default=True,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Whether to use TLS for the connection.'}),kw_only=False,_field_type=_FIELD), 'username': Field(name='username',type=<class 'str'>,default='',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP username for authentication.'}),kw_only=False,_field_type=_FIELD)}#
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)#
__dict__ = mappingproxy({'__module__': 'devctrl.utility.email', '__firstlineno__': 11, '__annotations__': {'host': <class 'str'>, 'port': <class 'int'>, 'username': <class 'str'>, 'password': <class 'str'>, 'use_tls': <class 'bool'>, 'sender_email': <class 'str'>, 'sender_name': typing.Optional[str]}, '__doc__': 'Configuration for sending emails via SMTP.', 'host': 'smtp.example.com', 'port': 587, 'username': '', 'password': '', 'use_tls': True, 'sender_email': 'sender@example.com', 'sender_name': None, '__static_attributes__': (), '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__dataclass_fields__': {'host': Field(name='host',type=<class 'str'>,default='smtp.example.com',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP server hostname or IP address.'}),kw_only=False,_field_type=_FIELD), 'port': Field(name='port',type=<class 'int'>,default=587,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP server port number.'}),kw_only=False,_field_type=_FIELD), 'username': Field(name='username',type=<class 'str'>,default='',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP username for authentication.'}),kw_only=False,_field_type=_FIELD), 'password': Field(name='password',type=<class 'str'>,default='',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'SMTP password for authentication.'}),kw_only=False,_field_type=_FIELD), 'use_tls': Field(name='use_tls',type=<class 'bool'>,default=True,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Whether to use TLS for the connection.'}),kw_only=False,_field_type=_FIELD), 'sender_email': Field(name='sender_email',type=<class 'str'>,default='sender@example.com',default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Email address used as the sender.'}),kw_only=False,_field_type=_FIELD), 'sender_name': Field(name='sender_name',type=typing.Optional[str],default=None,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({'doc': 'Optional sender name. If None, the email address will be used.'}),kw_only=False,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function SmtpSettings.__init__>, '__repr__': <function SmtpSettings.__repr__>, '__eq__': <function SmtpSettings.__eq__>, '__match_args__': ('host', 'port', 'username', 'password', 'use_tls', 'sender_email', 'sender_name')})#
__eq__(other)#

Return self==value.

__firstlineno__ = 11#
__hash__ = None#
__init__(host: str = 'smtp.example.com', port: int = 587, username: str = '', password: str = '', use_tls: bool = True, sender_email: str = 'sender@example.com', sender_name: str | None = None) None#
__match_args__ = ('host', 'port', 'username', 'password', 'use_tls', 'sender_email', 'sender_name')#
__module__ = 'devctrl.utility.email'#
__or__(other)#

Merge with another settings class or a dictionary.

__replace__(**changes)#
__repr__()#

Return repr(self).

__static_attributes__ = ()#
__weakref__#

list of weak references to the object

as_dict() dict#

Convenience wrapper for dataclasses.asdict(self)

classmethod from_dict(data: dict)#

Recursively construct a SettingsClass from a dictionary.

If the value of a field is another SettingsClass, from_dict() will be called for that field as well. Handled are:

  • SettingsClass

  • list[SettingsClass]

  • dict[<any>, SettingsClass]

  • all of the above as Optional (Union with None)

  • a Union with any handled types

Raises:
  • ValueError – If data contains a value that has the wrong type for the field of cls (ONLY if the type is a subclass of SettingsClass! Other types are not enforced)

  • KeyError – If data contains a key that is not a field name of cls

host: str = 'smtp.example.com'#
classmethod load_yaml(yaml_path: str, loader=<class 'yaml.loader.Loader'>)#
password: str = ''#
port: int = 587#
save_yaml(yaml_path: str)#
sender_email: str = 'sender@example.com'#
sender_name: str | None = None#
use_tls: bool = True#
username: str = ''#