Skip to content

Commit

Permalink
Allow DTM Providers to change Advanced Settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
iwatkot committed Feb 13, 2025
1 parent 4b9e706 commit e5bf543
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 8 deletions.
19 changes: 18 additions & 1 deletion maps4fs/generator/dtm/dtm.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import os
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, Type
from typing import TYPE_CHECKING, Any, Type
from zipfile import ZipFile

import numpy as np
Expand Down Expand Up @@ -53,6 +53,14 @@ class DTMProvider(ABC):

_base_instructions = None

# AdvancedSettings that should be changed by the DTM Provider if it's selected.
# * This feature has effect only in the WebUI of the app and ignored in Python package.
# The first level of the dictionary is a category name,
# for example: TextureSettings, DEMSettings, etc.
# The second level is a name of particular setting in the category.
# Example: {"DEMSettings": {"blur_radius": 35}}
_default_settings: dict[str, dict[str, Any]] = {}

def __init__(
self,
coordinates: tuple[float, float],
Expand All @@ -74,6 +82,15 @@ def __init__(
self.logger = logger
self.map = map

@classmethod
def default_settings(cls) -> dict[str, dict[str, Any]]:
"""Default settings of the provider.
Returns:
dict: Default settings of the provider.
"""
return cls._default_settings

@classmethod
def name(cls) -> str | None:
"""Name of the provider.
Expand Down
4 changes: 3 additions & 1 deletion maps4fs/generator/dtm/srtm.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ class SRTM30Provider(DTMProvider):

_author = "[iwatkot](https://github.com/iwatkot)"

_instructions = "ℹ️ Recommended settings: \nDEM Settings -> Blur Radius: **35**"
# _instructions = "ℹ️ Recommended settings: \nDEM Settings -> Blur Radius: **35**"

_default_settings = {"DEMSettings": {"blur_radius": 35}}

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Expand Down
8 changes: 6 additions & 2 deletions maps4fs/generator/statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

STATS_HOST = os.getenv("STATS_HOST")
if not STATS_HOST:
print("STATS_HOST not set in environment")
logger.warning("STATS_HOST not set in environment")
API_TOKEN = os.getenv("API_TOKEN")
if not API_TOKEN:
print("API_TOKEN not set in environment")
logger.warning("API_TOKEN not set in environment")


def send_settings(endpoint: str, data: dict[str, Any]) -> None:
Expand All @@ -31,6 +31,10 @@ def send_settings(endpoint: str, data: dict[str, Any]) -> None:
endpoint (str): The endpoint to send the settings to.
data (dict[str, Any]): The settings to send.
"""
if not STATS_HOST or not API_TOKEN:
logger.info("STATS_HOST or API_TOKEN not set in environment, can't send settings.")
return

headers = {"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}
response = requests.post(endpoint, headers=headers, json=data, timeout=10)
if response.status_code != 200:
Expand Down
13 changes: 10 additions & 3 deletions webui/generator/advanced_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
class AdvancedSettings(BaseComponent):
def __init__(self, public: bool, **kwargs):
super().__init__(public, **kwargs)
dtm_provider = mfs.DTMProvider.get_provider_by_code(kwargs.get("dtm_provider_code"))
self.provider_default_settings = dtm_provider.default_settings() if dtm_provider else {}
self.get_settings()

def get_settings(self):
Expand All @@ -16,16 +18,21 @@ def get_settings(self):
for model in map_settings:
raw_category_name = model.__class__.__name__
category_name = raw_category_name.replace("Settings", " Settings")
default_category_settings = self.provider_default_settings.get(raw_category_name, {})

category = {}
with st.expander(category_name, expanded=False):
for raw_field_name, field_value in model.__dict__.items():
default_value = default_category_settings.get(raw_field_name)
if default_value is not None:
field_value = default_value
field_name = self.snake_to_human(raw_field_name)
disabled = self.is_disabled_on_public(raw_field_name)
st.write(getattr(Settings, raw_field_name.upper()))
widget = self._create_widget(
"main", field_name, raw_field_name, field_value, disabled
)
with st.empty():
widget = self._create_widget(
"main", field_name, raw_field_name, field_value, disabled
)

category[raw_field_name] = widget

Expand Down
4 changes: 3 additions & 1 deletion webui/generator/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ def add_left_widgets(self) -> None:
self.public, html_preview_container=self.html_preview_container
)

self.advanced_settings = AdvancedSettings(self.public)
self.advanced_settings = AdvancedSettings(
self.public, dtm_provider_code=self.main_settings.dtm_provider_code
)
self.expert_settings = ExpertSettings(
self.public,
game_code=self.main_settings.game_code,
Expand Down

0 comments on commit e5bf543

Please sign in to comment.