Bases: Packable
InputsPack handles the import, export, and management of scenario input values,
including support for scenario short names, flexible scenario resolution,
and comprehensive data validation.
Features
- Optional inclusion of default values and min/max ranges
- Multi-level column headers for organized data export
- Proper handling of list/tuple values in Excel export
- Comprehensive error handling with detailed logging
add_to_workbook(workbook, sheet_name='SLIDER_SETTINGS', **kwargs)
Add inputs sheet with proper field handling. Optionally override sheet name.
Source code in src/pyetm/models/packables/inputs_pack.py
| def add_to_workbook(
self,
workbook: Any,
sheet_name: Optional[str] = "SLIDER_SETTINGS",
**kwargs: Any,
) -> None:
"""Add inputs sheet with proper field handling. Optionally override sheet name."""
# Extract our specific parameters from kwargs
include_defaults = kwargs.get("include_defaults", False)
include_min_max = kwargs.get("include_min_max", False)
name = sheet_name or "SLIDER_SETTINGS"
df = self.to_dataframe(
include_defaults=include_defaults, include_min_max=include_min_max
)
if df is not None and not df.empty:
df = df.map(
lambda v: (
", ".join(map(str, v)) if isinstance(v, (list, tuple, set)) else v
)
)
self._add_dataframe_to_workbook(workbook, name, df)
|
from_dataframe(df, update_set=None)
Import input values from DataFrame.
Source code in src/pyetm/models/packables/inputs_pack.py
| def from_dataframe(self, df: Any, update_set: Optional[set[str]] = None) -> None:
"""Import input values from DataFrame."""
if df is None or getattr(df, "empty", False):
return
skip_upload = not self._should_include_upload(update_set or set())
try:
# Extract grid data using base class helper
data_df = self._extract_grid_data(df)
if data_df is None:
return
# Prepare grid data using base class helper
data_df, input_keys, scenario_columns = self._prepare_grid_data(data_df)
for column_name in scenario_columns:
# Resolve scenario with automatic warning
scenario = self._resolve_scenario_with_warning(
column_name, "SLIDER_SETTINGS sheet"
)
if scenario is None:
continue
raw_updates = data_df[column_name].dropna().to_dict()
if not raw_updates:
continue
try:
scenario.update_user_values(raw_updates, skip_upload=skip_upload)
except Exception as e:
logger.warning(
"Failed updating inputs for scenario '%s' from column '%s': %s",
scenario.identifier(),
column_name,
e,
)
finally:
self.log_scenario_warnings(scenario, "_inputs", "Inputs")
except Exception as e:
logger.warning("Failed to parse SLIDER_SETTINGS sheet: %s", e)
|