@@ -8,6 +8,7 @@ use crate::{
88 commons:: networking:: HostName ,
99 databases:: {
1010 drivers:: {
11+ celery:: { CeleryDatabaseConnection , CeleryDatabaseConnectionDetails } ,
1112 jdbc:: { JDBCDatabaseConnection , JDBCDatabaseConnectionDetails } ,
1213 sqlalchemy:: { SQLAlchemyDatabaseConnection , SQLAlchemyDatabaseConnectionDetails } ,
1314 } ,
@@ -109,6 +110,36 @@ impl SQLAlchemyDatabaseConnection for PostgresqlConnection {
109110 }
110111}
111112
113+ impl CeleryDatabaseConnection for PostgresqlConnection {
114+ fn celery_connection_details (
115+ & self ,
116+ unique_database_name : & str ,
117+ ) -> CeleryDatabaseConnectionDetails {
118+ let Self {
119+ host,
120+ port,
121+ database,
122+ credentials_secret,
123+ parameters,
124+ } = self ;
125+ let ( username_env, password_env) =
126+ username_and_password_envs ( unique_database_name, credentials_secret) ;
127+
128+ let uri_template = format ! (
129+ "db+postgresql://${{env:{username_env_name}}}:${{env:{password_env_name}}}@{host}:{port}/{database}{parameters}" ,
130+ username_env_name = username_env. name,
131+ password_env_name = password_env. name,
132+ parameters = connection_parameters_as_url_query_parameters( parameters)
133+ ) ;
134+ CeleryDatabaseConnectionDetails {
135+ uri_template,
136+ username_env : Some ( username_env) ,
137+ password_env : Some ( password_env) ,
138+ generic_uri_var : None ,
139+ }
140+ }
141+ }
142+
112143#[ cfg( test) ]
113144mod tests {
114145 use super :: * ;
@@ -151,6 +182,16 @@ mod tests {
151182 jdbc_connection_details. password_env. unwrap( ) . name,
152183 "METADATA_DATABASE_PASSWORD"
153184 ) ;
185+
186+ let celery_connection_details =
187+ postgres_connection. celery_connection_details ( UNIQUE_DATABASE_NAME ) ;
188+ assert_eq ! (
189+ celery_connection_details. uri_template,
190+ "db+postgresql://${env:METADATA_DATABASE_USERNAME}:${env:METADATA_DATABASE_PASSWORD}@airflow-postgresql:5432/airflow"
191+ ) ;
192+ assert ! ( celery_connection_details. username_env. is_some( ) ) ;
193+ assert ! ( celery_connection_details. password_env. is_some( ) ) ;
194+ assert ! ( celery_connection_details. generic_uri_var. is_none( ) ) ;
154195 }
155196
156197 #[ test]
0 commit comments