| 
									
										
										
										
											2020-05-23 01:45:40 +02:00
										 |  |  | import abc | 
					
						
							|  |  |  | from inkycal.custom import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class inkycal_module(metaclass=abc.ABCMeta): | 
					
						
							|  |  |  |   """Generic base class for inykcal modules""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @classmethod | 
					
						
							|  |  |  |   def __subclasshook__(cls, subclass): | 
					
						
							|  |  |  |     return (hasattr(subclass, 'generate_image') and | 
					
						
							|  |  |  |       callable(subclass.generate_image) or | 
					
						
							|  |  |  |       NotImplemented) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def __init__(self, section_size, section_config): | 
					
						
							|  |  |  |     # Initializes base module | 
					
						
							|  |  |  |     # sets properties shared amongst all sections | 
					
						
							|  |  |  |     self.config = section_config | 
					
						
							|  |  |  |     self.width, self.height = section_size | 
					
						
							|  |  |  |     self.fontsize = 12 | 
					
						
							|  |  |  |     self.margin_x = 0.02 | 
					
						
							|  |  |  |     self.margin_y = 0.05 | 
					
						
							|  |  |  |     self.font = ImageFont.truetype( | 
					
						
							|  |  |  |       fonts['NotoSans-SemiCondensed'], size = self.fontsize) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def set(self, help=False, **kwargs): | 
					
						
							|  |  |  |     """Set attributes of class, e.g. class.set(key=value)
 | 
					
						
							|  |  |  |     see that can be changed by setting help to True | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     lst = dir(self).copy() | 
					
						
							|  |  |  |     options = [_ for _ in lst if not _.startswith('_')] | 
					
						
							|  |  |  |     if 'logger' in options: options.remove('logger') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if help == True: | 
					
						
							|  |  |  |       print('The following can be configured:') | 
					
						
							|  |  |  |       print(options) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for key, value in kwargs.items(): | 
					
						
							|  |  |  |       if key in options: | 
					
						
							| 
									
										
										
										
											2020-06-13 15:13:53 +02:00
										 |  |  |         if key == 'fontsize': | 
					
						
							|  |  |  |           self.font  = ImageFont.truetype(self.font.path, value) | 
					
						
							|  |  |  |           self.fontsize = value | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |           setattr(self, key, value) | 
					
						
							|  |  |  |           print("set '{}' to '{}'".format(key,value)) | 
					
						
							| 
									
										
										
										
											2020-05-23 01:45:40 +02:00
										 |  |  |       else: | 
					
						
							|  |  |  |         print('{0} does not exist'.format(key)) | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Check if validation has been implemented | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |       self._validate() | 
					
						
							|  |  |  |     except AttributeError: | 
					
						
							|  |  |  |       print('no validation implemented') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @abc.abstractmethod | 
					
						
							|  |  |  |   def generate_image(self): | 
					
						
							|  |  |  |     # Generate image for this module with specified parameters | 
					
						
							|  |  |  |     raise NotImplementedError( | 
					
						
							|  |  |  |       'The developers were too lazy to implement this function') |