{"record":{"id":"5133052474252959","repo":"ZhuLinsen/daily_stock_analysis","slug":"source-url-host-is-required","errorCode":null,"errorMessage":"source url host is required","messagePattern":"source url host is required","errorType":"validation","errorClass":"IntelligenceServiceError","httpStatus":400,"severity":"error","filePath":"src/services/intelligence_service.py","lineNumber":402,"sourceCode":"            \"url\": url,\n            \"enabled\": enabled,\n            \"scope_type\": scope_type,\n            \"scope_value\": scope_value[:64] if scope_value else None,\n            \"market\": market,\n            \"description\": description,\n        }\n\n    def _validate_url(self, raw_url: str, *, allow_no_url: bool = False) -> None:\n        if allow_no_url and raw_url.startswith(\"no-url:intel:\"):\n            return\n        parsed = urlparse(raw_url)\n        if parsed.scheme.lower() not in {\"http\", \"https\"} or not parsed.netloc:\n            raise IntelligenceServiceError(\"source url must be an absolute http(s) URL\")\n        if parsed.username or parsed.password:\n            raise IntelligenceServiceError(\"source url must not contain credentials\")\n        hostname = (parsed.hostname or \"\").strip().lower().rstrip(\".\")\n        if not hostname:\n            raise IntelligenceServiceError(\"source url host is required\")\n        if hostname in _PRIVATE_HOSTNAMES or hostname.endswith(\".local\"):\n            raise IntelligenceServiceError(\"source url host is not allowed\")\n        has_public_address = False\n        try:\n            ip = ipaddress.ip_address(hostname)\n        except ValueError:\n            ip = None\n        if ip is not None:\n            if self._is_blocked_ip(ip):\n                raise IntelligenceServiceError(\"source url must not target private or local network addresses\")\n            return\n        try:\n            addr_infos = socket.getaddrinfo(hostname, None)\n        except OSError as exc:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\") from exc\n        if not addr_infos:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\")\n        for info in addr_infos:","sourceCodeStart":384,"sourceCodeEnd":420,"githubUrl":"https://github.com/ZhuLinsen/daily_stock_analysis/blob/5159bd72e8373d215492dff122acc9d389e219c9/src/services/intelligence_service.py#L384-L420","documentation":"Error \"source url host is required\" thrown in ZhuLinsen/daily_stock_analysis.","triggerScenarios":"Thrown at src/services/intelligence_service.py:402 when the library encounters an invalid state.","commonSituations":"Raised when an intelligence source URL has no host; occurs with malformed URLs such as https:// or empty host components.","solutions":["Provide a URL that includes a valid hostname.","Fix malformed URLs such as missing host after the scheme.","Validate the URL before saving the source."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5159bd72e8373d215492dff122acc9d389e219c9","analyzedAt":"2026-08-15T01:59:36.292Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}