atmosphere.py 5.04 KB
import doctest
from celme.mechanics import Mechanics
from celme.home import Home

# ========================================================
# ========================================================
# === ATMOSPHERE
# ========================================================
# ========================================================

class Atmosphere(Mechanics):
    """ Class to describe an atmosphere
    """
# ========================================================
# === attributs
# ========================================================

    _pressure_pascal = 101325
    _temperature_kelvin = 288
    _humidity_percent = 50
    
# ========================================================
# === internal methods : Generals
# ========================================================

    def _init_atmosphere(self):
        """ Object initialization        
        """
        altitude_m = 0.0
        self.atmosphere_standard(altitude_m)
    
# ========================================================
# === internal methods : 
# ========================================================
 
# ========================================================
# === Atmosphere methods
# ========================================================

    def atmosphere(self, pressure_pascal, temperature_kelvin, humidity_percent):
        self._set_pressure(pressure_pascal)
        self._set_temperature(temperature_kelvin)
        self._set_humidity(humidity_percent)

    def atmosphere_standard(self, home_or_altitude):
        if isinstance(home_or_altitude, Home) == True:
            altitude_m = home_or_altitude.altitude
        elif isinstance(home_or_altitude, (int, float, str)) == True:
            altitude_m = float(home_or_altitude)
        else:
            raise Exception
            return ""
        self._temperature_kelvin, self._pressure_pascal = self._mc_altitude2tp(altitude_m)
        self._humidity_percent = 50
            
# ========================================================
# === get/set methods
# ========================================================

    def _get_pressure(self):
        return self._pressure_pascal

    def _set_pressure(self, pressure_pascal):
        if (pressure_pascal<0):
            pressure_pascal=0
        self._pressure_pascal = pressure_pascal
        
    def _get_temperature(self):
        return self._temperature_kelvin

    def _set_temperature(self, temperature_kelvin):
        if (temperature_kelvin<0):
            temperature_kelvin = 0
        self._temperature_kelvin = temperature_kelvin

    def _get_humidity(self):
        return self._humidity_percent

    def _set_humidity(self, humidity_percent):
        if humidity_percent<0:
            humidity_percent=0
        if humidity_percent>100:
            humidity_percent=100
        self._humidity_percent = humidity_percent

    pressure = property(_get_pressure, _set_pressure)
    temperature = property(_get_temperature, _set_temperature)
    humidity = property(_get_humidity, _set_humidity)
    
# ========================================================
# === debug methods
# ========================================================
    
    def infos(self, action) -> None:
        """ To get informations about this class
        
        :param action: A command to run a debug action (see examples).
        :type action: string
        
        :Example:
            
        Atmosphere().infos("doctest")
        Atmosphere().infos("doc_methods")
        Atmosphere().infos("internal_attributes")
        Atmosphere().infos("public_methods")        
        """
        if (action == "doc_methods"):
            publics = [x for x in dir(self) if x[0]!="_"]
            for public in publics:
                varname = "{}".format(public)
                if (callable(getattr(self,varname))==True):
                    print("\n{:=^40}".format(" method "+varname+" "))
                    t = "Atmosphere()."+varname+".__doc__"
                    tt =eval(t)
                    print(tt)
        if (action == "doctest"):
            if __name__ == "__main__":
                print("\n{:~^40}".format("doctest"))
                doctest.testmod(verbose=False)
        if (action == "internal_attributes"):
            internals = [x for x in dir(self) if x[0]=="_" and x[1]!="_"]
            for internal in internals:
                varname = "{}".format(internal)
                #if (hasattr(self,varname)==True):
                if (callable(getattr(self,varname))==False):
                    print(varname + "=" + str(getattr(self,varname)))
        if (action == "public_methods"):
            publics = [x for x in dir(self) if x[0]!="_"]
            for public in publics:
                varname = "{}".format(public)
                if (callable(getattr(self,varname))==True):
                    print(varname)

# ========================================================
# === special methods
# ========================================================
        
    def __init__(self):
        """ Object initialization
        """
        self._init_atmosphere()
		  # super().__init__()