Configuration¶
This module provides configuration classes using Pydantic for validation and environment variable support.
PIConfig¶
- class pipolars.PIConfig[source]¶
Bases:
BaseSettingsMain configuration class for PIPolars library.
This class aggregates all configuration sections and provides a unified interface for configuration management.
Example
>>> config = PIConfig( ... server=PIServerConfig(host="my-pi-server"), ... cache=CacheConfig(backend=CacheBackend.SQLITE), ... ) >>> client = PIClient(config=config)
The main configuration class that aggregates all settings.
Class Methods
- to_dict()[source]¶
Convert configuration to a dictionary.
Sensitive fields like passwords are masked.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': '__', 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'PIPOLARS_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- server: PIServerConfig¶
- af: AFServerConfig¶
- cache: CacheConfig¶
- query: QueryConfig¶
- polars: PolarsConfig¶
Usage:
from pipolars import PIConfig
from pipolars.core.config import PIServerConfig, CacheConfig, CacheBackend
# Programmatic configuration
config = PIConfig(
server=PIServerConfig(host="my-pi-server"),
cache=CacheConfig(backend=CacheBackend.SQLITE),
debug=True,
)
# From file
config = PIConfig.from_file("pipolars.toml")
PIServerConfig¶
- class pipolars.core.config.PIServerConfig[source]¶
Bases:
BaseSettingsConfiguration for PI Data Archive connection.
- auth_method¶
Authentication method to use
- Type:
- password¶
Password for explicit authentication
- Type:
SecretStr | None
Configuration for PI Data Archive connection.
- auth_method: AuthMethod = AuthMethod.WINDOWS¶
Authentication method.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'PI_SERVER_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- auth_method: AuthMethod¶
Environment variables:
PI_SERVER_HOST=my-pi-server
PI_SERVER_PORT=5450
PI_SERVER_TIMEOUT=30
PI_SERVER_AUTH_METHOD=windows
AFServerConfig¶
- class pipolars.core.config.AFServerConfig[source]¶
Bases:
BaseSettingsConfiguration for AF Server connection.
Configuration for AF Server connection.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'AF_SERVER_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Environment variables:
AF_SERVER_HOST=my-af-server
AF_SERVER_DATABASE=MyDatabase
CacheConfig¶
- class pipolars.core.config.CacheConfig[source]¶
Bases:
BaseSettingsConfiguration for data caching.
- backend¶
Cache storage backend to use
- Type:
- path¶
Path for file-based cache backends
- Type:
Path
Configuration for data caching.
- backend: CacheBackend = CacheBackend.NONE¶
Cache storage backend.
- path: Path = ~/.pipolars/cache¶
Path for file-based cache backends.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'PIPOLARS_CACHE_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- backend: CacheBackend¶
- path: Path¶
Environment variables:
PIPOLARS_CACHE_BACKEND=sqlite
PIPOLARS_CACHE_PATH=~/.pipolars/cache
PIPOLARS_CACHE_MAX_SIZE_MB=1024
PIPOLARS_CACHE_TTL_HOURS=24
QueryConfig¶
- class pipolars.core.config.QueryConfig[source]¶
Bases:
BaseSettingsConfiguration for PI queries.
Configuration for PI queries.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'PIPOLARS_QUERY_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Environment variables:
PIPOLARS_QUERY_MAX_POINTS_PER_QUERY=1000
PIPOLARS_QUERY_PARALLEL_REQUESTS=4
PolarsConfig¶
- class pipolars.core.config.PolarsConfig[source]¶
Bases:
BaseSettingsConfiguration for Polars DataFrame output.
Configuration for Polars DataFrame output.
- model_config = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'PIPOLARS_POLARS_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Environment variables:
PIPOLARS_POLARS_TIMEZONE=America/New_York
PIPOLARS_POLARS_INCLUDE_QUALITY=true
Enumerations¶
AuthMethod¶
- class pipolars.core.config.AuthMethod[source]¶
-
Authentication methods for PI System connection.
Authentication methods for PI System connection.
- WINDOWS = "windows"¶
Use Windows integrated authentication (NTLM/Kerberos).
- EXPLICIT = "explicit"¶
Use explicit username/password authentication.
- WINDOWS = 'windows'¶
Use Windows integrated authentication (NTLM/Kerberos).
- EXPLICIT = 'explicit'¶
Use explicit username/password authentication.
- __new__(value)¶
CacheBackend¶
- class pipolars.core.config.CacheBackend[source]¶
-
Cache storage backends.
Cache storage backends.
- NONE = "none"¶
No caching.
- MEMORY = "memory"¶
In-memory cache (lost on restart).
- SQLITE = "sqlite"¶
SQLite database cache.
- ARROW = "arrow"¶
Apache Arrow IPC file cache.
- NONE = 'none'¶
No caching.
- MEMORY = 'memory'¶
In-memory cache (lost on restart).
- SQLITE = 'sqlite'¶
SQLite database cache.
- ARROW = 'arrow'¶
Apache Arrow IPC file cache.
- __new__(value)¶
Configuration File Format¶
TOML Format¶
[server]
host = "my-pi-server"
port = 5450
timeout = 30
auth_method = "windows"
[af]
database = "MyDatabase"
[cache]
backend = "sqlite"
max_size_mb = 1024
ttl_hours = 24
[query]
parallel_requests = 4
retry_attempts = 3
[polars]
timezone = "UTC"
debug = false
log_level = "INFO"
JSON Format¶
{
"server": {
"host": "my-pi-server",
"port": 5450
},
"cache": {
"backend": "sqlite"
},
"debug": false
}
See Also¶
Configuration - Configuration guide
Caching - Caching guide