Skip to content

Commit 8d764ee

Browse files
[#2634148] Update SQLAlchemy and FastAPI
1 parent 7158deb commit 8d764ee

21 files changed

+138
-148
lines changed

components/resc-backend/requirements.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
celery==5.3.1
22
amqp==5.1.1
33
requests==2.31.0
4-
sqlalchemy==1.4.37
4+
sqlalchemy==2.0.20
55
alembic==1.11.2
6-
fastapi==0.66.1
6+
fastapi==0.103.0
77
typing==3.7.4.3
88
pydantic==1.8.2
99
uvicorn==0.17.6

components/resc-backend/src/resc_backend/db/model/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55

66
# Third Party
7-
from sqlalchemy.ext.declarative import declarative_base
7+
from sqlalchemy.orm import declarative_base
88

99
Base = declarative_base()
1010
basedir = os.path.abspath(os.path.dirname(__file__))

components/resc-backend/src/resc_backend/resc_web_service/crud/audit.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=R0916,R0912,C0121
1+
# pylint: disable=R0916,R0912,C0121,not-callable
22
# Standard Library
33
import logging
44
from datetime import datetime, timedelta

components/resc-backend/src/resc_backend/resc_web_service/crud/detailed_finding.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=R0912,C0121,R0915
1+
# pylint: disable=R0912,C0121,R0915,not-callable
22
# Standard Library
33
from typing import List
44

components/resc-backend/src/resc_backend/resc_web_service/crud/finding.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=R0916,R0912,C0121
1+
# pylint: disable=R0916,R0912,C0121,not-callable
22
# Standard Library
33
import logging
44
from datetime import datetime, timedelta

components/resc-backend/src/resc_backend/resc_web_service/crud/repository.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint:disable=not-callable
12
# Third Party
23
from sqlalchemy import and_, func
34
from sqlalchemy.orm import Session

components/resc-backend/src/resc_backend/resc_web_service/crud/rule.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint:disable=not-callable
12
# Standard Library
23
import logging
34
from typing import List

components/resc-backend/src/resc_backend/resc_web_service/crud/rule_pack.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint:disable=not-callable
12
# Standard Library
23
import logging
34
from typing import List, Optional

components/resc-backend/src/resc_backend/resc_web_service/crud/rule_tag.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=E1101
1+
# pylint: disable=E1101,not-callable
22
# Standard Library
33
from typing import List
44

components/resc-backend/src/resc_backend/resc_web_service/crud/scan.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=E1101
1+
# pylint: disable=E1101,not-callable
22
# Standard Library
33
from datetime import datetime
44
from typing import List

components/resc-backend/src/resc_backend/resc_web_service/crud/scan_finding.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint:disable=not-callable
12
# Standard Library
23
from typing import List
34

components/resc-backend/src/resc_backend/resc_web_service/crud/vcs_instance.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pylint: disable=E1101
1+
# pylint: disable=E1101,not-callable
22
# Standard Library
33
from typing import List
44

components/resc-backend/src/resc_backend/resc_web_service/endpoints/findings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ async def patch_finding(
184184
500: {"description": ERROR_MESSAGE_500},
185185
503: {"description": ERROR_MESSAGE_503}
186186
})
187-
async def delete_finding(finding_id: int, db_connection: Session = Depends(get_db_connection)) -> FindingRead:
187+
async def delete_finding(finding_id: int, db_connection: Session = Depends(get_db_connection)):
188188
"""
189189
Delete a finding object
190190

components/resc-backend/src/resc_backend/resc_web_service/endpoints/metrics.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,10 @@ def convert_rows_to_finding_count_over_time(count_over_time: dict, weeks: int) -
140140

141141
# loop over the counts from the database
142142
for data in count_over_time:
143-
week = f"{data['year']} W{data['week']:02d}"
144-
finding_count = data["finding_count"]
143+
week = f"{getattr(data, 'year')} W{getattr(data, 'week'):02d}"
144+
finding_count = getattr(data, 'finding_count')
145145

146-
week_groups[week][data["provider_type"]] += finding_count
146+
week_groups[week][getattr(data, 'provider_type')] += finding_count
147147
week_groups[week]["total"] += finding_count
148148

149149
# Convert to the output format
@@ -182,7 +182,7 @@ def get_audit_count_by_auditor_over_time(db_connection: Session = Depends(get_db
182182
# get the unique auditors from the data
183183
auditors_default = {}
184184
for audit in audit_counts:
185-
auditors_default[audit['auditor']] = 0
185+
auditors_default[getattr(audit, 'auditor')] = 0
186186

187187
# default to 0 per auditor for all weeks in range
188188
weekly_audit_counts = {}
@@ -194,10 +194,11 @@ def get_audit_count_by_auditor_over_time(db_connection: Session = Depends(get_db
194194

195195
# set the counts based on the data from the database
196196
for audit in audit_counts:
197-
audit_week = f"{audit['year']} W{audit['week']:02d}"
197+
audit_week = f"{getattr(audit, 'year')} W{getattr(audit, 'week'):02d}"
198198
if audit_week in weekly_audit_counts:
199-
weekly_audit_counts.get(audit_week).audit_by_auditor_count[audit['auditor']] = audit['audit_count']
200-
weekly_audit_counts.get(audit_week).total += audit['audit_count']
199+
weekly_audit_counts.get(audit_week).audit_by_auditor_count[getattr(audit, 'auditor')] = \
200+
getattr(audit, 'audit_count')
201+
weekly_audit_counts.get(audit_week).total += getattr(audit, 'audit_count')
201202

202203
sorted_weekly_audit_counts = dict(sorted(weekly_audit_counts.items()))
203204
output = list(sorted_weekly_audit_counts.values())
@@ -254,7 +255,7 @@ def determine_audit_rank_current_week(auditor: str, db_connection: Session) -> i
254255

255256
auditor_counts = {}
256257
for audit in audit_counts_db:
257-
auditor_counts[audit['auditor']] = audit['audit_count']
258+
auditor_counts[getattr(audit, 'auditor')] = getattr(audit, 'audit_count')
258259

259260
sorted_auditor_counts = sorted(auditor_counts.items(), key=lambda x: x[1], reverse=True)
260261
for auditor_count in dict(sorted_auditor_counts):

components/resc-backend/src/resc_backend/resc_web_service/endpoints/repositories.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
def get_all_repositories(skip: int = Query(default=0, ge=0),
5050
limit: int = Query(default=DEFAULT_RECORDS_PER_PAGE_LIMIT, ge=1),
5151
vcsproviders: List[VCSProviders] = Query(None, alias="vcsprovider", title="VCSProviders"),
52-
projectfilter: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
53-
repositoryfilter: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
52+
projectfilter: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
53+
repositoryfilter: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
5454
db_connection: Session = Depends(get_db_connection)) \
5555
-> PaginationModel[repository_schema.RepositoryRead]:
5656
"""
@@ -208,7 +208,7 @@ async def delete_repository(repository_id: int, db_connection: Session = Depends
208208
})
209209
@cache(namespace=CACHE_NAMESPACE_REPOSITORY, expire=REDIS_CACHE_EXPIRE)
210210
def get_distinct_projects(vcsproviders: List[VCSProviders] = Query(None, alias="vcsprovider", title="VCSProviders"),
211-
repositoryfilter: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
211+
repositoryfilter: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
212212
onlyifhasfindings: bool = Query(default=False),
213213
db_connection: Session = Depends(get_db_connection)) -> List[str]:
214214
"""
@@ -241,7 +241,7 @@ def get_distinct_projects(vcsproviders: List[VCSProviders] = Query(None, alias="
241241
})
242242
@cache(namespace=CACHE_NAMESPACE_REPOSITORY, expire=REDIS_CACHE_EXPIRE)
243243
def get_distinct_repositories(vcsproviders: List[VCSProviders] = Query(None, alias="vcsprovider", title="VCSProviders"),
244-
projectname: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
244+
projectname: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
245245
onlyifhasfindings: bool = Query(default=False),
246246
db_connection: Session = Depends(get_db_connection)) -> List[str]:
247247
"""
@@ -318,9 +318,9 @@ def get_all_repositories_with_findings_metadata(
318318
vcsproviders: List[VCSProviders] = Query(None, alias="vcsprovider",
319319
title="VCSProviders"),
320320
projectfilter: Optional[str] = Query('',
321-
regex=r"^[A-z0-9 .\-_%]*$"),
321+
pattern=r"^[A-z0-9 .\-_%]*$"),
322322
repositoryfilter: Optional[str] = Query('',
323-
regex=r"^[A-z0-9 .\-_%]*$"),
323+
pattern=r"^[A-z0-9 .\-_%]*$"),
324324
onlyifhasfindings: bool = Query(default=False),
325325
db_connection: Session = Depends(get_db_connection)) \
326326
-> PaginationModel[repository_enriched_schema.RepositoryEnrichedRead]:
@@ -383,6 +383,7 @@ def get_all_repositories_with_findings_metadata(
383383
status_code=status.HTTP_200_OK,
384384
responses={
385385
200: {"description": "Retrieve the latest scan related to a repository"},
386+
404: {"description": "Scan not found"},
386387
500: {"description": ERROR_MESSAGE_500},
387388
503: {"description": ERROR_MESSAGE_503}
388389
})
@@ -398,7 +399,8 @@ def get_last_scan_for_repository(repository_id: int, db_connection: Session = De
398399
or empty if no scan was found
399400
"""
400401
last_scan = scan_crud.get_latest_scan_for_repository(db_connection, repository_id=repository_id)
401-
402+
if last_scan is None:
403+
raise HTTPException(status_code=404, detail="Scan not found")
402404
return last_scan
403405

404406

components/resc-backend/src/resc_backend/resc_web_service/endpoints/rule_packs.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
503: {"description": ERROR_MESSAGE_503}
5858
})
5959
@cache(namespace=CACHE_NAMESPACE_RULE_PACK, expire=REDIS_CACHE_EXPIRE)
60-
def get_rule_packs(version: Optional[str] = Query(None, regex=r"^\d+(?:\.\d+){2}$"),
60+
def get_rule_packs(version: Optional[str] = Query(None, pattern=r"^\d+(?:\.\d+){2}$"),
6161
active: Optional[bool] = Query(None, description="Filter on active rule packs"),
6262
skip: int = Query(default=0, ge=0),
6363
limit: int = Query(default=DEFAULT_RECORDS_PER_PAGE_LIMIT, ge=1),
@@ -91,7 +91,7 @@ def get_rule_packs(version: Optional[str] = Query(None, regex=r"^\d+(?:\.\d+){2}
9191
500: {"description": ERROR_MESSAGE_500},
9292
503: {"description": ERROR_MESSAGE_503}
9393
})
94-
async def download_rule_pack_toml_file(version: Optional[str] = Query(None, regex=r"^\d+(?:\.\d+){2}$"),
94+
async def download_rule_pack_toml_file(version: Optional[str] = Query(None, pattern=r"^\d+(?:\.\d+){2}$"),
9595
db_connection: Session = Depends(get_db_connection)) -> FileResponse:
9696
"""
9797
Download rule pack in TOML format
@@ -129,7 +129,7 @@ async def download_rule_pack_toml_file(version: Optional[str] = Query(None, rege
129129
500: {"description": ERROR_MESSAGE_500},
130130
503: {"description": ERROR_MESSAGE_503}
131131
})
132-
async def upload_rule_pack_toml_file(version: str = Query(default=Required, regex=r"^\d+(?:\.\d+){2}$"),
132+
async def upload_rule_pack_toml_file(version: str = Query(default=Required, pattern=r"^\d+(?:\.\d+){2}$"),
133133
rule_file: UploadFile = File(...),
134134
db_connection: Session = Depends(get_db_connection)) -> dict:
135135
"""

components/resc-backend/src/resc_backend/resc_web_service/endpoints/rules.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
def get_distinct_rules_from_findings(
4646
finding_statuses: List[FindingStatus] = Query(None, alias="findingstatus", title="FindingStatuses"),
4747
vcs_providers: List[VCSProviders] = Query(None, alias="vcsprovider", title="VCSProviders"),
48-
project_name: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
49-
repository_name: Optional[str] = Query('', regex=r"^[A-z0-9 .\-_%]*$"),
48+
project_name: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
49+
repository_name: Optional[str] = Query('', pattern=r"^[A-z0-9 .\-_%]*$"),
5050
start_date_time: Optional[datetime] = Query(None),
5151
end_date_time: Optional[datetime] = Query(None),
5252
rule_pack_versions: Optional[List[str]] = Query(None, alias="rule_pack_version", title="RulePackVersion"),

components/resc-backend/src/resc_backend/resc_web_service/endpoints/scans.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ async def create_scan_findings(scan_id: int,
246246
})
247247
def get_scan_findings(scan_id: int, skip: int = Query(default=0, ge=0),
248248
limit: int = Query(default=DEFAULT_RECORDS_PER_PAGE_LIMIT, ge=1),
249-
rules: List[str] = Query([], regex=r"^[A-z0-9 .\-_%]*$", alias="rule", title="rule"),
249+
rules: List[str] = Query([], pattern=r"^[A-z0-9 .\-_%]*$", alias="rule", title="rule"),
250250
statuses: List[FindingStatus] = Query(None, alias="status", title="status"),
251251
db_connection: Session = Depends(get_db_connection)) \
252252
-> PaginationModel[finding_schema.FindingRead]:
@@ -284,7 +284,7 @@ def get_scan_findings(scan_id: int, skip: int = Query(default=0, ge=0),
284284
def get_scans_findings(scan_ids: List[int] = Query([], alias="scan_id", title="Scan ids"),
285285
skip: int = Query(default=0, ge=0),
286286
limit: int = Query(default=DEFAULT_RECORDS_PER_PAGE_LIMIT, ge=1),
287-
rules: List[str] = Query([], regex=r"^[A-z0-9 .\-_%]*$", alias="rule", title="rule"),
287+
rules: List[str] = Query([], pattern=r"^[A-z0-9 .\-_%]*$", alias="rule", title="rule"),
288288
statuses: List[FindingStatus] = Query(None, alias="status", title="status"),
289289
db_connection: Session = Depends(get_db_connection)) \
290290
-> PaginationModel[finding_schema.FindingRead]:

components/resc-backend/test-requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ pytest-cov==2.10.0
1111
tox==3.23.1
1212
pylint==2.14.0
1313
pytest-asyncio==0.21.1
14+
httpx==0.24.1

0 commit comments

Comments
 (0)