From f02e2d63256ab4fabdf29b308f06bcd16c4b8f48 Mon Sep 17 00:00:00 2001
From: sayalaruano
Date: Fri, 31 Jan 2025 10:17:43 +0100
Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=99=88=20Docs:=20update=20.gitignore?=
=?UTF-8?q?=20file?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index b05281e..158faf3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -127,4 +127,6 @@ docs/images/UML_diagrams/
docs/images/Graphical_abstract/
docs/images/Nfcore_module_figure
docs/presentations/
+docs/example_data/Earth_microbiome_vuegen_demo_notebook_test/
+docs/vuegen_case_study_earth_microbiome test.ipynb
test.py
\ No newline at end of file
From db6df324d987bfa154bc06d4c4edd4cae83abad1 Mon Sep 17 00:00:00 2001
From: sayalaruano
Date: Fri, 31 Jan 2025 10:58:41 +0100
Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=93=9D=20Docs(README.md):=20Update=20?=
=?UTF-8?q?image=20links=20and=20installation=20instructions=20on=20the=20?=
=?UTF-8?q?README.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
ALos, updated the logo, class diagram, and graphical abstract images
---
README.md | 42 +-
docs/images/vuegen_classdiagram_noattmeth.png | Bin 61497 -> 120116 bytes
docs/images/vuegen_graph_abstract.png | Bin 3222957 -> 3877214 bytes
docs/images/vuegen_logo.png | Bin 74886 -> 193113 bytes
docs/images/vuegen_logo.svg | 2396 ++++++++++++++++-
5 files changed, 2413 insertions(+), 25 deletions(-)
diff --git a/README.md b/README.md
index 808ce35..c0aeac2 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-
+
-----------------
VueGen is a Python library that automates the creation of scientific reports.
@@ -26,7 +26,7 @@ An overview of the VueGen workflow is shown in the figure below:
-->
-
+
Also, the class diagram for the project is presented below to illustrate the architecture and relationships between classes:
@@ -36,33 +36,32 @@ Also, the class diagram for the project is presented below to illustrate the arc
-->
-
+
## Installation
-You can install the package for development from this repository by running the following command:
+Vuegen is available on [PyPI][vuegen-pypi] and can be installed using pip:
+
+```bash
+pip install vuegen
+```
+
+You can also install the package for development from this repository by running the following command:
```bash
pip install -e path/to/vuegen # specify location
pip install -e . # in case your pwd is in the vuegen directory
```
-This will both install `quarto` and `streamlit` as our backends for report generation.
-
-### Verify quarto installation
+### Quarto installation
-Test your quarto installation by running the following command:
+Vuegen uses [Quarto][quarto] to generate various report types. The pip insallation includes quarto using the [quarto-cli Python library][quarto-cli-pypi]. To test if quarto is installed in your computer, run the following command:
```bash
quarto check
```
-If you use conda a conda environement you can install quatro from the conda-forge channel
-in case it did not work.
-
-```bash
-conda install -c conda-forge quarto
-```
+If quarto is not installed, you can download the command-line interface from the [Quarto website][quarto-cli] for your operating system.
## Execution
@@ -83,7 +82,15 @@ It's also possible to provide a configuration file instead of a directory:
vuegen --config example_data/Earth_microbiome_vuegen_demo_notebook/Earth_microbiome_vuegen_demo_notebook_config.yaml --report_type streamlit
```
-The current report types are streamlit, html, pdf, docx, odt, revealjs, pptx, and jupyter.
+The current report types supported by VueGen are:
+* Streamlit
+* HTML
+* PDF
+* DOCX
+* ODT
+* Reveal.js
+* PPTX
+* Jupyter
## Acknowledgements
@@ -95,10 +102,15 @@ If you have comments or suggestions about this project, you can [open an issue][
[issues]: https://github.com/Multiomics-Analytics-Group/vuegen/issues/new
[streamlit]: https://streamlit.io/
+[vuegen-pypi]: https://pypi.org/project/vuegen/
+[quarto]: https://quarto.org/
+[quarto-cli-pypi]: https://pypi.org/project/quarto-cli/
+[quarto-cli]: https://quarto.org/docs/get-started/
[Mona]: https://multiomics-analytics-group.github.io/
[Biosustain]: https://www.biosustain.dtu.dk/
[scriberia]: https://www.scriberia.co.uk/
[turingway]: https://github.com/the-turing-way/the-turing-way
[zenodo-turingway]: https://zenodo.org/records/3695300
+[issues]: https://github.com/Multiomics-Analytics-Group/vuegen/issues/new
diff --git a/docs/images/vuegen_classdiagram_noattmeth.png b/docs/images/vuegen_classdiagram_noattmeth.png
index e9eeaa0b1370555bb5395ef3ac712e8a3570bd4b..b7c578d0f80a1a8138ca28a9b8948bd1698d91d7 100644
GIT binary patch
literal 120116
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