Skip to content

Commit 34c3f75

Browse files
authored
Merge pull request #28 from tekktrik/fix/slice-notation
Fix/slice notation
2 parents 673df4f + ae0264f commit 34c3f75

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

adafruit_fram.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,14 @@ def __setitem__(self, address, value):
163163
fram[0] = 1
164164
165165
# write values 0 thru 4 with a list
166-
fram[0] = [0,1,2,3]
166+
fram[0:4] = [0,1,2,3]
167167
"""
168168
if self.write_protected:
169169
raise RuntimeError("FRAM currently write protected.")
170170

171171
if isinstance(address, int):
172-
if not isinstance(value, (int, bytes, bytearray, list, tuple)):
173-
raise ValueError(
174-
"Data must be a single integer, bytes, bytearray, list, or tuple."
175-
)
172+
if not isinstance(value, int):
173+
raise ValueError("Data must be a single integer for single addresses")
176174
if not 0 <= address < self._max_size:
177175
raise ValueError(
178176
"Address '{0}' out of range. It must be 0 <= address < {1}.".format(
@@ -183,7 +181,27 @@ def __setitem__(self, address, value):
183181
self._write(address, value, self._wraparound)
184182

185183
elif isinstance(address, slice):
186-
raise ValueError("Slicing not available during write operations.")
184+
if not isinstance(value, (bytes, bytearray, list, tuple)):
185+
raise ValueError(
186+
"Data must be bytes, bytearray, list, "
187+
"or tuple for multiple addresses"
188+
)
189+
if (address.start is None) or (address.stop is None):
190+
raise ValueError("Boundless slices are not supported")
191+
if (address.step is not None) and (address.step != 1):
192+
raise ValueError("Slice stepping is not currently available.")
193+
if (address.start < 0) or (address.stop > self._max_size):
194+
raise ValueError(
195+
"Slice '{0}:{1}' out of range. All addresses must be 0 <= address < {2}.".format( # pylint: disable=line-too-long
196+
address.start, address.stop, self._max_size
197+
)
198+
)
199+
if len(value) < (len(range(address.start, address.stop))):
200+
raise ValueError(
201+
"Cannot set values with a list smaller than the number of indexes"
202+
)
203+
204+
self._write(address.start, value, self._wraparound)
187205

188206
def _read_address(self, address, read_buffer):
189207
# Implemented by subclass

0 commit comments

Comments
 (0)