diff --git a/CHANGELOG.md b/CHANGELOG.md index ba3c96f01..69452ae87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ Releases prior to 7.0 has been removed from this file to declutter search result ## [Unreleased] +### Deprecated + +- package: DipDup packages are expected to have `pyproject.toml` and `dipdup.yaml` files in the root directory. This will become a requirement in 9.0. + +### Other + - deps: `tortoise-orm` updated to 0.24.0. ## [8.2.0rc1] - 2025-01-24 diff --git a/docs/9.release-notes/_8.0_changelog.md b/docs/9.release-notes/_8.0_changelog.md index e0555feed..b6125f70f 100644 --- a/docs/9.release-notes/_8.0_changelog.md +++ b/docs/9.release-notes/_8.0_changelog.md @@ -64,6 +64,10 @@ - performance: All time intervals are now measured in seconds. - performance: Several metrics have been renamed and new ones have been added. +### Deprecated + +- package: DipDup packages are expected to have `pyproject.toml` and `dipdup.yaml` files in the root directory. This will become a requirement in 9.0. + ### Removed - config: Removed `advanced.skip_version_check` flag; use `DIPDUP_NO_VERSION_CHECK` environment variable. diff --git a/src/dipdup/cli.py b/src/dipdup/cli.py index e897f02b8..bfa3ab575 100644 --- a/src/dipdup/cli.py +++ b/src/dipdup/cli.py @@ -928,6 +928,7 @@ async def self_install( editable=editable, with_pdm=replay is not None and replay['package_manager'] == 'pdm', with_poetry=replay is not None and replay['package_manager'] == 'poetry', + with_uv=replay is not None and replay['package_manager'] == 'uv', ) @@ -972,6 +973,7 @@ async def self_update( update=True, with_pdm=replay is not None and replay['package_manager'] == 'pdm', with_poetry=replay is not None and replay['package_manager'] == 'poetry', + with_uv=replay is not None and replay['package_manager'] == 'uv', ) diff --git a/src/dipdup/package.py b/src/dipdup/package.py index 39a76129c..a96c55aa9 100644 --- a/src/dipdup/package.py +++ b/src/dipdup/package.py @@ -62,6 +62,10 @@ def __init__(self, root: Path, quiet: bool = False) -> None: self.root = root self.name = root.name + # NOTE: Paths expected to exist in package root + self.pyproject = root.parent / 'pyproject.toml' + self.root_config = root.parent / 'dipdup.yaml' + # NOTE: Package sections with .keep markers self.abi = root / 'abi' self.configs = root / 'configs' @@ -164,6 +168,16 @@ def _pre_init(self) -> None: if self.root.exists() and not self.root.is_dir(): raise ProjectPackageError(f'`{self.root}` exists and not a directory') + # TODO: Remove in 9.0 + def act(x: str) -> None: + if env.NEXT: + raise ProjectPackageError(x) + _logger.warning(x) + + for path in (self.root_config, self.pyproject): + if not path.is_file(): + act(f'`{path}` not found. Have you created a project with `dipdup new` command?') + def _post_init(self) -> None: # NOTE: Allows plain package structure to be imported if self.root != Path.cwd() or env.NO_SYMLINK: