Re: [ovs-dev] [RFC PATCH 05/10] python: ovs: flowviz: Add html formatting.
On 1/30/24 16:51, Eelco Chaudron wrote: On 1 Dec 2023, at 20:14, Adrian Moreno wrote: Add a HTML Formatter and use it to print OpenFlow flows in an HTML list with table links. Signed-off-by: Adrian Moreno No real comments from my side, this looks good! Maybe add an example to the commit message. Sure! One small potential addition request below? Acked-by: Eelco Chaudron --- python/automake.mk | 3 +- python/ovs/flowviz/html_format.py | 136 python/ovs/flowviz/ofp/cli.py | 10 ++ python/ovs/flowviz/ofp/html.py | 80 python/ovs/flowviz/ovs-flowviz.conf | 16 +++- 5 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 python/ovs/flowviz/html_format.py create mode 100644 python/ovs/flowviz/ofp/html.py diff --git a/python/automake.mk b/python/automake.mk index cf8b71659..b4c1f84be 100644 --- a/python/automake.mk +++ b/python/automake.mk @@ -67,15 +67,16 @@ ovs_flowviz = \ python/ovs/flowviz/__init__.py \ python/ovs/flowviz/console.py \ python/ovs/flowviz/format.py \ + python/ovs/flowviz/html_format.py \ python/ovs/flowviz/main.py \ python/ovs/flowviz/odp/__init__.py \ python/ovs/flowviz/odp/cli.py \ python/ovs/flowviz/ofp/__init__.py \ python/ovs/flowviz/ofp/cli.py \ + python/ovs/flowviz/ofp/html.py \ python/ovs/flowviz/ovs-flowviz \ python/ovs/flowviz/process.py - # These python files are used at build time but not runtime, # so they are not installed. EXTRA_DIST += \ diff --git a/python/ovs/flowviz/html_format.py b/python/ovs/flowviz/html_format.py new file mode 100644 index 0..ebfa65c34 --- /dev/null +++ b/python/ovs/flowviz/html_format.py @@ -0,0 +1,136 @@ +# Copyright (c) 2023 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ovs.flowviz.format import FlowFormatter, FlowBuffer, FlowStyle + + +class HTMLStyle: +"""HTMLStyle defines a style for html-formatted flows. + +Args: +color(str): Optional; a string representing the CSS color to use +anchor_gen(callable): Optional; a callable to be used to generate the +href +""" + +def __init__(self, color=None, anchor_gen=None): +self.color = color +self.anchor_gen = anchor_gen + + +class HTMLBuffer(FlowBuffer): +"""HTMLBuffer implementes FlowBuffer to provide html-based flow formatting. + +Each flow gets formatted as: +... +""" + +def __init__(self): +self._text = "" + +@property +def text(self): +return self._text + +def _append(self, string, color, href): +"""Append a key a string""" +style = ' style="color:{}"'.format(color) if color else "" +self._text += "".format(style) +if href: +self._text += "".format(href) +self._text += string +if href: +self._text += "" +self._text += "" + +def append_key(self, kv, style): +"""Append a key. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append( +kv.meta.kstring, style.color if style else "", href +) + +def append_delim(self, kv, style): +"""Append a delimiter. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append(kv.meta.delim, style.color if style else "", href) + +def append_end_delim(self, kv, style): +"""Append an end delimiter. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append( +kv.meta.end_delim, style.color if style else "", href +) + +def append_value(self, kv, style): +"""Append a value. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return
Re: [ovs-dev] [RFC PATCH 05/10] python: ovs: flowviz: Add html formatting.
On 1 Dec 2023, at 20:14, Adrian Moreno wrote: > Add a HTML Formatter and use it to print OpenFlow flows in an HTML list > with table links. > > Signed-off-by: Adrian Moreno No real comments from my side, this looks good! Maybe add an example to the commit message. One small potential addition request below? Acked-by: Eelco Chaudron > --- > python/automake.mk | 3 +- > python/ovs/flowviz/html_format.py | 136 > python/ovs/flowviz/ofp/cli.py | 10 ++ > python/ovs/flowviz/ofp/html.py | 80 > python/ovs/flowviz/ovs-flowviz.conf | 16 +++- > 5 files changed, 243 insertions(+), 2 deletions(-) > create mode 100644 python/ovs/flowviz/html_format.py > create mode 100644 python/ovs/flowviz/ofp/html.py > > diff --git a/python/automake.mk b/python/automake.mk > index cf8b71659..b4c1f84be 100644 > --- a/python/automake.mk > +++ b/python/automake.mk > @@ -67,15 +67,16 @@ ovs_flowviz = \ > python/ovs/flowviz/__init__.py \ > python/ovs/flowviz/console.py \ > python/ovs/flowviz/format.py \ > + python/ovs/flowviz/html_format.py \ > python/ovs/flowviz/main.py \ > python/ovs/flowviz/odp/__init__.py \ > python/ovs/flowviz/odp/cli.py \ > python/ovs/flowviz/ofp/__init__.py \ > python/ovs/flowviz/ofp/cli.py \ > + python/ovs/flowviz/ofp/html.py \ > python/ovs/flowviz/ovs-flowviz \ > python/ovs/flowviz/process.py > > - > # These python files are used at build time but not runtime, > # so they are not installed. > EXTRA_DIST += \ > diff --git a/python/ovs/flowviz/html_format.py > b/python/ovs/flowviz/html_format.py > new file mode 100644 > index 0..ebfa65c34 > --- /dev/null > +++ b/python/ovs/flowviz/html_format.py > @@ -0,0 +1,136 @@ > +# Copyright (c) 2023 Red Hat, Inc. > +# > +# Licensed under the Apache License, Version 2.0 (the "License"); > +# you may not use this file except in compliance with the License. > +# You may obtain a copy of the License at: > +# > +# http://www.apache.org/licenses/LICENSE-2.0 > +# > +# Unless required by applicable law or agreed to in writing, software > +# distributed under the License is distributed on an "AS IS" BASIS, > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > +# See the License for the specific language governing permissions and > +# limitations under the License. > + > +from ovs.flowviz.format import FlowFormatter, FlowBuffer, FlowStyle > + > + > +class HTMLStyle: > +"""HTMLStyle defines a style for html-formatted flows. > + > +Args: > +color(str): Optional; a string representing the CSS color to use > +anchor_gen(callable): Optional; a callable to be used to generate the > +href > +""" > + > +def __init__(self, color=None, anchor_gen=None): > +self.color = color > +self.anchor_gen = anchor_gen > + > + > +class HTMLBuffer(FlowBuffer): > +"""HTMLBuffer implementes FlowBuffer to provide html-based flow > formatting. > + > +Each flow gets formatted as: > +... > +""" > + > +def __init__(self): > +self._text = "" > + > +@property > +def text(self): > +return self._text > + > +def _append(self, string, color, href): > +"""Append a key a string""" > +style = ' style="color:{}"'.format(color) if color else "" > +self._text += "".format(style) > +if href: > +self._text += "".format(href) > +self._text += string > +if href: > +self._text += "" > +self._text += "" > + > +def append_key(self, kv, style): > +"""Append a key. > +Args: > +kv (KeyValue): the KeyValue instance to append > +style (HTMLStyle): the style to use > +""" > +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" > +return self._append( > +kv.meta.kstring, style.color if style else "", href > +) > + > +def append_delim(self, kv, style): > +"""Append a delimiter. > +Args: > +kv (KeyValue): the KeyValue instance to append > +style (HTMLStyle): the style to use > +""" > +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" > +return self._append(kv.meta.delim, style.color if style else "", > href) > + > +def append_end_delim(self, kv, style): > +"""Append an end delimiter. > +Args: > +kv (KeyValue): the KeyValue instance to append > +style (HTMLStyle): the style to use > +""" > +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" > +return self._append( > +kv.meta.end_delim, style.color if style else "", href > +) > + > +def append_value(self, kv, style): > +"""Append a value. > +Args: > +kv (KeyValue): the KeyValue
[ovs-dev] [RFC PATCH 05/10] python: ovs: flowviz: Add html formatting.
Add a HTML Formatter and use it to print OpenFlow flows in an HTML list with table links. Signed-off-by: Adrian Moreno --- python/automake.mk | 3 +- python/ovs/flowviz/html_format.py | 136 python/ovs/flowviz/ofp/cli.py | 10 ++ python/ovs/flowviz/ofp/html.py | 80 python/ovs/flowviz/ovs-flowviz.conf | 16 +++- 5 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 python/ovs/flowviz/html_format.py create mode 100644 python/ovs/flowviz/ofp/html.py diff --git a/python/automake.mk b/python/automake.mk index cf8b71659..b4c1f84be 100644 --- a/python/automake.mk +++ b/python/automake.mk @@ -67,15 +67,16 @@ ovs_flowviz = \ python/ovs/flowviz/__init__.py \ python/ovs/flowviz/console.py \ python/ovs/flowviz/format.py \ + python/ovs/flowviz/html_format.py \ python/ovs/flowviz/main.py \ python/ovs/flowviz/odp/__init__.py \ python/ovs/flowviz/odp/cli.py \ python/ovs/flowviz/ofp/__init__.py \ python/ovs/flowviz/ofp/cli.py \ + python/ovs/flowviz/ofp/html.py \ python/ovs/flowviz/ovs-flowviz \ python/ovs/flowviz/process.py - # These python files are used at build time but not runtime, # so they are not installed. EXTRA_DIST += \ diff --git a/python/ovs/flowviz/html_format.py b/python/ovs/flowviz/html_format.py new file mode 100644 index 0..ebfa65c34 --- /dev/null +++ b/python/ovs/flowviz/html_format.py @@ -0,0 +1,136 @@ +# Copyright (c) 2023 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ovs.flowviz.format import FlowFormatter, FlowBuffer, FlowStyle + + +class HTMLStyle: +"""HTMLStyle defines a style for html-formatted flows. + +Args: +color(str): Optional; a string representing the CSS color to use +anchor_gen(callable): Optional; a callable to be used to generate the +href +""" + +def __init__(self, color=None, anchor_gen=None): +self.color = color +self.anchor_gen = anchor_gen + + +class HTMLBuffer(FlowBuffer): +"""HTMLBuffer implementes FlowBuffer to provide html-based flow formatting. + +Each flow gets formatted as: +... +""" + +def __init__(self): +self._text = "" + +@property +def text(self): +return self._text + +def _append(self, string, color, href): +"""Append a key a string""" +style = ' style="color:{}"'.format(color) if color else "" +self._text += "".format(style) +if href: +self._text += "".format(href) +self._text += string +if href: +self._text += "" +self._text += "" + +def append_key(self, kv, style): +"""Append a key. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append( +kv.meta.kstring, style.color if style else "", href +) + +def append_delim(self, kv, style): +"""Append a delimiter. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append(kv.meta.delim, style.color if style else "", href) + +def append_end_delim(self, kv, style): +"""Append an end delimiter. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append( +kv.meta.end_delim, style.color if style else "", href +) + +def append_value(self, kv, style): +"""Append a value. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use +""" +href = style.anchor_gen(kv) if (style and style.anchor_gen) else "" +return self._append( +kv.meta.vstring, style.color if style else "", href +) + +def append_extra(self, extra, style): +"""Append extra string. +Args: +kv (KeyValue): the KeyValue instance to append +style (HTMLStyle): the style to use