Coverage for src/qdrant_loader/connectors/jira/auth.py: 77%

26 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-08 06:05 +0000

1from __future__ import annotations 

2 

3from requests import Session 

4from requests.auth import HTTPBasicAuth 

5 

6from .config import JiraDeploymentType, JiraProjectConfig 

7 

8 

9def setup_authentication(session: Session, config: JiraProjectConfig) -> None: 

10 """Configure authentication on the provided requests session based on deployment type.""" 

11 if config.deployment_type == JiraDeploymentType.CLOUD: 

12 if not config.token: 

13 raise ValueError("API token is required for Jira Cloud") 

14 if not config.email: 

15 raise ValueError("Email is required for Jira Cloud") 

16 session.auth = HTTPBasicAuth(config.email, config.token) 

17 else: 

18 if not config.token: 

19 raise ValueError( 

20 "Personal Access Token is required for Jira Data Center/Server" 

21 ) 

22 session.headers.update( 

23 { 

24 "Authorization": f"Bearer {config.token}", 

25 "Content-Type": "application/json", 

26 } 

27 ) 

28 

29 

30def auto_detect_deployment_type(base_url: str) -> JiraDeploymentType: 

31 """Auto-detect the Jira deployment type based on base URL.""" 

32 from urllib.parse import urlparse 

33 

34 try: 

35 parsed_url = urlparse(str(base_url)) 

36 hostname = parsed_url.hostname 

37 if hostname is None: 

38 return JiraDeploymentType.DATACENTER 

39 if hostname.endswith(".atlassian.net") or hostname == "atlassian.net": 

40 return JiraDeploymentType.CLOUD 

41 return JiraDeploymentType.DATACENTER 

42 except Exception: 

43 return JiraDeploymentType.DATACENTER