Re: [ovs-dev] [RFC PATCH 05/10] python: ovs: flowviz: Add html formatting.

2024-02-02 Thread Adrian Moreno



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.

2024-01-30 Thread Eelco Chaudron
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.

2023-12-01 Thread Adrian Moreno
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