Add Qingdao to the tradable city network
Qingdao needs the same airport-settlement path as the other Wunderground-backed APAC cities, so the registry, aliases, timezone, prewarm, official links, market focus, and tests now point to ZSQD / Qingdao Jiaodong International Airport. Constraint: User supplied Wunderground Qingdao/ZSQD settlement URL. Rejected: Add a partial registry-only entry | it would show in APIs without frontend links, prewarm coverage, or alias support. Confidence: high Scope-risk: narrow Reversibility: clean Tested: pytest tests/test_country_networks.py tests/test_web_observability.py::test_cities_endpoint_includes_new_wunderground_cities -q Tested: npm run build Not-tested: Live Wunderground fetch for ZSQD in production.
This commit is contained in:
@@ -715,6 +715,24 @@ CITY_REGISTRY = {
|
||||
"distance_km": 28.0,
|
||||
"warning": "市场现按 Wunderground 广州白云国际机场站整度°C口径结算;珠三角海陆风与午后对流会让峰值兑现时间出现摇摆。",
|
||||
},
|
||||
"qingdao": {
|
||||
"name": "Qingdao",
|
||||
"lat": 36.3620,
|
||||
"lon": 120.0882,
|
||||
"icao": "ZSQD",
|
||||
"settlement_source": "wunderground",
|
||||
"settlement_station_code": "ZSQD",
|
||||
"settlement_station_label": "Qingdao Jiaodong International Airport Station",
|
||||
"settlement_url": "https://www.wunderground.com/history/daily/cn/qingdao/ZSQD",
|
||||
"tz_offset": 28800,
|
||||
"use_fahrenheit": False,
|
||||
"is_major": True,
|
||||
"risk_level": "medium",
|
||||
"risk_emoji": "🟡",
|
||||
"airport_name": "青岛胶东国际机场",
|
||||
"distance_km": 39.0,
|
||||
"warning": "市场现按 Wunderground 青岛胶东国际机场站整度°C口径结算;沿海海风、低云和海雾会影响日内升温效率。",
|
||||
},
|
||||
"beijing": {
|
||||
"name": "Beijing",
|
||||
"lat": 40.0801,
|
||||
@@ -918,12 +936,17 @@ ALIASES = {
|
||||
"ckg": "chongqing", "cq": "chongqing",
|
||||
"szx": "shenzhen", "sz": "shenzhen",
|
||||
"can": "guangzhou", "gz": "guangzhou", "zggg": "guangzhou",
|
||||
"tao": "qingdao", "qdo": "qingdao", "qingdao": "qingdao", "zsqd": "qingdao",
|
||||
"pek": "beijing", "bjs": "beijing", "bj": "beijing",
|
||||
"wuh": "wuhan", "wh": "wuhan",
|
||||
"成都": "chengdu",
|
||||
"重庆": "chongqing",
|
||||
"深圳": "shenzhen",
|
||||
"广州": "guangzhou",
|
||||
"青岛": "qingdao",
|
||||
"青島": "qingdao",
|
||||
"青岛胶东": "qingdao",
|
||||
"青島膠東": "qingdao",
|
||||
"北京": "beijing",
|
||||
"武汉": "wuhan",
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ CITY_TIME_ZONES = {
|
||||
"new york": "America/New_York",
|
||||
"panama city": "America/Panama",
|
||||
"paris": "Europe/Paris",
|
||||
"qingdao": "Asia/Shanghai",
|
||||
"san francisco": "America/Los_Angeles",
|
||||
"sao paulo": "America/Sao_Paulo",
|
||||
"seattle": "America/Los_Angeles",
|
||||
|
||||
@@ -13,6 +13,7 @@ CHINA_CMA_CITIES = {
|
||||
"chengdu",
|
||||
"chongqing",
|
||||
"guangzhou",
|
||||
"qingdao",
|
||||
"shanghai",
|
||||
"shenzhen",
|
||||
"wuhan",
|
||||
|
||||
@@ -54,6 +54,7 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
||||
"chengdu": ["ZUUU", "ZUTF"],
|
||||
"chongqing": ["ZUCK", "ZUPS"],
|
||||
"guangzhou": ["ZGGG", "ZGSZ"],
|
||||
"qingdao": ["ZSQD"],
|
||||
"shenzhen": ["ZGSZ", "ZGGG"],
|
||||
"beijing": ["ZBAA", "ZBAD"],
|
||||
"wuhan": ["ZHHH", "ZHES"],
|
||||
@@ -600,6 +601,9 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
||||
"重庆": "Chongqing",
|
||||
"shenzhen": "Shenzhen",
|
||||
"深圳": "Shenzhen",
|
||||
"qingdao": "Qingdao",
|
||||
"青岛": "Qingdao",
|
||||
"青島": "Qingdao",
|
||||
"beijing": "Beijing",
|
||||
"北京": "Beijing",
|
||||
"wuhan": "Wuhan",
|
||||
|
||||
@@ -21,6 +21,7 @@ DEFAULT_CITIES = [
|
||||
"beijing",
|
||||
"shenzhen",
|
||||
"guangzhou",
|
||||
"qingdao",
|
||||
"wuhan",
|
||||
"chengdu",
|
||||
"chongqing",
|
||||
|
||||
Reference in New Issue
Block a user