| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | # [REVIEW] Implement if Needed? Do we need a new type of data sourcefrom abc import abstractmethodimport requestsfrom api.models.source import DataSourceBearerBindingfrom flask_login import current_userfrom extensions.ext_database import dbclass BearerDataSource:    def __init__(self, api_key: str, api_base_url: str):        self.api_key = api_key        self.api_base_url = api_base_url    @abstractmethod    def validate_bearer_data_source(self):        """        Validate the data source        """class FireCrawlDataSource(BearerDataSource):    def validate_bearer_data_source(self):        TEST_CRAWL_SITE_URL = "https://www.google.com"        FIRECRAWL_API_VERSION = "v0"        test_api_endpoint = self.api_base_url.rstrip('/') + f"/{FIRECRAWL_API_VERSION}/scrape"        headers = {            "Authorization": f"Bearer {self.api_key}",            "Content-Type": "application/json",        }        data = {            "url": TEST_CRAWL_SITE_URL,        }        response = requests.get(test_api_endpoint, headers=headers, json=data)        return response.json().get("status") == "success"    def save_credentials(self):        # save data source binding        data_source_binding = DataSourceBearerBinding.query.filter(            db.and_(                DataSourceBearerBinding.tenant_id == current_user.current_tenant_id,                DataSourceBearerBinding.provider == 'firecrawl',                DataSourceBearerBinding.endpoint_url == self.api_base_url,                DataSourceBearerBinding.bearer_key == self.api_key            )        ).first()        if data_source_binding:            data_source_binding.disabled = False            db.session.commit()        else:            new_data_source_binding = DataSourceBearerBinding(                tenant_id=current_user.current_tenant_id,                provider='firecrawl',                endpoint_url=self.api_base_url,                bearer_key=self.api_key            )            db.session.add(new_data_source_binding)            db.session.commit()
 |