From 18d83677a230543a06271d26b09416930b968fa8 Mon Sep 17 00:00:00 2001 From: Andreas Motl Date: Fri, 19 Jan 2024 21:41:06 +0100 Subject: [PATCH] Packaging: Use `cloud` extra to install relevant packages I.e., don't always install the `croud` package. --- CHANGES.md | 1 + cratedb_toolkit/api/main.py | 2 +- cratedb_toolkit/cluster/util.py | 10 +++++++--- cratedb_toolkit/job/cli.py | 5 ++++- cratedb_toolkit/util/croud.py | 7 +++++-- pyproject.toml | 8 +++++--- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index da9d683a..8bcb8ac2 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 e3a635d8..b753df83 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 8197d11b..d07ec32c 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 20053f63..3d171657 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 f3eb9e9c..b7c2d758 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 254e85f2..9dc07f7c 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 = [