59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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:
 | |
|         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))
 | |
|       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')
 |