Skip to content

Commit bc67245

Browse files
committed
Refactor imports and update type hints for Python 3.10+
Reordered and deduplicated imports across multiple modules for consistency and clarity. Updated type hints to use Python 3.10+ union syntax (e.g., 'str | None') instead of 'Optional'. Improved zip usage with 'strict=True' for better error handling. Refactored Plotly layout and marker arguments to use dict literals for compatibility. Removed unused imports and streamlined code for maintainability.
1 parent f2a19d1 commit bc67245

23 files changed

Lines changed: 97 additions & 110 deletions

Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ RUN pip install --no-cache-dir --no-index --find-links=/wheels -r requirements.t
3838

3939
# Copy application code
4040
COPY src ./src
41-
COPY data ./data
4241

4342
# Create directories for runtime data
4443
RUN mkdir -p data/warehouse data/cache && \

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ dev = [
5050
line-length = 100
5151
target-version = "py311"
5252

53+
[tool.ruff.lint]
5354
select = [
5455
"E", # pycodestyle errors
5556
"F", # pyflakes
@@ -65,7 +66,7 @@ ignore = [
6566
"E501", # line too long (handled by black)
6667
]
6768

68-
[tool.ruff.per-file-ignores]
69+
[tool.ruff.lint.per-file-ignores]
6970
"__init__.py" = ["F401"] # Allow unused imports in __init__
7071
"tests/*" = ["S101"] # Allow assert in tests
7172

src/app.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
1-
import streamlit as st
2-
from datetime import datetime
31
import numpy as np
2+
import streamlit as st
43

5-
# Import custom modules
6-
from data.market_data import (
7-
get_market_share_data,
8-
get_growth_trends_data,
9-
get_regional_metrics,
10-
get_key_metrics,
4+
from components.decision_helper import display_decision_helper
5+
from components.future_trends import display_future_trends
6+
from components.learning_resources import display_learning_resources
7+
from components.metrics import (
8+
display_key_metrics,
9+
display_regional_metrics,
10+
display_sidebar_navigation,
1111
)
12+
from components.platform_comparisons import display_platform_comparisons
1213
from data.compliance_data import (
1314
get_compliance_matrix,
14-
get_security_certifications,
1515
get_data_residency_map,
16+
get_security_certifications,
17+
)
18+
19+
# Import custom modules
20+
from data.market_data import (
21+
get_growth_trends_data,
22+
get_key_metrics,
23+
get_market_share_data,
24+
get_regional_metrics,
1625
)
1726
from data.performance_data import (
27+
calculate_tco,
28+
get_cost_analysis,
1829
get_performance_metrics,
1930
get_sla_comparisons,
20-
get_cost_analysis,
21-
calculate_tco,
22-
)
23-
from visualizations.plots import (
24-
create_market_share_treemap,
25-
create_growth_trends_line,
26-
create_provider_comparison_radar,
2731
)
32+
from utils.helpers import filter_data_by_regions
2833
from visualizations.compliance_plots import (
34+
create_certification_timeline,
2935
create_compliance_heatmap,
30-
create_security_score_gauge,
3136
create_data_residency_map,
32-
create_certification_timeline,
37+
create_security_score_gauge,
3338
)
3439
from visualizations.performance_plots import (
35-
create_performance_radar,
40+
create_cost_comparison,
3641
create_latency_heatmap,
42+
create_performance_radar,
3743
create_sla_comparison,
38-
create_cost_comparison,
3944
create_tco_analysis,
4045
)
41-
from components.metrics import (
42-
display_key_metrics,
43-
display_regional_metrics,
44-
display_sidebar_navigation,
46+
from visualizations.plots import (
47+
create_growth_trends_line,
48+
create_market_share_treemap,
49+
create_provider_comparison_radar,
4550
)
46-
from components.decision_helper import display_decision_helper
47-
from components.platform_comparisons import display_platform_comparisons
48-
from components.learning_resources import display_learning_resources
49-
from components.future_trends import display_future_trends
50-
from utils.helpers import filter_data_by_regions, get_time_range_dates
5151

5252
# Set up Streamlit page configuration
5353
st.set_page_config(

src/components/decision_helper.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import streamlit as st
2-
import pandas as pd
32

43

54
def calculate_recommendation_score(inputs):
@@ -216,7 +215,7 @@ def display_recommendation_results(scores):
216215
"China Providers": "Best for cost efficiency and Asia-Pacific expansion.",
217216
}
218217
cols = st.columns(len(scores))
219-
for col, (provider, score) in zip(cols, scores.items()):
218+
for col, (provider, score) in zip(cols, scores.items(), strict=True):
220219
with col:
221220
st.metric(label=provider, value=int(score))
222221
st.caption(tooltips.get(provider, ""))

src/components/future_trends.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import streamlit as st
2-
import plotly.express as px
3-
import plotly.graph_objects as go
41
import pandas as pd
5-
import numpy as np
2+
import plotly.graph_objects as go
3+
import streamlit as st
64

75

86
def create_trend_forecast():

src/components/learning_resources.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import streamlit as st
21
import pandas as pd
2+
import streamlit as st
33

44

55
def display_learning_resources():

src/components/metrics.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import streamlit as st
2-
from datetime import datetime
32

43

54
def display_key_metrics(metrics_data):
@@ -11,7 +10,7 @@ def display_key_metrics(metrics_data):
1110
"Active Providers": "Number of active cloud service providers worldwide.",
1211
"Avg. Compliance Score": "Average compliance score across all providers.",
1312
}
14-
for col, (metric, data) in zip(cols, metrics_data.items()):
13+
for col, (metric, data) in zip(cols, metrics_data.items(), strict=True):
1514
with col:
1615
st.metric(label=metric, value=data["value"], delta=data["change"])
1716
st.caption(tooltips.get(metric, ""))
@@ -20,7 +19,7 @@ def display_key_metrics(metrics_data):
2019
def display_regional_metrics(regional_data):
2120
"""Display regional metrics in columns."""
2221
cols = st.columns(len(regional_data))
23-
for col, (region, data) in zip(cols, regional_data.items()):
22+
for col, (region, data) in zip(cols, regional_data.items(), strict=True):
2423
with col:
2524
st.metric(region, data["value"], f"↑ {data['growth']}")
2625
st.metric("Market Share", data["share"], data["share_change"])
@@ -76,7 +75,7 @@ def display_sidebar_navigation():
7675
)
7776
st.sidebar.markdown("---")
7877
st.sidebar.subheader("Feedback")
79-
feedback = st.sidebar.text_area("Share your feedback or feature requests:")
78+
st.sidebar.text_area("Share your feedback or feature requests:")
8079
if st.sidebar.button("Submit Feedback"):
8180
st.sidebar.success("Thank you for your feedback!")
8281
return page, selected_regions, time_range, selected_provider

src/components/platform_comparisons.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import streamlit as st
21
import pandas as pd
2+
import streamlit as st
33

44

55
def display_platform_comparisons():

src/config/settings.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"""Application settings using Pydantic for type-safe configuration."""
22

33
from pathlib import Path
4-
from typing import Optional
54

65
from pydantic import Field, field_validator
76
from pydantic_settings import BaseSettings, SettingsConfigDict
@@ -29,25 +28,25 @@ class Settings(BaseSettings):
2928
EXPORT_DIR: Path = Field(default=Path("data/exports"))
3029

3130
# Database
32-
DATABASE_URL: Optional[str] = Field(
31+
DATABASE_URL: str | None = Field(
3332
default=None,
3433
description="PostgreSQL connection string",
3534
)
3635

3736
# Object Storage (MinIO/S3)
38-
MINIO_ENDPOINT: Optional[str] = None
39-
MINIO_ACCESS_KEY: Optional[str] = None
40-
MINIO_SECRET_KEY: Optional[str] = None
37+
MINIO_ENDPOINT: str | None = None
38+
MINIO_ACCESS_KEY: str | None = None
39+
MINIO_SECRET_KEY: str | None = None
4140
MINIO_SECURE: bool = False
4241
MINIO_BUCKET: str = "cloud-dashboard"
4342

4443
# Observability
45-
OTEL_ENDPOINT: Optional[str] = Field(
44+
OTEL_ENDPOINT: str | None = Field(
4645
default=None,
4746
description="OpenTelemetry collector endpoint (HTTP)",
4847
)
4948
OTEL_SERVICE_NAME: str = "cloud-dashboard"
50-
PROMETHEUS_URL: Optional[str] = None
49+
PROMETHEUS_URL: str | None = None
5150
ENABLE_TELEMETRY: bool = True
5251

5352
# Features

src/data/compliance_data.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
23
import pandas as pd
34

45

0 commit comments

Comments
 (0)