Skip to content

Commit df6f9a9

Browse files
author
Brian Hines
committed
Configure with file or dictionary
1 parent 727c725 commit df6f9a9

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

pi_pin_manager/pins.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ class PinConfigurationError(Exception):
1212

1313
class 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

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='Pi-Pin-Manager',
5-
version='0.0.12',
5+
version='0.1.0',
66
author='Brian Hines',
77
author_email='brian@projectweekend.net',
88
packages=['pi_pin_manager'],

0 commit comments

Comments
 (0)