Пример #1
0
def getPortalIdByNameAndType(name, typeName):

    wherestring = 'title:"{}" AND type:"{}" AND owner:"{}"'.format(
        name, typeName, Security.GetUsername())
    results = searchPortalItems(wherestring)
    returnID = None
    if len(results) > 0:
        returnID = results[0]["id"]
        print(typeName + " exists, id: " + returnID)
    else:
        print(typeName + " does not exist")
    return returnID
Пример #2
0
def main():
    print("Appending data to feature")

    portalUrl = "https://www.arcgis.com"
    username = Security.GetUsername()

    #upload zip gdb
    fileName = "EGT19_MarkantObject_Deel2.gdb.zip"
    objectName = os.path.split(fileName)[-1]
    fileType = "File Geodatabase"

    print("Check if gdb already exists")
    currentID = getPortalIdByNameAndType(objectName, fileType)

    if currentID != None:
        addUrl = '{}/sharing/rest/content/users/{}/items/{}/update'.format(
            portalUrl, username, currentID)
    else:
        addUrl = "{}/sharing/rest/content/users/{}/addItem".format(
            portalUrl, username)

    filesUp = {
        "file": open(os.path.join(os.path.split(__file__)[0], fileName), 'rb')
    }

    token = Security.GenerateToken()

    params = {}
    params["f"] = "json"
    params["token"] = token
    params["filename"] = fileName
    params["type"] = fileType
    params["title"] = objectName
    params["tags"] = "EGT19,REST,MarkantObject"
    params[
        "description"] = "Deel 2 van de Top10NL MarkantObject records voor de Esri GISTech Devday 2019"

    print("Start uploading {} to Arcgis Online".format(fileName))

    response = requests.post(addUrl, params, files=filesUp)
    itemPartJSON = response.json()

    if "success" in itemPartJSON:
        zipid = itemPartJSON['id']

    print("Zipfile added to content: {}".format(zipid))

    #appendparameters
    layerUrl = "https://services.arcgis.com/emS4w7iyWEQiulAb/arcgis/rest/services/EGT19_REST_MarkantObject/FeatureServer/0"

    params = {}
    params["f"] = "json"
    params["token"] = token
    response = requests.post(layerUrl, params)
    layerInfo = response.json()

    dctSource, fields = getFieldMappings(layerInfo)

    #APPEND
    print("Appending data to: {}".format(layerInfo["name"]))

    appendUrl = "{}/append".format(layerUrl)

    params = {}
    params["f"] = "json"
    params["token"] = token
    params["sourceTableName"] = "MarkantObject_Append"
    params["fieldMappings"] = json.dumps(dctSource)
    params["upsert"] = False
    params["skipUpdates"] = False
    params["useGlobalIds"] = False
    params["skipInserts"] = False
    params["updateGeometry"] = True
    params["appendItemId"] = zipid
    params["appendUploadFormat"] = "filegdb"
    params["rollbackOnFailure"] = True
    params["appendFields"] = json.dumps(fields)

    response = requests.post(appendUrl, params)
    append = response.json()
    statusUrl = append["statusUrl"]
    #JOBSTATUS
    status = "InProgress"
    while (status == "InProgress" or status == "Pending"):
        print("Status is {}, sleeping for 1 second".format(status))
        time.sleep(1)
        params = {}
        params["f"] = "json"
        params["token"] = token
        try:
            response = requests.post(statusUrl, params)
            status = response.json()["status"]
        except Exception as e:
            time.sleep(1)
            response = requests.post(statusUrl, params)
            status = response.json()["status"]
            pass

    print("Status is: {}".format(status))
    if status != "Completed":
        if status == "Failed":
            print("Failed updating data")
        else:
            print("Not completed with status code: {}".format(status))
    else:
        print("Succesfully updated layer {}".format(layerInfo["name"]))