Last active
January 18, 2024 14:23
-
-
Save dvaraujo/2a8c2d9e916e06b09b7e2d4c933ab194 to your computer and use it in GitHub Desktop.
Python script to get and export all users from a Atlassian instance. Just set the environment variables and you are good to go. External dependecies: pandas, requests
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import requests | |
import pandas as pd | |
from requests.auth import HTTPBasicAuth | |
import os | |
API_TOKEN = os.getenv("JIRA_TOKEN") | |
AUTH_EMAIL = os.getenv("AUTH_EMAIL") | |
DOMAIN_NAME = os.getenv("DOMAIN_NAME") | |
def flatten_json(dictionary: dict, parent_key: str = "", flatten=None) -> dict: | |
"""Recursive function to flatten a json formatter dictionary""" | |
if flatten is None: | |
flatten = {} | |
for key, value in dictionary.items(): | |
new_key = f"{parent_key}.{key}" if parent_key else key | |
if isinstance(value, dict): | |
flatten_json(value, new_key, flatten) | |
else: | |
flatten[new_key] = value | |
return flatten | |
def get_all_users() -> list[dict]: | |
index = 1 | |
headers = {"Accept": "application/json", "Content-Type": "application/json"} | |
auth = HTTPBasicAuth(AUTH_EMAIL, str(API_TOKEN)) | |
users_json = [] | |
while True: | |
url_users = f"https://{DOMAIN_NAME}.atlassian.net/rest/api/3/users/search?startAt={index}&maxResults=50" | |
response = requests.request("GET", url_users, headers=headers, auth=auth) | |
response_json = json.loads(response.text) | |
if response_json: | |
users_json.append(response_json) | |
index = index + 50 | |
else: | |
break | |
return users_json | |
def parse_users_json(users_json: list[dict]) -> None: | |
flatten_users_json = [] | |
for record in users_json: | |
for user in record: | |
flatten_users_json.append(flatten_json(user)) | |
return flatten_users_json | |
def export_data(flatten_users_json): | |
df = pd.DataFrame.from_dict(flatten_users_json) | |
df.to_excel("all_users.xlsx", index=False) | |
def main(): | |
users_json = get_all_users() | |
flatten_users_json = parse_users_json(users_json) | |
export_data(flatten_users_json) | |
if __name__=="__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment