Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
python-version: ["3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
Expand Down
202 changes: 74 additions & 128 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,143 +1,89 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
__pypackages__/
.cache
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.dmypy.json
.DS_Store
.eggs/
.env
.hypothesis/
.idea/
.installed.cfg
.ipynb_checkpoints
.mypy_cache/
.nox/
.pdm-build/
.pdm-python
.pdm.toml
.pybuilder/
.pyre/
.pytest_cache/
cover/

# Translations
.Python
.python-version
.pytype/
.ropeproject
.scrapy
.spyderproject
.spyproject
.tox/
.venv
.vscode
.webassets-cache
*.bak
*.cover
*.egg
*.egg-info/
*.log
*.manifest
*.mo
*.orig
*.pot

# Django stuff:
*.log
local_settings.py
*.py,cover
*.py[cod]
*.sage.py
*.so
*.spec
*.sqlite3
**/.DS_Store
*~
*$py.class
/site
archive
build/
celerybeat-schedule
celerybeat.pid
cover/
coverage.xml
cython_debug/
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
develop-eggs/
dist/
dmypy.json
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# package/env management
.python-version
.env
.venv
downloads/
eggs/
env/
venv/
ENV/
*.bak
htmlcov/
instance/
ipython_config.py
lib/
lib64/
local_settings.py
MANIFEST
nosetests.xml
parts/
pdm.lock
pip-delete-this-directory.txt
pip-log.txt
Pipfile.lock
poetry.lock
pdm.lock
.pdm.toml
.pdm-python
.pdm-build/
profile_default/
sdist/
share/python-wheels/
target/
uv.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# IDEs
.idea/
.vscode

# misc
*.orig
archive
*~
**/.DS_Store
var/
venv/
wheels/
13 changes: 13 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# I pick the account with the most modified files in git shortlog -sne
# This is used by Git to consolidate the users who used multiple accounts
Andreas Prlic <[email protected]> Andreas Prlic <[email protected]>
Andreas Prlic <[email protected]> Andreas Prlic <[email protected]>
Caitlin Gong <[email protected]> Caitlin Gong <[email protected]>
Katie Stahl <[email protected]> katie stahl <[email protected]>
Manuel Holtgrewe <[email protected]> Manuel Holtgrewe <[email protected]>
Meng <[email protected]> Meng Wang <[email protected]>
Reece Hart <[email protected]> Reece Hart <[email protected]>
Reece Hart <[email protected]> Reece Hart <[email protected]>
Reece Hart <[email protected]> Reece Hart <[email protected]>
Reece Hart <[email protected]> Reece Hart <[email protected]>
Rudy Rico <[email protected]> Rudolph Rico <[email protected]>
17 changes: 7 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ endif
SHELL:=zsh -eu -o pipefail -o null_glob
SELF:=$(firstword $(MAKEFILE_LIST))

VE_DIR=venv
VE_DIR:=venv
PY_VERSION:=3.13

TEST_DIRS:=tests
DOC_TESTS:=src ./README.md
Expand Down Expand Up @@ -40,27 +41,23 @@ devready:

#=> venv: make a Python 3 virtual environment
${VE_DIR}:
python3 --version
python3 -mvenv $@; \
source $@/bin/activate; \
python3 -m ensurepip --upgrade; \
pip install --upgrade pip setuptools wheel

uv venv --python ${PY_VERSION} $@

#=> develop: install package in develop mode
.PHONY: develop
develop:
pip install -e ".[dev,tests]"
uv pip install -e ".[dev,tests]"
pre-commit install

#=> install: install package
.PHONY: install
install:
pip install "."
uv pip install "."

#=> build: make sdist and wheel
.PHONY: build
build: %:
python -m build
uv build


############################################################################
Expand Down
35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

[![codecov](https://codecov.io/gh/biocommons/biocommons.example/graph/badge.svg?token=CCUMQQV5R6)](https://codecov.io/gh/biocommons/biocommons.example)

---

This repo provides a template for biocommons Python packages. Here's how to use it:

1. Click the [Use this template](https://github.com/biocommons/example/generate)
Expand All @@ -11,28 +13,43 @@ This repo provides a template for biocommons Python packages. Here's how to use
1. Remove this header.
1. Commit and push.

Delete this section in your generated template.

---

## Installation

To install from pypi: ```pip install biocommons.example```

## Developer Setup

Developers must install zsh, which is required by the Makefile. zsh is included by default in MacOS, and is readily available on all modern Linux distributions.
### Prerequisites

Setup like this:
- [GNU make](https://www.gnu.org/software/make/): Current mechanism for consistent invocation of developer tools.
- Mac: [Install brew](https://brew.sh/), then [install make](https://formulae.brew.sh/formula/make)
- Ubuntu: `sudo apt install make`
- [uv](https://docs.astral.sh/uv/): An extremely fast Python package and project manager, written in Rust.
- All platforms: See the [uv installation instructions](https://docs.astral.sh/uv/getting-started/installation/).
- [zsh](https://www.zsh.org/): Shell used by the Makefile
- Mac: included by default
- Ubuntu: `sudo apt install zsh`

### One-time developer setup

Create a Python virtual environment and install dependencies:

make devready

### Development

Activate your environment:

source venv/bin/activate

Code reformatting:

make reformat

Install pre-commit hook:

# included in `make devready`, not necessary for new installations
pre-commit install

Test:

make test # for current environment
Expand Down Expand Up @@ -77,7 +94,3 @@ Try it:

* Quality tools: Code linting and reformatting with Ruff
* GitHub Actions for testing and packaging

## ToDo

* Add devcontainer support
18 changes: 11 additions & 7 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,35 @@ name = "biocommons.example"
authors = [
{ name = "biocommons contributors", email = "[email protected]" },
]
description = "Example Package"
description = "biocommons.example Package"
readme = "README.md"
license = { file = "LICENSE.txt" }
requires-python = ">=3.10"
license = "Apache-2.0"
# license_files = [ "LICENSE.txt" ]
# requires-python = ">=3.11"
classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.13",
"Operating System :: OS Independent",
]
dynamic = ["version"]
dependencies = ["coloredlogs ~= 15.0", "pyyaml ~= 6.0"]
dependencies = [
"coloredlogs ~= 15.0",
"pyyaml ~= 6.0",
]

[project.optional-dependencies]
dev = [
"build ~= 0.8",
"ipython ~= 8.4",
"pre-commit ~= 3.4",
"pre-commit>=3.8.0",
"ruff == 0.4.4",
]
tests = [
"pytest-cov ~= 4.1",
"pytest-optional-tests",
"pytest ~= 7.1",
"vcrpy",
"tox ~= 4.15",
Expand Down
Loading