Skip to content

Commit 93ec411

Browse files
committed
feat: Add graph extraction service for SigmaJS
1 parent dceabad commit 93ec411

File tree

7 files changed

+32
-267
lines changed

7 files changed

+32
-267
lines changed

app/controllers/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .vul_dbs.update_nvd_controller import nvd_updater
1+
from .vul_dbs.nvd_controller import nvd_updater
22

33
__all__ = [
44
'nvd_updater'

app/controllers/file_operation_controller.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
MaximizeImpact,
88
FilterConfigs
99
)
10-
11-
from app.controllers.graph_to_smt import GraphToSMT
10+
from flamapy.metamodels.smt_metamodel.transformations import GraphToSMT
1211
from app.services import (
1312
read_data_for_smt_transform,
1413
read_releases_by_counts,
@@ -93,14 +92,14 @@ async def minimize_impact(requirement_file_id: str, agregator: str, file_name: s
9392
- **agregator**: agregator function to build the smt model ('mean' or 'weighted_mean')
9493
- **file_name**: name of requirement file belonging to graph
9594
- **limit**: the number of configurations to return
95+
- **max_level**: the depth of the graph to be analysed
9696
'''
9797
package_manager = await get_manager(file_name)
98-
graph_data = await read_data_for_smt_transform(requirement_file_id, package_manager, max_level)
98+
graph_data = await read_data_for_smt_transform(requirement_file_id, package_manager, max_level*2)
9999
smt_transform = GraphToSMT(graph_data, file_name, package_manager, agregator)
100100
smt_transform.transform()
101-
smt_model = smt_transform.destination_model
102101
operation = MinimizeImpact(limit)
103-
operation.execute(smt_model)
102+
operation.execute(smt_transform.destination_model)
104103
result = await read_releases_by_counts(operation.get_result(), package_manager)
105104
return JSONResponse(status_code=status.HTTP_200_OK, content=json_encoder({'result': result}))
106105

@@ -129,7 +128,6 @@ async def maximize_impact(requirement_file_id: str, agregator: str, file_name: s
129128
result = await read_releases_by_counts(operation.get_result(), package_manager)
130129
return JSONResponse(status_code=status.HTTP_200_OK, content=json_encoder({'result': result}))
131130

132-
133131
@router.post(
134132
'/operation/file/filter_configs/{requirement_file_id}',
135133
summary='Filter configurations of a graph',

app/controllers/graph_controller.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from fastapi.responses import JSONResponse
77
from app.services import (
88
create_repository,
9-
read_graph_by_repository_id,
9+
read_graphs_by_owner_name_for_sigma,
1010
read_repositories,
1111
read_repositories_moment,
1212
read_requirement_files_by_repository,
@@ -27,19 +27,22 @@
2727
router = APIRouter()
2828

2929
@router.get(
30-
'/graph/{repository_id}',
31-
summary='Get a graph by a repository id',
30+
'/graph/{owner}/{name}',
31+
summary='Get each package manager graph by the owner and name of a repository',
3232
response_description='Return a graph'
3333
)
34-
async def get_graph(repository_id: str) -> JSONResponse:
34+
async def get_graphs(owner: str, name: str) -> JSONResponse:
3535
'''
36-
Return a graph by a given repository id. If attribute is_complete is True
37-
the graph is wholly built:
36+
Get each package manager graph by the owner and name of a repository:
3837
39-
- **repository_id**: the id of a repository
38+
- **owner**: the owner of a repository
39+
- **name**: the name of a repository
4040
'''
41-
graph = await read_graph_by_repository_id(repository_id, '_')
42-
return JSONResponse(status_code=status.HTTP_200_OK, content=graph)
41+
# TODO: Hacer un servicio que devuelva todos los grafos por owner y name para mostrarlos en el FrontEnd
42+
# TODO: Añadir a Neo4J owner y name como un índice
43+
# TODO: Cambiar en los servicios la palabra relationships por edges
44+
graphs = await read_graphs_by_owner_name_for_sigma(owner, name)
45+
return JSONResponse(status_code=status.HTTP_200_OK, content=json_encoder(graphs))
4346

4447

4548
@router.post(
@@ -69,6 +72,9 @@ async def init_graph(repository: RepositoryModel) -> JSONResponse:
6972
await update_repository_is_complete(repository_id, False, package_manager)
7073
await replace_repository(raw_requirement_files, repository_id, package_manager)
7174
await update_repository_is_complete(repository_id, True, package_manager)
75+
else:
76+
# TODO: Devolver el grafo actual de la misma forma que en get_graphs
77+
pass
7278
return JSONResponse(status_code=status.HTTP_200_OK, content=json_encoder({'message': 'initializing'}))
7379

7480

@@ -114,7 +120,7 @@ async def select_manager(package_manager: str, name: str, file: dict[str, Any],
114120
match package_manager:
115121
case 'PIP':
116122
await pip_extract_graph(name, file, repository_id)
117-
# case 'NPM':
118-
# await npm_extract_graph(name, file, repository_json, repository_id)
119-
# case 'MVN':
120-
# await mvn_extract_graph(name, file, repository_json, repository_id)
123+
case 'NPM':
124+
await npm_extract_graph(name, file, repository_id)
125+
case 'MVN':
126+
await mvn_extract_graph(name, file, repository_id)

app/controllers/graph_to_smt.py

Lines changed: 0 additions & 239 deletions
This file was deleted.

app/controllers/managers/mvn_generate_controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
get_all_versions,
55
requires_packages
66
)
7-
from app.services import read_cpe_matches_by_package_name
87
from app.services import (
8+
read_cpe_matches_by_package_name,
99
read_package_by_name,
1010
create_requirement_file,
1111
relate_package,

app/controllers/managers/pip_generate_controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
get_all_versions,
55
requires_packages
66
)
7-
from app.services import read_cpe_matches_by_package_name
87
from app.services import (
8+
read_cpe_matches_by_package_name,
99
read_package_by_name,
1010
create_requirement_file,
1111
relate_package,

0 commit comments

Comments
 (0)