Fixes for URL building logic.
This commit is contained in:
		
							
								
								
									
										11
									
								
								devops.py
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								devops.py
									
									
									
									
									
								
							@@ -1,21 +1,24 @@
 | 
				
			|||||||
import requests
 | 
					import requests
 | 
				
			||||||
from urllib.parse import urljoin
 | 
					import urllib.request
 | 
				
			||||||
 | 
					import urllib.parse
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEVOPS_SCOPE = "https://app.vssps.visualstudio.com/.default"
 | 
					DEVOPS_SCOPE = "https://app.vssps.visualstudio.com/.default"
 | 
				
			||||||
DEVOPS_API_VERSION = "7.1"
 | 
					DEVOPS_API_VERSION = "7.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Client:
 | 
					class Client:
 | 
				
			||||||
    def __init__(self, org_url: str, token: str, api_version: str = DEVOPS_API_VERSION):
 | 
					    def __init__(self, org_url: str, token: str, api_version: str = DEVOPS_API_VERSION):
 | 
				
			||||||
        self._org_url = org_url
 | 
					        self._org_url = org_url.rstrip("/") + "/" # Ensure trailing slash
 | 
				
			||||||
        self._token = token
 | 
					        self._token = token
 | 
				
			||||||
        self._api_version = api_version
 | 
					        self._api_version = api_version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, url: str, params: dict = {}):
 | 
					    def get(self, path: str, params: dict = {}):
 | 
				
			||||||
        p = {
 | 
					        p = {
 | 
				
			||||||
            "api-version": self._api_version,
 | 
					            "api-version": self._api_version,
 | 
				
			||||||
            **params
 | 
					            **params
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        r = requests.get(url=urljoin(self._org_url, url), params=p, headers={
 | 
					        url = self._org_url + path.lstrip("/") # Ensure single slash between base and path
 | 
				
			||||||
 | 
					        r = requests.get(url=url, params=p, headers={
 | 
				
			||||||
            "Authorization": f"Bearer {self._token}"
 | 
					            "Authorization": f"Bearer {self._token}"
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        return r
 | 
					        return r
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ from json import dumps
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    token = DefaultAzureCredential().get_token(DEVOPS_SCOPE).token
 | 
					    token = DefaultAzureCredential().get_token(DEVOPS_SCOPE).token
 | 
				
			||||||
    client = Client("https://dev.azure.com/mcovsandbox/", token)
 | 
					    client = Client("https://dev.azure.com/mcovsandbox", token)
 | 
				
			||||||
    projects = client.get_projects()
 | 
					    projects = client.get_projects()
 | 
				
			||||||
    print(dumps(projects, indent=2))
 | 
					    print(dumps(projects, indent=2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user