@@ -163,16 +163,14 @@ def __setitem__(self, address, value):
163
163
fram[0] = 1
164
164
165
165
# write values 0 thru 4 with a list
166
- fram[0] = [0,1,2,3]
166
+ fram[0:4 ] = [0,1,2,3]
167
167
"""
168
168
if self .write_protected :
169
169
raise RuntimeError ("FRAM currently write protected." )
170
170
171
171
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" )
176
174
if not 0 <= address < self ._max_size :
177
175
raise ValueError (
178
176
"Address '{0}' out of range. It must be 0 <= address < {1}." .format (
@@ -183,7 +181,27 @@ def __setitem__(self, address, value):
183
181
self ._write (address , value , self ._wraparound )
184
182
185
183
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 )
187
205
188
206
def _read_address (self , address , read_buffer ):
189
207
# Implemented by subclass
0 commit comments