Browse Source

Changed Sink.output to a property, fix README

Rather than having one method doing double-duty as getter and setter,
with ugly syntax, why not use a property?  Now the Sink's output can
simply be read and written as a boolean.

The README has been updated to show how to manipulate the new SinkConfig
objects, as well as what the output really looks like now.
Clara Hobbs 6 years ago
parent
commit
3226e3efd7
3 changed files with 26 additions and 29 deletions
  1. 6
    6
      README.rst
  2. 16
    19
      pdbuddy/__init__.py
  3. 4
    4
      test_pdbuddy/__init__.py

+ 6
- 6
README.rst View File

@@ -11,6 +11,7 @@ Features
11 11
 -  Configuration is represented as a SinkConfig object
12 12
 -  SinkConfig objects can be manipulated locally and written to the
13 13
    device with one method call
14
+-  Allows control of whether or not the output is enabled
14 15
 
15 16
 Examples
16 17
 --------
@@ -23,7 +24,7 @@ Open the first PD Buddy Sink device and read its configuration
23 24
     >>> import pdbuddy
24 25
     >>> pdbs = pdbuddy.Sink(list(pdbuddy.Sink.get_devices())[0])
25 26
     >>> pdbs.get_cfg()
26
-    SinkConfig(status=SinkStatus.VALID, flags=SinkFlags.NONE, v=5000, i=3000)
27
+    SinkConfig(status=<SinkStatus.VALID: 2>, flags=<SinkFlags.NONE: 0>, v=5000, i=3000)
27 28
     >>> print(pdbs.get_cfg())
28 29
     status: valid
29 30
     flags: (none)
@@ -36,11 +37,10 @@ Locally manipulate a SinkConfig object
36 37
 ::
37 38
 
38 39
     >>> cfg = pdbs.get_cfg()
39
-    >>> cfg.v = 20000
40
-    >>> cfg.i = 2250
41
-    >>> cfg.flags |= pdbuddy.SinkFlags.GIVEBACK
40
+    >>> cfg = cfg._replace(v=20000, i=2250)
41
+    >>> cfg = cfg._replace(flags=cfg.flags | pdbuddy.SinkFlags.GIVEBACK)
42 42
     >>> cfg
43
-    SinkConfig(status=SinkStatus.VALID, flags=SinkFlags.GIVEBACK, v=20000, i=2250)
43
+    SinkConfig(status=<SinkStatus.VALID: 2>, flags=<SinkFlags.GIVEBACK: 1>, v=20000, i=2250)
44 44
 
45 45
 Write the SinkConfig object to flash
46 46
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -50,7 +50,7 @@ Write the SinkConfig object to flash
50 50
     >>> pdbs.set_tmpcfg(cfg)
51 51
     >>> pdbs.write()
52 52
     >>> pdbs.get_cfg()
53
-    SinkConfig(status=SinkStatus.VALID, flags=SinkFlags.GIVEBACK, v=20000, i=2250)
53
+    SinkConfig(status=<SinkStatus.VALID: 2>, flags=<SinkFlags.GIVEBACK: 1>, v=20000, i=2250)
54 54
 
55 55
 Requirements
56 56
 ------------

+ 16
- 19
pdbuddy/__init__.py View File

@@ -156,29 +156,25 @@ class Sink:
156 156
         """Blinks the LED quickly"""
157 157
         self.send_command("identify")
158 158
 
159
-    def output(self, state=None):
160
-        """Gets or sets the state of a Sink's output
159
+    @property
160
+    def output(self):
161
+        """The state of the Sink's output
161 162
 
162 163
         Raises KeyError if the ``output`` command is not available on the Sink.
163 164
         Raises ValueError if an invalid output is read.
164
-
165
-        :param state: optional value of the output to set
166
-
167
-        :returns: the output state if state is None, None otherwise
168 165
         """
169
-        # With no parameter, return the output state
170
-        if state is None:
171
-            value = self.send_command("output")
172
-            if value[0] == b"enabled":
173
-                return True
174
-            elif value[0] == b"disabled":
175
-                return False
176
-            else:
177
-                # If unexpected text is returned, raise an exception indicating a
178
-                # firmware error
179
-                raise ValueError("unknown output state")
166
+        value = self.send_command("output")
167
+        if value[0] == b"enabled":
168
+            return True
169
+        elif value[0] == b"disabled":
170
+            return False
171
+        else:
172
+            # If unexpected text is returned, raise an exception indicating a
173
+            # firmware error
174
+            raise ValueError("unknown output state")
180 175
 
181
-        # With a parameter, set the output state
176
+    @output.setter
177
+    def output(self, state):
182 178
         if state:
183 179
             self.send_command("output enable")
184 180
         else:
@@ -218,7 +214,8 @@ class SinkConfig(namedtuple("SinkConfig", "status flags v i")):
218 214
     ``status`` should be a `SinkStatus` object.  ``flags`` should be zero or
219 215
     more `SinkFlags` values.  ``v`` is the voltage in millivolts, and ``i``
220 216
     is the current in milliamperes.  `None` is also an acceptible value for
221
-    any of the fields."""
217
+    any of the fields.
218
+    """
222 219
     __slots__ = ()
223 220
 
224 221
     def __str__(self):

+ 4
- 4
test_pdbuddy/__init__.py View File

@@ -103,11 +103,11 @@ class SinkTestCase(unittest.TestCase):
103 103
 
104 104
     def test_output(self):
105 105
         try:
106
-            self.pdbs.output(False)
107
-            self.assertFalse(self.pdbs.output())
106
+            self.pdbs.output = False
107
+            self.assertFalse(self.pdbs.output)
108 108
 
109
-            self.pdbs.output(True)
110
-            self.assertTrue(self.pdbs.output())
109
+            self.pdbs.output = True
110
+            self.assertTrue(self.pdbs.output)
111 111
         except KeyError:
112 112
             self.skipTest("Command output not supported")
113 113
         except ValueError:

Loading…
Cancel
Save