|  | 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>") | 
					
						
						|  |  |