Folder restructuring
Reorganised folders and files
This commit is contained in:
		
							
								
								
									
										2
									
								
								inkycal/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								inkycal/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| from .settings_parser import inkycal_settings | ||||
| print('loaded settings') | ||||
							
								
								
									
										42
									
								
								inkycal/configuration/settings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								inkycal/configuration/settings.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| { | ||||
| 	"language": "en", | ||||
| 	"units": "metric", | ||||
| 	"hours": 24, | ||||
| 	"model": "epd_7_in_5_v2_colour", | ||||
| 	"update_interval": 60, | ||||
| 	"calibration_hours": [ | ||||
| 		0, | ||||
| 		12, | ||||
| 		18 | ||||
| 	], | ||||
| 	"display_orientation": "normal", | ||||
| 	"panels": [ | ||||
| 		{ | ||||
| 			"location": "top", | ||||
| 			"type": "inkycal_weather", | ||||
| 			"config": { | ||||
| 				"api_key": "topsecret", | ||||
| 				"location": "Stuttgart, DE" | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"location": "middle", | ||||
| 			"type": "inkycal_calendar", | ||||
| 			"config": { | ||||
| 				"week_starts_on": "Monday", | ||||
| 				"ical_urls": [ | ||||
| 					"https://calendar.google.com/calendar/ical/en.usa%23holiday%40group.v.calendar.google.com/public/basic.ics" | ||||
| 				] | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"location": "bottom", | ||||
| 			"type": "inkycal_rss", | ||||
| 			"config": { | ||||
| 				"rss_urls": [ | ||||
| 					"http://feeds.bbci.co.uk/news/world/rss.xml#" | ||||
| 				] | ||||
| 			} | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
							
								
								
									
										137
									
								
								inkycal/configuration/settings_parser.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								inkycal/configuration/settings_parser.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,137 @@ | ||||
| #!/usr/bin/python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| """ | ||||
| Json settings parser. Currently in alpha! | ||||
| Copyright by aceisace | ||||
| """ | ||||
|  | ||||
| import json | ||||
| from os import chdir #Ad-hoc | ||||
|  | ||||
| # TODO: | ||||
| # Check of jsmin can/should be used to parse jsonc settings file | ||||
| # Remove check of fixed settings file location. Ask user to specify path | ||||
| # to settings file | ||||
|  | ||||
| from os import path | ||||
|  | ||||
| class inkycal_settings: | ||||
|   """Load and validate settings from the settings file""" | ||||
|  | ||||
|   __supported_languages = ['en', 'de', 'ru', 'it', 'es', 'fr', 'el', 'sv', 'nl', | ||||
|                      'pl', 'ua', 'nb', 'vi', 'zh_tw', 'zh-cn', 'ja', 'ko'] | ||||
|   __supported_units = ['metric', 'imperial'] | ||||
|   __supported_hours = [12, 24] | ||||
|   __supported_display_orientation = ['normal', 'upside_down'] | ||||
|   __supported_models = [ | ||||
|   'epd_7_in_5_v2_colour', 'epd_7_in_5_v2', | ||||
|   'epd_7_in_5_colour', 'epd_7_in_5', | ||||
|   'epd_5_in_83_colour','epd_5_in_83', | ||||
|   'epd_4_in_2_colour', 'epd_4_in_2' | ||||
|   ] | ||||
|  | ||||
|   def __init__(self, settings_file_path): | ||||
|     """Load settings from path (folder or settings.json file)""" | ||||
|     try: | ||||
|       if settings_file_path.endswith('settings.json'): | ||||
|         folder = settings_file_path.split('/settings.json')[0] | ||||
|       else: | ||||
|         folder = settings_file_path | ||||
|  | ||||
|       chdir(folder) | ||||
|       with open("settings.json") as file: | ||||
|         self.raw_settings = json.load(file) | ||||
|  | ||||
|     except FileNotFoundError: | ||||
|       print('No settings file found in specified location') | ||||
|  | ||||
|     try: | ||||
|       self.language = self.raw_settings['language'] | ||||
|       if self.language not in self.__supported_languages or type(self.language) != str: | ||||
|         print('Unsupported language: {}!. Switching to english'.format(language)) | ||||
|         self.language = 'en' | ||||
|  | ||||
|  | ||||
|       self.units = self.raw_settings['units'] | ||||
|       if self.units not in self.__supported_units or type(self.units) != str: | ||||
|         print('Units ({}) not supported, using metric units.'.format(units)) | ||||
|         self.units = 'metric' | ||||
|  | ||||
|  | ||||
|       self.hours = self.raw_settings['hours'] | ||||
|       if self.hours not in self.__supported_hours or type(self.hours) != int: | ||||
|         print('Selected hours: {} not supported, using 24-hours'.format(hours)) | ||||
|         self.hours = '24' | ||||
|  | ||||
|  | ||||
|       self.model = self.raw_settings['model'] | ||||
|       if self.model not in self.__supported_models or type(self.model) != str: | ||||
|         print('Model: {} not supported. Please select a valid option'.format(model)) | ||||
|         print('Switching to 7.5" ePaper black-white (v1) (fallback)') | ||||
|         self.model = 'epd_7_in_5' | ||||
|  | ||||
|  | ||||
|       self.calibration_hours = self.raw_settings['calibration_hours'] | ||||
|       if not self.calibration_hours or type(self.calibration_hours) != list: | ||||
|         print('Invalid calibration hours: {}'.format(calibration_hours)) | ||||
|         print('Using default option, 0am,12am,6pm') | ||||
|         self.calibration_hours = [0,12,18] | ||||
|  | ||||
|  | ||||
|       self.display_orientation = self.raw_settings['display_orientation'] | ||||
|       if self.display_orientation not in self.__supported_display_orientation or type( | ||||
|         self.display_orientation) != str: | ||||
|         print('Invalid ({}) display orientation.'.format(display_orientation)) | ||||
|         print('Switching to default orientation, normal-mode') | ||||
|         self.display_orientation = 'normal' | ||||
|  | ||||
|     ### Check if empty, If empty, set to none | ||||
|       for sections in self.raw_settings['panels']: | ||||
|  | ||||
|         if sections['location'] == 'top': | ||||
|           self.top_section = sections['type'] | ||||
|           self.top_section_config = sections['config'] | ||||
|  | ||||
|         elif sections['location'] == 'middle': | ||||
|           self.middle_section = sections['type'] | ||||
|           self.middle_section_config = sections['config'] | ||||
|  | ||||
|         elif sections['location'] == 'bottom': | ||||
|           self.bottom_section = sections['type'] | ||||
|           self.bottom_section_config = sections['config'] | ||||
|  | ||||
|  | ||||
|       print('settings loaded') | ||||
|     except Exception as e: | ||||
|       print(e.reason) | ||||
|  | ||||
|   def module_init(self, module_name): | ||||
|     """Get all data from settings file by providing the module name""" | ||||
|     if module_name == self.top_section: | ||||
|       config = self.top_section_config | ||||
|     elif module_name == self.middle_section: | ||||
|       config = self.middle_section_config | ||||
|     elif module_name == self.bottom_section: | ||||
|       config = self.bottom_section_config | ||||
|     else: | ||||
|       print('Invalid module name!') | ||||
|       config = None | ||||
|  | ||||
|     for module in self.raw_settings['panels']: | ||||
|       if module_name == module['type']: | ||||
|         location = module['location'] | ||||
|  | ||||
|     return config, location | ||||
|  | ||||
|   def which_modules(self): | ||||
|     """Returns a list of modules (from settings file) which should be loaded | ||||
|     on start""" | ||||
|     lst = [self.top_section, self.middle_section, self.bottom_section] | ||||
|     return lst | ||||
|  | ||||
|    | ||||
| def main(): | ||||
|   print('running settings parser as standalone...') | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|   main() | ||||
		Reference in New Issue
	
	Block a user