From edf9bac35bdabe2c69905ef79dced926d586c8d3 Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 10:46:25 +0530 Subject: [PATCH 1/6] added the script that shows the weather data either once or runs in background at specified interval, gui is made using tkinter and weather data is coming from open weather api --- weather_notifier/requirements.txt | 3 + weather_notifier/weather_notifier.py | 208 +++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 weather_notifier/requirements.txt create mode 100644 weather_notifier/weather_notifier.py diff --git a/weather_notifier/requirements.txt b/weather_notifier/requirements.txt new file mode 100644 index 000000000..5d6f45be8 --- /dev/null +++ b/weather_notifier/requirements.txt @@ -0,0 +1,3 @@ +requests=2.28.2 +geopy=2.4.1 +dotenv=1.0.1 \ No newline at end of file diff --git a/weather_notifier/weather_notifier.py b/weather_notifier/weather_notifier.py new file mode 100644 index 000000000..fe605fa8c --- /dev/null +++ b/weather_notifier/weather_notifier.py @@ -0,0 +1,208 @@ +import tkinter as tk +from tkinter import messagebox +import requests +import threading +import time +from dotenv import load_dotenv +load_dotenv() +from geopy.geocoders import Nominatim +import os + +API_KEY=os.getenv('OPENWEATHER_API_KEY') +if API_KEY is None: + raise ValueError("API key not found. Please set the OPENWEATHER_API_KEY in the .env file.") + +def calculate_lat_long(city): + geolocator = Nominatim(user_agent="weather_notifier") + location = geolocator.geocode(city) + if location: + return location.latitude, location.longitude + return None,None +def get_weather(lat,long): + try: + print(lat,long) + url=f"https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={long}&units=metric&appid={API_KEY}" + res=requests.get(url) + data = res.json() + if data['cod'] != 404: + weather_info = { + "City": data.get("name", "N/A"), + "Latitude": data['coord']['lat'], + "Longitude": data['coord']['lon'], + "Temperature": data['main']['temp'], + "Feels Like": data['main']['feels_like'], + "Min Temp": data['main']['temp_min'], + "Max Temp": data['main']['temp_max'], + "Pressure": data['main']['pressure'], + "Humidity": data['main']['humidity'], + "Wind Speed": data['wind']['speed'], + "Wind Degree": data['wind']['deg'], + "Weather": data['weather'][0]['description'].capitalize(), + "Clouds": f"{data['clouds']['all']}%", + "Visibility": data.get('visibility', "N/A"), + "Sunrise": time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(data['sys']['sunrise'] + data['timezone'])), + "Sunset": time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(data['sys']['sunset'] + data['timezone'])), + } + return weather_info + else: + return None + + except Exception as e: + messagebox.showerror("Error", f"Error fetching weather data: {str(e)}") + return None + +# updating the weather +def update_weather(): + city=city_entry.get() + if city: + lat, lon = calculate_lat_long(city) + if lat and lon: + weather_info = get_weather(lat, lon) + if weather_info: + weather_info_in_str_to_display=covert_the_info_to_display(weather_info) + weather_label.config(text=weather_info_in_str_to_display) + stop_button.pack(pady=5) + city_label.pack_forget() + city_entry.pack_forget() + manual_radio.pack_forget() + auto_radio.pack_forget() + start_button.pack_forget() + else: + weather_label.config(text="Unable to find coordinates!") + stop_button.pack_forget() + else: + weather_label.config(text="Unable to find coordinates!") + stop_button.pack_forget() + else: + messagebox.showerror("Error", "Please enter a valid city name.") + stop_button.pack_forget() +# displaying the info in the tkinter created box +def covert_the_info_to_display(weather_info): + # Clear the previous text + weather_info_in_str_to_display= f''' + City: {weather_info['City']}\n + Coordinates: ({weather_info['Latitude']}, {weather_info['Longitude']})\n + Temperature: {weather_info['Temperature']}°C (Feels like {weather_info['Feels Like']}°C)\n + Min Temp: {weather_info['Min Temp']}°C, Max Temp: {weather_info['Max Temp']}°C\n + Pressure: {weather_info['Pressure']} hPa\n + Humidity: {weather_info['Humidity']}%\n + Wind: {weather_info['Wind Speed']} m/s, {weather_info['Wind Degree']}°\n + Clouds: {weather_info['Clouds']}\n + Visibility: {weather_info['Visibility']} meters\n + Weather: {weather_info['Weather']}\n + Sunrise: {weather_info['Sunrise']}\n + Sunset: {weather_info['Sunset']}\n + ''' + return weather_info_in_str_to_display + +# run_in_background logic +def run_in_background(interval): + while auto_mode.get(): + update_weather() + time.sleep(interval) + +# Function to handle click +def start_notifier(): + if auto_mode.get(): + interval_str = interval_entry.get().strip() + if not interval_str: + messagebox.showerror("Error", "Please enter a valid interval (in seconds).") + return + try: + interval=int(interval_str) + if interval <= 0: + messagebox.showerror("Error", "Please enter a valid interval (in seconds).") + return + except ValueError as e: + messagebox.showerror("Error", "Please enter a valid number.") + return + start_button.config(state=tk.DISABLED) + + threading.Thread(target=run_in_background, args=(interval,), daemon=True).start() + else: + update_weather() + +# Function to stop auto-updating +def stop_notifier(): + auto_mode.set(False) + start_button.config(state=tk.NORMAL) + stop_button.pack_forget() + go_back() + +def go_back(): + weather_label.config(text="") + city_label.pack(pady=10) + city_entry.pack(pady=5) + manual_radio.pack(anchor=tk.W, padx=20) + auto_radio.pack(anchor=tk.W, padx=20) + start_button.pack(pady=10) + interval_label.pack_forget() + interval_entry.pack_forget() + stop_button.pack_forget() + +# gui setup +def show_interval_entry(): + if auto_mode.get(): + interval_label.pack(pady=5) + interval_entry.pack(pady=5) + else: + interval_label.pack_forget() + interval_entry.pack_forget() + +def toggle_stop_button(): + if auto_mode.get(): + stop_button.pack(pady=5) + else: + stop_button.pack_forget() + +if __name__=='__main__': + city ="Surat" + lat,long=calculate_lat_long(city) + if lat==None or long==None: + print('No city found') + exit(0) + + root = tk.Tk() + root.title("Weather Notifier") + root.geometry("550x500") + root.resizable(False, False) + + # City Label and Entry + city_label = tk.Label(root, text="Enter your city:") + city_label.pack(pady=10) + city_entry = tk.Entry(root, width=30) # Define city_entry here + city_entry.pack(pady=5) + + # Weather Info Label + weather_label = tk.Label(root, text="", font=("Helvetica", 10),justify="left") + weather_label.pack(pady=20) + + # Mode Selection: Manual or Automatic + auto_mode = tk.BooleanVar() + + manual_radio = tk.Radiobutton(root, text="On-click only", variable=auto_mode, value=False) + manual_radio.pack(anchor=tk.W, padx=20) + + auto_radio = tk.Radiobutton(root, text="Run after a fixed interval", variable=auto_mode, value=True) + auto_radio.pack(anchor=tk.W, padx=20) + + # Interval Entry (only visible when interval mode is selected) + interval_label = tk.Label(root, text="Enter interval (seconds):") + interval_entry = tk.Entry(root, width=10) + + + + auto_mode.trace_add("write", lambda *args: show_interval_entry()) + + # Start Button + start_button = tk.Button(root, text="Start Notifier", command=start_notifier) + start_button.pack(pady=10) + + # Stop Button (visible only when auto mode is active) + stop_button = tk.Button(root, text="Stop Notifier", command=stop_notifier) + stop_button.pack_forget() + + auto_mode.trace_add("write", lambda *args: toggle_stop_button()) + + # Run the GUI loop + root.mainloop() \ No newline at end of file From 3567fe354995e0f71ce763e8b702ccab8e99f601 Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 10:59:31 +0530 Subject: [PATCH 2/6] added Readme and images --- weather_notifier/README.md | 70 +++++++++++++++++++++ weather_notifier/images/automated_gui.jpg | Bin 0 -> 24229 bytes weather_notifier/images/box.jpg | Bin 0 -> 21065 bytes weather_notifier/images/data_automated.jpg | Bin 0 -> 48981 bytes weather_notifier/images/error_box.jpg | Bin 0 -> 43376 bytes 5 files changed, 70 insertions(+) create mode 100644 weather_notifier/README.md create mode 100644 weather_notifier/images/automated_gui.jpg create mode 100644 weather_notifier/images/box.jpg create mode 100644 weather_notifier/images/data_automated.jpg create mode 100644 weather_notifier/images/error_box.jpg diff --git a/weather_notifier/README.md b/weather_notifier/README.md new file mode 100644 index 000000000..bc1817ddd --- /dev/null +++ b/weather_notifier/README.md @@ -0,0 +1,70 @@ + +# Weather Notifier - README + +## Overview +The **Weather Notifier** is a Python-based GUI application built with `Tkinter`, which allows users to retrieve weather information for any city using the OpenWeatherMap API. It provides two modes of operation: +- **Manual Mode**: Fetch the weather on-demand with a single click. +- **Auto Mode**: Fetch the weather at regular intervals and can also run in background. + +The app displays current weather details such as temperature, humidity, wind speed, and more in a user-friendly interface. + +## Features +- Fetch current weather for any city globally. +- Switch between manual and automatic weather updates. +- Display detailed weather information, including temperature, humidity, wind, and more. +- Adjustable update interval when in auto mode. +- Option to stop the automatic weather updates and return to the main city selection screen. + +## Prerequisites +1. Python 3.x +2. The following Python libraries: + - `Tkinter` + - `requests` + - `threading` + - `geopy` + - `dotenv` + +To install the required libraries, use the following command: +```bash or windows +pip install -r requirements.txt +``` + +## Installation and Setup +1. Clone the repository or download the script. +2. Set up a `.env` file in the same directory as the script, and add your OpenWeatherMap API key like so: + ```env + OPENWEATHER_API_KEY=your_api_key_here + ``` +3. Run the script: + ```bash + python weather_notifier.py + ``` + +## Usage +1. **City Entry**: + - Enter the name of the city for which you want to fetch the weather. + +2. **Mode Selection**: + - **Manual Mode**: Select "On-click only" to get weather updates with a button press. + - **Auto Mode**: Select "Run after a fixed interval" and input an interval in seconds to get weather updates automatically at the specified interval. + +3. **Start Notifier**: + - Click the `Start Notifier` button to begin fetching weather updates. + +4. **Stop Notifier**: + - If you are in auto mode, click the `Stop Notifier` button to stop automatic updates and return to the city selection screen. + +## Example +- In manual mode, you simply input your city name and press the `Start Notifier` button to get weather information. +- In auto mode, you can set an interval (e.g., 10 seconds) to fetch updates regularly, which will continue until the `Stop Notifier` button is pressed. + +## Notes +- Ensure you have a valid OpenWeatherMap API key in your `.env` file. +- The app defaults to "On-click only" mode if no mode is selected. + +## Screenshots +![Main Screen](./images/box.jpg) +![Error](./images/error_box.jpg) +![Error](./images/automated_gui.jpg) +![Error](./images/data_automated.jpg) + diff --git a/weather_notifier/images/automated_gui.jpg b/weather_notifier/images/automated_gui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9ad2fda98f8500779622953e684e3424df902f4 GIT binary patch literal 24229 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 literal 0 HcmV?d00001 From 1dfea5e8fc8e08286d36ec30bb9139e7a1f78497 Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 13:01:25 +0530 Subject: [PATCH 3/6] flake8 linting added --- weather_notifier/weather_notifier.py | 188 +++++++++++++++++---------- 1 file changed, 122 insertions(+), 66 deletions(-) diff --git a/weather_notifier/weather_notifier.py b/weather_notifier/weather_notifier.py index fe605fa8c..e8818d3ce 100644 --- a/weather_notifier/weather_notifier.py +++ b/weather_notifier/weather_notifier.py @@ -1,32 +1,41 @@ -import tkinter as tk +import os +from geopy.geocoders import Nominatim +import tkinter as tk from tkinter import messagebox import requests import threading import time -from dotenv import load_dotenv +from dotenv import load_dotenv load_dotenv() -from geopy.geocoders import Nominatim -import os -API_KEY=os.getenv('OPENWEATHER_API_KEY') +API_KEY = os.getenv('OPENWEATHER_API_KEY') if API_KEY is None: - raise ValueError("API key not found. Please set the OPENWEATHER_API_KEY in the .env file.") + raise ValueError( + "API key not found. Set the OPENWEATHER_API_KEY in the .env file.") + def calculate_lat_long(city): geolocator = Nominatim(user_agent="weather_notifier") location = geolocator.geocode(city) if location: return location.latitude, location.longitude - return None,None -def get_weather(lat,long): + return None, None + + +def get_weather(lat, long): try: - print(lat,long) - url=f"https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={long}&units=metric&appid={API_KEY}" - res=requests.get(url) + print(lat, long) + url = ( + f"https://api.openweathermap.org/data/2.5/weather?lat={lat}" + f"&lon={long}&units=metric&appid={API_KEY}" + ) + res = requests.get(url) data = res.json() if data['cod'] != 404: weather_info = { - "City": data.get("name", "N/A"), + "City": data.get( + "name", + "N/A"), "Latitude": data['coord']['lat'], "Longitude": data['coord']['lon'], "Temperature": data['main']['temp'], @@ -38,35 +47,49 @@ def get_weather(lat,long): "Wind Speed": data['wind']['speed'], "Wind Degree": data['wind']['deg'], "Weather": data['weather'][0]['description'].capitalize(), - "Clouds": f"{data['clouds']['all']}%", - "Visibility": data.get('visibility', "N/A"), - "Sunrise": time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(data['sys']['sunrise'] + data['timezone'])), - "Sunset": time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(data['sys']['sunset'] + data['timezone'])), + "Clouds": f"{ + data['clouds']['all']}%", + "Visibility": data.get( + 'visibility', + "N/A"), + "Sunrise": time.strftime( + '%Y-%m-%d %H:%M:%S', + time.gmtime( + data['sys']['sunrise'] + data['timezone'])), + "Sunset": time.strftime( + '%Y-%m-%d %H:%M:%S', + time.gmtime( + data['sys']['sunset'] + data['timezone'])), } return weather_info else: return None - + except Exception as e: messagebox.showerror("Error", f"Error fetching weather data: {str(e)}") return None -# updating the weather +# updating the weather + + def update_weather(): - city=city_entry.get() + city = city_entry.get() if city: lat, lon = calculate_lat_long(city) if lat and lon: weather_info = get_weather(lat, lon) if weather_info: - weather_info_in_str_to_display=covert_the_info_to_display(weather_info) + weather_info_in_str_to_display = covert_the_info_to_display( + weather_info) weather_label.config(text=weather_info_in_str_to_display) stop_button.pack(pady=5) - city_label.pack_forget() + city_label.pack_forget() city_entry.pack_forget() - manual_radio.pack_forget() - auto_radio.pack_forget() + manual_radio.pack_forget() + auto_radio.pack_forget() start_button.pack_forget() + interval_label.pack_forget() + interval_entry.pack_forget() else: weather_label.config(text="Unable to find coordinates!") stop_button.pack_forget() @@ -74,61 +97,79 @@ def update_weather(): weather_label.config(text="Unable to find coordinates!") stop_button.pack_forget() else: - messagebox.showerror("Error", "Please enter a valid city name.") - stop_button.pack_forget() -# displaying the info in the tkinter created box + messagebox.showerror("Error", "Please enter a valid city name.") + stop_button.pack_forget() +# displaying the info in the tkinter created box + + def covert_the_info_to_display(weather_info): # Clear the previous text - weather_info_in_str_to_display= f''' - City: {weather_info['City']}\n - Coordinates: ({weather_info['Latitude']}, {weather_info['Longitude']})\n - Temperature: {weather_info['Temperature']}°C (Feels like {weather_info['Feels Like']}°C)\n - Min Temp: {weather_info['Min Temp']}°C, Max Temp: {weather_info['Max Temp']}°C\n - Pressure: {weather_info['Pressure']} hPa\n - Humidity: {weather_info['Humidity']}%\n - Wind: {weather_info['Wind Speed']} m/s, {weather_info['Wind Degree']}°\n - Clouds: {weather_info['Clouds']}\n - Visibility: {weather_info['Visibility']} meters\n - Weather: {weather_info['Weather']}\n - Sunrise: {weather_info['Sunrise']}\n - Sunset: {weather_info['Sunset']}\n - ''' + weather_info_in_str_to_display = ( + f"City: {weather_info['City']}\n\n" + f"Coordinates: ({weather_info['Latitude']}, " + f"{weather_info['Longitude']})\n\n" + f"Temperature: {weather_info['Temperature']}°C " + f"(Feels like {weather_info['Feels Like']}°C)\n\n" + f"Min Temp: {weather_info['Min Temp']}°C, " + f"Max Temp: {weather_info['Max Temp']}°C\n\n" + f"Pressure: {weather_info['Pressure']} hPa\n\n" + f"Humidity: {weather_info['Humidity']}%\n\n" + f"Wind: {weather_info['Wind Speed']} m/s, " + f"{weather_info['Wind Degree']}°\n\n" + f"Clouds: {weather_info['Clouds']}\n\n" + f"Visibility: {weather_info['Visibility']} meters\n\n" + f"Weather: {weather_info['Weather']}\n\n" + f"Sunrise: {weather_info['Sunrise']}\n\n" + f"Sunset: {weather_info['Sunset']}\n\n" + ) + return weather_info_in_str_to_display # run_in_background logic + + def run_in_background(interval): while auto_mode.get(): update_weather() time.sleep(interval) # Function to handle click + + def start_notifier(): if auto_mode.get(): interval_str = interval_entry.get().strip() if not interval_str: - messagebox.showerror("Error", "Please enter a valid interval (in seconds).") - return + messagebox.showerror( + "Error", "Please enter a valid interval (in seconds).") + return try: - interval=int(interval_str) + interval = int(interval_str) if interval <= 0: - messagebox.showerror("Error", "Please enter a valid interval (in seconds).") + messagebox.showerror( + "Error", "Please enter a valid interval (in seconds).") return - except ValueError as e: + except ValueError: messagebox.showerror("Error", "Please enter a valid number.") return start_button.config(state=tk.DISABLED) - threading.Thread(target=run_in_background, args=(interval,), daemon=True).start() + threading.Thread( + target=run_in_background, args=( + interval,), daemon=True).start() else: update_weather() # Function to stop auto-updating + + def stop_notifier(): auto_mode.set(False) start_button.config(state=tk.NORMAL) - stop_button.pack_forget() + stop_button.pack_forget() go_back() + def go_back(): weather_label.config(text="") city_label.pack(pady=10) @@ -139,15 +180,18 @@ def go_back(): interval_label.pack_forget() interval_entry.pack_forget() stop_button.pack_forget() - + # gui setup + + def show_interval_entry(): - if auto_mode.get(): - interval_label.pack(pady=5) - interval_entry.pack(pady=5) - else: - interval_label.pack_forget() - interval_entry.pack_forget() + if auto_mode.get(): + interval_label.pack(pady=5) + interval_entry.pack(pady=5) + else: + interval_label.pack_forget() + interval_entry.pack_forget() + def toggle_stop_button(): if auto_mode.get(): @@ -155,13 +199,14 @@ def toggle_stop_button(): else: stop_button.pack_forget() -if __name__=='__main__': - city ="Surat" - lat,long=calculate_lat_long(city) - if lat==None or long==None: + +if __name__ == '__main__': + city = "Surat" + lat, long = calculate_lat_long(city) + if lat is None or long is None: print('No city found') exit(0) - + root = tk.Tk() root.title("Weather Notifier") root.geometry("550x500") @@ -174,28 +219,39 @@ def toggle_stop_button(): city_entry.pack(pady=5) # Weather Info Label - weather_label = tk.Label(root, text="", font=("Helvetica", 10),justify="left") + weather_label = tk.Label( + root, text="", font=( + "Helvetica", 10), justify="left") weather_label.pack(pady=20) # Mode Selection: Manual or Automatic auto_mode = tk.BooleanVar() - manual_radio = tk.Radiobutton(root, text="On-click only", variable=auto_mode, value=False) + manual_radio = tk.Radiobutton( + root, + text="On-click only", + variable=auto_mode, + value=False) manual_radio.pack(anchor=tk.W, padx=20) - auto_radio = tk.Radiobutton(root, text="Run after a fixed interval", variable=auto_mode, value=True) + auto_radio = tk.Radiobutton( + root, + text="Run after a fixed interval", + variable=auto_mode, + value=True) auto_radio.pack(anchor=tk.W, padx=20) # Interval Entry (only visible when interval mode is selected) interval_label = tk.Label(root, text="Enter interval (seconds):") interval_entry = tk.Entry(root, width=10) - - auto_mode.trace_add("write", lambda *args: show_interval_entry()) # Start Button - start_button = tk.Button(root, text="Start Notifier", command=start_notifier) + start_button = tk.Button( + root, + text="Start Notifier", + command=start_notifier) start_button.pack(pady=10) # Stop Button (visible only when auto mode is active) @@ -205,4 +261,4 @@ def toggle_stop_button(): auto_mode.trace_add("write", lambda *args: toggle_stop_button()) # Run the GUI loop - root.mainloop() \ No newline at end of file + root.mainloop() From 134a24b099472a12b17e455ca80390d33f3235bb Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 13:12:12 +0530 Subject: [PATCH 4/6] modified the README --- weather_notifier/README.md | 39 ++------------------------------------ 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/weather_notifier/README.md b/weather_notifier/README.md index bc1817ddd..96e6e3c41 100644 --- a/weather_notifier/README.md +++ b/weather_notifier/README.md @@ -1,10 +1,9 @@ - # Weather Notifier - README ## Overview The **Weather Notifier** is a Python-based GUI application built with `Tkinter`, which allows users to retrieve weather information for any city using the OpenWeatherMap API. It provides two modes of operation: - **Manual Mode**: Fetch the weather on-demand with a single click. -- **Auto Mode**: Fetch the weather at regular intervals and can also run in background. +- **Auto Mode**: Fetch the weather at regular intervals and can also run in the background. The app displays current weather details such as temperature, humidity, wind speed, and more in a user-friendly interface. @@ -12,7 +11,6 @@ The app displays current weather details such as temperature, humidity, wind spe - Fetch current weather for any city globally. - Switch between manual and automatic weather updates. - Display detailed weather information, including temperature, humidity, wind, and more. -- Adjustable update interval when in auto mode. - Option to stop the automatic weather updates and return to the main city selection screen. ## Prerequisites @@ -25,43 +23,10 @@ The app displays current weather details such as temperature, humidity, wind spe - `dotenv` To install the required libraries, use the following command: -```bash or windows +```bash pip install -r requirements.txt ``` -## Installation and Setup -1. Clone the repository or download the script. -2. Set up a `.env` file in the same directory as the script, and add your OpenWeatherMap API key like so: - ```env - OPENWEATHER_API_KEY=your_api_key_here - ``` -3. Run the script: - ```bash - python weather_notifier.py - ``` - -## Usage -1. **City Entry**: - - Enter the name of the city for which you want to fetch the weather. - -2. **Mode Selection**: - - **Manual Mode**: Select "On-click only" to get weather updates with a button press. - - **Auto Mode**: Select "Run after a fixed interval" and input an interval in seconds to get weather updates automatically at the specified interval. - -3. **Start Notifier**: - - Click the `Start Notifier` button to begin fetching weather updates. - -4. **Stop Notifier**: - - If you are in auto mode, click the `Stop Notifier` button to stop automatic updates and return to the city selection screen. - -## Example -- In manual mode, you simply input your city name and press the `Start Notifier` button to get weather information. -- In auto mode, you can set an interval (e.g., 10 seconds) to fetch updates regularly, which will continue until the `Stop Notifier` button is pressed. - -## Notes -- Ensure you have a valid OpenWeatherMap API key in your `.env` file. -- The app defaults to "On-click only" mode if no mode is selected. - ## Screenshots ![Main Screen](./images/box.jpg) ![Error](./images/error_box.jpg) From 9e772ef558d0cfd5130e6b4007312b1ff2a4157e Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 13:27:05 +0530 Subject: [PATCH 5/6] checking some linting --- weather_notifier/README.md | 35 ++++++++++++++-------------- weather_notifier/weather_notifier.py | 3 +-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/weather_notifier/README.md b/weather_notifier/README.md index 96e6e3c41..d09204f81 100644 --- a/weather_notifier/README.md +++ b/weather_notifier/README.md @@ -1,35 +1,34 @@ # Weather Notifier - README -## Overview -The **Weather Notifier** is a Python-based GUI application built with `Tkinter`, which allows users to retrieve weather information for any city using the OpenWeatherMap API. It provides two modes of operation: -- **Manual Mode**: Fetch the weather on-demand with a single click. +# Overview +The ** Weather Notifier ** is a Python - based GUI application built with `Tkinter`, which allows users to retrieve weather information for any city using the OpenWeatherMap API. It provides two modes of operation: +- **Manual Mode**: Fetch the weather on - demand with a single click. - **Auto Mode**: Fetch the weather at regular intervals and can also run in the background. -The app displays current weather details such as temperature, humidity, wind speed, and more in a user-friendly interface. +The app displays current weather details such as temperature, humidity, wind speed, and more in a user - friendly interface. -## Features +# Features - Fetch current weather for any city globally. - Switch between manual and automatic weather updates. - Display detailed weather information, including temperature, humidity, wind, and more. - Option to stop the automatic weather updates and return to the main city selection screen. -## Prerequisites +# Prerequisites 1. Python 3.x 2. The following Python libraries: - - `Tkinter` - - `requests` - - `threading` - - `geopy` - - `dotenv` + - `Tkinter` + - `requests` + - `threading` + - `geopy` + - `dotenv` To install the required libraries, use the following command: ```bash -pip install -r requirements.txt +pip install - r requirements.txt ``` -## Screenshots -![Main Screen](./images/box.jpg) -![Error](./images/error_box.jpg) -![Error](./images/automated_gui.jpg) -![Error](./images/data_automated.jpg) - +# Screenshots +![Main Screen](. / images / box.jpg) +![Error](. / images / error_box.jpg) +![Error](. / images / automated_gui.jpg) +![Error](. / images / data_automated.jpg) diff --git a/weather_notifier/weather_notifier.py b/weather_notifier/weather_notifier.py index e8818d3ce..4545bff76 100644 --- a/weather_notifier/weather_notifier.py +++ b/weather_notifier/weather_notifier.py @@ -47,8 +47,7 @@ def get_weather(lat, long): "Wind Speed": data['wind']['speed'], "Wind Degree": data['wind']['deg'], "Weather": data['weather'][0]['description'].capitalize(), - "Clouds": f"{ - data['clouds']['all']}%", + "Clouds": f"{data['clouds']['all']}%", "Visibility": data.get( 'visibility', "N/A"), From 4f714dfd6504b46977f523eb66c4eddb34416fc5 Mon Sep 17 00:00:00 2001 From: DavdaJames Date: Wed, 2 Oct 2024 13:38:44 +0530 Subject: [PATCH 6/6] solved the linting error in already existing other scripts video_cropper and pdf_watermarkadder --- pdf_watermarkadder/main.py | 2 +- video_cropper/video_cropper.py | 51 ++++++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/pdf_watermarkadder/main.py b/pdf_watermarkadder/main.py index d6d9b0a28..b749f8a0c 100644 --- a/pdf_watermarkadder/main.py +++ b/pdf_watermarkadder/main.py @@ -23,7 +23,7 @@ def makepdf(): pdf_file = input("PDF file: ") watermark = 'watermark.pdf' merged = "finalDraft.pdf" - with open(pdf_file, "rb") as input_file,\ + with open(pdf_file, "rb") as input_file, \ open(watermark, "rb") as watermark_file: input_pdf = PdfFileReader(input_file) watermark_pdf = PdfFileReader(watermark_file) diff --git a/video_cropper/video_cropper.py b/video_cropper/video_cropper.py index 462bc1c11..6b41bed35 100644 --- a/video_cropper/video_cropper.py +++ b/video_cropper/video_cropper.py @@ -11,7 +11,8 @@ def to_int(a, rel_to): If string contains "%" it converts it to a float and multiplies by rel_to EG: 50% -> 0.5*rel_to ''' - if type(a) == int: + + if isinstance(a): return a else: if '%' in a: @@ -25,13 +26,41 @@ def to_int(a, rel_to): parser = argparse.ArgumentParser() parser.add_argument('-i', '--input', type=str, help='the file to crop') - parser.add_argument('-c', '--crop', type=str, help='the amount to crop in the format "TOP,BOTTOM,LEFT,RIGHT"') - parser.add_argument('-t', '--top', type=str, help='the amount to crop off the top of the video') - parser.add_argument('-b', '--bottom', type=str, help='the amount to crop off the bottom of the video') - parser.add_argument('-l', '--left', type=str, help='the amount to crop off the left of the video') - parser.add_argument('-r', '--right', type=str, help='the amount to crop off the right of the video') - parser.add_argument('-o', '--output', type=str, help='the file to output to (cannot be the same as input file)') - parser.add_argument('-y', '--yes', action='store_true', help='skip the prompt to confirm overwriting a file') + parser.add_argument( + '-c', + '--crop', + type=str, + help='the amount to crop in the format "TOP,BOTTOM,LEFT,RIGHT"') + parser.add_argument( + '-t', + '--top', + type=str, + help='the amount to crop off the top of the video') + parser.add_argument( + '-b', + '--bottom', + type=str, + help='the amount to crop off the bottom of the video') + parser.add_argument( + '-l', + '--left', + type=str, + help='the amount to crop off the left of the video') + parser.add_argument( + '-r', + '--right', + type=str, + help='the amount to crop off the right of the video') + parser.add_argument( + '-o', + '--output', + type=str, + help='the file to output to (cannot be the same as input file)') + parser.add_argument( + '-y', + '--yes', + action='store_true', + help='skip the prompt to confirm overwriting a file') args = parser.parse_args() @@ -107,7 +136,11 @@ def to_int(a, rel_to): sys.exit(1) # call ffmpeg with the required args - cmd = 'ffmpeg -hide_banner -loglevel error -i "{}" -c:a copy -filter:v "crop={}:{}:{}:{}" {}{}' + cmd = ( + 'ffmpeg -hide_banner -loglevel error -i "{}" -c:a copy ' + '-filter:v "crop={}:{}:{}:{}" {}{}' + ) + cmd = cmd.format( args.input, width,