mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-11-04 08:46:20 +00:00 
			
		
		
		
	Reasonable defaults, isolate tests, EOS_LOGGING_LEVEL, EOS_CONFIG_DIR
* Add EOS_CONFIG_DIR to set config dir (relative path to EOS_DIR or
   absolute path).
    - config_folder_path read-only
    - config_file_path read-only
 * Default values to support app start with empty config:
    - latitude/longitude (Berlin)
    - optimization_ev_available_charge_rates_percent (null, so model
      default value is used)
    - Enable Akkudoktor electricity price forecast (docker-compose).
 * Fix some endpoints (empty data, remove unused params, fix types).
 * cacheutil: Use cache dir. Closes #240
 * Support EOS_LOGGING_LEVEL environment variable to set log level.
 * tests: All tests use separate temporary config
    - Add pytest switch --check-config-side-effect to check user
      config file existence after each test. Will also fail if user config
      existed before test execution (but will only check after the test has
      run).
      Enable flag in github workflow.
    - Globally mock platformdirs in config module. Now no longer required
      to patch individually.
      Function calls to config instance (e.g. merge_settings_from_dict)
      were unaffected previously.
 * Set Berlin as default location (default config/docker-compose).
			
			
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							267a9bf427
						
					
				
				
					commit
					75987db9e1
				
			@@ -47,6 +47,7 @@ from typing import (
 | 
			
		||||
from pendulum import DateTime, Duration
 | 
			
		||||
from pydantic import BaseModel, ConfigDict, Field
 | 
			
		||||
 | 
			
		||||
from akkudoktoreos.core.coreabc import ConfigMixin
 | 
			
		||||
from akkudoktoreos.utils.datetimeutil import compare_datetimes, to_datetime, to_duration
 | 
			
		||||
from akkudoktoreos.utils.logutil import get_logger
 | 
			
		||||
 | 
			
		||||
@@ -90,7 +91,7 @@ class CacheFileStoreMeta(type, Generic[T]):
 | 
			
		||||
        return cls._instances[cls]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CacheFileStore(metaclass=CacheFileStoreMeta):
 | 
			
		||||
class CacheFileStore(ConfigMixin, metaclass=CacheFileStoreMeta):
 | 
			
		||||
    """A key-value store that manages file-like tempfile objects to be used as cache files.
 | 
			
		||||
 | 
			
		||||
    Cache files are associated with a date. If no date is specified, the cache files are
 | 
			
		||||
@@ -328,8 +329,9 @@ class CacheFileStore(metaclass=CacheFileStoreMeta):
 | 
			
		||||
                # File already available
 | 
			
		||||
                cache_file_obj = cache_item.cache_file
 | 
			
		||||
            else:
 | 
			
		||||
                self.config.data_cache_path.mkdir(parents=True, exist_ok=True)
 | 
			
		||||
                cache_file_obj = tempfile.NamedTemporaryFile(
 | 
			
		||||
                    mode=mode, delete=delete, suffix=suffix
 | 
			
		||||
                    mode=mode, delete=delete, suffix=suffix, dir=self.config.data_cache_path
 | 
			
		||||
                )
 | 
			
		||||
                self._store[cache_file_key] = CacheFileRecord(
 | 
			
		||||
                    cache_file=cache_file_obj,
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,8 @@ def get_logger(
 | 
			
		||||
    # Create a logger with the specified name
 | 
			
		||||
    logger = logging.getLogger(name)
 | 
			
		||||
    logger.propagate = True
 | 
			
		||||
    if (env_level := os.getenv("EOS_LOGGING_LEVEL")) is not None:
 | 
			
		||||
        logging_level = env_level
 | 
			
		||||
    if logging_level == "DEBUG":
 | 
			
		||||
        level = logging.DEBUG
 | 
			
		||||
    elif logging_level == "INFO":
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user