Add a python equivalent
This commit is contained in:
parent
2a50dbc9e3
commit
24da16c185
1 changed files with 71 additions and 0 deletions
71
fixComponentLead.py
Normal file
71
fixComponentLead.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
import base64
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
jira_base_url = "https://jira.someserver.com"
|
||||
username = "userName"
|
||||
password = "passWord! @#"
|
||||
project_key = "projectKey"
|
||||
|
||||
# 1. Pull a project's component list
|
||||
response = requests.get(
|
||||
f"{jira_base_url}/rest/api/2/project/{project_key}/components",
|
||||
auth=(username, password),
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
raw_data = response.json()
|
||||
|
||||
# 2. Create a mapping of component ID, component name, and the assignee name
|
||||
component_data = [
|
||||
base64.b64encode(json.dumps({"id": comp["id"], "name": comp["name"], "assignee": comp["assignee"]["name"]}).encode("utf-8")).decode("utf-8")
|
||||
for comp in raw_data
|
||||
]
|
||||
|
||||
# 3. Show a comma-separated list of the usernames and ask which username we want to replace
|
||||
usernames = ", ".join(sorted(set([comp["assignee"]["name"] for comp in raw_data])))
|
||||
print(f"Usernames: {usernames}")
|
||||
old_username = input("Enter the username you want to replace: ")
|
||||
|
||||
# 4. Check if the entered username is in the list
|
||||
if old_username not in usernames:
|
||||
print("Username not found in the list. Please select a name from the list.")
|
||||
exit(1)
|
||||
|
||||
# 5. Ask for the new username
|
||||
new_username = input("Enter the new username: ")
|
||||
|
||||
# Create a folder for the source username and history.txt file
|
||||
os.makedirs(old_username, exist_ok=True)
|
||||
history_file = os.path.join(old_username, "history.txt")
|
||||
|
||||
# 6. Create a new mapping of the IDs and new assignees we will be changing
|
||||
components_to_update = [
|
||||
json.loads(base64.b64decode(comp_b64).decode("utf-8"))
|
||||
for comp_b64 in component_data
|
||||
if json.loads(base64.b64decode(comp_b64).decode("utf-8"))["assignee"] == old_username
|
||||
]
|
||||
|
||||
# 7. Push an update to the Jira Server API to update those component leads
|
||||
for component in components_to_update:
|
||||
component_id = component["id"]
|
||||
component_name = component["name"]
|
||||
|
||||
if not component_id or not component_name:
|
||||
continue
|
||||
|
||||
requests.put(
|
||||
f"{jira_base_url}/rest/api/2/component/{component_id}",
|
||||
auth=(username, password),
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"leadUserName": new_username},
|
||||
)
|
||||
|
||||
# Save the changed component ID and timestamp to the history file
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
log_line = f"Updated component {component_name} ({component_id}) with new assignee {new_username} at {timestamp}"
|
||||
print(log_line)
|
||||
with open(history_file, "a") as history:
|
||||
history.write(log_line + "\n")
|
Loading…
Add table
Add a link
Reference in a new issue