diff --git a/.github/workflows/test_and_deploy.yml b/.github/workflows/test_and_deploy.yml new file mode 100644 index 0000000..279ef85 --- /dev/null +++ b/.github/workflows/test_and_deploy.yml @@ -0,0 +1,61 @@ +name: tests + +on: + push: + branches: + - '*' + tags: + - '*' + pull_request: + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/lint@v2 + + manifest: + name: Check Manifest + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/check_manifest@v2 + + test: + needs: [linting, manifest] + name: ${{ matrix.os }} py${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + # Run all supported Python versions on linux + python-version: ["3.9", "3.10", "3.11"] + os: [ubuntu-latest] + # Include one windows and macos run + include: + - os: macos-latest + python-version: "3.10" + - os: windows-latest + python-version: "3.10" + + steps: + # Run tests + - uses: neuroinformatics-unit/actions/test@v2 + with: + python-version: ${{ matrix.python-version }} + + build_sdist_wheels: + name: Build source distribution + needs: [test] + if: github.event_name == 'push' && github.ref_type == 'tag' + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/build_sdist_wheels@v2 + + + upload_all: + name: Publish build distributions + needs: [build_sdist_wheels] + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/upload_pypi@v2 + with: + secret-pypi-key: ${{ secrets.TWINE_API_KEY }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aedc8d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,83 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# 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/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask instance folder +instance/ + +# Sphinx documentation +docs/_build/ + +# MkDocs documentation +/site/ + +# PyBuilder +target/ + +# Pycharm and VSCode +.idea/ +venv/ +.vscode/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# OS +.DS_Store + +# written by setuptools_scm +**/_version.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..675f629 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,45 @@ + + +# Configuring https://pre-commit.ci/ +ci: + autoupdate_schedule: monthly + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-toml + - id: end-of-file-fixer + - id: mixed-line-ending + args: [--fix=lf] + - id: requirements-txt-fixer + - id: trailing-whitespace + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.7.2 + hooks: + - id: ruff + args: [ --config=pyproject.toml ] + - id: ruff-format + args: [ --config=pyproject.toml ] + - repo: https://github.com/pre-commit/mirrors-mypy + rev: v1.13.0 + hooks: + - id: mypy + additional_dependencies: + - types-setuptools + - repo: https://github.com/mgedmin/check-manifest + rev: "0.50" + hooks: + - id: check-manifest + args: [--no-build-isolation] + additional_dependencies: [setuptools-scm] + - repo: https://github.com/codespell-project/codespell + # Configuration for codespell is in pyproject.toml + rev: v2.3.0 + hooks: + - id: codespell + additional_dependencies: + - tomli diff --git a/LICENSE b/LICENSE index 0cb0faa..353a7d8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2024, SainsburyWellcomeCentre +Copyright (c) 2023-2024, University College London Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -25,4 +25,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e16ea33 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,8 @@ +include LICENSE +include README.md +exclude .pre-commit-config.yaml + +recursive-exclude * __pycache__ +recursive-exclude * *.py[co] +recursive-exclude docs * +recursive-exclude tests * diff --git a/aeon_sleap_processing/__init__.py b/aeon_sleap_processing/__init__.py new file mode 100644 index 0000000..35bcb01 --- /dev/null +++ b/aeon_sleap_processing/__init__.py @@ -0,0 +1,7 @@ +from importlib.metadata import PackageNotFoundError, version + +try: + __version__ = version("aeon_sleap_processing") +except PackageNotFoundError: + # package is not installed + pass diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..44f0bb9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,116 @@ +[project] +name = "aeon_sleap_processing" +authors = [ + { name = "Jai Bhagat", email = "jkbhagatio@gmail.com" }, + { name = "Goncalo Lopes", email = "g.lopes@neurogears.org" }, + { name = "Chang Huan Lo", email = "changhuan.lo@ucl.ac.uk" }, + { name = "Anaya Pouget", email = "a.pouget@ucl.ac.uk"}, +] +description = "Project Aeon computational data pipeline for post-process refinement of SLEAP data using zoomed in cameras." +readme = "README.md" +requires-python = ">=3.9.0" +dynamic = ["version"] + +dependencies = [] + +license = {text = "BSD-3-Clause"} + +classifiers = [ + "Development Status :: 2 - Pre-Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: OS Independent", + "License :: OSI Approved :: BSD License", +] + + + +[project.optional-dependencies] +dev = [ + "pytest", + "pytest-cov", + "coverage", + "tox", + "mypy", + "pre-commit", + "ruff", + "setuptools_scm", +] + +[build-system] +requires = [ + "setuptools>=45", + "wheel", + "setuptools_scm[toml]>=6.2", +] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +include = ["aeon_sleap_processing*"] +exclude = ["tests*"] + +[tool.pytest.ini_options] +addopts = "--cov=aeon_sleap_processing" +filterwarnings = [ + "error", +] + +[tool.setuptools_scm] + +[tool.check-manifest] +ignore = [ + ".yaml", + "tox.ini", + "tests/", + "tests/test_unit/", + "tests/test_integration/", +] + +[tool.ruff] +line-length = 79 +exclude = ["__init__.py", "build", ".eggs"] +lint.select = [ + "E", # pycodestyle errors + "F", # Pyflakes + "I", # isort + # You can see what all the rules do here: https://docs.astral.sh/ruff/rules/ + # Some additional ruff rules that might be useful (uncomment to enable) + #"UP", # pyupgrade + #"B", # flake8 bugbear + #"SIM", # flake8 simplify + #"C90", # McCabe complexity +] +fix = true + +[tool.ruff.format] +docstring-code-format = true # Also format code in docstrings (e.g. examples) + +[tool.tox] +legacy_tox_ini = """ +[tox] +envlist = py{39,310,311} +isolated_build = True + +[gh-actions] +python = + 3.9: py39 + 3.10: py310 + 3.11: py311 + +[testenv] +extras = + dev +commands = + pytest -v --color=yes --cov=aeon_sleap_processing --cov-report=xml +""" + + +[tool.codespell] +skip = '.git' +check-hidden = true diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_integration/__init__.py b/tests/test_integration/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_unit/__init__.py b/tests/test_unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_unit/test_placeholder.py b/tests/test_unit/test_placeholder.py new file mode 100644 index 0000000..3ada1ee --- /dev/null +++ b/tests/test_unit/test_placeholder.py @@ -0,0 +1,2 @@ +def test_placeholder(): + assert True