Skip to content

Instantly share code, notes, and snippets.

@dvaraujo
Last active January 18, 2024 14:23
Show Gist options
  • Save dvaraujo/2a8c2d9e916e06b09b7e2d4c933ab194 to your computer and use it in GitHub Desktop.
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
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