add crawl and seed endpoints to REST API

This commit is contained in:
Nick Sweeting 2024-11-16 02:45:11 -08:00
parent 48bb634b75
commit 43514da0d0
No known key found for this signature in database

View file

@ -15,6 +15,8 @@ from ninja.errors import HttpError
from core.models import Snapshot, ArchiveResult, Tag
from api.models import APIToken, OutboundWebhook
from crawls.models import Crawl
from seeds.models import Seed
from .auth import API_AUTH_METHODS
@ -395,56 +397,95 @@ def get_tag(request, tag_id: str, with_snapshots: bool=True):
# class CrawlSchema(Schema):
# TYPE: str = 'core.models.Crawl'
class SeedSchema(Schema):
TYPE: str = 'seeds.models.Seed'
# id: UUID
# abid: str
id: UUID
abid: str
# modified_at: datetime
# created_at: datetime
# created_by_id: str
# created_by_username: str
modified_at: datetime
created_at: datetime
created_by_id: str
created_by_username: str
# urls: str
# depth: int
# parser: str
uri: str
tags_str: str
config: dict
# # snapshots: List[SnapshotSchema]
@staticmethod
def resolve_created_by_id(obj):
return str(obj.created_by_id)
# @staticmethod
# def resolve_created_by_id(obj):
# return str(obj.created_by_id)
# @staticmethod
# def resolve_created_by_username(obj):
# User = get_user_model()
# return User.objects.get(id=obj.created_by_id).username
# @staticmethod
# def resolve_snapshots(obj, context):
# if context['request'].with_snapshots:
# return obj.snapshot_set.all().distinct()
# return Snapshot.objects.none()
@staticmethod
def resolve_created_by_username(obj):
User = get_user_model()
return User.objects.get(id=obj.created_by_id).username
# @router.get("/crawl/{crawl_id}", response=CrawlSchema, url_name="get_crawl")
# def get_crawl(request, crawl_id: str, with_snapshots: bool=False, with_archiveresults: bool=False):
# """Get a specific Crawl by id or abid."""
# crawl = None
# request.with_snapshots = with_snapshots
# request.with_archiveresults = with_archiveresults
@router.get("/seed/{seed_id}", response=SeedSchema, url_name="get_seed")
def get_seed(request, seed_id: str):
seed = None
request.with_snapshots = False
request.with_archiveresults = False
# try:
# crawl = Crawl.objects.get(abid__icontains=crawl_id)
# except Exception:
# pass
try:
seed = Seed.objects.get(Q(abid__icontains=seed_id) | Q(id__icontains=seed_id))
except Exception:
pass
return seed
# try:
# crawl = crawl or Crawl.objects.get(id__icontains=crawl_id)
# except Exception:
# pass
# return crawl
class CrawlSchema(Schema):
TYPE: str = 'core.models.Crawl'
id: UUID
abid: str
modified_at: datetime
created_at: datetime
created_by_id: str
created_by_username: str
seed: SeedSchema
max_depth: int
status: str
retry_at: datetime
# snapshots: List[SnapshotSchema]
@staticmethod
def resolve_created_by_id(obj):
return str(obj.created_by_id)
@staticmethod
def resolve_created_by_username(obj):
User = get_user_model()
return User.objects.get(id=obj.created_by_id).username
@staticmethod
def resolve_snapshots(obj, context):
if context['request'].with_snapshots:
return obj.snapshot_set.all().distinct()
return Snapshot.objects.none()
@router.get("/crawl/{crawl_id}", response=CrawlSchema, url_name="get_crawl")
def get_crawl(request, crawl_id: str, with_snapshots: bool=False, with_archiveresults: bool=False):
"""Get a specific Crawl by id or abid."""
crawl = None
request.with_snapshots = with_snapshots
request.with_archiveresults = with_archiveresults
try:
crawl = Crawl.objects.get(abid__icontains=crawl_id)
except Exception:
pass
try:
crawl = crawl or Crawl.objects.get(id__icontains=crawl_id)
except Exception:
pass
return crawl
# [..., CrawlSchema]