30 lines
		
	
	
		
			893 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			893 B
		
	
	
	
		
			Python
		
	
	
	
	
	
import requests
 | 
						|
import urllib.request
 | 
						|
import urllib.parse
 | 
						|
import json
 | 
						|
 | 
						|
DEVOPS_SCOPE = "https://app.vssps.visualstudio.com/.default"
 | 
						|
DEVOPS_API_VERSION = "7.1"
 | 
						|
 | 
						|
class Client:
 | 
						|
    def __init__(self, org_url: str, token: str, api_version: str = DEVOPS_API_VERSION):
 | 
						|
        self._org_url = org_url.rstrip("/") + "/" # Ensure trailing slash
 | 
						|
        self._token = token
 | 
						|
        self._api_version = api_version
 | 
						|
 | 
						|
    def get(self, path: str, params: dict = {}):
 | 
						|
        p = {
 | 
						|
            "api-version": self._api_version,
 | 
						|
            **params
 | 
						|
        }
 | 
						|
        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}"
 | 
						|
        })
 | 
						|
        return r
 | 
						|
 | 
						|
    def get_projects(self):
 | 
						|
        r = self.get("_apis/projects")
 | 
						|
        r.raise_for_status()
 | 
						|
        return r.json()
 |