Revision 8bc17ebb lib/opcodes.py
b/lib/opcodes.py | ||
---|---|---|
434 | 434 |
slots = mcs._GetSlots(attrs) |
435 | 435 |
assert "OP_DSC_FIELD" not in attrs or attrs["OP_DSC_FIELD"] in slots, \ |
436 | 436 |
"Class '%s' uses unknown field in OP_DSC_FIELD" % name |
437 |
assert ("OP_DSC_FORMATTER" not in attrs or |
|
438 |
callable(attrs["OP_DSC_FORMATTER"])), \ |
|
439 |
("Class '%s' uses non-callable in OP_DSC_FORMATTER (%s)" % |
|
440 |
(name, type(attrs["OP_DSC_FORMATTER"]))) |
|
437 | 441 |
|
438 | 442 |
attrs["OP_ID"] = _NameToId(name) |
439 | 443 |
|
... | ... | |
598 | 602 |
@cvar OP_DSC_FIELD: The name of a field whose value will be included in the |
599 | 603 |
string returned by Summary(); see the docstring of that |
600 | 604 |
method for details). |
605 |
@cvar OP_DSC_FORMATTER: A callable that should format the OP_DSC_FIELD; if |
|
606 |
not present, then the field will be simply converted |
|
607 |
to string |
|
601 | 608 |
@cvar OP_PARAMS: List of opcode attributes, the default values they should |
602 | 609 |
get if not already defined, and types they must match. |
603 | 610 |
@cvar OP_RESULT: Callable to verify opcode result |
... | ... | |
685 | 692 |
field_name = getattr(self, "OP_DSC_FIELD", None) |
686 | 693 |
if field_name: |
687 | 694 |
field_value = getattr(self, field_name, None) |
688 |
if isinstance(field_value, (list, tuple)): |
|
695 |
field_formatter = getattr(self, "OP_DSC_FORMATTER", None) |
|
696 |
if callable(field_formatter): |
|
697 |
field_value = field_formatter(field_value) |
|
698 |
elif isinstance(field_value, (list, tuple)): |
|
689 | 699 |
field_value = ",".join(str(i) for i in field_value) |
690 | 700 |
txt = "%s(%s)" % (txt, field_value) |
691 | 701 |
return txt |
... | ... | |
1958 | 1968 |
("repeat", 0, ht.TNonNegativeInt, None), |
1959 | 1969 |
] |
1960 | 1970 |
|
1971 |
def OP_DSC_FORMATTER(self, value): # pylint: disable=C0103,R0201 |
|
1972 |
"""Custom formatter for duration. |
|
1973 |
|
|
1974 |
""" |
|
1975 |
try: |
|
1976 |
v = float(value) |
|
1977 |
except TypeError: |
|
1978 |
v = value |
|
1979 |
return str(v) |
|
1980 |
|
|
1961 | 1981 |
|
1962 | 1982 |
class OpTestAllocator(OpCode): |
1963 | 1983 |
"""Allocator framework testing. |
Also available in: Unified diff