hdl.rec: fix slicing of records.
This commit is contained in:
parent
dda8f34d39
commit
611c25f909
|
@ -85,16 +85,19 @@ class Record(Value):
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return self[name]
|
return self[name]
|
||||||
|
|
||||||
def __getitem__(self, name):
|
def __getitem__(self, item):
|
||||||
|
if isinstance(item, str):
|
||||||
try:
|
try:
|
||||||
return self.fields[name]
|
return self.fields[item]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
if self.name is None:
|
if self.name is None:
|
||||||
reference = "Unnamed record"
|
reference = "Unnamed record"
|
||||||
else:
|
else:
|
||||||
reference = "Record '{}'".format(self.name)
|
reference = "Record '{}'".format(self.name)
|
||||||
raise NameError("{} does not have a field '{}'. Did you mean one of: {}?"
|
raise NameError("{} does not have a field '{}'. Did you mean one of: {}?"
|
||||||
.format(reference, name, ", ".join(self.fields))) from None
|
.format(reference, item, ", ".join(self.fields))) from None
|
||||||
|
else:
|
||||||
|
return super().__getitem__(item)
|
||||||
|
|
||||||
def shape(self):
|
def shape(self):
|
||||||
return sum(len(f) for f in self.fields.values()), False
|
return sum(len(f) for f in self.fields.values()), False
|
||||||
|
|
|
@ -79,6 +79,15 @@ class RecordTestCase(FHDLTestCase):
|
||||||
self.assertEqual(repr(r), "(rec <unnamed> stb)")
|
self.assertEqual(repr(r), "(rec <unnamed> stb)")
|
||||||
self.assertEqual(r.stb.name, "stb")
|
self.assertEqual(r.stb.name, "stb")
|
||||||
|
|
||||||
|
def test_iter(self):
|
||||||
|
r = Record([
|
||||||
|
("data", 4),
|
||||||
|
("stb", 1),
|
||||||
|
])
|
||||||
|
|
||||||
|
self.assertEqual(repr(r[0]), "(slice (rec r data stb) 0:1)")
|
||||||
|
self.assertEqual(repr(r[0:3]), "(slice (rec r data stb) 0:3)")
|
||||||
|
|
||||||
def test_wrong_field(self):
|
def test_wrong_field(self):
|
||||||
r = Record([
|
r = Record([
|
||||||
("stb", 1),
|
("stb", 1),
|
||||||
|
|
Loading…
Reference in a new issue