Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ jobs:
path: pkg
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
registry-url: 'https://registry.npmjs.org'
- name: Upgrade npm for Trusted Publishing
- name: Upgrade npm to latest patch
run: npm install -g npm@latest
- name: Publish to npm
working-directory: pkg
Expand Down
22 changes: 11 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ resolver = "2"

[workspace.package]
edition = "2021"
version = "0.3.59"
version = "0.3.60"
description = "Tower is the best way to host Python data apps in production"
rust-version = "1.81"
authors = ["Brad Heller <brad@tower.dev>", "Ben Lovell <ben@tower.dev>"]
Expand Down
13 changes: 11 additions & 2 deletions crates/tower-cmd/src/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,9 @@ async fn get_catalogs(
let mut vals = HashMap::new();

for catalog in res.catalogs {
// we will decrypt each property and inject it into the vals map.
// Decrypt each property and inject it into the vals map. The API returns
// the correct environment_variable name for each property (including S3
// Tables remapping, static constants, and derived URI).
for property in catalog.properties {
let decrypted_value =
crypto::decrypt(private_key.clone(), property.encrypted_value.to_string())
Expand All @@ -625,7 +627,12 @@ async fn get_catalogs(
"Failed to decrypt catalog property",
))
})?;
let name = create_pyiceberg_catalog_property_name(&catalog.name, &property.name);
let name = property
.environment_variable
.filter(|s| !s.is_empty())
.unwrap_or_else(|| {
create_pyiceberg_catalog_property_name(&catalog.name, &property.name)
});
Comment thread
coderabbitai[bot] marked this conversation as resolved.
vals.insert(name, decrypted_value);
}
}
Expand Down Expand Up @@ -743,10 +750,12 @@ async fn monitor_cli_status(

fn create_pyiceberg_catalog_property_name(catalog_name: &str, property_name: &str) -> String {
let catalog_name = catalog_name
.replace('-', "_")
.replace('.', "_")
.replace(':', "_")
.to_uppercase();
let property_name = property_name
.replace('-', "_")
.replace('.', "_")
.replace(':', "_")
.to_uppercase();
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "maturin"

[project]
name = "tower"
version = "0.3.59"
version = "0.3.60"
description = "Tower CLI and runtime environment for Tower."
authors = [{ name = "Tower Computing Inc.", email = "brad@tower.dev" }]
readme = "README.md"
Expand Down Expand Up @@ -48,7 +48,7 @@ tower = "tower.cli:main"

[project.optional-dependencies]
ai = ["huggingface-hub>=0.34.3", "ollama>=0.5.3"]
iceberg = ["polars>=1.39.3", "pyarrow>=23.0.1", "pyiceberg>=0.11.1"]
iceberg = ["polars>=1.39.3", "pyarrow>=23.0.1", "pyiceberg>=0.11.1", "boto3>=1.35.0"]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Does pyiceberg version 0.11.1 depend on boto3 and what version range does it require?

💡 Result:

No, pyiceberg version 0.11.1 does not depend on boto3 as a core requirement. boto3 is an optional dependency required only for specific extras like 'glue', 'dynamodb', and 'rest-sigv4', with version range >=1.24.59.

Citations:


Remove or justify the explicit boto3 dependency.

boto3 is not a transitive dependency of pyiceberg 0.11.1—it's only optional for specific extras (glue, dynamodb, rest-sigv4). The code doesn't import boto3 directly or use any of these extras; S3 access is entirely delegated to pyiceberg. Unless boto3 is required for a feature not shown in the provided snippets, this dependency should be removed to avoid unnecessary bloat and version management overhead.

If boto3 is genuinely required, document the reason and note that pyiceberg expects >=1.24.59, whereas this pins >=1.35.0.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyproject.toml` at line 51, The pyproject currently pins boto3 in the
"iceberg" extra list ("boto3>=1.35.0"); remove that entry unless your code
actually imports boto3 or needs pyiceberg extras like "glue", "dynamodb" or
"rest-sigv4". If boto3 is required, document the reason in the pyproject (or
project README) and relax the pin to match pyiceberg's documented minimum (e.g.,
"boto3>=1.24.59") instead of forcing >=1.35.0, and keep the dependency only if
you explicitly use boto3 APIs or those pyiceberg extras.

dbt = ["dbt-core>=1.9,<1.10"] # Can not use dbt 1.10+ due to dependency conflicts
all = ["tower[ai,iceberg,dbt]"]

Expand Down
Loading
Loading