diff --git a/.github/workflows/build-site.yml b/.github/workflows/build-site.yml index 07fc8d60..732c085e 100644 --- a/.github/workflows/build-site.yml +++ b/.github/workflows/build-site.yml @@ -35,4 +35,4 @@ jobs: arguments: | --ignore-urls "https://fonts.googleapis.com,https://fonts.gstatic.com,_site/_posts/README/index.html" --ignore-files "/.+\/_posts\/README.md" - --ignore-status-codes "0,403, 429, 503, 999" + --ignore-status-codes "0, 200, 403, 429, 503, 999" diff --git a/_config.yml b/_config.yml index d5a0a234..115b8415 100644 --- a/_config.yml +++ b/_config.yml @@ -245,6 +245,10 @@ whitelist: - jekyll-redirect-from collections: + packaging: + people: true + tutorials: + people: true packages: output: true permalink: /:collection/:path/ diff --git a/_data/navigation.yml b/_data/navigation.yml index 0bcd991a..44ed7076 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -9,15 +9,25 @@ main: - title: "Community partners" icon: url: "/partners.html" + - title: "Accepted packages" + icon: + url: "/python-packages/" - title: "Peer review guide" url: "https://www.pyopensci.org/software-peer-review/" icon: "fas fa-external-link-alt" - - title: "Python package guide" + - title: "Python Packaging" + icon: "fas fa-fw fa-envelope-square" + url: + sub-nav: + - title: "Packaging resources" + icon: + url: "python-packaging-science.html" + - title: "Our packages" + icon: + url: "/python-packages/" + - title: "Package Guidebook" url: "https://www.pyopensci.org/python-package-guide/" icon: "fas fa-external-link-alt" - - title: "Our packages" - icon: "fas fa-fw fa-envelope-square" - url: "/python-packages/index.html" - title: "Blog" url: "/blog/index.html" - title: "Community" diff --git a/_includes/feature_row b/_includes/feature_row index bf75a7b8..b5c9b14a 100644 --- a/_includes/feature_row +++ b/_includes/feature_row @@ -14,7 +14,7 @@ {% endif %} {% if f.image_path %}
- {% if f.alt %}{{ f.alt }}{% endif %} {% if f.image_caption %} {{ f.image_caption | markdownify | remove: "

" | remove: "

" }}
diff --git a/_includes/tutorial-grid.html b/_includes/tutorial-grid.html new file mode 100644 index 00000000..e8cfb614 --- /dev/null +++ b/_includes/tutorial-grid.html @@ -0,0 +1,27 @@ + +
+
+
+

{{ atutorial.title }}

+
+ {% if atutorial.excerpt %} +

+ {{ atutorial.excerpt }} +

+ {% endif %} + + {% if atutorial.subpages %} +
    + {% for page in atutorial.subpages %} +
  • + {{ page.name }} +
  • + {% endfor %} +
+ + {% endif %} +
+ {% if atutorial.link %} + {{ atutorial.btn_label }} + {% endif %} +
diff --git a/_packaging/documentation.md b/_packaging/documentation.md new file mode 100644 index 00000000..3c65c2c0 --- /dev/null +++ b/_packaging/documentation.md @@ -0,0 +1,16 @@ +--- +title: "Document your Python package" +excerpt: "Learn about best practices for developing documentation for your Python package." +learning_objectives: +subpages: + - name: Documentation Overview + url: https://www.pyopensci.org/python-package-guide/documentation/index.html# + - name: Create your docs + url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/get-started.html + - name: Create package tutorials + url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/create-package-tutorials.html + - name: Document your code (API docs) + url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/document-your-code-api-docstrings.html + +url: +--- diff --git a/_packaging/packaging.md b/_packaging/packaging.md new file mode 100644 index 00000000..5b331741 --- /dev/null +++ b/_packaging/packaging.md @@ -0,0 +1,15 @@ +--- +title: "Create Python package structure" +excerpt: "Learn about the best way to create your Python package." +subpages: + - name: The structure of a Python package + url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-structure.html + - name: Add metadata - pyproject.toml file + url: https://www.pyopensci.org/python-package-guide/package-structure-code/pyproject-toml-python-package-metadata.html + - name: Declare package dependencies + url: https://www.pyopensci.org/python-package-guide/package-structure-code/declare-dependencies.html + - name: Get to know the ecosystem of Python packaging tools + url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html + - name: Complete package builds + url: https://www.pyopensci.org/python-package-guide/package-structure-code/complex-python-package-builds.html +--- diff --git a/_packaging/publish-python-package.md b/_packaging/publish-python-package.md new file mode 100644 index 00000000..e480ee5d --- /dev/null +++ b/_packaging/publish-python-package.md @@ -0,0 +1,16 @@ +--- +title: "Publish your Python package" +excerpt: " + Learn more about the publishing options for your Python package including publishing on PyPI and the conda-forge channel of conda." +learning_objectives: +subpages: + - name: Build your package for PyPI publication + url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html + - name: Publish to PyPI and Conda + url: https://www.pyopensci.org/python-package-guide/package-structure-code/publish-python-package-pypi-conda.html# + - name: Versioning your package + url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-versions.html + - name: Code style and format + url: https://www.pyopensci.org/python-package-guide/package-structure-code/code-style-linting-format.html +url: +--- diff --git a/_packaging/tests.md b/_packaging/tests.md new file mode 100644 index 00000000..f8fe2a25 --- /dev/null +++ b/_packaging/tests.md @@ -0,0 +1,18 @@ +--- +title: "Python package tests" +excerpt: " + Learn more about the importance of writing tests for your Python package and how you can setup infrastructure to run your tests both locally and on GitHub." +learning_objectives: +subpages: + - name: Introduction to writing tests + url: https://www.pyopensci.org/python-package-guide/tests/index.html + - name: Write tests for your Python package + url: https://www.pyopensci.org/python-package-guide/tests/write-tests.html + - name: Three types of types for your Python package + url: https://www.pyopensci.org/python-package-guide/tests/test-types.html + - name: Run tests locally + url: https://www.pyopensci.org/python-package-guide/tests/run-tests.html + - name: Run tests online using Continuous Integration + url: https://www.pyopensci.org/python-package-guide/tests/tests-ci.html +url: +--- diff --git a/_pages/home.md b/_pages/home.md index d3777cce..d1e9fa4a 100644 --- a/_pages/home.md +++ b/_pages/home.md @@ -1,6 +1,7 @@ --- layout: splash title: "Welcome to pyOpenSci" +excerpt: "We support the scientific Python tools that drive open science through peer review, training and community building." author_profile: false published: true site-map: true diff --git a/_pages/packaging-resources.md b/_pages/packaging-resources.md new file mode 100644 index 00000000..120d9042 --- /dev/null +++ b/_pages/packaging-resources.md @@ -0,0 +1,113 @@ +--- +layout: splash +classes: flowing +permalink: /python-packaging-science.html +title: "Python packaging resources for scientists" +excerpt: "We make the scientific Python package ecosystem easier to navigate through peer review and packaging resources." +header: + overlay_image: images/header.jpg + overlay_filter: 0.8 +intro: + - excerpt: "There are many tools and approaches that can be used to create a Python package. We build resources that help you both understand the tool ecosystem and also learn how to create a Python package using modern best practices." +peer-review: + - image_path: images/pyopensci-people-at-computer.jpg + alt: "A pencil sketch of a round table with people from different backgrounds sitting around it, working on laptops and also writing together." + excerpt: "We run an open peer review process for scientific Python software. Peer review helps maintainers improve the quality, usability and long-term maintainability of scientific software." + title: Raising the bar for scientific Python software" + url: https://www.pyopensci.org/about-peer-review/index.html + btn_label: Learn more and get involved with peer review today. + btn_class: btn--primary +packaging-easier: + - image_path: images/pyopensci-working-together.png + alt: "A black and grey sketch of a group of people sitting at a desk in front of a monitor smiling." + title: "Get Involved: Help us improve our scientific Python packaging resources" + excerpt: " + We need your help! Our packaging content is community-created and reviewed through an open review process on GitHub. The more feedback that we get, the more useful our resources are to the community. Get involved by: + + * Opening an issue about problems that you find in our guidebook + + * Submitting a pull request that fixes a typo or mistake in the guide. + + * Get credit for your contribution + + + All contributions are recognized both on our website and in the guidebook's citation. + " + url: https://github.com/pyOpenSci/python-package-guide/pulls + btn_label: See what we're working on now + btn_class: btn--success +community-created: + - image_path: images/pyopensci-people-working-together.png + image_size: 500px + alt: "A group of people working on a tetris like set of building blocks, trying to stack the blocks together. " + title: "Community-created Python Packaging Guide" + excerpt: " + Our packaging guide is a living document that will help you navigate the Python packaging ecosystem and learn about modern Python packaging best practices. + + * Created & curated by the community + + * Reviewed by beginner to expert level Pythonistas + + * Accurate, modern & beginner-friendly + + + All contributions are recognized both on our website and in the guidebook's citation. + " +toc: false +--- + +{% include feature_row id="intro" type="center" %} + +
+
+ +{% include feature_row id="community-created" type="right" %} + +
+### Scientific Python packaging guidebook sections + +
+{% for atutorial in site.packaging %} + {% include tutorial-grid.html %} +{% endfor %} +
+ +
+
+ +
+
+ +{% include div_purple_bottom.html %} + +
+
+ +## Beginner friendly Python packaging tutorials + +Beginner-friendly Python packaging tutorials that will take you through +the full process of creating a Python package, following modern best +practices. + +
+{% for atutorial in site.tutorials %} + {% include tutorial-grid.html %} +{% endfor %} +
+ +
+ +
+
+ +{% include div_purple_top.html %} + +
+
+{% include feature_row id="packaging-easier" type="left" %} + +
+
+ + +{% include div_purple_bottom.html %} diff --git a/_pages/tutorials.md b/_pages/tutorials.md new file mode 100644 index 00000000..990e160e --- /dev/null +++ b/_pages/tutorials.md @@ -0,0 +1,8 @@ +--- +title: Scientific Python tutorials +layout: collection +permalink: /tutorials/ +collection: portfolio +entries_layout: grid +classes: wide +--- diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss index 324aa9f6..763ed1b8 100644 --- a/_sass/minimal-mistakes.scss +++ b/_sass/minimal-mistakes.scss @@ -50,3 +50,4 @@ @import "minimal-mistakes/pyos-twitter"; @import "minimal-mistakes/pyos-grid"; @import "minimal-mistakes/pyos-flowing-page"; +@import "minimal-mistakes/pyos-cards"; diff --git a/_sass/minimal-mistakes/_pyos-cards.scss b/_sass/minimal-mistakes/_pyos-cards.scss new file mode 100644 index 00000000..e8d2ee95 --- /dev/null +++ b/_sass/minimal-mistakes/_pyos-cards.scss @@ -0,0 +1,79 @@ +.tutorial { + font-size: 1em; + + & p.page__meta { + padding-top: 1.3em; + } +} + +.card .page__meta { + font-size:5em!important; +} + +.tutorial__container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); // Adjust the minmax values as needed + grid-gap: 20px; + + // Ensure all cards have the height of the tallest card + align-items: stretch; + + .card { + font-size: .8em; + display: flex; + flex-direction: column; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + + .excerpt { + font-size: 1em; + padding: 1em; + } + h4.title { + color: rgb(84, 38, 104)!important; + font-size: 1.3em; + margin: 0; + } + .title-block { + background-color: #F7F2E2; + display: flex; + height: auto; + padding: 1.2em; + border-bottom: #555 2px solid; + } + + img { + width: 100%; + height: auto; + } + + .content { + flex: 1; + } + ul li { + font-size: .9em; + margin: 0 0 .5em 0; + } + ul { + padding-right: .05em; + padding-bottom: .2em; + } + } + +} + + +.btn--success{ + color: #000!important; +} + + +.subsection { + padding: 0 2em; + + h3 { + padding-left: 0.5em; + } +} diff --git a/_sass/minimal-mistakes/_pyos-dropdown.scss b/_sass/minimal-mistakes/_pyos-dropdown.scss index 7a793d67..278b71fe 100644 --- a/_sass/minimal-mistakes/_pyos-dropdown.scss +++ b/_sass/minimal-mistakes/_pyos-dropdown.scss @@ -28,6 +28,7 @@ margin-right: auto; display: block; max-height: 3rem!important; + box-shadow: none!important; } diff --git a/_sass/minimal-mistakes/_pyos-grid.scss b/_sass/minimal-mistakes/_pyos-grid.scss index f22d4a91..064b46e8 100644 --- a/_sass/minimal-mistakes/_pyos-grid.scss +++ b/_sass/minimal-mistakes/_pyos-grid.scss @@ -1,4 +1,8 @@ - +.clearfix::after { + content: ""; + display: table; + clear: both; +} /* Create & style a 3x3 grid wrapper */ .grid { diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss index c7ac0299..a1358cbd 100644 --- a/_sass/minimal-mistakes/_variables.scss +++ b/_sass/minimal-mistakes/_variables.scss @@ -89,7 +89,7 @@ $form-background-color: $lighter-gray !default; $footer-background-color: $lighter-gray !default; $primary-color: #6f777d !default; -$success-color: #3fa63f !default; +$success-color: #81c0aa !default; $warning-color: #d67f05 !default; $danger-color: #ee5f5b !default; $info-color: #320e5b !default; diff --git a/_tutorials/1-what-is-package.md b/_tutorials/1-what-is-package.md new file mode 100644 index 00000000..b0e3957b --- /dev/null +++ b/_tutorials/1-what-is-package.md @@ -0,0 +1,12 @@ +--- +title: "What is a Python package" +excerpt: " + Learn about what a Python package is and the basic components that make up a Python package." +learning_objectives: + - "Understand what a Python package is" + - "Be able to list the 5 core components of a Python package" + - "Be able to explain the difference between generalizable code and code that supports a specific scientific application" +link: https://www.pyopensci.org/python-package-guide/tutorials/intro.html +btn_label: View Tutorial +btn_class: btn--success btn--large +--- diff --git a/_tutorials/2-make-code-installable.md b/_tutorials/2-make-code-installable.md new file mode 100644 index 00000000..5e75bfbc --- /dev/null +++ b/_tutorials/2-make-code-installable.md @@ -0,0 +1,10 @@ +--- +title: "Make your Python code installable" +excerpt: " + Learn how to create the most basic version of a Python package which can then be installed into a Python environment." +learning_objectives: + - "Understand what a Python package is" +link: https://www.pyopensci.org/python-package-guide/tutorials/1-installable-code.html +btn_label: View Tutorial +btn_class: btn--success btn--large +--- diff --git a/_tutorials/3-publish-to-pypi.md b/_tutorials/3-publish-to-pypi.md new file mode 100644 index 00000000..534666a5 --- /dev/null +++ b/_tutorials/3-publish-to-pypi.md @@ -0,0 +1,12 @@ +--- +title: "Publish your Python package to PyPI" +excerpt: " + Learn how to publish your Python package to test.PyPI.org and to PyPI.org." +learning_objectives: + - "Build your package’s distributions" + - "Setup an account on test PyPI (the process is similar for the real PyPI)" + - "Publish your package to test PyPI" +link: https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html +btn_label: View Tutorial +btn_class: btn--success btn--large +--- diff --git a/images/pyopensci-people-working-together.png b/images/pyopensci-people-working-together.png new file mode 100644 index 00000000..8f485728 Binary files /dev/null and b/images/pyopensci-people-working-together.png differ diff --git a/images/pyopensci-working-together.png b/images/pyopensci-working-together.png new file mode 100644 index 00000000..90be3559 Binary files /dev/null and b/images/pyopensci-working-together.png differ