|
| 1 | +--- |
| 2 | +layout: single |
| 3 | +title: "How to submit a Python package to pyOpenSci for review" |
| 4 | +header: |
| 5 | + overlay_image: images/header.png |
| 6 | + overlay_filter: 0.8 |
| 7 | +author_profile: false |
| 8 | +published: true |
| 9 | +site-map: true |
| 10 | +permalink: /how-to-submit-a-package-to-pyopensci.html |
| 11 | +classes: wide |
| 12 | +toc: true |
| 13 | +--- |
| 14 | + |
| 15 | +## <i class="fa-solid fa-rocket" style="color:#a193c6"></i> Submit your Python package for review |
| 16 | + |
| 17 | +Awesome, you’ve built a Python package! How do you ensure it follows best practices and gets seen by the broader Python community? |
| 18 | + |
| 19 | +**pyOpenSci’s peer review process** connects you with community reviewers and editors who will help you refine your package's structure, documentation, maintainability, and usability. pyOpenSci accepted packages: |
| 20 | +* Join a [vetted ecosystem]({{ '/python-packages.html' | relative_url }}) of high-quality scientific tools |
| 21 | +* Benefit from increased community visibility |
| 22 | +* Can be fast-tracked for publication in [Journal of Open Source Software (JOSS)](https://www.pyopensci.org/software-peer-review/partners/joss.html) through our end-to-end review. |
| 23 | + |
| 24 | + **[<i class="fa-solid fa-book" style="color:#81c0aa;"></i> Learn more about the benefits of our peer review process](https://www.pyopensci.org/software-peer-review/about/benefits.html)**{: .btn .btn--success} |
| 25 | +<!-- |
| 26 | +<figure> |
| 27 | + <source srcset="{{ '/images/peer-review/pyos-joss-peer-review.webp' | relative_url }}" type="image/webp"> |
| 28 | + <img src="{{ '/images/peer-review/pyos-joss-peer-review.png' | relative_url }}" alt="A flowchart showing how a package submitted to pyOpenSci can also be fast-tracked for JOSS publication."> |
| 29 | + <figcaption> |
| 30 | + Packages accepted into pyOpenSci can also be published in JOSS through a streamlined process. |
| 31 | + </figcaption> |
| 32 | +</figure> --> |
| 33 | + |
| 34 | +<div class="notice notice--info" markdown="1"> |
| 35 | + |
| 36 | +Need help with your Python package? |
| 37 | +{: .header } |
| 38 | + |
| 39 | +If you need help getting your package ready for review, you can submit a help request in our software-submission repository. |
| 40 | + |
| 41 | +You can also check out the [pyOpenSci Package Guide](https://www.pyopensci.org/python-package-guide/) which contains both |
| 42 | + |
| 43 | +* [Beginning-to-end Python packaging tutorials](https://www.pyopensci.org/python-package-guide/tutorials/intro.html) |
| 44 | + |
| 45 | +and overviews of: |
| 46 | + |
| 47 | +* [continuous integration](https://www.pyopensci.org/python-package-guide/tests/tests-ci.html#run-tests-with-continuous-integration), |
| 48 | +* [testing](https://www.pyopensci.org/python-package-guide/#tests), and |
| 49 | +* [documentation](https://www.pyopensci.org/python-package-guide/#documentation), all of which are required for a package to be accepted into [the pyOpenSci ecosystem](https://www.pyopensci.org/python-packages.html). |
| 50 | + |
| 51 | +</div> |
| 52 | + |
| 53 | +## <i class="fa-solid fa-list-check" style="color:#81c0aa;"></i> Step-by-step guide to submitting your package for review |
| 54 | + |
| 55 | +Our **open peer review process** happens on GitHub using structured issues in the [**pyOpenSci software submission repository**](https://github.com/pyopensci/software-submission). Our review process is **open, constructive, and focused on improving your software for others to use**. |
| 56 | + |
| 57 | + |
| 58 | + **[<i class="fa-solid fa-book"></i> Read our Author Guide for an overview of the process](https://www.pyopensci.org/software-peer-review/how-to/author-guide.html)**{: .btn .btn--success} |
| 59 | + |
| 60 | +### <i class="fa-solid fa-hourglass" style="color:#81c0aa;"></i> What happens after you submit your package? |
| 61 | + |
| 62 | +Once you submit your package, our **Editor-in-Chief** will review it to confirm: |
| 63 | +- <i class="fa-solid fa-check" style="color:#81c0aa;"></i> It fits within **pyOpenSci’s scope** |
| 64 | +- <i class="fa-solid fa-check" style="color:#81c0aa;"></i> It meets **infrastructure and documentation requirements** |
| 65 | + |
| 66 | + |
| 67 | +### <i class="fa-solid fa-calendar-days" style="color:#81c0aa;"></i> Expected timeline |
| 68 | +The timeline of your review depends upon a few things: |
| 69 | + |
| 70 | +* Whether we have an editor on board (or need to find one) to lead a review of your package |
| 71 | +* How long it takes your editor to find reviewers |
| 72 | +* How much work your package needs before the review begins. |
| 73 | + |
| 74 | +However, once we find editors and reviewers for your package, you can expect a timeline like this: |
| 75 | + |
| 76 | +- <i class="fa-solid fa-clock" style="color:#81c0aa;"></i> **Initial Pre-review checks:** ~2 weeks (varies based on submission volume) |
| 77 | +- <i class="fa-solid fa-users" style="color:#81c0aa;"></i> **Finding editors and reviews to lead the review peer review:** ~2-4 weeks (depends on package complexity and availability) |
| 78 | +- <i class="fa-solid fa-users" style="color:#81c0aa;"></i> **Running the review:** 4-8+ weeks. This depends on the amount of reviewer feedback you get and how long it takes for you to respond to that feedback. |
| 79 | + |
| 80 | +📖 **Read the full review process in our** [Peer Review Guide](https://www.pyopensci.org/software-peer-review/how-to/author-guide.html). |
| 81 | + |
| 82 | +### <i class="fa-solid fa-magnifying-glass" style="color:#a193c6"></i> 1. Check if your package is in pyOpenSci's scope |
| 83 | + |
| 84 | +Before submitting your package for review, make sure that it fits within [**pyOpenSci’s peer review scope**](https://www.pyopensci.org/software-peer-review/about/package-scope.html). |
| 85 | +Our package scope focuses on the scientific domains and areas in which we review. |
| 86 | + |
| 87 | +If you are unsure if your package is in scope, [**🔗 submit a pre-submission inquiry**](#submission-type) to get feedback from our editorial team and ask questions. |
| 88 | + |
| 89 | +### <i class="fa-brands fa-github-alt" style="color:#a193c6"></i> 2. Check that your package meets are pre-review requirements |
| 90 | + |
| 91 | +It's also a good idea to check that your package meets [**pyOpenSci’s minimum Python package requirements**](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-template). So check that your package meets those criteria before you submit. |
| 92 | +The Editor in Chief will check your package against these criteria before the review begins. |
| 93 | + |
| 94 | +If you have any questions or need help getting your package up to pyOpenSci standards, we are here to help. Submit a help-request issue in our software-submission repo or ask a question in our Discourse. |
| 95 | + |
| 96 | +<div class="notice" markdown="1"> |
| 97 | +Our packaging guide covers the core criteria which include: |
| 98 | +* <i class="fa-solid fa-box" style="color:#81c0aa;"></i> **Your package is installable:** through [PyPI](https://www.pyopensci.org/python-package-guide/package-structure-code/publish-python-package-pypi-conda.html#what-is-pypi) (preferred) and/or a [Conda channel](https://www.pyopensci.org/python-package-guide/package-structure-code/publish-python-package-pypi-conda.html#what-is-conda-and-anaconda-org) (e.g., conda-forge, bioconda). |
| 99 | +* <i class="fa-solid fa-book" style="color:#81c0aa;"></i> **It has clear documentation:** including user guides, tutorials, and API documentation. |
| 100 | +* <i class="fa-solid fa-vial" style="color:#81c0aa;"></i> **It has automated [testing](https://www.pyopensci.org/python-package-guide/tests/write-tests.html) & [Continuous Integration (CI)](https://www.pyopensci.org/python-package-guide/tests/tests-ci.html) setup:** |
| 101 | +* <i class="fa-brands fa-github" style="color:#81c0aa;"></i> **It has core [documentation files](https://www.pyopensci.org/python-package-guide/documentation/repository-files/intro.html):** Including `README.md`, `LICENSE`, `CONTRIBUTING.md`, and a Code of Conduct file. |
| 102 | +</div> |
| 103 | + |
| 104 | + |
| 105 | +### <i class="fa-brands fa-github-alt" style="color:#a193c6"></i> 3. Submit your package for review |
| 106 | + |
| 107 | +Once you have determined that your package is in scope and meets our core packaging requirements, it's time to submit it for review: |
| 108 | + |
| 109 | +1. **Go to our software submission GitHub repository**: [pyOpenSci/software-submission](https://github.com/pyOpenSci/software-submission/issues/new/choose) |
| 110 | +2. **Click on the Issues tab** |
| 111 | +3. <a id="submission-type"></a> <i class="fa-solid fa-list-check" style="color:#81c0aa;"></i> **Select the appropriate issue template** |
| 112 | +4. **Complete the issue form** and submit it |
| 113 | + |
| 114 | +**<i class="fa-solid fa-link"></i> [Submit your package here](https://github.com/pyOpenSci/software-submission/issues/new/choose)**{: .btn .btn--success} |
| 115 | + |
| 116 | +<div class="notice notice--success" markdown="1"> |
| 117 | +There are **three templates in our Issue Submission repo**: |
| 118 | + |
| 119 | +- **<i class="fa-solid fa-hand-holding-heart" style="color:#81c0aa;"></i> Help request:** Need guidance on testing, docs, or packaging? Submit a help request, and our editorial team will assist. |
| 120 | +- [**<i class="fa-solid fa-magnifying-glass" style="color:#81c0aa;"></i> Pre-submission inquiry:**](https://github.com/pyOpenSci/software-submission/issues/new?template=presubmission-inquiry.md) Unsure if your package [fits our scope](https://www.pyopensci.org/software-peer-review/about/package-scope.html)? Submit an inquiry for feedback before review. |
| 121 | +- **<i class="fa-solid fa-check" style="color:#81c0aa;"></i> Full submission:** Ready for peer review? Submit your package to kick off the process. |
| 122 | + |
| 123 | + |
| 124 | +<figure> |
| 125 | + <source srcset="{{ '/images/peer-review/pyopensci-software-review-issue-selection.webp' | relative_url }}" type="image/webp"> |
| 126 | + <img src="{{ '/images/peer-review/pyopensci-software-review-issue-selection.png' | relative_url }}" style="max-width:100%" alt="Screenshot of the pyOpenSci issue selection screen on GitHub, with three options: Help Request, Presubmission Inquiry, and Submit Software for Review."> |
| 127 | + <figcaption> |
| 128 | + Above are the three issue templates that you can select from when submitting a package for review to pyOpenSci. Select the issue that best fits your current situation. |
| 129 | + </figcaption> |
| 130 | +</figure> |
| 131 | +</div> |
| 132 | + |
| 133 | + |
| 134 | +<figure> |
| 135 | + <img src="{{ '/images/peer-review/peer-review-submit-issue.gif' | relative_url }}" style="max-width:100%" alt="Animated gif showing how to find the GitHub issue submission process for peer review."> |
| 136 | + <figcaption> |
| 137 | + How to open a new review submission in our GitHub repository. |
| 138 | + </figcaption> |
| 139 | +</figure> |
| 140 | + |
| 141 | + |
| 142 | +#### <i class="fa-solid fa-check" style="color:#81c0aa;"></i> Guidelines for filling out the review issue template |
| 143 | + |
| 144 | +When you fill out the review template, please consider the following: |
| 145 | + |
| 146 | +##### Basic template criteria |
| 147 | +* **Complete all sections of the template.** If you have questions about fields, you can ask about them in the review issue. |
| 148 | +* **Do not modify existing formatting:** Please do not modify the template structure by adding elements to the template fields such as bold, italics, etc. |
| 149 | +* **Submit your issue only when fully completed:** If you can, try to avoid submitting an issue and then continuously editing it. If you'd like to work on the issue over time, consider forking our repository and working on the issue in your fork before submitting it as an option. |
| 150 | +* **If you made a pre-submission inquiry**, paste the link to the corresponding issue in your issue submission to link your submission request to the pre-submission discussion. |
| 151 | + |
| 152 | +##### Long term maintenance and code of conduct |
| 153 | + |
| 154 | +To be considered for review, you must agree to the following when filling our the review submission: |
| 155 | +1. **Follow our Code of Conduct:** Ensure respectful and constructive communication during and after the review. |
| 156 | +2. **Commit to maintaining your package for at least 2 years maintenance:** Package maintenance is on area that distinguishes pyOpenSci from JOSS. If your primary goal is publication rather than ongoing package maintenance, consider submitting directly to [JOSS](https://joss.theoj.org/) instead. |
| 157 | + |
| 158 | +```markdown |
| 159 | +## Code of Conduct & Commitment to Maintain Package |
| 160 | + |
| 161 | +- [ ] I agree to abide by [pyOpenSci's Code of Conduct][PyOpenSciCodeOfConduct] during the review process and in maintaining my package after should it be accepted. |
| 162 | +- [ ] I have read and will commit to package maintenance after the review as per the [pyOpenSci Policies Guidelines][Commitment]. |
| 163 | +``` |
| 164 | + |
| 165 | +##### Our partnerships |
| 166 | + |
| 167 | +Becoming published or affiliated with one of our partners is optional. |
| 168 | + |
| 169 | +<figure> |
| 170 | + <source srcset="{{ '/images/peer-review/pyos-partnerships-peer-review.webp' | relative_url }}" type="image/webp"> |
| 171 | + <img src="{{ '/images/peer-review/pyos-partnerships-peer-review.png' | relative_url }}" alt="A flowchart showing how a package submitted to pyOpenSci can also be fast-tracked for JOSS publication." style="width: 70%; display: block; margin: 0 auto;"> |
| 172 | + <figcaption> |
| 173 | + Packages accepted into pyOpenSci can also be published in JOSS through a streamlined process. |
| 174 | + |
| 175 | + </figcaption> |
| 176 | +</figure> |
| 177 | + |
| 178 | +* **If you are interested in a fast track review through JOSS, be sure to check the JOSS box** JOSS will accept our review as theirs and only review your paper.md file. |
| 179 | +* **Community Affiliation:** If you are interested in becoming affiliated with a partner community like [Astropy](https://www.pyopensci.org/software-peer-review/partners/astropy.html), be sure to click the community partner. Learn more about [community affiliation through pyOpenSci's peer review process here](https://www.pyopensci.org/software-peer-review/partners/scientific-communities.html). |
| 180 | + |
| 181 | +```markdown |
| 182 | +## Community Partnerships |
| 183 | + |
| 184 | +If your package is associated with an existing community please check below: |
| 185 | + |
| 186 | +- [ ] Astropy:[My package adheres to Astropy community standards](https://www.pyopensci.org/software-peer-review/partners/astropy.html) |
| 187 | +- [ ] Pangeo: My package adheres to the [Pangeo standards listed in the pyOpenSci peer review guidebook][PangeoCollaboration] |
| 188 | +``` |
| 189 | + |
| 190 | +##### Please fill out our survey |
| 191 | + |
| 192 | +Completing the [pyOpenSci pre-review survey](https://forms.gle/F9mou7S3jhe8DMJ16) is a huge help to our team of volunteers, future package authors, and pyOpenSci as an organization. It helps us track submissions as well as continuously improve our peer review process. |
| 193 | + |
| 194 | +##### <i class="fa-solid fa-eye-slash" style="color:#81c0aa;"></i> Template sections that you can ignore |
| 195 | + |
| 196 | +Some template sections are **for editors only** and should be left blank. These include: |
| 197 | + |
| 198 | +- **Editorial assignments:** "EiC," "Editor," "Reviewer 1," "Reviewer 2" |
| 199 | +- **JOSS-specific fields:** "JOSS DOI," "Version accepted," "Date accepted" |
| 200 | + |
| 201 | +```yaml |
| 202 | +# All of the fields below will be filled out by out editorial team |
| 203 | +EiC: TBD |
| 204 | +Editor: TBD |
| 205 | +Reviewer 1: TBD |
| 206 | +Reviewer 2: TBD |
| 207 | +Archive: TBD |
| 208 | +JOSS DOI: TBD |
| 209 | +Version accepted: TBD |
| 210 | +Date accepted (month/day/year): TBD |
| 211 | +``` |
| 212 | +
|
| 213 | +<!-- <div class="notice notice--info" markdown="1"> |
| 214 | +<i class="fa-solid fa-circle-exclamation" style="color:#81c0aa;"></i> **Why does filling out our review template matter?** |
| 215 | +Our peer review workflow relies on scripts to process submission data. If the template structure is modified, it will break our automated processes! |
| 216 | +</div> --> |
| 217 | +
|
| 218 | +<div class="notice notice--success" markdown="1"> |
| 219 | +
|
| 220 | +<i class="fa-solid fa-graduation-cap" style="color:#81c0aa;"></i> Need help? |
| 221 | +{: .header } |
| 222 | +
|
| 223 | +Check out our [**<i class="fa-solid fa-link"></i> Python packaging guide**](https://www.pyopensci.org/python-package-guide/) for best practices on packaging, testing, and infrastructure setup. |
| 224 | +
|
| 225 | +</div> |
| 226 | +
|
| 227 | +Once you're ready, **submit your issue**, and our editors will take it from there! 🚀 |
| 228 | +
|
| 229 | +<div class="notice notice--info" markdown="1"> |
| 230 | +## <i class="fa-regular fa-comments"></i> Connect with us! |
| 231 | +
|
| 232 | +If you found this how-to guide useful, or if you have suggestions for improving it, we'd love to hear from you! Reach out to us on: |
| 233 | +
|
| 234 | +* [BlueSky](https://bsky.app/profile/pyopensci.org) |
| 235 | +* [Fosstodon](https://fosstodon.org/@pyOpenSci) |
| 236 | +* [LinkedIn](https://www.linkedin.com/company/pyopensci) |
| 237 | +</div> |
0 commit comments