@@ -12,10 +12,11 @@ class PinConfigurationError(Exception):
1212
1313class PinManager (object ):
1414
15- def __init__ (self , config_file , event_handlers = None ):
15+ def __init__ (self , config_file = None , config_dict = None , event_handlers = None ):
1616 self .config_file = config_file
17+ self .config_dict = config_dict
1718 self .event_handlers = event_handlers
18- self ._load_config ()
19+ self ._load_pin_config ()
1920 self ._initialize_gpio ()
2021 self ._initialize_pins ()
2122
@@ -24,10 +25,25 @@ def _initialize_gpio(self):
2425 GPIO .setwarnings (False )
2526 self ._gpio = GPIO
2627
27- def _load_config (self ):
28+ def _load_pin_config (self ):
29+ if not self .config_file and not self .config_dict :
30+ message = "PinManager requires either a 'config_file' or 'config_dict' parameter"
31+ raise PinConfigurationError (message )
32+ if self .config_file :
33+ self ._configure_from_file ()
34+ else :
35+ self ._configure_from_dict ()
36+
37+ def _configure_from_file (self ):
2838 with open (self .config_file ) as file_data :
2939 self .pin_config = yaml .safe_load (file_data )
3040
41+ def _configure_from_dict (self ):
42+ if type (self .config_dict ) != 'dict' :
43+ message = "'config_dict' parameter must be a dictionary"
44+ raise PinConfigurationError (message )
45+ self .pin_config = self .config_dict
46+
3147 def _setup_pin (self , number , options ):
3248 mode = self ._gpio .__getattribute__ (options ['mode' ])
3349 initial = self ._gpio .__getattribute__ (options .get ('initial' , 'LOW' ))
@@ -55,7 +71,7 @@ def get_config(self, pin_number=None):
5571 try :
5672 return self .pin_config [pin_number ].copy ()
5773 except KeyError :
58- message = "Pin {0} not defined in '{1}' " .format (pin_number , self . config_file )
74+ message = "Pin {0} not defined in configuration " .format (pin_number )
5975 raise PinNotDefinedError (message )
6076 return self .pin_config .copy ()
6177
@@ -66,7 +82,7 @@ def read(self, pin_number):
6682 def write (self , pin_number , value ):
6783 config = self .get_config (pin_number )
6884 if config ['mode' ] != 'OUT' :
69- message = "Pin {0} not set as 'OUT' in '{1}' " .format (pin_number , self . config_file )
85+ message = "Pin {0} not set as 'OUT' in configuration " .format (pin_number )
7086 raise PinConfigurationError (message )
7187 self ._gpio .output (pin_number , value )
7288
0 commit comments