lab_weather/weather/weather.py

78 lines
2.6 KiB
Python

# weather.py
# ------------
# By MWC Contributors
#
# Defines `print_weather`, which does all the work of fetching
# the requested weather data and printing it out to the screen
# in a sensible way.
#
# It's your job to implement this function.
from weather.weather_apis import (
geocode_location,
estimate_location,
get_weather_office,
get_forecast
)
def print_weather(location=None, metric=False, verbose=False):
"""Prints out a weather report using the provided location, or using
the user's current location if no location was provided.
When metric is True, prints out the weather in metric units.
When verbose is True, prints out a more detailed report.
"""
if location:
coordinates = geocode_location(location)
if not coordinates:
print("Error: Location not found.")
return
else:
coordinates = estimate_location()
if not coordinates:
print("Error: Unable to estimate location.")
return
office_info = get_weather_office(coordinates['lat'], coordinates['lng'])
if not office_info:
print("Error: Weather office not found for this location.")
return
forecast = get_forecast(office_info['office'], office_info['x'], office_info['y'], metric=metric)
if not forecast:
print("Error: Forecast data is unavailable.")
return
temp_unit = "°C" if metric else "°F"
print(f"Weather Forecast for {location or 'your location'}:")
for period in forecast:
temp = period['temperature']
description = period['description']
wind = period['wind_speed']
wind_dir = period['wind_direction']
print(f"{period['name']}: {temp}{temp_unit}, {description}")
if verbose:
print(f" Wind: {wind} {wind_dir}")
from argparse import ArgumentParser
from weather.weather_main import print_weather # Ensure the correct import path if your file is renamed
def weather_cli():
"""Provides a command-line interface for weather.
This function creates an ArgumentParser, which parses command line arguments.
Then it calls `print_weather` with the provided arguments.
"""
parser = ArgumentParser("weather", description="Prints out a weather report")
parser.add_argument("-l", "--location", help="Location for weather forecast")
parser.add_argument("-m", "--metric", action="store_true", help="Use metric units")
parser.add_argument("-v", "--verbose", action="store_true", help="Verbose output")
args = parser.parse_args()
print_weather(location=args.location, metric=args.metric, verbose=args.verbose)