From 2f92c85f53af3747d7177bc8f451b848fdfce65a Mon Sep 17 00:00:00 2001 From: Sander van Rijn Date: Sun, 18 Feb 2024 20:12:19 +0100 Subject: [PATCH 1/2] move generated package to src/ layout --- CHANGELOG.md | 1 + tests/test_project.py | 8 ++++---- {{cookiecutter.directory_name}}/docs/conf.py | 2 +- {{cookiecutter.directory_name}}/pyproject.toml | 11 +++-------- .../sonar-project.properties | 2 +- .../{{cookiecutter.package_name}}/__init__.py | 0 .../{{cookiecutter.package_name}}/my_module.py | 0 7 files changed, 10 insertions(+), 14 deletions(-) rename {{cookiecutter.directory_name}}/{ => src}/{{cookiecutter.package_name}}/__init__.py (100%) rename {{cookiecutter.directory_name}}/{ => src}/{{cookiecutter.package_name}}/my_module.py (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 949c3856..5b22b7a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### Changed +* Moved to src/ based layout for generated packages * Moved from setup.cfg/.py to pyproject.toml [#351](https://github.com/NLeSC/python-template/issues/351) * Moved from prospector to ruff [#336](https://github.com/NLeSC/python-template/issues/336) * Renamed `project_name` to `directory_name` in cookiecutter questionnaire diff --git a/tests/test_project.py b/tests/test_project.py index 399dd799..c594fe46 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -83,11 +83,11 @@ def test_subpackage(baked_with_development_dependencies, project_env_bin_dir): """Test if subpackages end up in (wheel) distributions""" project_dir = baked_with_development_dependencies bin_dir = project_env_bin_dir - subpackage = (project_dir / 'my_python_package' / 'mysub') + subpackage = (project_dir / 'src' / 'my_python_package' / 'mysub') subpackage.mkdir() (subpackage / '__init__.py').write_text('FOO = "bar"\n', encoding="utf-8") - subsubpackage = (project_dir / 'my_python_package' / 'mysub' / 'mysub2') + subsubpackage = (project_dir / 'src' / 'my_python_package' / 'mysub' / 'mysub2') subsubpackage.mkdir() (subsubpackage / '__init__.py').write_text('FOO = "bar"\n', encoding="utf-8") @@ -179,7 +179,7 @@ def test_bumpversion(baked_with_development_dependencies, project_env_bin_dir): original_version = '0.1.0' assert original_version in (project_dir / 'pyproject.toml').read_text('utf-8') assert original_version in (project_dir / 'CITATION.cff').read_text('utf-8') - assert original_version in (project_dir / 'my_python_package' / '__init__.py').read_text('utf-8') + assert original_version in (project_dir / 'src' / 'my_python_package' / '__init__.py').read_text('utf-8') assert original_version in (project_dir / 'docs' / 'conf.py').read_text('utf-8') result = run([f'{bin_dir}bump-my-version', 'major'], project_dir) @@ -188,5 +188,5 @@ def test_bumpversion(baked_with_development_dependencies, project_env_bin_dir): expected_version = '1.0.0' assert expected_version in (project_dir / 'pyproject.toml').read_text('utf-8') assert expected_version in (project_dir / 'CITATION.cff').read_text('utf-8') - assert expected_version in (project_dir / 'my_python_package' / '__init__.py').read_text('utf-8') + assert expected_version in (project_dir / 'src' / 'my_python_package' / '__init__.py').read_text('utf-8') assert expected_version in (project_dir / 'docs' / 'conf.py').read_text('utf-8') diff --git a/{{cookiecutter.directory_name}}/docs/conf.py b/{{cookiecutter.directory_name}}/docs/conf.py index e0f32f0b..c73e3d3b 100644 --- a/{{cookiecutter.directory_name}}/docs/conf.py +++ b/{{cookiecutter.directory_name}}/docs/conf.py @@ -61,7 +61,7 @@ # -- Use autoapi.extension to run sphinx-apidoc ------- -autoapi_dirs = ['../{{ cookiecutter.package_name }}'] +autoapi_dirs = ['../src/{{ cookiecutter.package_name }}'] # -- Options for HTML output ---------------------------------------------- diff --git a/{{cookiecutter.directory_name}}/pyproject.toml b/{{cookiecutter.directory_name}}/pyproject.toml index 9dd96e77..7aca8258 100644 --- a/{{cookiecutter.directory_name}}/pyproject.toml +++ b/{{cookiecutter.directory_name}}/pyproject.toml @@ -72,7 +72,7 @@ testpaths = ["tests"] [tool.coverage.run] branch = true -source = ["{{ cookiecutter.package_name }}"] +source = ["src/{{ cookiecutter.package_name }}"] command_line = "-m pytest" [tool.isort] @@ -80,14 +80,9 @@ lines_after_imports = 2 force_single_line = 1 no_lines_before = ["FUTURE", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] known_first_party = "{{ cookiecutter.package_name }}" -src_paths = ["{{ cookiecutter.package_name }}", "tests"] +src_paths = ["src/{{ cookiecutter.package_name }}", "tests"] line_length = 120 -# For completeness, until we move to an src-based layout -[tool.setuptools.packages.find] -include = ["{{ cookiecutter.package_name }}*"] -exclude = ["tests*"] - [tool.tox] legacy_tox_ini = """ [tox] @@ -177,7 +172,7 @@ no-lines-before = ["future","standard-library","third-party","first-party","loca current_version = "{{ cookiecutter.version }}" [[tool.bumpversion.files]] -filename = "{{ cookiecutter.package_name }}/__init__.py" +filename = "src/{{ cookiecutter.package_name }}/__init__.py" [[tool.bumpversion.files]] filename = "pyproject.toml" diff --git a/{{cookiecutter.directory_name}}/sonar-project.properties b/{{cookiecutter.directory_name}}/sonar-project.properties index 02e14401..512f6831 100644 --- a/{{cookiecutter.directory_name}}/sonar-project.properties +++ b/{{cookiecutter.directory_name}}/sonar-project.properties @@ -1,7 +1,7 @@ sonar.organization={{ cookiecutter.github_organization }} sonar.projectKey={{ cookiecutter.github_organization }}_{{ cookiecutter.directory_name }} sonar.host.url=https://sonarcloud.io -sonar.sources={{ cookiecutter.package_name }}/ +sonar.sources=src/{{ cookiecutter.package_name }}/ sonar.tests=tests/ sonar.links.homepage={{ cookiecutter.repository_url }} sonar.links.scm={{ cookiecutter.repository }} diff --git a/{{cookiecutter.directory_name}}/{{cookiecutter.package_name}}/__init__.py b/{{cookiecutter.directory_name}}/src/{{cookiecutter.package_name}}/__init__.py similarity index 100% rename from {{cookiecutter.directory_name}}/{{cookiecutter.package_name}}/__init__.py rename to {{cookiecutter.directory_name}}/src/{{cookiecutter.package_name}}/__init__.py diff --git a/{{cookiecutter.directory_name}}/{{cookiecutter.package_name}}/my_module.py b/{{cookiecutter.directory_name}}/src/{{cookiecutter.package_name}}/my_module.py similarity index 100% rename from {{cookiecutter.directory_name}}/{{cookiecutter.package_name}}/my_module.py rename to {{cookiecutter.directory_name}}/src/{{cookiecutter.package_name}}/my_module.py From f5b0ad1060823b5daeb6eb622e92a6faa8597f8c Mon Sep 17 00:00:00 2001 From: Sander van Rijn Date: Sun, 18 Feb 2024 23:18:52 +0100 Subject: [PATCH 2/2] update generated package skeleton in README using 'tree -a' --- README.md | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index b48dc112..e23cebc9 100644 --- a/README.md +++ b/README.md @@ -89,19 +89,6 @@ Good job! You have now generated the skeleton for your package: ```text my-python-project/ -├── CHANGELOG.md -├── CITATION.cff -├── CODE_OF_CONDUCT.md -├── CONTRIBUTING.md -├── docs -│ ├── conf.py -│ ├── index.rst -│ ├── make.bat -│ ├── Makefile -│ ├── _static -│ │ └── theme_overrides.css -│ └── _templates -│ └── .gitignore ├── .editorconfig ├── .githooks │ └── pre-commit @@ -115,26 +102,37 @@ my-python-project/ │ └── workflows │ ├── build.yml │ ├── cffconvert.yml -│ ├── lint.yml +│ ├── documentation.yml │ ├── markdown-link-check.yml │ ├── next_steps.yml │ └── sonarcloud.yml ├── .gitignore +├── .mlc-config.json +├── .readthedocs.yaml +├── CHANGELOG.md +├── CITATION.cff +├── CODE_OF_CONDUCT.md +├── CONTRIBUTING.md ├── LICENSE ├── MANIFEST.in -├── .mlc-config.json -├── my_python_package -│ ├── __init__.py -│ ├── my_module.py -│ └── __version__.py -├── next_steps.md ├── NOTICE -├── project_setup.md -├── .pylintrc -├── pyproject.toml ├── README.dev.md ├── README.md +├── docs +│ ├── Makefile +│ ├── _templates +│ │ └── .gitignore +│ ├── conf.py +│ ├── index.rst +│ └── make.bat +├── next_steps.md +├── project_setup.md +├── pyproject.toml ├── sonar-project.properties +├── src +│ └── my_python_package +│ ├── __init__.py +│ └── my_module.py └── tests ├── __init__.py └── test_my_module.py