Source code for sluyspy.env

#!/bin/env python
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: EUPL-1.2
#  
#  Copyright (c) 2022-2024  Marc van der Sluys - Nikhef/Utrecht University - marc.vandersluys.nl
#   
#  This file is part of the sluyspy Python package:
#  Marc van der Sluys' personal Python modules.
#  See: https://github.com/MarcvdSluys/sluyspy
#   
#  This is free software: you can redistribute it and/or modify it under the terms of the European Union
#  Public Licence 1.2 (EUPL 1.2).  This software is distributed in the hope that it will be useful, but
#  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#  PURPOSE.  See the EU Public Licence for more details.  You should have received a copy of the European
#  Union Public Licence along with this code.  If not, see <https://www.eupl.eu/1.2/en/>.


"""Environment functions for the sluyspy package."""


from dataclasses import dataclass as _dataclass

from sluyspy import system as _ssys
import astroconst as _ac


[docs] @_dataclass class Environment: tz: str = ''; """Time zone""" geo_lon: float = 0.0; """Geographical longitude in radians east of Greenwich""" geo_lat: float = 0.0; """Geographical latitude in radians north of the equator""" geo_alt: float = 0.0; """Geographical altitude in metres above sea level""" host: str = ''; """Host name""" home: str = ''; """Home directory""" on_zotac: bool = False; """Am I on Zotac?""" on_think: bool = False; """Am I on Think?""" sp_dir: str = ''; """Solar-panel directory""" el_dir: str = ''; """Electricity-meter directory""" knmi_10min_dir: str = ''; """Directory for 10-min KNMI data""" knmi_hourly_dir: str = ''; """Directory for hourly KNMI data""" knmi_daily_dir: str = ''; """Directory for daily KNMI data""" wpw_dir: str = ''; """WP weather directory""" hwc_dir: str = ''; """HWC main directory"""
[docs] def environment(cfg_file='.python_environment.cfg'): """Return my computing environment. Parameters: cfg_file (str): Configuration file to read system environment from (relative to home directory). Returns: (Environment): Dataclass containing the environment settings. """ env = Environment() env.host = _ssys.host() env.home = _ssys.homedir() env.on_zotac = env.host == 'zotac' env.on_think = env.host == 'think' # Read system config file: import configparser config = configparser.ConfigParser(inline_comment_prefixes=('#')) config.read(env.home+'/'+cfg_file) # Section Localisation: env.tz = config.get('Localisation', 'timezone', fallback=env.tz) # My timezone env.geo_lon = config.getfloat('Localisation', 'longitude', fallback=env.geo_lon) # My longitude env.geo_lat = config.getfloat('Localisation', 'latitude', fallback=env.geo_lat) # My latitude env.geo_alt = config.getfloat('Localisation', 'altitude', fallback=env.geo_alt) # My altitude env.geo_lon *= _ac.d2r # Convert from degrees to radians env.geo_lat *= _ac.d2r # Section SolarPanels: env.sp_dir = config.get('SolarPanels', 'basedir', fallback=env.sp_dir).replace('~', env.home) # SP base dir # Section ElectricityMeter: env.el_dir = config.get('ElectricityMeter', 'basedir', fallback=env.el_dir).replace('~', env.home) # EM base dir # Section Weather: env.knmi_10min_dir = config.get('Weather', 'knmi_10min_dir', fallback=env.knmi_10min_dir).replace('~', env.home) # KNMI 10-min dir env.knmi_hourly_dir = config.get('Weather', 'knmi_hourly_dir', fallback=env.knmi_hourly_dir).replace('~', env.home) # KNMI hourly dir env.knmi_daily_dir = config.get('Weather', 'knmi_daily_dir', fallback=env.knmi_daily_dir).replace('~', env.home) # KNMI daily dir env.wpw_dir = config.get('Weather', 'wpw_dir', fallback=env.wpw_dir).replace('~', env.home) # WP weather dir # Section HWC: env.hwc_dir = config.get('HWC', 'hwc_dir', fallback=env.hwc_dir).replace('~', env.home) # HWC main dir return env
if __name__ == '__main__': print(environment())