Skip to content

Commit f7eddd2

Browse files
committed
Upgrade pydantic to 2.x
1 parent 6e58aa7 commit f7eddd2

22 files changed

+970
-89
lines changed

airflow/dags/airtable_loader_v2/generate_gtfs_download_configs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
GTFSDownloadConfigExtract,
2020
get_fs,
2121
)
22-
from pydantic import ValidationError
22+
from pydantic.v1 import ValidationError
2323

2424

2525
def gtfs_datasets_to_extract_configs(

airflow/dags/download_gtfs_schedule_v2/download_schedule_feeds.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
get_fs,
2525
get_latest,
2626
)
27-
from pydantic import validator
27+
from pydantic.v1 import validator
2828
from requests.exceptions import HTTPError
2929

3030
GTFS_FEED_LIST_ERROR_THRESHOLD = 0.95

airflow/dags/sync_ntd_data_xlsx/scrape_ntd_xlsx_urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import requests
99
from bs4 import BeautifulSoup
10-
from pydantic import HttpUrl, ValidationError, parse_obj_as
10+
from pydantic.v1 import HttpUrl, ValidationError, parse_obj_as
1111
from requests.adapters import HTTPAdapter
1212
from urllib3.util.retry import Retry
1313

airflow/plugins/calitp_data_infra/__init__.py

Whitespace-only changes.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import os
2+
from typing import Mapping
3+
4+
from google.cloud import secretmanager # type: ignore
5+
6+
7+
def get_gcp_project_id() -> str:
8+
"""
9+
Get the GCP project ID from the environment variable. Try the following
10+
environment variables in order:
11+
1. GOOGLE_CLOUD_PROJECT
12+
2. GCP_PROJECT
13+
3. PROJECT_ID
14+
15+
Cloud Composer should set at least one of these environment variables. See
16+
https://cloud.google.com/composer/docs/composer-3/set-environment-variables
17+
"""
18+
try:
19+
return os.environ["GOOGLE_CLOUD_PROJECT"]
20+
except KeyError:
21+
pass
22+
23+
try:
24+
return os.environ["GCP_PROJECT"]
25+
except KeyError:
26+
pass
27+
28+
try:
29+
return os.environ["PROJECT_ID"]
30+
except KeyError:
31+
raise ValueError(
32+
"GCP project not set in environment variables. "
33+
"Please set GCP_PROJECT, GOOGLE_CLOUD_PROJECT, "
34+
"or PROJECT_ID."
35+
)
36+
37+
38+
def get_secret_by_name(
39+
name: str,
40+
project: str = "",
41+
client=secretmanager.SecretManagerServiceClient(),
42+
) -> str:
43+
project = project or get_gcp_project_id()
44+
45+
version = f"projects/{project}/secrets/{name}/versions/latest"
46+
response = client.access_secret_version(name=version)
47+
return response.payload.data.decode("UTF-8").strip()
48+
49+
50+
def get_secrets_by_label(
51+
label: str,
52+
project: str = "",
53+
client=secretmanager.SecretManagerServiceClient(),
54+
) -> Mapping[str, str]:
55+
secret_values = {}
56+
project = project or get_gcp_project_id()
57+
58+
# once we get on at least 2.0.0 of secret manager, we can filter server-side
59+
for secret in client.list_secrets(parent=f"projects/{project}"):
60+
if label in secret.labels:
61+
version = f"{secret.name}/versions/latest"
62+
response = client.access_secret_version(name=version)
63+
secret_values[secret.name.split("/")[-1]] = response.payload.data.decode(
64+
"UTF-8"
65+
).strip()
66+
67+
return secret_values
68+
69+
70+
if __name__ == "__main__":
71+
print("loading secrets...")
72+
get_secret_by_name("BEAR_TRANSIT_KEY")
73+
print(get_secrets_by_label("gtfs_schedule").keys())
74+
print(get_secrets_by_label("gtfs_rt").keys())

0 commit comments

Comments
 (0)