fix: real nexus webhook format, atomic dedup, tested live
This commit is contained in:
@@ -4,7 +4,7 @@ import datetime
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from guarddog_nexus.config import config
|
||||
@@ -41,17 +41,6 @@ async def harvest(
|
||||
|
||||
package_name, package_version = info
|
||||
|
||||
existing = await session.scalar(
|
||||
select(Scan.id).where(
|
||||
Scan.package_name == package_name,
|
||||
Scan.package_version == package_version,
|
||||
Scan.repository == repository,
|
||||
)
|
||||
)
|
||||
if existing:
|
||||
log.info("Already scanned %s==%s, skipping", package_name, package_version)
|
||||
return None
|
||||
|
||||
scan = Scan(
|
||||
package_name=package_name,
|
||||
package_version=package_version,
|
||||
@@ -61,7 +50,13 @@ async def harvest(
|
||||
status=ScanStatus.PENDING.value,
|
||||
)
|
||||
session.add(scan)
|
||||
await session.commit()
|
||||
try:
|
||||
await session.commit()
|
||||
except IntegrityError:
|
||||
await session.rollback()
|
||||
log.info("Already scanned %s==%s (unique), skipping", package_name, package_version)
|
||||
return None
|
||||
|
||||
await session.refresh(scan)
|
||||
|
||||
os.makedirs(config.temp_dir, exist_ok=True)
|
||||
|
||||
Reference in New Issue
Block a user