Show clear error for invalid sql_alchemy_conn at startup#68783
Open
GayathriSrividya wants to merge 1 commit into
Open
Show clear error for invalid sql_alchemy_conn at startup#68783GayathriSrividya wants to merge 1 commit into
GayathriSrividya wants to merge 1 commit into
Conversation
Users can hit a cryptic unpacking ValueError when sql_alchemy_conn is malformed, especially while diagnosing slow CLI startup in constrained environments. A clearer validation path makes misconfiguration immediately actionable and reduces support/debugging churn.
Comment on lines
+508
to
+526
| def test_sqlite_uri_conversion(self): | ||
| """Test conversion of SQLite sync URI to async with aiosqlite.""" | ||
| result = settings._get_async_conn_uri_from_sync("sqlite:///path/to/db.sqlite") | ||
| assert result == "sqlite+aiosqlite:///path/to/db.sqlite" | ||
|
|
||
| def test_postgresql_uri_conversion(self): | ||
| """Test conversion of PostgreSQL sync URI to async with asyncpg.""" | ||
| result = settings._get_async_conn_uri_from_sync("postgresql://user:pass@localhost/dbname") | ||
| assert result == "postgresql+asyncpg://user:pass@localhost/dbname" | ||
|
|
||
| def test_mysql_uri_conversion(self): | ||
| """Test conversion of MySQL sync URI to async with aiomysql.""" | ||
| result = settings._get_async_conn_uri_from_sync("mysql://user:pass@localhost/dbname") | ||
| assert result == "mysql+aiomysql://user:pass@localhost/dbname" | ||
|
|
||
| def test_postgresql_psycopg2_uri_conversion(self): | ||
| """Test conversion of PostgreSQL with psycopg2 driver to asyncpg.""" | ||
| result = settings._get_async_conn_uri_from_sync("postgresql+psycopg2://user@localhost/db") | ||
| assert result == "postgresql+asyncpg://user@localhost/db" |
Contributor
There was a problem hiding this comment.
Would it maybe make sense to parameterize these tests? It could be tightened up to something like:
@pytest.mark.parametrize(
("sync_uri", expected"),
[
("sqlite:///path/to/db.sqlite", "sqlite+aiosqlite:///path/to/db.sqlite"),
("postgresql://user:pass@localhost/dbname", "postgresql+asyncpg://user:pass@localhost/dbname"),
("mysql://user:pass@localhost/dbname", "mysql+aiomysql://user:pass@localhost/dbname"),
("postgresql+psycopg2://user@localhost/db", "postgresql+asyncpg://user@localhost/db"),
],
)
def test_supported_scheme_conversion(self, sync_uri, expected):
assert settings._get_async_conn_uri_from_sync(sync_uri) == expected
Comment on lines
+534
to
+547
| def test_empty_string_raises_value_error(self): | ||
| """Test that empty string raises ValueError with helpful message.""" | ||
| with pytest.raises(ValueError, match="Invalid SQLAlchemy connection URI"): | ||
| settings._get_async_conn_uri_from_sync("") | ||
|
|
||
| def test_none_raises_value_error(self): | ||
| """Test that None raises ValueError with helpful message.""" | ||
| with pytest.raises(ValueError, match="Invalid SQLAlchemy connection URI"): | ||
| settings._get_async_conn_uri_from_sync(None) | ||
|
|
||
| def test_malformed_uri_without_colon_raises_value_error(self): | ||
| """Test that URI without ':' separator raises ValueError.""" | ||
| with pytest.raises(ValueError, match="Invalid SQLAlchemy connection URI.*':' separator"): | ||
| settings._get_async_conn_uri_from_sync("notavaliduri") |
Contributor
There was a problem hiding this comment.
I think we can do the same with these tests as well.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This improves startup diagnostics when database connection configuration is malformed.
Context: this came from investigation in the discussion thread about slow CLI/help startup and the confusing unpacking traceback:
#68707
_get_async_conn_uri_from_syncnow validates malformed/empty sync URIs and raises a clear, actionable error message that points users toAIRFLOW__DATABASE__SQL_ALCHEMY_CONN/sql_alchemy_conninairflow.cfg, instead of failing with a cryptic unpacking error.Changes in this PR:
ValueErrorwith direct guidance to relevant config knobs.Discussion reference: