def get_visibility(wxdata: [str], units: Units) -> ([str], Number): """ Returns the report list and removed visibility string """ visibility = "" if wxdata: item = copy(wxdata[0]) # Vis reported in statue miles if item.endswith("SM"): # 10SM if item in ("P6SM", "M1/4SM", "M1/8SM"): visibility = item[:-2] elif item[:-2].isdigit(): visibility = str(int(item[:-2])) elif "/" in item: visibility = item[: item.find("SM")] # 1/2SM wxdata.pop(0) units.visibility = "sm" # Vis reported in meters elif len(item) == 4 and item.isdigit(): visibility = wxdata.pop(0) units.visibility = "m" elif ( 7 >= len(item) >= 5 and item[:4].isdigit() and (item[4] in ["M", "N", "S", "E", "W"] or item[4:] == "NDV") ): visibility = wxdata.pop(0)[:4] units.visibility = "m" elif len(item) == 5 and item[1:].isdigit() and item[0] in ["M", "P", "B"]: visibility = wxdata.pop(0)[1:] units.visibility = "m" elif item.endswith("KM") and item[:-2].isdigit(): visibility = item[:-2] + "000" wxdata.pop(0) units.visibility = "m" # Vis statute miles but split Ex: 2 1/2SM elif ( len(wxdata) > 1 and wxdata[1].endswith("SM") and "/" in wxdata[1] and item.isdigit() ): vis1 = wxdata.pop(0) # 2 vis2 = wxdata.pop(0).replace("SM", "") # 1/2 visibility = str(int(vis1) * int(vis2[2]) + int(vis2[0])) + vis2[1:] # 5/2 units.visibility = "sm" return wxdata, make_number(visibility)
def get_visibility(wxdata: [str], units: Units) -> ([str], Number): """ Returns the report list and removed visibility string """ visibility = '' if wxdata: item = copy(wxdata[0]) # Vis reported in statue miles if item.endswith('SM'): # 10SM if item in ('P6SM', 'M1/4SM'): visibility = item[:-2] elif '/' not in item: visibility = str(int(item[:item.find('SM')])) else: visibility = item[:item.find('SM')] # 1/2SM wxdata.pop(0) units.visibility = 'sm' # Vis reported in meters elif len(item) == 4 and item.isdigit(): visibility = wxdata.pop(0) units.visibility = 'm' elif 7 >= len(item) >= 5 and item[:4].isdigit() \ and (item[4] in ['M', 'N', 'S', 'E', 'W'] or item[4:] == 'NDV'): visibility = wxdata.pop(0)[:4] units.visibility = 'm' elif len(item) == 5 and item[1:].isdigit() and item[0] in [ 'M', 'P', 'B' ]: visibility = wxdata.pop(0)[1:] units.visibility = 'm' elif item.endswith('KM') and item[:item.find('KM')].isdigit(): visibility = item[:item.find('KM')] + '000' wxdata.pop(0) units.visibility = 'm' # Vis statute miles but split Ex: 2 1/2SM elif len(wxdata) > 1 and wxdata[1].endswith( 'SM') and '/' in wxdata[1] and item.isdigit(): vis1 = wxdata.pop(0) # 2 vis2 = wxdata.pop(0).replace('SM', '') # 1/2 visibility = str(int(vis1) * int(vis2[2]) + int(vis2[0])) + vis2[1:] # 5/2 units.visibility = 'sm' return wxdata, make_number(visibility)
def get_visibility(wxdata: [str], units: Units) -> ([str], Number): """ Returns the report list and removed visibility string """ visibility = '' if wxdata: item = copy(wxdata[0]) # Vis reported in statue miles if item.endswith('SM'): # 10SM if item in ('P6SM', 'M1/4SM', 'M1/8SM'): visibility = item[:-2] elif '/' not in item: visibility = str(int(item[:item.find('SM')])) else: visibility = item[:item.find('SM')] # 1/2SM wxdata.pop(0) units.visibility = 'sm' # Vis reported in meters elif len(item) == 4 and item.isdigit(): visibility = wxdata.pop(0) units.visibility = 'm' elif 7 >= len(item) >= 5 and item[:4].isdigit() \ and (item[4] in ['M', 'N', 'S', 'E', 'W'] or item[4:] == 'NDV'): visibility = wxdata.pop(0)[:4] units.visibility = 'm' elif len(item) == 5 and item[1:].isdigit() and item[0] in ['M', 'P', 'B']: visibility = wxdata.pop(0)[1:] units.visibility = 'm' elif item.endswith('KM') and item[:item.find('KM')].isdigit(): visibility = item[:item.find('KM')] + '000' wxdata.pop(0) units.visibility = 'm' # Vis statute miles but split Ex: 2 1/2SM elif len(wxdata) > 1 and wxdata[1].endswith('SM') and '/' in wxdata[1] and item.isdigit(): vis1 = wxdata.pop(0) # 2 vis2 = wxdata.pop(0).replace('SM', '') # 1/2 visibility = str(int(vis1) * int(vis2[2]) + int(vis2[0])) + vis2[1:] # 5/2 units.visibility = 'sm' return wxdata, make_number(visibility)