Get business service dependencies with pdpyras

Hi,
I just learned about pdpyras and would like to use it for the convenience it brings. One of my first tasks is to get the business service hierarchy we built in PD.

I am able to get the data via python requests from https://api.pagerduty.com
/service_dependencies/business_services/{id}.
(e.g. response = requests.request(“GET”, url, headers=headers))

Upon trying this in pdpyras…
df_bsvcs = pd.DataFrame(session.rget(’/service_dependencies/business_services/ABCD1EF’))

I receive the following PDClientError:
PDClientError: Cannot extract object; expected top-level property “ABCD1EF”, but could not find it in the response schema. Response body={“relationships”:[{“dependent_service”:{“id”:“ABCD1EF”,“relationships”:null,“type”:"business_servic

It’s probably my unfamiliarity with pdpyras. Appreciate any help.
Thanks.
-Emmanuel-

Hello Emmanuel,

I think what is happening is that the response for /service_dependencies/business_services/ doesn’t return the id of the business service being queried in the response, which rget expects in order to create the dictionary.

I believe it would work OK if you just didn’t use the rget method.
This might help you :
https://pagerduty.github.io/pdpyras/#basic-usage

Please review Basic getting and consider just constructing a dictionary with your own code rather than using rget . Of course this depends on your use case.

Cheers

Emmanuel,

Glad you’ve found pdpyras! Here’s a simple example that may help you get started.

staticBS = 'P123456'

try:
    response = session.get('/service_dependencies/business_services/'+staticBS)

    if response.ok:
        rels = response.json()['relationships']

    for svcDep in rels:
        print('---------START SERVICE DEP---------')
        #print(svcDep)

        relID = svcDep['id']

        depService = svcDep['dependent_service']
        print(depService)

       # iterate here into business/technical dep relationship

        supService = svcDep['supporting_service']
        print(supService)

       # iterate here into business/technical dep relationship

        print('---------END SERVICE DEP---------')

except pdpyras.PDClientError as e:
    print(e.response)
    print(e.response.url)

Doug

Doug,
Thanks for your response and taking time to share an example.
Very helpful in moving me forward with pdpyras.
-Emmanuel-

Thanks for pointing this out Chiedu.