diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0cb7202..4000b21 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -65,7 +65,7 @@ jobs: pip install "setuptools>=64" --upgrade # Install package in editable mode. - pip install --use-pep517 --prefer-binary --editable=.[io,test,develop] + pip install --use-pep517 --prefer-binary --editable=.[cloud,io,test,develop] - name: Run linter and software tests run: | diff --git a/CHANGES.md b/CHANGES.md index da9d683..8bcb8ac 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ ## Unreleased +- Packaging: Use `cloud` extra to install relevant packages ## 2024/12/18 v0.0.3 diff --git a/cratedb_toolkit/api/main.py b/cratedb_toolkit/api/main.py index e3a635d..b753df8 100644 --- a/cratedb_toolkit/api/main.py +++ b/cratedb_toolkit/api/main.py @@ -8,7 +8,6 @@ from cratedb_toolkit.api.guide import GuidingTexts from cratedb_toolkit.cluster.util import get_cluster_info from cratedb_toolkit.exception import CroudException, OperationFailed -from cratedb_toolkit.io.croud import CloudIo from cratedb_toolkit.model import ClusterInformation, DatabaseAddress, InputOutputResource, TableAddress logger = logging.getLogger(__name__) @@ -44,6 +43,7 @@ def load_table(self, resource: InputOutputResource, target: t.Optional[TableAddr https://console.cratedb.cloud """ + from cratedb_toolkit.io.croud import CloudIo target = target or TableAddress() diff --git a/cratedb_toolkit/cluster/util.py b/cratedb_toolkit/cluster/util.py index 8197d11..d07ec32 100644 --- a/cratedb_toolkit/cluster/util.py +++ b/cratedb_toolkit/cluster/util.py @@ -1,9 +1,13 @@ -from cratedb_toolkit.cluster.croud import CloudCluster from cratedb_toolkit.model import ClusterInformation def get_cluster_info(cluster_id: str) -> ClusterInformation: cluster_info = ClusterInformation() - cc = CloudCluster(cluster_id=cluster_id) - cluster_info.cloud = cc.get_info() + try: + from cratedb_toolkit.cluster.croud import CloudCluster + + cc = CloudCluster(cluster_id=cluster_id) + cluster_info.cloud = cc.get_info() + except ImportError: + pass return cluster_info diff --git a/cratedb_toolkit/job/cli.py b/cratedb_toolkit/job/cli.py index 20053f6..3d17165 100644 --- a/cratedb_toolkit/job/cli.py +++ b/cratedb_toolkit/job/cli.py @@ -5,7 +5,10 @@ from cratedb_toolkit.job.croud import jobs_list from cratedb_toolkit.util.croud import get_croud_output_formats -output_formats = get_croud_output_formats() +try: + output_formats = get_croud_output_formats() +except ImportError: + output_formats = ["UNKNOWN"] @click.command(name="list-jobs") diff --git a/cratedb_toolkit/util/croud.py b/cratedb_toolkit/util/croud.py index f3eb9e9..b7c2d75 100644 --- a/cratedb_toolkit/util/croud.py +++ b/cratedb_toolkit/util/croud.py @@ -9,17 +9,20 @@ from unittest.mock import patch import yaml -from croud.parser import Argument from cratedb_toolkit.exception import CroudException +if t.TYPE_CHECKING: + from croud.parser import Argument + + logger = logging.getLogger(__name__) @dataclasses.dataclass class CroudCall: fun: t.Callable - specs: t.List[Argument] + specs: t.List["Argument"] arguments: t.List[str] diff --git a/pyproject.toml b/pyproject.toml index 254e85f..9dc07f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,7 +91,6 @@ dependencies = [ "colorlog", "crash", "crate[sqlalchemy]>=0.34", - "croud==1.10.0", 'importlib-metadata; python_version <= "3.7"', "python-dotenv<2", "sqlalchemy", @@ -99,7 +98,10 @@ dependencies = [ ] [project.optional-dependencies] all = [ - "cratedb-toolkit[influxdb,io,mongodb]", + "cratedb-toolkit[cloud,influxdb,io,mongodb]", +] +cloud = [ + "croud==1.10.0", ] develop = [ "black[jupyter]<24", @@ -271,7 +273,7 @@ format = [ # Configure Ruff not to auto-fix (remove!): # unused imports (F401), unused variables (F841), `print` statements (T201), and commented-out code (ERA001). { cmd = "ruff --fix --ignore=ERA --ignore=F401 --ignore=F841 --ignore=T20 --ignore=ERA001 ." }, - { cmd = "pyproject-fmt pyproject.toml" }, + { cmd = "pyproject-fmt --keep-full-version pyproject.toml" }, ] lint = [