Skip to main content
Skip table of contents

Python

The following examples have been tested with Python 3. In order to authenticate with Pathfinder Server you need to provide an API Key.

Check connectivity with PFS (authenticated and non-authenticated endpoints)

PY
import json
from types import SimpleNamespace
from urllib.error import HTTPError
import requests
import urllib3

baseUrl = "https://localhost:8087/api/v1.0/" # <- address of your Pathfinder-Server
apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # <- put your API-key here

endpointStatus = "info/status"
endpointPing = "info/status/ping"

# get a deserialized result from PFS
def pfs_get(endpoint: str):
    try:
        get_result = requests.get(baseUrl + endpoint,
                                  verify=False, headers={'Authorization': 'Bearer ' + apiKey})
    except HTTPError as http_error:
        print(f"HTTP error occured: {http_error}")
    except Exception as exc:
        print(f"Exception occured: {exc}")
    else:
        if get_result.status_code == 200:
            result = json.loads(
                get_result.text, object_hook=lambda d: SimpleNamespace(**d))
            return result
        elif get_result.status_code == 401:
            print("Authentication error (401)")
            return
        else:
            print(f"An error occured. Status code {get_result.status_code}")
            return

def get_success(object):
    if object:
        return "OK"
    else:
        return "Failed"

def main():
    # suppresses warning about self signed certificate, don't use in production
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    print("Call without authorization...")
    print(get_success(pfs_get(endpointStatus)))
    print("Call with authorization...")
    print(get_success(pfs_get(endpointPing)))
    return 0

if __name__ == "__main__":
    main()

Example output:

Call without authorization...
OK
Call with authorization...
OK

Display the network paths of a port

PY
import json
from types import SimpleNamespace
from urllib.error import HTTPError
import requests
import urllib3

baseUrl = "https://localhost:8087/api/v1.0/" # <- address of your Pathfinder-Server
apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # <- put your API-key here

endpointNetworkPaths = "infrastructure/ports/{portId}/networkpath"

# get a deserialized result from PFS
def pfs_get(endpoint: str):
    try:
        get_result = requests.get(baseUrl + endpoint,
                                  verify=False, headers={'Authorization': 'Bearer ' + apiKey})
    except HTTPError as http_error:
        print(f"HTTP error occured: {http_error}")
    except Exception as exc:
        print(f"Exception occured: {exc}")
    else:
        if get_result.status_code == 200:
            result = json.loads(
                get_result.text, object_hook=lambda d: SimpleNamespace(**d))
            return result
        elif get_result.status_code == 401:
            print("Authentication error (401)")
            return
        else:
            print(f"An error occured. Status code {get_result.status_code}")
            return

# output details of a nwp
def print_nwp_info(nwp):
    print(f"Id:                {nwp.NetworkPathId}")
    print(f"Name:              {nwp.NetworkPathName}")
    print(f"Start-Location:    {nwp.StartComponentInfo.LocationPath}")
    print(f"Start-Device:      {nwp.StartComponentInfo.ComponentPath}")
    print(f"Start-Port:        {nwp.StartPortName} #{nwp.StartPortNumber}")
    print(f"End-Location:      {nwp.EndComponentInfo.LocationPath}")
    print(f"End-Device:        {nwp.EndComponentInfo.ComponentPath}")
    print(f"End-Port:          {nwp.EndPortName} #{nwp.EndPortNumber}")
    print(f"End-Room:          {nwp.EndComponentInfo.RoomName}")

def main():
    # suppresses warning about self signed certificate, don't use in production
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    portId = 26375
    networkPaths = pfs_get(endpointNetworkPaths.format(portId=portId))
    if (networkPaths):
        nwpCount = len(networkPaths.Items)
        if nwpCount > 0:
            print(f"Number of network paths: {nwpCount}")
            for nwp in networkPaths.Items:
                print_nwp_info(nwp)
            return 0
        else:
            print(f"No network path found for port {portId}")
            return 0
    return -1

if __name__ == "__main__":
    main()

Example output:

Number of network paths: 1
Id: 149
Name: NWP Port 17 <-> LAN
Start-Location: Universität>Rechenzentrum>EG-EG>EVT-0001
Start-Device: RACK-01>SW-Nortel ERS 4548 GT-PWR-10
Start-Port: Port 17 #17
End-Location: Universität>Rechenzentrum>EG-EG>0010-0010
End-Device: PC-121
End-Port: LAN #1
End-Room: 0010

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.