From 6c1da553c4e8140ea7a1bf3f5fd6e55592e51111 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Wed, 11 Dec 2024 16:44:24 +0100 Subject: [PATCH 01/11] :sparkles: basic docs - file content organization still to fix --- docs/.gitignore | 7 ++ docs/README.md | 32 +++++++++ docs/conf.py | 151 +++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 19 ++++++ docs/vuegen_demo.ipynb | 142 +++----------------------------------- pyproject.toml | 10 +++ 6 files changed, 228 insertions(+), 133 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/README.md create mode 100644 docs/conf.py create mode 100644 docs/index.rst diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..dac47ab --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,7 @@ +# apidocs +reference +# builds +_build +quarto_report +logs +jupyter_execute diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..fc99858 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,32 @@ +# Docs creation + +In order to build the docs you need to + + 1. install sphinx and additional support packages + 2. build the package reference files + 3. run sphinx to create a local html version + +The documentation is build using readthedocs automatically. + +Install the docs dependencies of the package (as speciefied in toml): + +```bash +# in main folder +# pip install ".[docs]" +poetry install --with docs +``` + +## Build docs using Sphinx command line tools + +Command to be run from `path/to/docs`, i.e. from within the `docs` package folder: + +Options: + - `--separate` to build separate pages for each (sub-)module + +```bash +# pwd: docs +# apidoc +sphinx-apidoc --force --implicit-namespaces --module-first -o reference ../vuegen +# build docs +sphinx-build -n -W --keep-going -b html ./ ./_build/ +``` diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..fd8e70c --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,151 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +from importlib import metadata + +# -- Project information ----------------------------------------------------- + +project = "mockup" +copyright = "2024, Multiomics-Analytics-Group" +author = "Multiomics-Analytics-Group, Sebastián Ayala Ruano, Henry Webel, Alberto Santos" +PACKAGE_VERSION = metadata.version("vuegen") +version = PACKAGE_VERSION +release = PACKAGE_VERSION + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autodoc.typehints", + "sphinx.ext.viewcode", + "sphinx.ext.napoleon", + "sphinx.ext.intersphinx", + "sphinx_new_tab_link", + "myst_nb", +] + +# https://myst-nb.readthedocs.io/en/latest/computation/execute.html +nb_execution_mode = "auto" + +myst_enable_extensions = ["dollarmath", "amsmath"] + +# Plolty support through require javascript library +# https://myst-nb.readthedocs.io/en/latest/render/interactive.html#plotly +html_js_files = [ + "https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js" +] + +# https://myst-nb.readthedocs.io/en/latest/configuration.html +# Execution +nb_execution_raise_on_error = True +# Rendering +nb_merge_streams = True + +# https://myst-nb.readthedocs.io/en/latest/authoring/custom-formats.html#write-custom-formats +# ! if you use it, then you cannot directly execute the notebook in the browser in colab +# (the file needs to be fetched from the repository) +# just keep both syncing it using papermill +# nb_custom_formats = {".py": ["jupytext.reads", {"fmt": "py:percent"}]} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [ + "_build", + "Thumbs.db", + ".DS_Store", + "jupyter_execute", + "conf.py", +] + + +# Intersphinx options +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), + # "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), + # "scikit-learn": ("https://scikit-learn.org/stable/", None), + # "matplotlib": ("https://matplotlib.org/stable/", None), +} + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# See: +# https://github.com/executablebooks/MyST-NB/blob/master/docs/conf.py +# html_title = "" +html_theme = "sphinx_book_theme" +# html_logo = "_static/logo-wide.svg" +# html_favicon = "_static/logo-square.svg" +html_theme_options = { + "github_url": "https://github.com/Multiomics-Analytics-Group/vuegen", + "repository_url": "https://github.com/Multiomics-Analytics-Group/vuegen", + "repository_branch": "main", + "home_page_in_toc": True, + "path_to_docs": "docs", + "show_navbar_depth": 1, + "use_edit_page_button": True, + "use_repository_button": True, + "use_download_button": True, + "launch_buttons": { + "colab_url": "https://colab.research.google.com" + # "binderhub_url": "https://mybinder.org", + # "notebook_interface": "jupyterlab", + }, + "navigation_with_keys": False, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ["_static"] + + +# -- Setup for sphinx-apidoc ------------------------------------------------- + +# Read the Docs doesn't support running arbitrary commands like tox. +# sphinx-apidoc needs to be called manually if Sphinx is running there. +# https://github.com/readthedocs/readthedocs.org/issues/1139 + +if os.environ.get("READTHEDOCS") == "True": + from pathlib import Path + + PROJECT_ROOT = Path(__file__).parent.parent + PACKAGE_ROOT = PROJECT_ROOT / "vuegen" + + def run_apidoc(_): + from sphinx.ext import apidoc + + apidoc.main( + [ + "--force", + "--implicit-namespaces", + "--module-first", + "--separate", + "-o", + str(PROJECT_ROOT / "docs" / "reference"), + str(PACKAGE_ROOT), + str(PACKAGE_ROOT / "*.c"), + str(PACKAGE_ROOT / "*.so"), + ] + ) + + def setup(app): + app.connect("builder-inited", run_apidoc) diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..07c0c97 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,19 @@ +.. include:: ../README.md + :parser: myst_parser.sphinx_ + :start-line: 0 + + +.. toctree:: + :maxdepth: 2 + :caption: Modules + :hidden: + + reference/vuegen + + +.. toctree:: + :maxdepth: 1 + :caption: MISC: + :hidden: + + README.md diff --git a/docs/vuegen_demo.ipynb b/docs/vuegen_demo.ipynb index 7132aa0..09275da 100644 --- a/docs/vuegen_demo.ipynb +++ b/docs/vuegen_demo.ipynb @@ -21,25 +21,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "import sys\n", - "import os \n", - "# Get the absolute path to the root directory\n", - "working_dir = os.getcwd()\n", - "project_root = os.path.abspath(os.path.join(working_dir, '..'))\n", - "\n", - "# Check if the current directory is \"docs\" and change to project_root if true\n", - "if os.path.basename(working_dir) == 'docs':\n", - " os.chdir(project_root)\n", - "\n", - "# Add vuegen to the Python path\n", - "sys.path.append(os.path.join(project_root, 'vuegen'))\n", - "\n", - "import report_generator\n", - "from utils import get_logger, load_yaml_config" + "from vuegen import report_generator\n", + "from vuegen.utils import get_logger, load_yaml_config" ] }, { @@ -60,123 +47,12 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2024-12-02 12:18:51,947] root: INFO - Path to log file: logs/2024122_121851_html_report_None.log\n", - "[2024-12-02 12:18:51,948] root: INFO - Report 'MicW2Graph' initialized with 3 sections.\n", - "[2024-12-02 12:18:51,948] root: DEBUG - Generating 'html' report in directory: 'quarto_report'\n", - "[2024-12-02 12:18:51,949] root: DEBUG - Output directory already existed: 'quarto_report'\n", - "[2024-12-02 12:18:51,949] root: INFO - Output directory for static content already existed: 'quarto_report/static'\n", - "[2024-12-02 12:18:51,950] root: INFO - Starting to generate sections for the report.\n", - "[2024-12-02 12:18:51,950] root: DEBUG - Processing section: 'Exploratory Data Analysis' - 3 subsection(s)\n", - "[2024-12-02 12:18:51,951] root: DEBUG - Processing subsection: 'Abundance data' - 4 component(s)\n", - "[2024-12-02 12:18:51,951] root: INFO - Successfully generated content for plot: 'Top 5 species by biome (plotly)'\n", - "[2024-12-02 12:18:51,952] root: INFO - Successfully generated content for plot: 'Multiline plot (altair)'\n", - "[2024-12-02 12:18:51,952] root: INFO - Successfully generated content for DataFrame: 'Abundance data for all studies (csv)'\n", - "[2024-12-02 12:18:51,953] root: INFO - Successfully generated content for DataFrame: 'Abundance data for all studies (excel)'\n", - "[2024-12-02 12:18:51,953] root: INFO - Generated content and imports for subsection: 'Abundance data'\n", - "[2024-12-02 12:18:51,954] root: DEBUG - Processing subsection: 'Sample data' - 4 component(s)\n", - "[2024-12-02 12:18:51,955] root: INFO - Successfully generated content for plot: 'Number of samples per study (png)'\n", - "[2024-12-02 12:18:51,955] root: INFO - Successfully generated content for plot: 'Sampling countries for all studies (plotly)'\n", - "[2024-12-02 12:18:51,955] root: INFO - Successfully generated content for DataFrame: 'Sample data for all studies (txt)'\n", - "[2024-12-02 12:18:51,956] root: INFO - Successfully generated content for DataFrame: 'Sample data for all studies (parquet)'\n", - "[2024-12-02 12:18:51,956] root: INFO - Generated content and imports for subsection: 'Sample data'\n", - "[2024-12-02 12:18:51,957] root: DEBUG - Processing subsection: 'Extra information' - 1 component(s)\n", - "[2024-12-02 12:18:51,958] root: INFO - Successfully generated content for Markdown: 'Markdown example'\n", - "[2024-12-02 12:18:51,959] root: INFO - Generated content and imports for subsection: 'Extra information'\n", - "[2024-12-02 12:18:51,959] root: DEBUG - Processing section: 'Microbial Association Networks' - 3 subsection(s)\n", - "[2024-12-02 12:18:51,960] root: DEBUG - Processing subsection: 'Network Visualization1' - 1 component(s)\n", - "[2024-12-02 12:18:51,963] root: INFO - Successfully read network from file: example_data/MicW2Graph/man_example.graphml.\n", - "[2024-12-02 12:18:51,979] root: INFO - PyVis network created and saved as: quarto_report/static/Network1_(graphml).html.\n", - "[2024-12-02 12:18:51,980] root: INFO - Successfully generated content for plot: 'Network1 (graphml)'\n", - "[2024-12-02 12:18:51,980] root: INFO - Generated content and imports for subsection: 'Network Visualization1'\n", - "[2024-12-02 12:18:51,980] root: DEBUG - Processing subsection: 'Network Visualization2' - 1 component(s)\n", - "[2024-12-02 12:18:51,983] root: INFO - Successfully read network from file: example_data/MicW2Graph/man_example.csv.\n", - "[2024-12-02 12:18:51,994] root: INFO - PyVis network created and saved as: quarto_report/static/Network2_(edge_list_csv).html.\n", - "[2024-12-02 12:18:51,994] root: INFO - Successfully generated content for plot: 'Network2 (edge list csv)'\n", - "[2024-12-02 12:18:51,994] root: INFO - Generated content and imports for subsection: 'Network Visualization2'\n", - "[2024-12-02 12:18:51,995] root: DEBUG - Processing subsection: 'Edge list' - 1 component(s)\n", - "[2024-12-02 12:18:51,995] root: INFO - Successfully generated content for DataFrame: 'Edge list (csv)'\n", - "[2024-12-02 12:18:51,995] root: INFO - Generated content and imports for subsection: 'Edge list'\n", - "[2024-12-02 12:18:51,995] root: DEBUG - Processing section: 'APICall test' - 1 subsection(s)\n", - "[2024-12-02 12:18:51,996] root: DEBUG - Processing subsection: 'Simple test' - 1 component(s)\n", - "[2024-12-02 12:18:51,996] root: WARNING - Unsupported component type 'apicall' in subsection: Simple test\n", - "[2024-12-02 12:18:51,996] root: INFO - Generated content and imports for subsection: 'Simple test'\n", - "[2024-12-02 12:18:51,997] root: INFO - Created qmd script to render the app: quarto_report.qmd\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "Starting python3 kernel...Done\n", - "\n", - "Executing 'quarto_report.quarto_ipynb'\n", - " Cell 1/10: 'Imports'.......................................Done\n", - " Cell 2/10: 'Top 5 species by biome (plotly)'...............Done\n", - " Cell 3/10: 'Multiline plot (altair)'.......................Done\n", - " Cell 4/10: 'Abundance data for all studies (csv)'..........Done\n", - " Cell 5/10: 'Abundance data for all studies (excel)'........Done\n", - " Cell 6/10: 'Sampling countries for all studies (plotly)'...Done\n", - " Cell 7/10: 'Sample data for all studies (txt)'.............Done\n", - " Cell 8/10: 'Sample data for all studies (parquet)'.........Done\n", - " Cell 9/10: 'Markdown example'..............................Done\n", - " Cell 10/10: 'Edge list (csv)'...............................Done\n", - "\n", - "\u001b[1mpandoc \u001b[22m\n", - " to: html\n", - " output-file: quarto_report.html\n", - " standalone: true\n", - " self-contained: true\n", - " section-divs: true\n", - " html-math-method: mathjax\n", - " wrap: none\n", - " default-image-extension: png\n", - " toc: true\n", - " toc-depth: 3\n", - " \n", - "\u001b[1mmetadata\u001b[22m\n", - " document-css: false\n", - " link-citations: true\n", - " date-format: long\n", - " lang: en\n", - " title: MicW2Graph\n", - " toc-location: left\n", - " page-layout: full\n", - " \n", - "\u001b[33mWARNING (/Applications/quarto/share/filters/main.lua:9305) Unable to parse table from raw html block: skipping.\n", - "\u001b[39m\u001b[33mWARNING (/Applications/quarto/share/filters/main.lua:9305) Unable to parse table from raw html block: skipping.\n", - "\u001b[39m\u001b[33mWARNING (/Applications/quarto/share/filters/main.lua:9305) Unable to parse table from raw html block: skipping.\n", - "\u001b[39m\u001b[33mWARNING (/Applications/quarto/share/filters/main.lua:9305) Unable to parse table from raw html block: skipping.\n", - "\u001b[39m\u001b[33mWARNING (/Applications/quarto/share/filters/main.lua:9305) Unable to parse table from raw html block: skipping.\n", - "\u001b[39m" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2024-12-02 12:19:01,988] root: INFO - 'MicW2Graph' 'html' report rendered\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Output created: quarto_report.html\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Load the YAML configuration file with the report metadata\n", - "config_path = \"report_config_micw2graph.yaml\"\n", + "config_path = \"../example_data/MicW2Graph/report_config_micw2graph.yaml\"\n", "report_config = load_yaml_config(config_path)\n", "\n", "# Define logger suffix based on report engine, type and name\n", @@ -187,13 +63,13 @@ "logger = get_logger(f\"{report_type}_report_{report_name}\")\n", "\n", "# Generate the report\n", - "report_generator.get_report(config = report_config, report_type = report_type, logger = logger)" + "# report_generator.get_report(config = report_config, report_type = report_type, logger = logger)" ] } ], "metadata": { "kernelspec": { - "display_name": "report-generator-IFxaxej_-py3.12", + "display_name": "vuegen", "language": "python", "name": "python3" }, @@ -207,7 +83,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.9.21" } }, "nbformat": 4, diff --git a/pyproject.toml b/pyproject.toml index 484fd2c..57d0781 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,5 +41,15 @@ build-backend = "poetry.core.masonry.api" streamlit = ["streamlit"] quarto = ["quarto", "ipykernel"] +[tool.poetry.group.docs] +optional = true + +[tool.poetry.group.docs.dependencies] +sphinx = "*" +sphinx-book-theme = "*" +myst-nb = "*" +ipywidgets = "*" +sphinx-new-tab-link = "!=0.2.2" +jupytext = "*" # [project.scripts] # my-script = "vuegen.main:main" From cda30051bbbcc23acca01774b8274e9240263b1a Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 12:10:14 +0100 Subject: [PATCH 02/11] :sparkles: link images in README using relative docs parameter - unfortunately does not work with href links as it seems --- README.md | 24 +++++++++++++----------- docs/README.md | 7 +++++++ docs/index.md | 25 +++++++++++++++++++++++++ docs/index.rst | 19 ------------------- 4 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 docs/index.md delete mode 100644 docs/index.rst diff --git a/README.md b/README.md index de1ac85..5a64fba 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ -
- -
- + +![VueGen Logo](docs/images/vuegen_logo.svg) ----------------- -

VueGen is a Python library that automates the creation of scientific reports.

@@ -19,19 +18,22 @@ VueGen automates the creation of scientific reports based on a YAML configuratio An overview of the VueGen workflow is shown in the figure below: -

+ +![VueGen Abstract](docs/images/vuegen_graph_abstract.png) Also, the class diagram for the project is presented below to illustrate the architecture and relationships between classes: -

+ + +![VueGen Class Diagram](docs/images/vuegen_classdiagram_noattmeth.png) ## Installation diff --git a/docs/README.md b/docs/README.md index fc99858..edf0ca2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,3 +30,10 @@ sphinx-apidoc --force --implicit-namespaces --module-first -o reference ../vuege # build docs sphinx-build -n -W --keep-going -b html ./ ./_build/ ``` + +## Include repo README.md into docs + +Relative links are used in the main README, which need to be resolved when building. It's +possible to include the a `relative-docs` option if one uses `index.md` ([see docs](https://myst-parser.readthedocs.io/en/latest/faq/index.html#include-a-file-from-outside-the-docs-folder-like-readme-md)). This does not work +with `href` links, only native markdown links. + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..e833c78 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,25 @@ +# Overview + + +```{include} ../README.md +:start-line: 0 +:relative-docs: docs +:relative-images: +``` + +```{toctree} +:maxdepth: 2 +:caption: Modules +:hidden: + +reference/vuegen +``` + +```{toctree} +:maxdepth: 1 +:caption: MISC: +:hidden: + +README.md +``` diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 07c0c97..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. include:: ../README.md - :parser: myst_parser.sphinx_ - :start-line: 0 - - -.. toctree:: - :maxdepth: 2 - :caption: Modules - :hidden: - - reference/vuegen - - -.. toctree:: - :maxdepth: 1 - :caption: MISC: - :hidden: - - README.md From 96422464643b9f61700590af62d2394a55986fa5 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 14:26:03 +0100 Subject: [PATCH 03/11] :art::bug: fix and improve type anntoations --- docs/conf.py | 2 ++ vuegen/config_manager.py | 5 ++++- vuegen/utils.py | 43 ++++++++++++++++++++++------------------ 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index fd8e70c..d892daa 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -79,6 +79,8 @@ # Intersphinx options intersphinx_mapping = { "python": ("https://docs.python.org/3", None), + "networkx": ("https://networkx.org/documentation/stable/", None), + "pyvis": ("https://pyvis.readthedocs.io/en/stable/", None), # "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), # "scikit-learn": ("https://scikit-learn.org/stable/", None), # "matplotlib": ("https://matplotlib.org/stable/", None), diff --git a/vuegen/config_manager.py b/vuegen/config_manager.py index 4ad12ac..9e180c6 100644 --- a/vuegen/config_manager.py +++ b/vuegen/config_manager.py @@ -1,3 +1,6 @@ +import logging +from typing import Optional + from . import report as r from .utils import assert_enum_value, get_logger @@ -6,7 +9,7 @@ class ConfigManager: """ Class for handling metadata of reports from YAML config file and creating report objects. """ - def __init__(self, logger=None): + def __init__(self, logger: Optional[logging.Logger]=None): """ Initializes the ConfigManager with a logger. diff --git a/vuegen/utils.py b/vuegen/utils.py index 6a6423e..06c3962 100644 --- a/vuegen/utils.py +++ b/vuegen/utils.py @@ -434,16 +434,18 @@ def get_basename(fname: None | str = None) -> str: - For a given filename, returns basename WITHOUT file extension - If no fname given (i.e., None) then return basename that the function is called in - PARAMS - ----- - - fname (None or str): the filename to get basename of, or None + Parameters + ---------- + fname: str, optional + The filename to get basename from. Default is None. - OUTPUTS - ----- - - basename of given filepath or the current file the function is executed + Returns + ------- + str + basename of given filepath or the current file the function is executed Examples - ----- + --------- 1) >>> get_basename() utils @@ -467,17 +469,18 @@ def get_time(incl_time: bool = True, incl_timezone: bool = True) -> str: Gets current date, time (optional) and timezone (optional) for file naming Parameters - ----- + ---------- - incl_time (bool): whether to include timestamp in the string - incl_timezone (bool): whether to include the timezone in the string Returns - ----- - - fname (str): includes date, timestamp and/or timezone + ------- + str + fname that includes date, timestamp and/or timezone connected by '_' in one string e.g. yyyyMMdd_hhmm_timezone Examples - ----- + -------- 1) >>> get_time() '20231019_101758_CEST' @@ -530,13 +533,14 @@ def generate_log_filename(folder: str = "logs", suffix: str = "") -> str: Creates log file name and path Parameters - ----- + ---------- folder (str): name of the folder to put the log file in suffix (str): anything else you want to add to the log file name Returns - ----- - log_filepath (str): the file path to the log file + ------- + str + The file path to the log file """ # PRECONDITIONS create_folder(folder) @@ -548,7 +552,7 @@ def generate_log_filename(folder: str = "logs", suffix: str = "") -> str: return log_filepath -def init_log(filename: str, display: bool = False, logger_id: str | None = None): +def init_log(filename: str, display: bool = False, logger_id: str | None = None) -> logging.Logger: """ - Custom python logger configuration (basicConfig()) with two handlers (for stdout and for file) @@ -557,15 +561,16 @@ def init_log(filename: str, display: bool = False, logger_id: str | None = None) display in stdout Parameters - ----- - - filename (str): filepath to log record file + ---------- + filename (str): filepath to log record file - display (bool): whether to print the logs to whatever standard output - logger_id (str): an optional identifier for yourself, if None then defaults to 'root' Returns - ----- - - logger object + ------- + logging.Logger + The logger object Examples ----- From c33b0b4095b06454cd01ec800f0191d9ca4d8f1e Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 14:26:35 +0100 Subject: [PATCH 04/11] :bug: remove non existing attribute --- vuegen/report.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/vuegen/report.py b/vuegen/report.py index 7c8224d..158c080 100644 --- a/vuegen/report.py +++ b/vuegen/report.py @@ -120,9 +120,6 @@ class Plot(Component): ---------- plot_type : PlotType The type of the plot (INTERACTIVE or STATIC). - int_visualization_tool : IntVisualizationTool, optional - The tool for rendering interactive plots (PLOTLY, ALTAIR, or PYVIS) (default is None). - It is not required for STATIC plots (default is None). csv_network_format : CSVNetworkFormat, optional The format of the CSV file for network plots (EDGELIST or ADJLIST) (default is None). """ From 32b649528f608ec10d51dd28708ae3d3bd383921 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 15:56:24 +0100 Subject: [PATCH 05/11] :bug: fix imports after merge --- vuegen/config_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vuegen/config_manager.py b/vuegen/config_manager.py index 8f1114b..7d8484c 100644 --- a/vuegen/config_manager.py +++ b/vuegen/config_manager.py @@ -1,6 +1,7 @@ +import logging import os from pathlib import Path -from typing import Dict, List, Union, Tuple +from typing import Dict, List, Optional, Tuple, Union from . import report as r from .utils import assert_enum_value, get_logger From 6c408ac772ae198c1ee9e7785c6760556bf4bad6 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:08:32 +0100 Subject: [PATCH 06/11] :truck: move examples to docs, update documentation, relat. paths in config... - sphinx: easier to integrate notebook example into documentation - :bug: fixed one filepath: example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv ("_edgelist" was missing) --- README.md | 1 + .../1_top_species_plot_biome_plotly.json | 0 .../1_Abundance_data/2_multilineplot_altair.json | 0 .../3_abundance_data_allbiomes.csv | 0 .../4_abundance_data_allbiomes.xls | Bin .../1_pie_plot_countries_plotly.json | 0 .../2_Sample_data/2_pie_plots_biomes_plotly.json | 0 .../2_Sample_data/3_number_samples_per_study.png | Bin .../2_Sample_data/4_sample_info_allbiomes.parquet | Bin .../2_Sample_data/5_sample_info_allbiomes.txt | 0 .../3_Extra_info/1_test_md.md | 0 .../1_man_example.graphml | 0 .../1_man_example_edgelist.csv | 0 .../3_Network_visualization3/1_man_example.cyjs | 0 .../4_Network_visualization4/1_ckg_network.html | 0 .../example_data}/MicW2Graph/MANs_MicW2Graph.gif | Bin .../MicW2Graph/Methods_MicW2Graph.png | Bin .../MicW2Graph/MicW2Graph_config.yaml | 0 .../MicW2Graph/report_config_micw2graph.yaml | 4 ++-- {example_data => docs/example_data}/mona_logo.png | Bin docs/index.md | 6 ++++++ docs/vuegen_demo.ipynb | 14 +++++++++++--- 22 files changed, 20 insertions(+), 5 deletions(-) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/1_top_species_plot_biome_plotly.json (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/2_multilineplot_altair.json (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/3_abundance_data_allbiomes.csv (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/4_abundance_data_allbiomes.xls (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/1_pie_plot_countries_plotly.json (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/2_pie_plots_biomes_plotly.json (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/3_number_samples_per_study.png (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/4_sample_info_allbiomes.parquet (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/5_sample_info_allbiomes.txt (100%) rename {example_data => docs/example_data}/MicW2Graph/1_Exploratory_Data_Analysis/3_Extra_info/1_test_md.md (100%) rename {example_data => docs/example_data}/MicW2Graph/2_Microbial_Association_Networks/1_Network_visualization1/1_man_example.graphml (100%) rename {example_data => docs/example_data}/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv (100%) rename {example_data => docs/example_data}/MicW2Graph/2_Microbial_Association_Networks/3_Network_visualization3/1_man_example.cyjs (100%) rename {example_data => docs/example_data}/MicW2Graph/2_Microbial_Association_Networks/4_Network_visualization4/1_ckg_network.html (100%) rename {example_data => docs/example_data}/MicW2Graph/MANs_MicW2Graph.gif (100%) rename {example_data => docs/example_data}/MicW2Graph/Methods_MicW2Graph.png (100%) rename {example_data => docs/example_data}/MicW2Graph/MicW2Graph_config.yaml (100%) rename {example_data => docs/example_data}/MicW2Graph/report_config_micw2graph.yaml (97%) rename {example_data => docs/example_data}/mona_logo.png (100%) diff --git a/README.md b/README.md index 5a64fba..3f83f87 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ quarto check ## Execution ```bash +cd docs python vuegen/main.py --config example_data/MicW2Graph/report_config_micw2graph.yaml --report_type streamlit ``` diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/1_top_species_plot_biome_plotly.json b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/1_top_species_plot_biome_plotly.json similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/1_top_species_plot_biome_plotly.json rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/1_top_species_plot_biome_plotly.json diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/2_multilineplot_altair.json b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/2_multilineplot_altair.json similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/2_multilineplot_altair.json rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/2_multilineplot_altair.json diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/3_abundance_data_allbiomes.csv b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/3_abundance_data_allbiomes.csv similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/3_abundance_data_allbiomes.csv rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/3_abundance_data_allbiomes.csv diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/4_abundance_data_allbiomes.xls b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/4_abundance_data_allbiomes.xls similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/4_abundance_data_allbiomes.xls rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/1_Abundance_data/4_abundance_data_allbiomes.xls diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/1_pie_plot_countries_plotly.json b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/1_pie_plot_countries_plotly.json similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/1_pie_plot_countries_plotly.json rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/1_pie_plot_countries_plotly.json diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/2_pie_plots_biomes_plotly.json b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/2_pie_plots_biomes_plotly.json similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/2_pie_plots_biomes_plotly.json rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/2_pie_plots_biomes_plotly.json diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/3_number_samples_per_study.png b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/3_number_samples_per_study.png similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/3_number_samples_per_study.png rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/3_number_samples_per_study.png diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/4_sample_info_allbiomes.parquet b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/4_sample_info_allbiomes.parquet similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/4_sample_info_allbiomes.parquet rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/4_sample_info_allbiomes.parquet diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/5_sample_info_allbiomes.txt b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/5_sample_info_allbiomes.txt similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/5_sample_info_allbiomes.txt rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/2_Sample_data/5_sample_info_allbiomes.txt diff --git a/example_data/MicW2Graph/1_Exploratory_Data_Analysis/3_Extra_info/1_test_md.md b/docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/3_Extra_info/1_test_md.md similarity index 100% rename from example_data/MicW2Graph/1_Exploratory_Data_Analysis/3_Extra_info/1_test_md.md rename to docs/example_data/MicW2Graph/1_Exploratory_Data_Analysis/3_Extra_info/1_test_md.md diff --git a/example_data/MicW2Graph/2_Microbial_Association_Networks/1_Network_visualization1/1_man_example.graphml b/docs/example_data/MicW2Graph/2_Microbial_Association_Networks/1_Network_visualization1/1_man_example.graphml similarity index 100% rename from example_data/MicW2Graph/2_Microbial_Association_Networks/1_Network_visualization1/1_man_example.graphml rename to docs/example_data/MicW2Graph/2_Microbial_Association_Networks/1_Network_visualization1/1_man_example.graphml diff --git a/example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv b/docs/example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv similarity index 100% rename from example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv rename to docs/example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv diff --git a/example_data/MicW2Graph/2_Microbial_Association_Networks/3_Network_visualization3/1_man_example.cyjs b/docs/example_data/MicW2Graph/2_Microbial_Association_Networks/3_Network_visualization3/1_man_example.cyjs similarity index 100% rename from example_data/MicW2Graph/2_Microbial_Association_Networks/3_Network_visualization3/1_man_example.cyjs rename to docs/example_data/MicW2Graph/2_Microbial_Association_Networks/3_Network_visualization3/1_man_example.cyjs diff --git a/example_data/MicW2Graph/2_Microbial_Association_Networks/4_Network_visualization4/1_ckg_network.html b/docs/example_data/MicW2Graph/2_Microbial_Association_Networks/4_Network_visualization4/1_ckg_network.html similarity index 100% rename from example_data/MicW2Graph/2_Microbial_Association_Networks/4_Network_visualization4/1_ckg_network.html rename to docs/example_data/MicW2Graph/2_Microbial_Association_Networks/4_Network_visualization4/1_ckg_network.html diff --git a/example_data/MicW2Graph/MANs_MicW2Graph.gif b/docs/example_data/MicW2Graph/MANs_MicW2Graph.gif similarity index 100% rename from example_data/MicW2Graph/MANs_MicW2Graph.gif rename to docs/example_data/MicW2Graph/MANs_MicW2Graph.gif diff --git a/example_data/MicW2Graph/Methods_MicW2Graph.png b/docs/example_data/MicW2Graph/Methods_MicW2Graph.png similarity index 100% rename from example_data/MicW2Graph/Methods_MicW2Graph.png rename to docs/example_data/MicW2Graph/Methods_MicW2Graph.png diff --git a/example_data/MicW2Graph/MicW2Graph_config.yaml b/docs/example_data/MicW2Graph/MicW2Graph_config.yaml similarity index 100% rename from example_data/MicW2Graph/MicW2Graph_config.yaml rename to docs/example_data/MicW2Graph/MicW2Graph_config.yaml diff --git a/example_data/MicW2Graph/report_config_micw2graph.yaml b/docs/example_data/MicW2Graph/report_config_micw2graph.yaml similarity index 97% rename from example_data/MicW2Graph/report_config_micw2graph.yaml rename to docs/example_data/MicW2Graph/report_config_micw2graph.yaml index e4aa322..84ccf19 100644 --- a/example_data/MicW2Graph/report_config_micw2graph.yaml +++ b/docs/example_data/MicW2Graph/report_config_micw2graph.yaml @@ -73,10 +73,10 @@ sections: component_type: plot plot_type: interactive_network csv_network_format: edgelist - file_path: example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example.csv + file_path: example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv - title: Edge list (csv) component_type: dataframe - file_path: example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example.csv + file_path: example_data/MicW2Graph/2_Microbial_Association_Networks/2_Network_visualization2/1_man_example_edgelist.csv file_format: csv delimiter: ',' caption: This is the edge list of the network diff --git a/example_data/mona_logo.png b/docs/example_data/mona_logo.png similarity index 100% rename from example_data/mona_logo.png rename to docs/example_data/mona_logo.png diff --git a/docs/index.md b/docs/index.md index e833c78..7601d70 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,6 +8,12 @@ :relative-images: ``` +```{toctree} +:maxdepth: 2 + +vuegen_demo +``` + ```{toctree} :maxdepth: 2 :caption: Modules diff --git a/docs/vuegen_demo.ipynb b/docs/vuegen_demo.ipynb index 09275da..a87f724 100644 --- a/docs/vuegen_demo.ipynb +++ b/docs/vuegen_demo.ipynb @@ -52,9 +52,17 @@ "outputs": [], "source": [ "# Load the YAML configuration file with the report metadata\n", - "config_path = \"../example_data/MicW2Graph/report_config_micw2graph.yaml\"\n", + "config_path = \"example_data/MicW2Graph/report_config_micw2graph.yaml\"\n", "report_config = load_yaml_config(config_path)\n", - "\n", + "report_config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "# Define logger suffix based on report engine, type and name\n", "report_type = \"html\"\n", "report_name = report_config['report'].get('name')\n", @@ -63,7 +71,7 @@ "logger = get_logger(f\"{report_type}_report_{report_name}\")\n", "\n", "# Generate the report\n", - "# report_generator.get_report(config = report_config, report_type = report_type, logger = logger)" + "report_generator.get_report(config_path = config_path, report_type = report_type, logger = logger)" ] } ], From 296adcd10fe4bd72cee69372fe95559e8c211a42 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:09:39 +0100 Subject: [PATCH 07/11] :sparkles: add optional dependencies using poetry syntax this should now work: pip install "-e[docs]" --- pyproject.toml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 57d0781..b3c3193 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,14 @@ kaleido = "0.2.0" vl-convert-python = "^1.7.0" dataframe-image = "^0.2.6" strenum = { version = "^0.4.15", python = "<3.11" } +# optional doc depencencies, follow approach as described here: +# https://github.com/python-poetry/poetry/issues/2567#issuecomment-646766059 +sphinx = {version="*", optional=true} +sphinx-book-theme = {version="*", optional=true} +myst-nb = {version="*", optional=true} +ipywidgets = {version="*", optional=true} +sphinx-new-tab-link = {version = "!=0.2.2", optional=true} +jupytext = {version="*", optional=true} [tool.poetry.group.dev.dependencies] ipykernel = "^6.29.5" @@ -40,16 +48,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.extras] streamlit = ["streamlit"] quarto = ["quarto", "ipykernel"] +docs = ["sphinx", "sphinx-book-theme", "myst-nb", "ipywidgets", "sphinx-new-tab-link", "jupytext"] -[tool.poetry.group.docs] -optional = true - -[tool.poetry.group.docs.dependencies] -sphinx = "*" -sphinx-book-theme = "*" -myst-nb = "*" -ipywidgets = "*" -sphinx-new-tab-link = "!=0.2.2" -jupytext = "*" # [project.scripts] # my-script = "vuegen.main:main" From 67d6b74e521ecaa6b62844a0b24ae339344d3ef5 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:19:36 +0100 Subject: [PATCH 08/11] :sparkles: add quatro-cli python package and try testing build of docs --- .github/workflows/docs.yml | 42 ++++++++++++++++++++++++++++++++++++++ pyproject.toml | 4 +++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..6d7e99a --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,42 @@ +name: Test documentation building (until it's moved to ReadTheDocs) + +on: + push: + branches: [main] + pull_request: + branches: [main] + release: + types: [published] + +jobs: + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' # caching pip dependencies + cache-dependency-path: '**/pyproject.toml' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e .[docs,quarto] + - name: Build references + run: | + cd docs + sphinx-apidoc --force --implicit-namespaces --module-first -o reference ../vuegen + - name: Build documentation + run: | + cd docs + sphinx-build -n -W --keep-going -b html ./ ./_build/ + - name: save artifacts + uses: actions/upload-artifact@v3 + with: + name: Sphinx_${{ matrix.python-version }} + path: docs/_build/ diff --git a/pyproject.toml b/pyproject.toml index b3c3193..936783a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,8 @@ myst-nb = {version="*", optional=true} ipywidgets = {version="*", optional=true} sphinx-new-tab-link = {version = "!=0.2.2", optional=true} jupytext = {version="*", optional=true} +# quartro +quatro-cli = {version="*", optional=true} [tool.poetry.group.dev.dependencies] ipykernel = "^6.29.5" @@ -47,7 +49,7 @@ build-backend = "poetry.core.masonry.api" # https://stackoverflow.com/a/60990574/9684872 [tool.poetry.extras] streamlit = ["streamlit"] -quarto = ["quarto", "ipykernel"] +quarto = ["quarto-cli", "ipykernel"] docs = ["sphinx", "sphinx-book-theme", "myst-nb", "ipywidgets", "sphinx-new-tab-link", "jupytext"] # [project.scripts] From d0799abc7de6d0ab2bc62214d4af1db16f43c0b6 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:26:42 +0100 Subject: [PATCH 09/11] :bug: misstyped quarto (again...) --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 936783a..841065b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,10 @@ ipywidgets = {version="*", optional=true} sphinx-new-tab-link = {version = "!=0.2.2", optional=true} jupytext = {version="*", optional=true} # quartro -quatro-cli = {version="*", optional=true} +quarto-cli = {version="*", optional=true} [tool.poetry.group.dev.dependencies] -ipykernel = "^6.29.5" +ipykernel = {version="^6.29.5", optional=true} [build-system] From 50a3ecb8cec627189b97978c18ce89961da4a23d Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:33:43 +0100 Subject: [PATCH 10/11] :bug: add parquet as dependency for pandas --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 841065b..2e71d3d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ plotly = "5.15.0" watchdog = "3.0.0" bokeh = "2.4.3" pyvis = "^0.3.2" -pandas = "^2.2.3" +pandas = {extras = ["parquet"], version = "^2.2.3"} openpyxl = "^3.1.5" xlrd = "^2.0.1" nbformat = "^5.10.4" From e72c622f6aa729a56bc38bce76ec384ed18b8222 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 12 Dec 2024 16:38:31 +0100 Subject: [PATCH 11/11] :bug: don't fail on warnings (especially with nitpicky mode enabled) --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6d7e99a..3136fca 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,7 +34,7 @@ jobs: - name: Build documentation run: | cd docs - sphinx-build -n -W --keep-going -b html ./ ./_build/ + sphinx-build -n --keep-going -b html ./ ./_build/ - name: save artifacts uses: actions/upload-artifact@v3 with: