Skip to content

Commit 2c06cbc

Browse files
author
Melissa LeBlanc-Williams
committed
Added suggestions by @danh. Fixed off by one error on slicing.
1 parent 9b9e2f0 commit 2c06cbc

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

adafruit_fram.py

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ def __len__(self):
117117
len(fram)
118118
119119
# can be used with range
120-
for i in range(0, len(fram) - 1)
120+
for i in range(0, len(fram))
121121
"""
122122
return self._max_size
123123

124124

125-
def __getitem__(self, key):
125+
def __getitem__(self, address):
126126
""" Read the value at the given index, or values in a slice.
127127
128128
.. code-block:: python
@@ -133,28 +133,29 @@ def __getitem__(self, key):
133133
# read values 0 thru 9 with a slice
134134
fram[0:9]
135135
"""
136-
if isinstance(key, int):
137-
if key >= self._max_size:
138-
raise ValueError("Register '{0}' greater than maximum FRAM register."
139-
" ({1})".format(key, self._max_size - 1))
136+
if isinstance(address, int):
137+
if not (0 < address < self._max_size):
138+
raise ValueError("Address '{0}' out of range. It must be 0 <= address < {1}."
139+
.format(address, self._max_size))
140140
buffer = bytearray(1)
141-
read_buffer = self._read_register(key, buffer)
142-
elif isinstance(key, slice):
143-
if key.step is not None:
141+
read_buffer = self._read_register(address, buffer)
142+
elif isinstance(address, slice):
143+
if address.step is not None:
144144
raise ValueError("Slice stepping is not currently available.")
145145

146-
registers = list(range(key.start if key.start is not None else 0,
147-
key.stop if key.stop is not None else self._max_size))
148-
if (registers[0] + len(registers)) > self._max_size:
149-
raise ValueError("Register + Length greater than maximum FRAM register."
150-
" ({0})".format(self._max_size - 1))
146+
registers = list(range(address.start if address.start is not None else 0,
147+
address.stop + 1 if address.stop is not None else self._max_size))
148+
if registers[0] < 0 or (registers[0] + len(registers)) > self._max_size:
149+
raise ValueError("Address slice out of range. It must be 0 <= [starting address"
150+
":stopping address] < {1}."
151+
.format(address, self._max_size))
151152

152153
buffer = bytearray(len(registers))
153154
read_buffer = self._read_register(registers[0], buffer)
154155

155156
return read_buffer
156157

157-
def __setitem__(self, key, value):
158+
def __setitem__(self, address, value):
158159
""" Write the value at the given starting index.
159160
160161
.. code-block:: python
@@ -168,17 +169,17 @@ def __setitem__(self, key, value):
168169
if self.write_protected:
169170
raise RuntimeError("FRAM currently write protected.")
170171

171-
if isinstance(key, int):
172+
if isinstance(address, int):
172173
if not isinstance(value, (int, bytearray, list, tuple)):
173174
raise ValueError("Data must be a single integer, or a bytearray,"
174175
" list, or tuple.")
175-
if key >= self._max_size:
176-
raise ValueError("Requested register '{0}' greater than maximum"
177-
" FRAM register. ({1})".format(key, self._max_size - 1))
176+
if not (0 < address < self._max_size):
177+
raise ValueError("Address '{0}' out of range. It must be 0 <= address < {1}."
178+
.format(address, self._max_size))
178179

179-
self._write(key, value, self._wraparound)
180+
self._write(address, value, self._wraparound)
180181

181-
elif isinstance(key, slice):
182+
elif isinstance(address, slice):
182183
raise ValueError("Slicing not available during write operations.")
183184

184185
def _read_register(self, register, read_buffer):
@@ -241,7 +242,7 @@ def _write(self, start_register, data, wraparound=False):
241242
pass
242243
else:
243244
raise ValueError("Starting register + data length extends beyond"
244-
" FRAM maximum register. Use ``write_wraparound`` to"
245+
" FRAM maximum address. Use ``write_wraparound`` to"
245246
" override this warning.")
246247
with self._i2c as i2c:
247248
for i in range(0, data_length):

0 commit comments

Comments
 (0)