diff utils.py @ 0:915447b14520 draft

planemo upload for repository https://github.com/goeckslab/Galaxy-Pycaret commit d79b0f722b7d09505a526d1a4332f87e548a3df1
author goeckslab
date Wed, 11 Dec 2024 05:00:00 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utils.py	Wed Dec 11 05:00:00 2024 +0000
@@ -0,0 +1,157 @@
+import base64
+import logging
+
+logging.basicConfig(level=logging.DEBUG)
+LOG = logging.getLogger(__name__)
+
+
+def get_html_template():
+    return """
+    <html>
+    <head>
+        <title>Model Training Report</title>
+        <style>
+          body {
+              font-family: Arial, sans-serif;
+              margin: 0;
+              padding: 20px;
+              background-color: #f4f4f4;
+          }
+          .container {
+              max-width: 800px;
+              margin: auto;
+              background: white;
+              padding: 20px;
+              box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+          }
+          h1 {
+              text-align: center;
+              color: #333;
+          }
+          h2 {
+              border-bottom: 2px solid #4CAF50;
+              color: #4CAF50;
+              padding-bottom: 5px;
+          }
+          table {
+              width: 100%;
+              border-collapse: collapse;
+              margin: 20px 0;
+          }
+          table, th, td {
+              border: 1px solid #ddd;
+          }
+          th, td {
+              padding: 8px;
+              text-align: left;
+          }
+          th {
+              background-color: #4CAF50;
+              color: white;
+          }
+          .plot {
+              text-align: center;
+              margin: 20px 0;
+          }
+          .plot img {
+              max-width: 100%;
+              height: auto;
+          }
+          .tabs {
+              display: flex;
+              margin-bottom: 20px;
+              cursor: pointer;
+              justify-content: space-around;
+          }
+          .tab {
+              padding: 10px;
+              background-color: #4CAF50;
+              color: white;
+              border-radius: 5px 5px 0 0;
+              flex-grow: 1;
+              text-align: center;
+              margin: 0 5px;
+          }
+          .tab.active-tab {
+              background-color: #333;
+          }
+          .tab-content {
+              display: none;
+              padding: 20px;
+              border: 1px solid #ddd;
+              border-top: none;
+              background-color: white;
+          }
+          .tab-content.active-content {
+              display: block;
+          }
+      </style>
+    </head>
+    <body>
+    <div class="container">
+    """
+
+
+def get_html_closing():
+    return """
+        </div>
+        <script>
+            function openTab(evt, tabName) {{
+                var i, tabcontent, tablinks;
+                tabcontent = document.getElementsByClassName("tab-content");
+                for (i = 0; i < tabcontent.length; i++) {{
+                    tabcontent[i].style.display = "none";
+                }}
+                tablinks = document.getElementsByClassName("tab");
+                for (i = 0; i < tablinks.length; i++) {{
+                    tablinks[i].className =
+                        tablinks[i].className.replace(" active-tab", "");
+                }}
+                document.getElementById(tabName).style.display = "block";
+                evt.currentTarget.className += " active-tab";
+            }}
+            document.addEventListener("DOMContentLoaded", function() {{
+                document.querySelector(".tab").click();
+            }});
+        </script>
+    </body>
+    </html>
+    """
+
+
+def customize_figure_layout(fig, margin_dict=None):
+    """
+    Update the layout of a Plotly figure to reduce margins.
+
+    Parameters:
+        fig (plotly.graph_objects.Figure): The Plotly figure to customize.
+        margin_dict (dict, optional): A dictionary specifying margin sizes.
+            Example: {'l': 10, 'r': 10, 't': 10, 'b': 10}
+
+    Returns:
+        plotly.graph_objects.Figure: The updated Plotly figure.
+    """
+    if margin_dict is None:
+        # Set default smaller margins
+        margin_dict = {'l': 40, 'r': 40, 't': 40, 'b': 40}
+
+    fig.update_layout(margin=margin_dict)
+    return fig
+
+
+def add_plot_to_html(fig, include_plotlyjs=True):
+    custom_margin = {'l': 40, 'r': 40, 't': 60, 'b': 60}
+    fig = customize_figure_layout(fig, margin_dict=custom_margin)
+    return fig.to_html(full_html=False,
+                       default_height=350,
+                       include_plotlyjs="cdn" if include_plotlyjs else False)
+
+
+def add_hr_to_html():
+    return "<hr>"
+
+
+def encode_image_to_base64(image_path):
+    """Convert an image file to a base64 encoded string."""
+    with open(image_path, "rb") as img_file:
+        return base64.b64encode(img_file.read()).decode("utf-8")