1+ from __future__ import annotations
2+
13import logging
24import os
35import urllib .parse as urlparse
4- from typing import Any , Callable , Dict , List , Optional , TypedDict , Union
6+ from typing import Any , Callable , Optional , TypedDict , Union
57
68DEFAULT_ENV = "DATABASE_URL"
7- ENGINE_SCHEMES : Dict [str , " Engine" ] = {}
9+ ENGINE_SCHEMES : dict [str , Engine ] = {}
810
911
1012# From https://docs.djangoproject.com/en/stable/ref/settings/#databases
1113class DBConfig (TypedDict , total = False ):
1214 ATOMIC_REQUESTS : bool
1315 AUTOCOMMIT : bool
14- CONN_MAX_AGE : Optional [ int ]
16+ CONN_MAX_AGE : int | None
1517 CONN_HEALTH_CHECKS : bool
1618 DISABLE_SERVER_SIDE_CURSORS : bool
1719 ENGINE : str
1820 HOST : str
1921 NAME : str
20- OPTIONS : Dict [str , Any ]
22+ OPTIONS : dict [str , Any ]
2123 PASSWORD : str
22- PORT : Union [ str , int ]
23- TEST : Dict [str , Any ]
24+ PORT : str | int
25+ TEST : dict [str , Any ]
2426 TIME_ZONE : str
2527 USER : str
2628
@@ -125,13 +127,13 @@ def apply_current_schema(parsed_config: DBConfig) -> None:
125127
126128def config (
127129 env : str = DEFAULT_ENV ,
128- default : Optional [ str ] = None ,
129- engine : Optional [ str ] = None ,
130- conn_max_age : Optional [ int ] = 0 ,
130+ default : str | None = None ,
131+ engine : str | None = None ,
132+ conn_max_age : int | None = 0 ,
131133 conn_health_checks : bool = False ,
132134 disable_server_side_cursors : bool = False ,
133135 ssl_require : bool = False ,
134- test_options : Optional [ Dict [ str , Any ]] = None ,
136+ test_options : dict [ str , Any ] | None = None ,
135137) -> DBConfig :
136138 """Returns configured DATABASE dictionary from DATABASE_URL."""
137139 s = os .environ .get (env , default )
@@ -157,12 +159,12 @@ def config(
157159
158160def parse (
159161 url : str ,
160- engine : Optional [ str ] = None ,
161- conn_max_age : Optional [ int ] = 0 ,
162+ engine : str | None = None ,
163+ conn_max_age : int | None = 0 ,
162164 conn_health_checks : bool = False ,
163165 disable_server_side_cursors : bool = False ,
164166 ssl_require : bool = False ,
165- test_options : Optional [ Dict [ str , Any ]] = None ,
167+ test_options : dict [ str , Any ] | None = None ,
166168) -> DBConfig :
167169 """Parses a database URL and returns configured DATABASE dictionary."""
168170 settings = _convert_to_settings (
@@ -216,7 +218,7 @@ def parse(
216218 return parsed_config
217219
218220
219- def _parse_option_values (values : List [str ]) -> Union [ OptionType , List [OptionType ] ]:
221+ def _parse_option_values (values : list [str ]) -> OptionType | list [OptionType ]:
220222 parsed_values = [_parse_value (v ) for v in values ]
221223 return parsed_values [0 ] if len (parsed_values ) == 1 else parsed_values
222224
@@ -230,12 +232,12 @@ def _parse_value(value: str) -> OptionType:
230232
231233
232234def _convert_to_settings (
233- engine : Optional [ str ] ,
234- conn_max_age : Optional [ int ] ,
235+ engine : str | None ,
236+ conn_max_age : int | None ,
235237 conn_health_checks : bool ,
236238 disable_server_side_cursors : bool ,
237239 ssl_require : bool ,
238- test_options : Optional [ dict [str , Any ]] ,
240+ test_options : dict [str , Any ] | None ,
239241) -> DBConfig :
240242 settings : DBConfig = {
241243 "CONN_MAX_AGE" : conn_max_age ,
0 commit comments