microsoft / azure-devops-python-api

Azure DevOps Python API
https://docs.microsoft.com/azure/devops/integrate/index?view=azure-devops
MIT License
591 stars 200 forks source link

Azure Python how to link child/related tickets to an already created ticket? #405

Open MartinBarkerPhilips opened 2 years ago

MartinBarkerPhilips commented 2 years ago

I am trying to use the azure-devops python pip package in order to migrate a large amount of Epic/Story/Feature tickets into Azure Devops. I can create singular tickets just fine, but I'm having trouble linking those tickets together by specifying the hierarchy (ticket A is a parent to child tickets B / C / D)

In order to create an EPIC ticket I'm running code like this:

    #set field
    jpo = JsonPatchOperation()
    jpo.from_ = None
    jpo.op = "add"
    jpo.path = "/fields/Microsoft.VSTS.Scheduling.FinishDate"
    jpo.value = default_field
    jpos.append(jpo)

    #create work item
    createdWorkItem = wit_client.create_work_item(
        document=jpos,
        project=project.id,
        type="EPIC",
        validate_only=validate_only,
        bypass_rules=bypass_rules,
        suppress_notifications=suppress_notifications
    )

Which works, but now I'm trying to figure out how to give this Epic ticket a linked Child ticket.

In the github repo for this azure-devops python package, I can see that in the definition for create_work_item there is a string variable expand which has an option for Relations

https://github.com/microsoft/azure-devops-python-api/blob/master/azure-devops/azure/devops/v5_1/work_item_tracking/work_item_tracking_client.py#L1578

:param str expand: The expand parameters for work item attributes. Possible options are { None, Relations, Fields, Links, All }.

It's also discussed in the official azure-devops documentation for the create_work_item function: https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work-items/create?view=azure-devops-rest-6.0#workitemexpand

But if I add expand='Relations' to my code it results in an error:

    createdWorkItem = wit_client.create_work_item(
        document=jpos,
        project=project.id,
        type="EPIC",
        validate_only=validate_only,
        bypass_rules=bypass_rules,
        suppress_notifications=suppress_notifications,
        expand='Relations'
    )

TypeError: WorkItemTrackingClient.create_work_item() got an unexpected keyword argument 'expand'

Am I using this 'expand' variable correctly? Or is there a different way I should add a child ticket to an epic in azure using python? Thanks

typorian commented 12 months ago

sorry to dig this up @MartinBarkerPhilips could you let me know where you imported that JsonPatchOperation() method from? I'm at a loss.

MartinBarkerPhilips commented 12 months ago

sorry to dig this up @MartinBarkerPhilips could you let me know where you imported that JsonPatchOperation() method from? I'm at a loss.

its been a while since i worked on this project, but i did end up figuring it out i remember and completing my rtc to ads migration tool. the script is here:

https://github.com/search?q=repo%3Aphilips-software%2FRTC-ADS-Migration-Tool%20JsonPatchOperation&type=code

That above link is searching for "JsonPatchOperation" in the repo, which I can see being used in places like this:

from azure.devops.v5_0.work_item_tracking.models import JsonPatchOperation

Hope that helps!

typorian commented 12 months ago

@MartinBarkerPhilips thank you so much, your code absolutely helped me to get this moved along.