session
session
Async HTTP session management for ETM API.
Classes
ScenarioError
Bases: Exception
Base scenario error
Session
Bases: Base
Pydantic model for an ETM Scenario, matching the DB schema,
but with only id required so it can be used for API runners.
Source code in src/pyetm/models/base.py
Attributes
preset_scenario_id
property
Backward-compatible property for template_id (API field name).
Functions
new
classmethod
Create a new scenario with the specified parameters.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
area_code
|
str | None
|
Area code for the scenario (optional if template_id is provided) |
None
|
end_year
|
int | None
|
End year for the scenario (optional if template_id is provided) |
None
|
client
|
Optional[BaseClient]
|
Optional BaseClient instance for API communication |
None
|
**kwargs
|
Any
|
Additional parameters including: - template_id: Session ID to use as template - private, keep_compatible, source, title, metadata, start_year, scaling, url |
{}
|
Returns:
| Type | Description |
|---|---|
'Session'
|
A new Scenario instance |
Source code in src/pyetm/models/session.py
load
classmethod
Fetch metadata for scenario_id, return a Scenario (with warnings if any keys missing).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scenario_id
|
int
|
ETEngine session ID to load |
required |
client
|
Optional[BaseClient]
|
Optional BaseClient instance for API communication |
None
|
Source code in src/pyetm/models/session.py
copy_with_preset
Create a copy of this scenario using ETEngine's copy utility. The copied scenario will have its template field set to this scenario's ID.
Source code in src/pyetm/models/session.py
copy
Create a copy with no template link to the original scenario.
Source code in src/pyetm/models/session.py
interpolate
classmethod
Interpolate one or more sessions to create scenarios at target years.
Source code in src/pyetm/models/session.py
from_excel
classmethod
Load a single scenario from Excel.
Source code in src/pyetm/models/session.py
to_excel
Export this scenario to Excel.
Source code in src/pyetm/models/session.py
collect_export_data
Collect export data in format-agnostic structure.
Source code in src/pyetm/models/session.py
save
Save this scenario to MyETM as a SavedScenario.
Note
Requires authentication via ETM_API_TOKEN environment variable. SavedScenarios are persisted in MyETM and associated with your user account.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
client
|
Optional[BaseClient]
|
Optional BaseClient instance (defaults to global client) |
None
|
title
|
Optional[str]
|
Title for the saved scenario (defaults to self.title) |
None
|
**kwargs
|
Any
|
Additional parameters (e.g., private, description) |
{}
|
Returns:
| Type | Description |
|---|---|
Any
|
SavedScenario instance |
Raises:
| Type | Description |
|---|---|
PermissionError
|
If ETM_API_TOKEN is not configured |
ScenarioError
|
If title is not provided |
Source code in src/pyetm/models/session.py
update_metadata
Update metadata for this scenario.
Source code in src/pyetm/models/session.py
set_short_name
Set the short_name attribute and persist in metadata.
Source code in src/pyetm/models/session.py
user_values
set_user_values_from_dataframe
Extract df to dict, set None/NaN sliders to reset, and call update_inputs. This ensures the dataframe exactly represents the inputs.
Source code in src/pyetm/models/session.py
update_user_values
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
update_inputs
|
Dict[str, Any]
|
Dictionary of input key-value pairs to update |
required |
skip_upload
|
bool
|
If True, skip API call and validation, only update local cache |
False
|
Source code in src/pyetm/models/session.py
remove_user_values
Remove user values for specified inputs, resetting them to default values.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
input_keys
|
Union[List[str], Set[str]]
|
List or set of input keys to reset to default values |
required |
Source code in src/pyetm/models/session.py
set_sortables_from_dataframe
Extract sortables from dataframe and update them. The dataframe should have sortable names as columns and orders as rows.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dataframe
|
DataFrame
|
DataFrame with sortable names as columns and order values as rows |
required |
skip_upload
|
bool
|
If True, skip API call and validation, only update local cache |
False
|
Source code in src/pyetm/models/session.py
update_sortables
Update the order of specified sortables.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
update_sortables
|
Dict[str, List[Any]]
|
Dictionary mapping sortable names to their new orders |
required |
skip_upload
|
bool
|
If True, skip API calls and validation, only update local cache |
False
|
Source code in src/pyetm/models/session.py
remove_sortables
Reset specified sortables to their default/empty orders.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sortable_names
|
Union[List[str], Set[str]]
|
List or set of sortable names to reset |
required |
Source code in src/pyetm/models/session.py
custom_curves_series
update_custom_curves
Upload/update custom curves for this scenario.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
custom_curves
|
Any
|
CustomCurves object containing curves to upload |
required |
skip_upload
|
bool
|
If True, skip API call and validation, only update local cache |
False
|
Source code in src/pyetm/models/session.py
remove_custom_curves
Remove custom curves from this scenario.
Deletes curves from the ETM API and removes them from the local collection. Local cache files are automatically cleared.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
curve_keys
|
Union[List[str], Set[str]]
|
List or set of curve keys to remove |
required |
Raises:
| Type | Description |
|---|---|
ScenarioError
|
If API deletion fails |
Example
session.remove_custom_curves(["weather/solar_pv", "weather/wind"])
Source code in src/pyetm/models/session.py
get_hourly_curve
Get a single hourly output curve by name or carrier type alias.
Carrier types ('electricity', 'heat', 'hydrogen', 'methane') are treated as convenient aliases for their primary curves.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
identifier
|
str
|
Curve name (e.g., 'merit_order') or carrier type alias |
required |
Returns:
| Type | Description |
|---|---|
Optional[DataFrame]
|
DataFrame with hourly data, or None if not found |
Examples:
>>> session.get_hourly_curve("merit_order") # by name
>>> session.get_hourly_curve("electricity") # by carrier alias
Source code in src/pyetm/models/session.py
get_hourly_curves
Get multiple hourly output curves by names or carrier type aliases.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
identifiers
|
list[str]
|
List of curve names and/or carrier type aliases |
required |
Returns:
| Type | Description |
|---|---|
dict[str, DataFrame]
|
Dictionary mapping curve names to DataFrames |
Examples:
>>> session.get_hourly_curves(["electricity", "heat"])
{'merit_order': DataFrame, 'heat_network': DataFrame}
>>> session.get_hourly_curves(["merit_order", "electricity_price"])
{'merit_order': DataFrame, 'electricity_price': DataFrame}
Source code in src/pyetm/models/session.py
all_hourly_output_curves
clear_hourly_curves_cache
Clear all hourly output curves cache files and LRU cache.
Returns:
| Type | Description |
|---|---|
int
|
Number of files successfully removed |
clear_custom_curves_cache
Clear all custom curves cache files.
Returns:
| Type | Description |
|---|---|
int
|
Number of files successfully removed |
clear_all_curve_caches
Clear all curve caches (hourly output curves and custom curves).
Returns:
| Type | Description |
|---|---|
tuple[int, int]
|
Tuple of (hourly_curves_removed, custom_curves_removed) |
Source code in src/pyetm/models/session.py
clear_session_cache
Clear entire session temp directory (all cached files).
This removes all cached files for this session and clears all associated in-memory caches.
Source code in src/pyetm/models/session.py
get_annual_export
get_annual_exports
Get multiple annual exports by name.
Source code in src/pyetm/models/session.py
remove_queries
Remove specific queries from the session.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query_keys
|
str
|
Query keys to remove from the collection |
()
|
Source code in src/pyetm/models/session.py
clear_queries
execute_queries
Queries are executed explicitly, as we need to know when the user is ready collecting all of them
Source code in src/pyetm/models/session.py
results
Returns the results of the requested queries in a dataframe
Source code in src/pyetm/models/session.py
queries_requested
show_all_warnings
Display all warnings from the scenario and its submodels in a organized way.
Source code in src/pyetm/models/session.py
list_users
Fetch all users with access to this scenario.
Source code in src/pyetm/models/session.py
update_users
Add, update, or remove a user's access to this scenario. - skip_upload: If True, store data locally without uploading (can be applied later)
Source code in src/pyetm/models/session.py
apply_pending_users
Apply all pending user updates that were loaded with skip_upload=True.
Source code in src/pyetm/models/session.py
delete
Permanently delete this ETEngine scenario/session (hard delete).
WARNING: This is a permanent deletion and cannot be undone. The scenario and all its data will be permanently removed from ETEngine.
This method should be used when you want to delete a temporary/ephemeral session that is not saved in MyETM. If this session is associated with a SavedScenario, use Scenario.delete() instead to ensure both are deleted.
Raises:
| Type | Description |
|---|---|
ScenarioError
|
If the deletion fails |
Example
session = Session.new(area_code="nl2023", end_year=2050) session.delete()