Skip to content

Commit cfad1ef

Browse files
authored
0.32.0 - Upgrade for API V1 for Debiai
2 parents 4287c86 + b4cf7f4 commit cfad1ef

70 files changed

Lines changed: 4888 additions & 402 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pull-request-check.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,13 @@ jobs:
131131
python-tests: # Install dependencies and run tests with pytest
132132
name: Python tests
133133
needs:
134-
[black-format-check, prettier-check, cspell-check, version-upgrade-check]
134+
[
135+
black-format-check,
136+
flake8-check,
137+
prettier-check,
138+
cspell-check,
139+
version-upgrade-check,
140+
]
135141
runs-on: ubuntu-latest
136142

137143
strategy:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,6 @@ deployment/
2727

2828
# Databases
2929
*.db
30+
31+
# Project files
32+
TODO

Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
FROM node:16.13-alpine AS build-stage
33
WORKDIR /frontend
44
COPY frontend/ .
5+
6+
# Set the environment variable for auth token local storage key
7+
ARG VUE_APP_AUTH_TOKEN_KEY=debiai_auth_token
8+
ENV VUE_APP_AUTH_TOKEN_KEY=${VUE_APP_AUTH_TOKEN_KEY}
9+
510
RUN npm install
611
RUN npm run build
712

cspell.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"applymap",
77
"astype",
88
"bdist",
9+
"blocklevels",
910
"buildx",
1011
"cacheout",
1112
"ckdtree",
@@ -27,6 +28,7 @@
2728
"kilocode",
2829
"kneighbors",
2930
"kraskov",
31+
"LOIC",
3032
"nats",
3133
"ndarray",
3234
"nextafter",
@@ -80,6 +82,9 @@
8082
"__pycache__/",
8183
"node_modules/",
8284
"./setup.py",
83-
"TODO"
85+
"TODO",
86+
"todo",
87+
"*egg-info/*",
88+
"*.db"
8489
]
8590
}

debiaiServer/api/__init__.py

Whitespace-only changes.

debiaiServer/api/v1/__init__.py

Whitespace-only changes.

debiaiServer/api/v1/debiai/__init__.py

Whitespace-only changes.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#############################################################################
2+
# Imports
3+
#############################################################################
4+
from debiaiServer.config.init_config import get_config
5+
import debiaiServer.modules.dataProviders.dataProviderManager as data_provider_manager
6+
from debiaiServer.modules.dataProviders.DataProviderException import (
7+
DataProviderException,
8+
)
9+
from debiaiServer.api.v1.debiai.utils import make_hash
10+
11+
12+
def format_data_provider_info(data_provider):
13+
data = {
14+
"id": data_provider.id,
15+
"status": True,
16+
"name": data_provider.name,
17+
"type": data_provider.type,
18+
"tags": [],
19+
"metadata": {},
20+
"metrics": {},
21+
}
22+
print("NAME ", data_provider.name)
23+
24+
provider_info = data_provider.get_info()
25+
if "canDelete" in provider_info and provider_info["canDelete"]["models"]:
26+
data["tags"].append("canDeleteModels")
27+
if "canDelete" in provider_info and provider_info["canDelete"]["projects"]:
28+
data["tags"].append("canDeleteProject")
29+
if "canDelete" in provider_info and provider_info["canDelete"]["selections"]:
30+
data["tags"].append("canDeleteSelections")
31+
if "version" in provider_info:
32+
data["metadata"]["version"] = provider_info["version"]
33+
34+
if "maxResultByRequest" in provider_info:
35+
data["metrics"]["maxResultByRequest"] = provider_info["maxResultByRequest"]
36+
if "maxSampleDataByRequest" in provider_info:
37+
data["metrics"]["maxSampleDataByRequest"] = provider_info[
38+
"maxSampleDataByRequest"
39+
]
40+
if "maxSampleIdByRequest" in provider_info:
41+
data["metrics"]["maxSampleIdByRequest"] = provider_info["maxSampleIdByRequest"]
42+
43+
if data_provider.name != "Python module Data Provider":
44+
data["metadata"]["external_url"] = data_provider.url
45+
46+
return data
47+
48+
49+
def get_data_provider_info(dataProviderId):
50+
51+
# As Parquet not yet supported we force json_block:
52+
if dataProviderId == "json_block":
53+
dataProviderId = "Python module Data Provider"
54+
55+
try:
56+
data_provider = data_provider_manager.get_single_data_provider(dataProviderId)
57+
data = format_data_provider_info(data_provider)
58+
59+
return data, 200
60+
except DataProviderException as e:
61+
return e.message, e.status_code
62+
63+
64+
def get_data_providers(prev_hash_content=None):
65+
data_provider_list = data_provider_manager.get_data_provider_list()
66+
providers_formatted = []
67+
68+
for data_provider in data_provider_list:
69+
try:
70+
data = format_data_provider_info(data_provider)
71+
except DataProviderException as e:
72+
data = {
73+
"id": data_provider.id,
74+
"status": False,
75+
"name": data_provider.name,
76+
"type": data_provider.type,
77+
"tags": [],
78+
"metadata": {
79+
"status_code": e.status_code,
80+
"message": e.message,
81+
},
82+
"metrics": {},
83+
}
84+
85+
providers_formatted.append(data)
86+
87+
new_hash = "data_" + str(make_hash(providers_formatted))
88+
# We add a prefix to avoir empty string
89+
90+
print(
91+
new_hash,
92+
" <=> ",
93+
prev_hash_content,
94+
type(new_hash),
95+
type(prev_hash_content),
96+
new_hash == prev_hash_content,
97+
)
98+
if new_hash == prev_hash_content:
99+
return None, 304
100+
else:
101+
providers_answer = {
102+
"dataproviders": providers_formatted,
103+
"hash_content": new_hash,
104+
}
105+
return providers_answer, 200
106+
107+
108+
def delete_data_providers(dataProviderId):
109+
# Check if we are allowed to add data providers from the config file
110+
config = get_config()
111+
deletion_allowed = config["DATA_PROVIDERS_CONFIG"]["deletion"]
112+
if not deletion_allowed:
113+
return "Data provider deletion is not allowed", 403
114+
115+
# To remove when legacy API V0 removal
116+
if dataProviderId == "json_block":
117+
dataProviderId = "Python module Data Provider"
118+
119+
# Delete data provider
120+
try:
121+
data_provider_manager.delete(dataProviderId)
122+
return None, 204
123+
except DataProviderException as e:
124+
return e.message, e.status_code
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#############################################################################
2+
# Imports
3+
#############################################################################
4+
import debiaiServer.utils.layouts.layouts as layoutsUtils
5+
from debiaiServer.api.v1.debiai.utils import make_hash
6+
7+
#############################################################################
8+
# Analysis dashboard layout Management
9+
#############################################################################
10+
11+
12+
def get_layouts(prev_hash_content=None):
13+
layouts_overview = layoutsUtils.get_layouts()
14+
for layout in layouts_overview:
15+
layout.pop("dataProviderId", None)
16+
print(layout)
17+
18+
new_hash = "layout_" + str(make_hash(layouts_overview))
19+
print(new_hash, " <=> ", prev_hash_content, new_hash == prev_hash_content)
20+
21+
if new_hash == prev_hash_content:
22+
return None, 304
23+
else:
24+
layouts_answer = {
25+
"layouts": layouts_overview,
26+
"hash_content": new_hash,
27+
}
28+
return layouts_answer, 200
29+
30+
31+
def post_layout(data):
32+
layoutsUtils.add_layout(data)
33+
return None, 204
34+
35+
36+
def delete_layout(id):
37+
layoutsUtils.delete_layout(id)
38+
return None, 204
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#############################################################################
2+
# Imports
3+
#############################################################################
4+
from debiaiServer.modules.dataProviders.DataProviderException import (
5+
DataProviderException,
6+
)
7+
import debiaiServer.modules.dataProviders.dataProviderManager as data_provider_manager
8+
from debiaiServer.api.v1.debiai.utils import make_hash
9+
10+
#############################################################################
11+
# PROJECTS Management
12+
#############################################################################
13+
14+
15+
def change_project_overview_v1(project_info):
16+
v1_project_info = {
17+
"id": project_info["id"],
18+
"dataProviderProjectId": project_info["id"], # same id for test
19+
"name": project_info["name"],
20+
"creationDate": project_info["creationDate"],
21+
"updateDate": project_info["updateDate"],
22+
"tags": [],
23+
"metadata": {},
24+
"metrics": {
25+
"nbModels": project_info["nbModels"],
26+
"nbSelections": project_info["nbSelections"],
27+
"nbSamples": project_info["nbSamples"],
28+
},
29+
# "columns": column_info,
30+
# projectColumns, get from statistic et suppress
31+
# "blockLevelInfo": projectBlockLevel, suppress here keep
32+
}
33+
return v1_project_info
34+
35+
36+
def get_projects(prev_hash_content=None):
37+
# Return a list of project overviews from all the data providers
38+
data_providers_list = data_provider_manager.get_data_provider_list()
39+
projectOverviews = {}
40+
projectList = []
41+
print("data_provider Get projects")
42+
for data_provider in data_providers_list:
43+
print(data_provider)
44+
try:
45+
projects = data_provider.get_projects()
46+
47+
if projects is not None:
48+
# Adding data provider id to projects
49+
for project in projects:
50+
project_inf = change_project_overview_v1(project)
51+
projectList.append(project_inf)
52+
53+
if data_provider.name != "Python module Data Provider":
54+
project_inf["dataProviderId"] = data_provider.name
55+
else:
56+
project_inf["dataProviderId"] = "json_block"
57+
58+
except DataProviderException as e:
59+
print("Warning get DP projects : " + e.message)
60+
61+
new_hash = "prj_" + str(
62+
+make_hash(projectList)
63+
) # We add a prefix to avoir empty string
64+
65+
print(
66+
new_hash,
67+
" <=> ",
68+
prev_hash_content,
69+
type(new_hash),
70+
type(prev_hash_content),
71+
new_hash == prev_hash_content,
72+
)
73+
if new_hash == prev_hash_content:
74+
return None, 304
75+
else:
76+
projectOverviews["projects"] = projectList
77+
projectOverviews["hash_content"] = new_hash
78+
return projectOverviews, 200

0 commit comments

Comments
 (0)