-
Notifications
You must be signed in to change notification settings - Fork 14.9k
/
Copy pathgenerate-integrations-json.py
executable file
·85 lines (75 loc) · 3.01 KB
/
generate-integrations-json.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import annotations
import json
import os
import re
import shutil
from sphinx_exts.provider_yaml_utils import load_package_data
AIRFLOW_SITE_DIR = os.environ.get("AIRFLOW_SITE_DIRECTORY")
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
DOCS_DIR = os.path.join(ROOT_DIR, "docs")
if __name__ != "__main__":
raise SystemExit(
"This file is intended to be executed as an executable program. You cannot use it as a module."
"To run this script, run the ./generate-integrations-json.py command"
)
if not (
AIRFLOW_SITE_DIR
and os.path.isdir(AIRFLOW_SITE_DIR)
and os.path.isdir(os.path.join(AIRFLOW_SITE_DIR, "docs-archive"))
):
raise SystemExit(
"Before using this script, set the environment variable AIRFLOW_SITE_DIRECTORY. This variable "
"should contain the path to the airflow-site repository directory. "
"${AIRFLOW_SITE_DIRECTORY}/docs-archive must exists."
)
ALL_PROVIDER_YAMLS = load_package_data()
result_integrations = []
for provider_info in ALL_PROVIDER_YAMLS:
for integration in provider_info.get("integrations", []):
doc_url = integration.get("how-to-guide")
if doc_url:
doc_url = doc_url[0].strip()
doc_url = re.sub(f"/{provider_info['package-name']}/", r"\g<0>stable/", doc_url)
doc_url = re.sub(r"\.rst", ".html", doc_url)
else:
doc_url = f"/docs/{provider_info['package-name'].lower()}/stable/index.html"
logo = integration.get("logo")
result = {
"name": integration["integration-name"],
"url": doc_url,
}
if logo:
result["logo"] = logo
result_integrations.append(result)
result_integrations.sort(key=lambda x: x["name"].lower())
with open(os.path.join(AIRFLOW_SITE_DIR, "landing-pages/site/static/integrations.json"), "w") as f:
f.write(
json.dumps(
result_integrations,
indent=2,
sort_keys=True,
)
)
target_path = os.path.join(AIRFLOW_SITE_DIR, "landing-pages/site/static/integration-logos")
shutil.rmtree(target_path)
shutil.copytree(
src=os.path.join(DOCS_DIR, "integration-logos"),
dst=target_path,
)