|
from flask_restful import Resource, reqparse |
|
|
|
from controllers.console import api |
|
from controllers.console.datasets.error import WebsiteCrawlError |
|
from controllers.console.wraps import account_initialization_required, setup_required |
|
from libs.login import login_required |
|
from services.website_service import WebsiteService |
|
|
|
|
|
class WebsiteCrawlApi(Resource): |
|
@setup_required |
|
@login_required |
|
@account_initialization_required |
|
def post(self): |
|
parser = reqparse.RequestParser() |
|
parser.add_argument( |
|
"provider", type=str, choices=["firecrawl", "jinareader"], required=True, nullable=True, location="json" |
|
) |
|
parser.add_argument("url", type=str, required=True, nullable=True, location="json") |
|
parser.add_argument("options", type=dict, required=True, nullable=True, location="json") |
|
args = parser.parse_args() |
|
WebsiteService.document_create_args_validate(args) |
|
|
|
try: |
|
result = WebsiteService.crawl_url(args) |
|
except Exception as e: |
|
raise WebsiteCrawlError(str(e)) |
|
return result, 200 |
|
|
|
|
|
class WebsiteCrawlStatusApi(Resource): |
|
@setup_required |
|
@login_required |
|
@account_initialization_required |
|
def get(self, job_id: str): |
|
parser = reqparse.RequestParser() |
|
parser.add_argument("provider", type=str, choices=["firecrawl", "jinareader"], required=True, location="args") |
|
args = parser.parse_args() |
|
|
|
try: |
|
result = WebsiteService.get_crawl_status(job_id, args["provider"]) |
|
except Exception as e: |
|
raise WebsiteCrawlError(str(e)) |
|
return result, 200 |
|
|
|
|
|
api.add_resource(WebsiteCrawlApi, "/website/crawl") |
|
api.add_resource(WebsiteCrawlStatusApi, "/website/crawl/status/<string:job_id>") |
|
|