azure-devops-python-api icon indicating copy to clipboard operation
azure-devops-python-api copied to clipboard

Getting started code throws error in notebook

Open uncheckederror opened this issue 1 year ago • 3 comments

Running this code from the Getting Started section of the readme.md:

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
import pprint

# Fill in with your personal access token and org URL
personal_access_token = '**removed**'
organization_url = 'https://**notthedevdomain**.visualstudio.com/'

# Create a connection to the org
credentials = BasicAuthentication('', personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)

# Get a client (the "core" client provides access to projects, teams, etc)
core_client = connection.clients.get_core_client()

# Get the first page of projects
get_projects_response = core_client.get_projects()
index = 0
while get_projects_response is not None:
    for project in get_projects_response.value:
        pprint.pprint("[" + str(index) + "] " + project.name)
        index += 1
    if get_projects_response.continuation_token is not None and get_projects_response.continuation_token != "":
        # Get the next page of projects
        get_projects_response = core_client.get_projects(continuation_token=get_projects_response.continuation_token)
    else:
        # All projects have been retrieved
        get_projects_response = None

Produces this error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_19/1987585116.py in <cell line: 19>()
     18 index = 0
     19 while get_projects_response is not None:
---> 20     for project in get_projects_response.value:
     21         pprint.pprint("[" + str(index) + "] " + project.name)
     22         index += 1

AttributeError: 'list' object has no attribute 'value'

In this environment:

ArcGIS Notebooks Server Information: You are using Jupyter notebook.

The version of the notebook server is: 6.4.12 The server is running on this version of Python: Python 3.9.16 (main, Jan 11 2023, 16:05:54) [GCC 11.2.0]

Current Kernel Information: Python 3.9.16 (main, Jan 11 2023, 16:05:54) Type 'copyright', 'credits' or 'license' for more information IPython 7.34.0 -- An enhanced Interactive Python. Type '?' for help.

To solve this error you have to remove the ".value" on get_projects_response on line 20.

while get_projects_response is not None:
    for project in get_projects_response:

rather than the current:

while get_projects_response is not None:
    for project in get_projects_response.value:

Would be cool if the readme.md could get updated to improve the onboarding experience for this package.

uncheckederror avatar Aug 17 '23 20:08 uncheckederror

It seems that the Getting Started code is expecting a specific kind of object, but when I run it, I get list.

After printing all of the projects in my org I get this error:


AttributeError Traceback (most recent call last) /tmp/ipykernel_19/114958425.py in <cell line: 19>() 21 pprint.pprint("[" + str(index) + "] " + project.name) 22 index += 1 ---> 23 if get_projects_response.continuation_token is not None and get_projects_response.continuation_token != "": 24 # Get the next page of projects 25 get_projects_response = core_client.get_projects(continuation_token=get_projects_response.continuation_token)

AttributeError: 'list' object has no attribute 'continuation_token'

To resolve this error, I removed the outer while loop and the if/else statement that was checking for the continuation_token resulting in this code:

for project in get_projects_response:
    pprint.pprint("[" + str(index) + "] " + project.name)
    index += 1

Whereas before it was:

while get_projects_response is not None:
    for project in get_projects_response:
        pprint.pprint("[" + str(index) + "] " + project.name)
        index += 1
    if get_projects_response.continuation_token is not None and get_projects_response.continuation_token != "":
        # Get the next page of projects
        get_projects_response = core_client.get_projects(continuation_token=get_projects_response.continuation_token)
    else:
        # All projects have been retrieved
        get_projects_response = None

uncheckederror avatar Aug 17 '23 20:08 uncheckederror

I'm also looking for a way to get the continuation_token as this is required when you have a big list (like when you are going to get the list of builds). I have not found yet a way around it using the library. Maybe the only option is to use requests directly.

apostoloss avatar Sep 14 '23 06:09 apostoloss

Thanks @uncheckederror I was wondering why example was not working

I created a PR to change the README to help others https://github.com/microsoft/azure-devops-python-api/pull/474

asrindayananda avatar Nov 18 '23 10:11 asrindayananda