Skip to content

Commit 05ddcd0

Browse files
committed
feat: Divide database
1 parent ec9469a commit 05ddcd0

File tree

12 files changed

+78
-57
lines changed

12 files changed

+78
-57
lines changed

app/apis/git_service.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
from requests import post
22

3-
from functools import lru_cache
4-
5-
from app.config import Settings
3+
from app.config import settings
64

75
from app.utils.ctc_parser import parse_constraints
86
from app.utils.managers import managers
97

108

11-
@lru_cache()
12-
def get_settings():
13-
return Settings()
14-
15-
16-
settings: Settings = get_settings()
17-
189
headers = {
1910
'Accept': 'application/vnd.github.hawkgirl-preview+json',
2011
'Authorization': f'Bearer {settings.GIT_GRAPHQL_API_KEY}',

app/config.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
from pydantic import BaseSettings
22

3+
from functools import lru_cache
4+
35

46
class Settings(BaseSettings):
57

68
DATABASE_URL: str | None = None
79
GIT_GRAPHQL_API_KEY: str | None = None
810

911
class Config:
10-
env_file = '.env'
12+
env_file = '.env'
13+
14+
@lru_cache()
15+
def get_settings():
16+
return Settings()
17+
18+
19+
settings: Settings = get_settings()

app/controllers/generate_controller.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,35 @@ async def generate_packages(package_name: str, release: dict) -> list[ObjectId]:
2525

2626
if package is not None:
2727

28-
package_edge_id = await exist_package(package, package_edge)
28+
package_edge_id = await exist_package(package, package_edge, 'pypi')
2929

3030
else:
3131

32-
package_edge_id = await no_exist_package(package_name, package_edge)
32+
package_edge_id = await no_exist_package(package_name, package_edge, 'pypi')
3333

3434
package_edges.append(package_edge_id)
3535

3636
return package_edges
3737

38-
async def exist_package(package: dict, package_edge: dict) -> ObjectId:
38+
async def exist_package(package: dict, package_edge: dict, db: str) -> ObjectId:
3939
package_edge['package'] = package['_id']
4040

4141
package_edge['versions'] = await filter_versions_db(package_edge['constraints'], package['versions'])
4242

43-
new_package_edge = await add_package_edge(package_edge)
43+
new_package_edge = await add_package_edge(package_edge, db)
4444

4545
return new_package_edge['_id']
4646

47-
async def no_exist_package(package_name: str, package_edge: dict) -> ObjectId:
47+
async def no_exist_package(package_name: str, package_edge: dict, db: str) -> ObjectId:
4848
package = {'name': package_name}
4949

5050
new_package = await add_package(package)
5151

5252
package_edge['package'] = new_package['_id']
5353

54-
new_package_edge = await add_package_edge(package_edge)
54+
new_package_edge = await add_package_edge(package_edge, db)
5555

56-
no_existing_versions = await generate_versions(new_package, new_package_edge)
56+
no_existing_versions = await generate_versions(new_package, new_package_edge, db)
5757

5858
await relate_versions(no_existing_versions, new_package['name'])
5959

@@ -66,7 +66,7 @@ async def relate_versions(no_existing_versions: list, package_name: str) -> None
6666

6767
await update_version_package_edges(version[0], version_package_edges)
6868

69-
async def generate_versions(package: dict, package_edge: dict) -> list:
69+
async def generate_versions(package: dict, package_edge: dict, db: str) -> list:
7070
no_existing_versions: list = []
7171
package_versions: list = []
7272

@@ -94,6 +94,6 @@ async def generate_versions(package: dict, package_edge: dict) -> list:
9494

9595
await update_package_versions(package['_id'], package_versions)
9696

97-
await update_package_edge_versions(package_edge['_id'], filtered_versions)
97+
await update_package_edge_versions(package_edge['_id'], filtered_versions, db)
9898

9999
return no_existing_versions

app/controllers/graph_controller.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from app.models.graph_model import GraphModel
1010

11-
from app.services.graph_service import add_graph, update_graph_requirement_files
11+
from app.services.graph_service import read_graph, add_graph, update_graph_requirement_files, update_graph_is_completed
1212
from app.services.package_service import get_package_by_name
1313
from app.services.requirement_file_service import add_requirement_file, update_requirement_file
1414

@@ -17,6 +17,12 @@
1717

1818
router = APIRouter()
1919

20+
@router.get('/graph/{graph_id}', response_description='Get graph', response_model = GraphModel)
21+
async def get_graph(graph_id: str):
22+
new_graph = await read_graph(graph_id)
23+
24+
return JSONResponse(status_code = status.HTTP_200_OK, content = JSONEncoder().encode(new_graph))
25+
2026
@router.post('/graph', response_description='Init graph', response_model = GraphModel)
2127
async def init_graph(background_tasks: BackgroundTasks, graph: GraphModel = Body(...)):
2228
graph_json = jsonable_encoder(graph)
@@ -52,14 +58,16 @@ async def generate_graph(graph: dict) -> None:
5258

5359
if package is not None:
5460

55-
package_edge_id = await exist_package(package, package_edge)
61+
package_edge_id = await exist_package(package, package_edge, 'depex')
5662

5763
else:
5864

59-
package_edge_id = await no_exist_package(package_name, package_edge)
65+
package_edge_id = await no_exist_package(package_name, package_edge, 'depex')
6066

6167
package_edges.append(package_edge_id)
6268

6369
await update_requirement_file(new_req_file['_id'], package_edges)
6470

65-
await update_graph_requirement_files(graph['_id'], requirement_files)
71+
await update_graph_requirement_files(graph['_id'], requirement_files)
72+
73+
await update_graph_is_completed(graph['_id'])

app/services/db/database.py

Lines changed: 0 additions & 23 deletions
This file was deleted.
File renamed without changes.

app/services/dbs/databases.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import motor.motor_asyncio
2+
3+
from app.config import settings
4+
5+
6+
client = motor.motor_asyncio.AsyncIOMotorClient(settings.DATABASE_URL)
7+
8+
depex_db = client.depex
9+
graph_collection = depex_db.get_collection('graphs')
10+
depex_package_edge_collection = depex_db.get_collection('package_edges')
11+
requirement_file_collection = depex_db.get_collection('requirement_files')
12+
13+
pypi_db = client.pypi
14+
pypi_package_edge_collection = pypi_db.get_collection('package_edges')
15+
package_collection = pypi_db.get_collection('packages')
16+
version_collection = pypi_db.get_collection('versions')

app/services/graph_service.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
from bson import ObjectId
22

3-
from app.services.db.database import graph_collection
3+
from app.services.dbs.databases import graph_collection
44

55

6+
async def read_graph(graph_id: str) -> dict:
7+
new_graph = await graph_collection.find_one({'_id': ObjectId(graph_id)})
8+
return new_graph
9+
610
async def add_graph(graph_data: dict) -> dict:
711
graph = await graph_collection.insert_one(graph_data)
812
new_graph = await graph_collection.find_one({'_id': graph.inserted_id})
913
return new_graph
1014

1115
async def update_graph_requirement_files(graph_id: ObjectId, requirement_files: list) -> dict:
1216
updated_graph = await graph_collection.find_one_and_update({'_id': graph_id}, {'$set': {'requirement_files': requirement_files}})
17+
return updated_graph
18+
19+
async def update_graph_is_completed(graph_id: ObjectId) -> dict:
20+
updated_graph = await graph_collection.find_one_and_update({'_id': graph_id}, {'$set': {'is_complete': True}})
1321
return updated_graph
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
from bson import ObjectId
22

3-
from app.services.db.database import package_edge_collection
3+
from app.services.dbs.databases import depex_package_edge_collection, pypi_package_edge_collection
44

55

6-
async def add_package_edge(package_edge_data: dict) -> dict:
7-
package_edge = await package_edge_collection.insert_one(package_edge_data)
8-
new_package_edge = await package_edge_collection.find_one({'_id': package_edge.inserted_id})
6+
async def add_package_edge(package_edge_data: dict, db: str) -> dict:
7+
match db:
8+
case 'depex':
9+
collection = depex_package_edge_collection
10+
case 'pypi':
11+
collection = pypi_package_edge_collection
12+
13+
package_edge = await collection.insert_one(package_edge_data)
14+
new_package_edge = await collection.find_one({'_id': package_edge.inserted_id})
915
return new_package_edge
1016

11-
async def update_package_edge_versions(package_edge_id: ObjectId, versions: list) -> dict:
12-
updated_package_edge = await package_edge_collection.find_one_and_update({'_id': package_edge_id}, {'$set': {'versions': versions}})
17+
async def update_package_edge_versions(package_edge_id: ObjectId, versions: list, db: str) -> dict:
18+
match db:
19+
case 'depex':
20+
collection = depex_package_edge_collection
21+
case 'pypi':
22+
collection = pypi_package_edge_collection
23+
24+
updated_package_edge = await collection.find_one_and_update({'_id': package_edge_id}, {'$set': {'versions': versions}})
1325
return updated_package_edge

app/services/package_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from bson import ObjectId
22

3-
from app.services.db.database import package_collection
3+
from app.services.dbs.databases import package_collection
44

55

66
async def add_package(package_data: dict) -> dict:

0 commit comments

Comments
 (0)