Settings

Configuration settings for the application.

class HostSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, host: str = 'localhost', port: int = 8009, root_path: str = '', access_log: bool = False, reload: bool = False, workers: int = 4)[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'visiomatic_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'access_log': FieldInfo(annotation=bool, required=False, default=False, description='Display access log', json_schema_extra={'short': 'a'}), 'host': FieldInfo(annotation=str, required=False, default='localhost', description='Host name or IP address', json_schema_extra={'short': 'H'}), 'port': FieldInfo(annotation=int, required=False, default=8009, description='Port', json_schema_extra={'short': 'p'}, metadata=[Ge(ge=1), Le(le=65535)]), 'reload': FieldInfo(annotation=bool, required=False, default=False, description='Enable auto-reload (turns off multiple workers)', json_schema_extra={'short': 'r'}), 'root_path': FieldInfo(annotation=str, required=False, default='', description='ASGI root_path', json_schema_extra={'short': 'R'}), 'workers': FieldInfo(annotation=int, required=False, default=4, description='Number of workers', json_schema_extra={'short': 'w'}, metadata=[Ge(ge=1)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class ImageSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, brightness: float = 0.0, contrast: float = 1.0, color_saturation: float = 1.5, gamma: float = 2.2, quality: int = 95, tile_size: Tuple[int, int] = (256, 256))[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'visiomatic_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'brightness': FieldInfo(annotation=float, required=False, default=0.0, description='Default image brightness', json_schema_extra={'short': None}, metadata=[Ge(ge=-100.0), Le(le=100.0)]), 'color_saturation': FieldInfo(annotation=float, required=False, default=1.5, description='Default color saturation', json_schema_extra={'short': None}, metadata=[Ge(ge=0.0), Le(le=5.0)]), 'contrast': FieldInfo(annotation=float, required=False, default=1.0, description='Default image contrast', json_schema_extra={'short': None}, metadata=[Ge(ge=0.0), Le(le=100.0)]), 'gamma': FieldInfo(annotation=float, required=False, default=2.2, description='Default image gamma', json_schema_extra={'short': None}, metadata=[Ge(ge=0.2), Le(le=5.0)]), 'quality': FieldInfo(annotation=int, required=False, default=95, description='Default image compression quality in %%', json_schema_extra={'short': None}, metadata=[Ge(ge=1), Le(le=100)]), 'tile_size': FieldInfo(annotation=Tuple[int, int], required=False, default=(256, 256), description='Tile size', json_schema_extra={'short': None}, metadata=[Ge(ge=(1, 1)), Le(le=(4096, 4096))])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class ServerSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, api_path: str = '/api', banner_template: str = 'banner.html', base_template: str = 'base.html', client_dir: str = '/home/bertin/sources/visiomatic/src/visiomatic/client', data_dir: str = '.', doc_dir: str = '/home/bertin/sources/visiomatic/src/visiomatic/doc/html', doc_path: str = '/manual', extra_dir: str = '.', max_region_tile_count: int = 1024, no_browser: bool = False, template_dir: str = '/home/bertin/sources/visiomatic/src/visiomatic/templates', userdoc_url: str = '/manual/interface.html')[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'visiomatic_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'api_path': FieldInfo(annotation=str, required=False, default='/api', description='Endpoint URL for the webservice API', json_schema_extra={'short': None}), 'banner_template': FieldInfo(annotation=str, required=False, default='banner.html', description='Name of the HTML template file for the service banner', json_schema_extra={'short': None}), 'base_template': FieldInfo(annotation=str, required=False, default='base.html', description='Name of the HTML template file for the web client', json_schema_extra={'short': None}), 'client_dir': FieldInfo(annotation=str, required=False, default='/home/bertin/sources/visiomatic/src/visiomatic/client', description='Directory containing the web client code, style and media', json_schema_extra={'short': None}), 'data_dir': FieldInfo(annotation=str, required=False, default='.', description='Data root directory', json_schema_extra={'short': None}), 'doc_dir': FieldInfo(annotation=str, required=False, default='/home/bertin/sources/visiomatic/src/visiomatic/doc/html', description='HTML documentation root directory (after build)', json_schema_extra={'short': None}), 'doc_path': FieldInfo(annotation=str, required=False, default='/manual', description='Endpoint URL for the root of the HTML documentation', json_schema_extra={'short': None}), 'extra_dir': FieldInfo(annotation=str, required=False, default='.', description='Extra data root directory', json_schema_extra={'short': None}), 'max_region_tile_count': FieldInfo(annotation=int, required=False, default=1024, description='Maximum number of image tiles per snapshot', json_schema_extra={'short': None}, metadata=[Ge(ge=1)]), 'no_browser': FieldInfo(annotation=bool, required=False, default=False, description='Do not start browser when providing image file', json_schema_extra={'short': 'n'}), 'template_dir': FieldInfo(annotation=str, required=False, default='/home/bertin/sources/visiomatic/src/visiomatic/templates', description='Directory containing templates', json_schema_extra={'short': None}), 'userdoc_url': FieldInfo(annotation=str, required=False, default='/manual/interface.html', description="Endpoint URL for the user's HTML documentation", json_schema_extra={'short': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class EngineSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, thread_count: int = 16)[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'visiomatic_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'thread_count': FieldInfo(annotation=int, required=False, default=16, description='Number of engine threads', json_schema_extra={'short': 't'}, metadata=[Ge(ge=1), Le(le=1024)])}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class CacheSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, cache_dir: str = '/home/bertin/.cache/visiomatic', clear_cache: bool = False, max_cache_image_count: int = 100, max_cache_tile_count: int = 1000, max_open_files: int = 10000, ultradict_cache_file: str = '/dev/shm/visiomatic_cache_dict.pkl')[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'visiomatic_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'cache_dir': FieldInfo(annotation=str, required=False, default='/home/bertin/.cache/visiomatic', description='Image cache directory', json_schema_extra={'short': None}), 'clear_cache': FieldInfo(annotation=bool, required=False, default=False, description='Clear image cache on startup', json_schema_extra={'short': 'C'}), 'max_cache_image_count': FieldInfo(annotation=int, required=False, default=100, description='Maximum number of images in disk cache', json_schema_extra={'short': None}, metadata=[Ge(ge=1)]), 'max_cache_tile_count': FieldInfo(annotation=int, required=False, default=1000, description='Maximum number of image tiles in memory cache', json_schema_extra={'short': None}, metadata=[Ge(ge=1)]), 'max_open_files': FieldInfo(annotation=int, required=False, default=10000, description='Maximum number of open files', json_schema_extra={'short': None}, metadata=[Ge(ge=100), Le(le=1000000)]), 'ultradict_cache_file': FieldInfo(annotation=str, required=False, default='/dev/shm/visiomatic_cache_dict.pkl', description='Name of the pickled cache dictionary shared across processes', json_schema_extra={'short': None})}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class AppSettings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_prefix: str | None = None, _secrets_dir: str | Path | None = None, *, host: BaseSettings = HostSettings(host='localhost', port=8009, root_path='', access_log=False, reload=False, workers=4), image: BaseSettings = ImageSettings(brightness=0.0, contrast=1.0, color_saturation=1.5, gamma=2.2, quality=95, tile_size=(256, 256)), server: BaseSettings = ServerSettings(api_path='/api', banner_template='banner.html', base_template='base.html', client_dir='/home/bertin/sources/visiomatic/src/visiomatic/client', data_dir='.', doc_dir='/home/bertin/sources/visiomatic/src/visiomatic/doc/html', doc_path='/manual', extra_dir='.', max_region_tile_count=1024, no_browser=False, template_dir='/home/bertin/sources/visiomatic/src/visiomatic/templates', userdoc_url='/manual/interface.html'), engine: BaseSettings = EngineSettings(thread_count=16), cache: BaseSettings = CacheSettings(cache_dir='/home/bertin/.cache/visiomatic', clear_cache=False, max_cache_image_count=100, max_cache_tile_count=1000, max_open_files=10000, ultradict_cache_file='/dev/shm/visiomatic_cache_dict.pkl'))[source]

Bases: BaseSettings

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_hide_none_type': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_settings_source': None, 'cli_use_class_docs_for_groups': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': '', 'extra': 'forbid', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'cache': FieldInfo(annotation=BaseSettings, required=False, default=CacheSettings(cache_dir='/home/bertin/.cache/visiomatic', clear_cache=False, max_cache_image_count=100, max_cache_tile_count=1000, max_open_files=10000, ultradict_cache_file='/dev/shm/visiomatic_cache_dict.pkl')), 'engine': FieldInfo(annotation=BaseSettings, required=False, default=EngineSettings(thread_count=16)), 'host': FieldInfo(annotation=BaseSettings, required=False, default=HostSettings(host='localhost', port=8009, root_path='', access_log=False, reload=False, workers=4)), 'image': FieldInfo(annotation=BaseSettings, required=False, default=ImageSettings(brightness=0.0, contrast=1.0, color_saturation=1.5, gamma=2.2, quality=95, tile_size=(256, 256))), 'server': FieldInfo(annotation=BaseSettings, required=False, default=ServerSettings(api_path='/api', banner_template='banner.html', base_template='base.html', client_dir='/home/bertin/sources/visiomatic/src/visiomatic/client', data_dir='.', doc_dir='/home/bertin/sources/visiomatic/src/visiomatic/doc/html', doc_path='/manual', extra_dir='.', max_region_tile_count=1024, no_browser=False, template_dir='/home/bertin/sources/visiomatic/src/visiomatic/templates', userdoc_url='/manual/interface.html'))}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.