graphxr-database-proxy 1.0.0__tar.gz → 1.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/PKG-INFO +31 -3
- graphxr_database_proxy-1.0.0/readme.md → graphxr_database_proxy-1.0.2/README.md +30 -2
- graphxr_database_proxy-1.0.0/readme.zh.md → graphxr_database_proxy-1.0.2/README.zh.md +37 -54
- graphxr_database_proxy-1.0.2/doc/API_Reference.md +493 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/doc/DEV_GUIDE.md +16 -2
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/doc/DEV_GUIDE.zh.md +16 -1
- graphxr_database_proxy-1.0.0/doc/PYPI_PUBLISHING.md → graphxr_database_proxy-1.0.2/doc/PYPI_PUBLISHING.zh.md +3 -3
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/doc/USAGE.md +1 -1
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/doc/USAGE.zh.md +1 -1
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/env_variables_example.py +1 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/quick_start.py +38 -5
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/pyproject.toml +2 -2
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/__init__.py +2 -2
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/api/google.py +31 -7
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/common/util.py +13 -3
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/drivers/spanner.py +108 -51
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/launcher.py +64 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/main.py +14 -1
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/models/project.py +486 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/proxy.py +74 -32
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/static/index.html +1 -1
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/static/main.7391ee9773c403483393.css.map +1 -1
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/static/main.e566ea8f459c5b8df2b4.js +2 -0
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/static/main.e566ea8f459c5b8df2b4.js.map +1 -0
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/static/vendors.f303e096f3b6701f9410.js +3 -0
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/static/vendors.70542a99f336a8021013.js.LICENSE.txt → graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/static/vendors.f303e096f3b6701f9410.js.LICENSE.txt +2 -2
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy/static/vendors.f303e096f3b6701f9410.js.map +1 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy.egg-info/PKG-INFO +31 -3
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy.egg-info/SOURCES.txt +10 -11
- graphxr_database_proxy-1.0.2/src/graphxr_database_proxy.egg-info/entry_points.txt +2 -0
- graphxr_database_proxy-1.0.0/doc/RELEASE_CHECKLIST.md +0 -86
- graphxr_database_proxy-1.0.0/examples/python.test.py +0 -26
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/models/project.py +0 -170
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/static/main.ce3fbb85a7bc9452edb9.js +0 -2
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/static/main.ce3fbb85a7bc9452edb9.js.map +0 -1
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/static/vendors.70542a99f336a8021013.js +0 -3
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy/static/vendors.70542a99f336a8021013.js.map +0 -1
- graphxr_database_proxy-1.0.0/src/graphxr_database_proxy.egg-info/entry_points.txt +0 -2
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/LICENSE +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/MANIFEST.in +0 -0
- /graphxr_database_proxy-1.0.0/doc/FRONTEND_INTEGRATION.md → /graphxr_database_proxy-1.0.2/doc/FRONTEND_INTEGRATION.zh.md +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/auth_methods_example.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/future_database_support.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/get_project_apis_example.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/examples/python_api_example.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/requirements.txt +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/setup.cfg +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/api/__init__.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/api/database.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/api/projects.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/drivers/__init__.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/drivers/base.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/drivers/factory.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/models/__init__.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/models/google.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/proxyForDev.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/services/__init__.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/services/project_service.py +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/static/favicon.ico +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy/static/main.7391ee9773c403483393.css +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy.egg-info/dependency_links.txt +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy.egg-info/requires.txt +0 -0
- {graphxr_database_proxy-1.0.0 → graphxr_database_proxy-1.0.2}/src/graphxr_database_proxy.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graphxr-database-proxy
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: GraphXR Database Proxy - Secure middleware for connecting GraphXR to databases
|
|
5
5
|
Author-email: Sean Li <sean@kineviz.com>, Kineviz <support@kineviz.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -48,7 +48,7 @@ Dynamic: license-file
|
|
|
48
48
|
[](https://python.org)
|
|
49
49
|
[](https://fastapi.tiangolo.com)
|
|
50
50
|
|
|
51
|
-
> **Language**: [English](https://github.com/Kineviz/graphxr-database-proxy/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/readme.zh.md)
|
|
51
|
+
> **Language**: [English](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.zh.md)
|
|
52
52
|
|
|
53
53
|
A secure middleware that connects [GraphXR](https://www.kineviz.com/graphxr) to various backend databases with zero trust architecture.
|
|
54
54
|
|
|
@@ -115,7 +115,7 @@ graphxr-proxy --ui
|
|
|
115
115
|
```
|
|
116
116
|
> Open http://localhost:9080/admin for configuration
|
|
117
117
|
|
|
118
|
-
**Option 2: Python Code**
|
|
118
|
+
**Option 2: Python Code with Service Account JSON**
|
|
119
119
|
```python
|
|
120
120
|
from graphxr_database_proxy import DatabaseProxy
|
|
121
121
|
|
|
@@ -146,6 +146,34 @@ proxy.start(
|
|
|
146
146
|
)
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
+
**Option 3: Python Code with Google Cloud ADC**
|
|
150
|
+
> Your should have set up Google Application Default Credentials (ADC) on the machine running the proxy. See [Google Cloud ADC Documentation](https://cloud.google.com/docs/authentication/production#automatically).
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from graphxr_database_proxy import DatabaseProxy
|
|
154
|
+
proxy = DatabaseProxy()
|
|
155
|
+
|
|
156
|
+
google_adc_credentials={
|
|
157
|
+
"type": "google_ADC"
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
project_id = proxy.add_project(
|
|
161
|
+
project_name="project_name",
|
|
162
|
+
database_type="spanner",
|
|
163
|
+
project_id="gcp-project-id",
|
|
164
|
+
instance_id="spanner-instance-id",
|
|
165
|
+
database_id="spanner-database-id",
|
|
166
|
+
credentials=google_adc_credentials,
|
|
167
|
+
graph_name="graph_name" # Optional
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
proxy.start(
|
|
171
|
+
host="0.0.0.0",
|
|
172
|
+
port=9080,
|
|
173
|
+
show_apis=True
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
149
177
|
## 🐳 Docker
|
|
150
178
|
|
|
151
179
|
```bash
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://python.org)
|
|
5
5
|
[](https://fastapi.tiangolo.com)
|
|
6
6
|
|
|
7
|
-
> **Language**: [English](https://github.com/Kineviz/graphxr-database-proxy/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/readme.zh.md)
|
|
7
|
+
> **Language**: [English](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.zh.md)
|
|
8
8
|
|
|
9
9
|
A secure middleware that connects [GraphXR](https://www.kineviz.com/graphxr) to various backend databases with zero trust architecture.
|
|
10
10
|
|
|
@@ -71,7 +71,7 @@ graphxr-proxy --ui
|
|
|
71
71
|
```
|
|
72
72
|
> Open http://localhost:9080/admin for configuration
|
|
73
73
|
|
|
74
|
-
**Option 2: Python Code**
|
|
74
|
+
**Option 2: Python Code with Service Account JSON**
|
|
75
75
|
```python
|
|
76
76
|
from graphxr_database_proxy import DatabaseProxy
|
|
77
77
|
|
|
@@ -102,6 +102,34 @@ proxy.start(
|
|
|
102
102
|
)
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
**Option 3: Python Code with Google Cloud ADC**
|
|
106
|
+
> Your should have set up Google Application Default Credentials (ADC) on the machine running the proxy. See [Google Cloud ADC Documentation](https://cloud.google.com/docs/authentication/production#automatically).
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from graphxr_database_proxy import DatabaseProxy
|
|
110
|
+
proxy = DatabaseProxy()
|
|
111
|
+
|
|
112
|
+
google_adc_credentials={
|
|
113
|
+
"type": "google_ADC"
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
project_id = proxy.add_project(
|
|
117
|
+
project_name="project_name",
|
|
118
|
+
database_type="spanner",
|
|
119
|
+
project_id="gcp-project-id",
|
|
120
|
+
instance_id="spanner-instance-id",
|
|
121
|
+
database_id="spanner-database-id",
|
|
122
|
+
credentials=google_adc_credentials,
|
|
123
|
+
graph_name="graph_name" # Optional
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
proxy.start(
|
|
127
|
+
host="0.0.0.0",
|
|
128
|
+
port=9080,
|
|
129
|
+
show_apis=True
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
105
133
|
## 🐳 Docker
|
|
106
134
|
|
|
107
135
|
```bash
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://python.org)
|
|
5
5
|
[](https://fastapi.tiangolo.com)
|
|
6
6
|
|
|
7
|
-
> **语言**: [English](https://github.com/Kineviz/graphxr-database-proxy/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/readme.zh.md)
|
|
7
|
+
> **语言**: [English](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.md) | [中文](https://github.com/Kineviz/graphxr-database-proxy/blob/main/readme.zh.md)
|
|
8
8
|
|
|
9
9
|
一个安全的中间件,采用零信任架构将 [GraphXR 前端](https://www.kineviz.com/graphxr) 连接到各种后端数据库。
|
|
10
10
|
|
|
@@ -53,20 +53,19 @@ graphxr-proxy --ui
|
|
|
53
53
|
|
|
54
54
|
## 📚 Python 使用指南
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
**方式 1:Web UI(推荐)**
|
|
57
|
+
```bash
|
|
58
|
+
graphxr-proxy --ui
|
|
59
|
+
```
|
|
60
|
+
> 打开 http://localhost:9080/admin 进行配置
|
|
57
61
|
|
|
62
|
+
**方式 2:使用服务账号 JSON 的 Python 代码**
|
|
58
63
|
```python
|
|
59
64
|
from graphxr_database_proxy import DatabaseProxy
|
|
60
65
|
|
|
61
66
|
proxy = DatabaseProxy()
|
|
62
67
|
|
|
63
|
-
|
|
64
|
-
#### `add_project()` (推荐)
|
|
65
|
-
|
|
66
|
-
```python
|
|
67
|
-
# 使用 JSON 字符串
|
|
68
|
-
service_account_json =
|
|
69
|
-
{
|
|
68
|
+
service_account_json = {
|
|
70
69
|
"type": "service_account",
|
|
71
70
|
"project_id": "your-gcp-project-id",
|
|
72
71
|
"private_key": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n",
|
|
@@ -75,64 +74,48 @@ service_account_json =
|
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
project_id = proxy.add_project(
|
|
78
|
-
project_name="
|
|
77
|
+
project_name="project_name",
|
|
79
78
|
database_type="spanner",
|
|
80
79
|
project_id="gcp-project-id",
|
|
81
80
|
instance_id="spanner-instance-id",
|
|
82
81
|
database_id="spanner-database-id",
|
|
83
|
-
credentials=service_account_json,
|
|
84
|
-
graph_name="
|
|
82
|
+
credentials=service_account_json,
|
|
83
|
+
graph_name="graph_name" # 可选
|
|
85
84
|
)
|
|
86
|
-
```
|
|
87
85
|
|
|
88
|
-
|
|
89
|
-
#### `get_project_apis()` (增强版)
|
|
90
|
-
```python
|
|
91
|
-
# 获取所有项目的 API 端点
|
|
92
|
-
all_apis = proxy.get_project_apis()
|
|
93
|
-
|
|
94
|
-
# 通过项目名称获取特定项目的 API 端点 (新功能)
|
|
95
|
-
project_apis = proxy.get_project_apis("项目名称")
|
|
96
|
-
# 错误处理
|
|
97
|
-
result = proxy.get_project_apis("不存在的项目")
|
|
98
|
-
if "error" in result:
|
|
99
|
-
print(f"项目未找到: {result['error']}")
|
|
100
|
-
else:
|
|
101
|
-
print(f"找到项目: {result['name']}")
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
#### `start()`
|
|
105
|
-
```python
|
|
106
86
|
proxy.start(
|
|
107
|
-
host="0.0.0.0",
|
|
108
|
-
port=
|
|
109
|
-
|
|
110
|
-
show_apis=True # 显示 API 端点信息
|
|
87
|
+
host="0.0.0.0",
|
|
88
|
+
port=9080,
|
|
89
|
+
show_apis=True
|
|
111
90
|
)
|
|
112
91
|
```
|
|
113
92
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- `examples/quick_start.py` - 快速启动示例
|
|
117
|
-
- `examples/service-account-example.json` - Service Account JSON 文件模板
|
|
118
|
-
|
|
119
|
-
### 环境变量支持
|
|
120
|
-
|
|
121
|
-
支持以下环境变量来配置默认值:
|
|
122
|
-
|
|
123
|
-
| 环境变量 | 说明 | 示例 |
|
|
124
|
-
|----------|------|------|
|
|
125
|
-
| `PROJECT_NAME` | 默认项目名称 | `MySpannerProject` |
|
|
126
|
-
| `SPANNER_PROJECT_ID` | 默认 GCP 项目 ID | `your-gcp-project-id` |
|
|
127
|
-
| `SPANNER_INSTANCE_ID` | 默认 Spanner 实例 ID | `your-spanner-instance-id` |
|
|
128
|
-
| `SPANNER_DATABASE_ID` | 默认 Spanner 数据库 ID | `your-database-id` |
|
|
129
|
-
| `SPANNER_CREDENTIALS_PATH` | 默认服务账户 JSON 路径 | `./service-account.json` |
|
|
130
|
-
| `SPANNER_GRAPH_NAME` | 默认图名称 | `my_graph` |
|
|
93
|
+
**方式 3:使用 Google Cloud ADC 的 Python 代码**
|
|
94
|
+
> 您需要在运行代理的机器上设置 Google Application Default Credentials (ADC)。请参阅 [Google Cloud ADC 文档](https://cloud.google.com/docs/authentication/production#automatically)。
|
|
131
95
|
|
|
132
96
|
```python
|
|
133
|
-
|
|
97
|
+
from graphxr_database_proxy import DatabaseProxy
|
|
134
98
|
proxy = DatabaseProxy()
|
|
135
|
-
|
|
99
|
+
|
|
100
|
+
google_adc_credentials={
|
|
101
|
+
"type": "google_ADC"
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
project_id = proxy.add_project(
|
|
105
|
+
project_name="project_name",
|
|
106
|
+
database_type="spanner",
|
|
107
|
+
project_id="gcp-project-id",
|
|
108
|
+
instance_id="spanner-instance-id",
|
|
109
|
+
database_id="spanner-database-id",
|
|
110
|
+
credentials=google_adc_credentials,
|
|
111
|
+
graph_name="graph_name" # 可选
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
proxy.start(
|
|
115
|
+
host="0.0.0.0",
|
|
116
|
+
port=9080,
|
|
117
|
+
show_apis=True
|
|
118
|
+
)
|
|
136
119
|
```
|
|
137
120
|
|
|
138
121
|
## 🐳 Docker
|