From 14a6e1fffa33a2b9cdea6a5da009472d77a6904e Mon Sep 17 00:00:00 2001 From: "[garezana]" <[virnaliz.cruz@weecology.org]> Date: Mon, 29 Apr 2024 10:22:40 -0400 Subject: [PATCH 1/3] Updates package downloads in CLI and Python script --- offlinedatasci/cli.py | 24 +++++++++++++----------- offlinedatasci/main.py | 16 ++++++++-------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/offlinedatasci/cli.py b/offlinedatasci/cli.py index 8d37d7d..18dd342 100644 --- a/offlinedatasci/cli.py +++ b/offlinedatasci/cli.py @@ -4,6 +4,8 @@ from offlinedatasci import * def get_installer_function(selection, ods_dir): + if selection == "r-packages": selection = "r_packages" + if selection == "python-packages": selection = "python_packages" if selection == "all": download_all(ods_dir) elif selection == "rstudio": @@ -20,7 +22,7 @@ def get_installer_function(selection, ods_dir): def main(): parser = argparse.ArgumentParser(prog = 'offlinedatasci') subparsers = parser.add_subparsers(help = 'sub-command help', dest='command') - INSTALL_OPTIONS = ["all", "lessons", "minicran", "python", "python_libraries", "r", "rstudio"] + INSTALL_OPTIONS = ["all", "lessons", "r-packages", "python", "python-packages", "r", "rstudio"] install_parser = subparsers.add_parser('install') install_parser.add_argument('item', @@ -28,11 +30,11 @@ def main(): nargs = '+', choices=INSTALL_OPTIONS) - packages_parser = subparsers.add_parser('add-packages') - packages_parser.add_argument('language', + packages_parser = subparsers.add_parser('add') + packages_parser.add_argument('package_type', nargs = 1, - choices =['r', 'python']) - packages_parser.add_argument('libraries', + choices =['r-packages', 'python-packages']) + packages_parser.add_argument('packages', nargs = '+') parser.add_argument('path', @@ -48,12 +50,12 @@ def main(): for i in args.item: get_installer_function(i, ods_dir) - elif args.command == 'add-packages': - packages_to_install = package_selection(args.language[0], args.libraries) - if args.language[0] == "python": - download_python_libraries(ods_dir, packages_to_install) - elif args.language[0] == "r": - download_minicran(ods_dir, packages_to_install) + elif args.command == 'add': + packages_to_install = package_selection(args.package_type[0], args.packages) + if args.package_type[0] == "python-packages": + download_python_packages(ods_dir, packages_to_install) + elif args.package_type[0] == "r-packages": + download_r_packages(ods_dir, packages_to_install) if __name__=='__main__': diff --git a/offlinedatasci/main.py b/offlinedatasci/main.py index 093f54a..d21cc27 100644 --- a/offlinedatasci/main.py +++ b/offlinedatasci/main.py @@ -65,7 +65,7 @@ def download_all(ods_dir): print(f"Error downloading RStudio: {e}") try: - download_minicran(ods_dir) + download_r_packages(ods_dir) except Exception as e: print(f"Error downloading R packages: {e}") @@ -80,7 +80,7 @@ def download_all(ods_dir): print(f"Error downloading Python: {e}") try: - download_python_libraries(ods_dir) + download_python_packages(ods_dir) except Exception as e: print(f"Error downloading Python packages: {e}") @@ -329,7 +329,7 @@ def table_parse_version_info(row,oscolnum,hrefcolnum): link_inner_html = link.text.strip() return {"osver": os, "version": link_inner_html, "url": link_url} -def download_minicran(ods_dir, +def download_r_packages(ods_dir, py_library_reqs = ["tidyverse", "RSQLite"], r_version = None): """Creating partial CRAN mirror of workshop libraries. @@ -357,7 +357,7 @@ def download_minicran(ods_dir, subprocess.run(["Rscript", minicranpath, ods_dir, custom_library_string, r_major_minor_version]) -def download_python_libraries(ods_dir,py_library_reqs = [ "matplotlib", "notebook","numpy", "pandas"] ): +def download_python_packages(ods_dir,py_library_reqs = [ "matplotlib", "notebook","numpy", "pandas"] ): """Creating partial PyPI mirror of workshop libraries. Keyword arguments: @@ -393,19 +393,19 @@ def download_python_libraries(ods_dir,py_library_reqs = [ "matplotlib", "noteboo } pypi_mirror.create_mirror(**mirror_creation_parameters) -def get_default_packages(language): +def get_default_packages(package_type): packages = { - "r": { + "r-packages": { "data-carpentry": ["tidyverse", "RSQLite"], "data-science": ["dplyr", "ggplot2", "shiny", "lubridate", "knitr", "esquisse", "mlr3", "knitr", "DT"] }, - "python": { + "python-packages": { "data-carpentry": ["pandas", "notebook", "numpy", "matplotlib", "plotnine"], "software-carpentry": ["matplotlib", "notebook", "numpy", "pandas"] , "data-science": ["scipy", "numpy", "pandas", "matplotlib", "keras", "scikit-learn", "beautifulsoup4", "seaborn","torch"] } } - return packages[language] + return packages[package_type] def package_selection(language, custom_package_list): From 5f381e071ce37eb83968ce16ac19808d10f7878a Mon Sep 17 00:00:00 2001 From: "[garezana]" <[virnaliz.cruz@weecology.org]> Date: Mon, 29 Apr 2024 11:25:12 -0400 Subject: [PATCH 2/3] Removes f-string to get package and lessons functions --- offlinedatasci/cli.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/offlinedatasci/cli.py b/offlinedatasci/cli.py index 18dd342..3f48011 100644 --- a/offlinedatasci/cli.py +++ b/offlinedatasci/cli.py @@ -4,20 +4,18 @@ from offlinedatasci import * def get_installer_function(selection, ods_dir): - if selection == "r-packages": selection = "r_packages" - if selection == "python-packages": selection = "python_packages" if selection == "all": download_all(ods_dir) elif selection == "rstudio": try_except_functions(ods_dir, download_rstudio) elif selection == "python": try_except_functions(ods_dir, download_python) - else: - try: - download_function = f"download_{selection}" - getattr(sys.modules[__name__], download_function)(ods_dir) - except Exception: - print(f'method does not exist for selection: {selection}') + elif selection == "r-packages": + try_except_functions(ods_dir, download_r_packages) + elif selection == "python-packages": + try_except_functions(ods_dir, download_python_packages) + elif selection == "lessons": + try_except_functions(ods_dir, download_lessons) def main(): parser = argparse.ArgumentParser(prog = 'offlinedatasci') From fec51debbb693a874dd47c40cbe0bf1a0daec127 Mon Sep 17 00:00:00 2001 From: "[garezana]" <[virnaliz.cruz@weecology.org]> Date: Mon, 29 Apr 2024 14:19:31 -0400 Subject: [PATCH 3/3] Updates test functions --- test/test_offlinedatasci.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_offlinedatasci.py b/test/test_offlinedatasci.py index 0e18be3..4f1bfba 100644 --- a/test/test_offlinedatasci.py +++ b/test/test_offlinedatasci.py @@ -20,7 +20,7 @@ def test_download_python(tmp_path): def test_download_python_libraries(tmp_path): # test on notebook since it has caused issues in the past # See https://github.com/carpentriesoffline/offlinedatasci/issues/95 - download_python_libraries(tmp_path, ['notebook']) + download_python_packages(tmp_path, ['notebook']) assert glob(f"{tmp_path}/pythonlibraries/*.whl") assert glob(f"{tmp_path}/pypi/index.html")