Hi, thanks for your comment. > Looks like conversion rules are class-wise static. > So it would work to add class attributes, _convert_list, to each > classes instead of dynamically adding conversion rule to each instances.
It is processing in consideration of inheriting. (to avoid ignoring base class's convertion rules) But it is static I think too, so I grope for a good method. thanks. (2013年07月19日 16:09), [email protected] wrote: > On Fri, Jul 19, 2013 at 01:54:37PM +0900, watanabe.fumitaka wrote: >> Signed-off-by: WATANABE Fumitaka <[email protected]> >> --- >> ryu/lib/packet/packet.py | 4 ++++ >> ryu/lib/packet/packet_base.py | 23 ++++++++++++++++++++++- >> 2 files changed, 26 insertions(+), 1 deletion(-) >> >> diff --git a/ryu/lib/packet/packet.py b/ryu/lib/packet/packet.py >> index f80948a..785a28b 100644 >> --- a/ryu/lib/packet/packet.py >> +++ b/ryu/lib/packet/packet.py >> @@ -127,3 +127,7 @@ class Packet(object): >> issubclass(protocol, packet_base.PacketBase)): >> return protocol in [p.__class__ for p in self.protocols] >> return protocol in self.protocols >> + >> + def __str__(self): >> + return ', '.join(repr(protocol) for protocol in self.protocols) >> + __repr__ = __str__ # note: str(list) uses __repr__ for elements >> diff --git a/ryu/lib/packet/packet_base.py b/ryu/lib/packet/packet_base.py >> index e61e7ee..519cd2f 100644 >> --- a/ryu/lib/packet/packet_base.py >> +++ b/ryu/lib/packet/packet_base.py >> @@ -14,9 +14,30 @@ >> # limitations under the License. >> >> import abc >> +from ryu.lib import stringify >> >> >> -class PacketBase(object): >> +class StringifyMixin(stringify.StringifyMixin): >> + >> + def __init__(self): >> + super(StringifyMixin, self).__init__() >> + >> + def register_str_options(self, convert_list): >> + # individual string conversion functions >> + self._convert_list = getattr(self, '_convert_list', {}) >> + self._convert_list.update(convert_list) > > Looks like conversion rules are class-wise static. > So it would work to add class attributes, _convert_list, to each > classes instead of dynamically adding conversion rule to each instances. > > >> + >> + def stringify_attrs(self): >> + attrs = super(StringifyMixin, self).stringify_attrs() >> + convert_list = getattr(self, '_convert_list', {}) >> + >> + for k, v in attrs: >> + if k in convert_list: >> + v = convert_list[k](v) >> + yield(k, v) >> + >> + >> +class PacketBase(StringifyMixin): >> """A base class for a protocol (ethernet, ipv4, ...) header.""" >> __metaclass__ = abc.ABCMeta >> _TYPES = {} >> -- 1.7.10.4 >> >> >> ------------------------------------------------------------------------------ >> See everything from the browser to the database with AppDynamics >> Get end-to-end visibility with application monitoring from AppDynamics >> Isolate bottlenecks and diagnose root cause in seconds. >> Start your free trial of AppDynamics Pro today! >> http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk >> _______________________________________________ >> Ryu-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/ryu-devel >> > ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
