mirror of
				https://github.com/KevinMidboe/termForecast.git
				synced 2025-10-29 18:00:17 +00:00 
			
		
		
		
	Created a script for animating loading when fetching location and weather information.
This commit is contained in:
		
							
								
								
									
										40
									
								
								loadingAnimation.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								loadingAnimation.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | #!/usr/bin/env python3.6 | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # @Author: KevinMidboe | ||||||
|  | # @Date:   2017-07-30 13:53:38 | ||||||
|  | # @Last Modified by:   KevinMidboe | ||||||
|  | # @Last Modified time: 2017-07-30 13:53:46 | ||||||
|  |  | ||||||
|  | import itertools | ||||||
|  | from threading import Thread | ||||||
|  | from time import sleep | ||||||
|  | from sys import stdout | ||||||
|  |  | ||||||
|  | class LoadingAnimation(object): | ||||||
|  | 	def __init__(self): | ||||||
|  | 		self.done = False | ||||||
|  |  | ||||||
|  | 	def start(self): | ||||||
|  | 		t = Thread(target=self.animate) | ||||||
|  | 		t.start() | ||||||
|  |  | ||||||
|  | 	def animate(self): | ||||||
|  | 	    for c in itertools.cycle(['|', '/', '-', '\\']): | ||||||
|  | 	        if self.done: | ||||||
|  | 	            break | ||||||
|  | 	        stdout.write('\rFetching ' + c) | ||||||
|  | 	        stdout.flush() | ||||||
|  | 	        sleep(0.1) | ||||||
|  |  | ||||||
|  | 	def stop(self): | ||||||
|  | 		self.done = True | ||||||
|  |  | ||||||
|  | def main(): | ||||||
|  | 	loadingAnimation = LoadingAnimation() | ||||||
|  | 	loadingAnimation.start() | ||||||
|  | 	sleep(2) | ||||||
|  | 	loadingAnimation.stop() | ||||||
|  | 	stdout.write('\rTemp          \n') | ||||||
|  | 	 | ||||||
|  | if __name__ == '__main__': | ||||||
|  | 	main() | ||||||
| @@ -3,7 +3,7 @@ | |||||||
| # @Author: KevinMidboe | # @Author: KevinMidboe | ||||||
| # @Date:   2017-07-27 21:26:53 | # @Date:   2017-07-27 21:26:53 | ||||||
| # @Last Modified by:   KevinMidboe | # @Last Modified by:   KevinMidboe | ||||||
| # @Last Modified time: 2017-07-30 10:34:41 | # @Last Modified time: 2017-07-30 13:16:18 | ||||||
|  |  | ||||||
| # TODO LIST | # TODO LIST | ||||||
| # Get coordinates from IP ✔ | # Get coordinates from IP ✔ | ||||||
| @@ -13,16 +13,24 @@ | |||||||
| # Match weather description to icons ✔ | # Match weather description to icons ✔ | ||||||
| # Check internet connection in a strict way | # Check internet connection in a strict way | ||||||
| # Add table for time periode | # Add table for time periode | ||||||
|  | # Add cache for quicker location for same ip | ||||||
|  |  | ||||||
| import fire, json, geoip2.database, ssl | import fire, json, geoip2.database, ssl, os | ||||||
| from yr.libyr import Yr | from yr.libyr import Yr | ||||||
| from requests import get | from requests import get | ||||||
| from pprint import pprint | from pprint import pprint | ||||||
|  | from sys import stdout | ||||||
|  |  | ||||||
| from emojiParser import EmojiParser | from emojiParser import EmojiParser | ||||||
|  | from waiting_animation import LoadingAnimation | ||||||
|  |  | ||||||
|  |  | ||||||
| class Location(object): | class Location(object): | ||||||
| 	def __init__(self): | 	def __init__(self): | ||||||
|  |  | ||||||
|  | 		abspath = os.path.abspath(__file__) | ||||||
|  | 		dname = os.path.dirname(abspath) | ||||||
|  | 		os.chdir(dname) | ||||||
| 		self.reader = geoip2.database.Reader('conf/GeoLite2-City.mmdb') | 		self.reader = geoip2.database.Reader('conf/GeoLite2-City.mmdb') | ||||||
| 		self.getIP() | 		self.getIP() | ||||||
|  |  | ||||||
| @@ -61,7 +69,7 @@ class Location(object): | |||||||
| 		return area | 		return area | ||||||
|  |  | ||||||
|  |  | ||||||
| class WeatherForcast(object): | class WeatherForecast(object): | ||||||
| 	def __init__(self, area=None): | 	def __init__(self, area=None): | ||||||
| 		# TODO search for area coordinates in a map | 		# TODO search for area coordinates in a map | ||||||
| 		self.area = area | 		self.area = area | ||||||
| @@ -95,18 +103,22 @@ class WeatherForcast(object): | |||||||
| 		emojiParser = EmojiParser(now['symbol']['@name']) | 		emojiParser = EmojiParser(now['symbol']['@name']) | ||||||
| 		weatherIcon_output = emojiParser.convertSematicsToEmoji() | 		weatherIcon_output = emojiParser.convertSematicsToEmoji() | ||||||
|  |  | ||||||
| 		print('%s %s' % (temperature_output, weatherIcon_output)) | 		return ('%s %s' % (temperature_output, weatherIcon_output)) | ||||||
|  |  | ||||||
|  |  | ||||||
| class TermWeather(object): | class TermWeather(object): | ||||||
| 	# Add now, forcast as args | 	# Add now, forecast as args | ||||||
| 	def auto(self): | 	def auto(self): | ||||||
| 		weatherForcast = WeatherForcast() | 		loadingAnimation = LoadingAnimation() | ||||||
| 		weatherForcast.now() | 		loadingAnimation.start() | ||||||
|  | 		weatherForecast = WeatherForecast() | ||||||
|  | 		forecast = weatherForecast.now() | ||||||
|  | 		loadingAnimation.stop() | ||||||
|  | 		stdout.write('\r%s          \n' % forecast) | ||||||
|  |  | ||||||
| 	def fetch(self, area=None): | 	def fetch(self, area=None): | ||||||
| 		weatherForcast = WeatherForcast(area) | 		weatherForecast = WeatherForcast(area) | ||||||
| 		weatherForcast.now() | 		weatherForecast.now() | ||||||
| 		 | 		 | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user