Select to view content in your preferred language

Python Script to Auto update Web Map from Arc Pro project

142
1
yesterday
MatthewAllen
Occasional Contributor

I would like to create a python Script to automatically update my web map from my ArcPro project.

I have a ArcPro project that I manually update the web map right now.

I also used experience builder to create a user-friendly web map that uses the data from my published web map.

I have attached my first try at a script, but it doesn't work. Any help on how to fix the script would be appreciated.

0 Kudos
1 Reply
TonyAlmeida
MVP Regular Contributor

1st Script: Double check you are signed in and correct portal connection

arcpy.server.UploadServiceDefinition(sd, portal_url)

print(arcpy.GetActivePortalURL())

Change raise Exception(f"Map '{map_name}' not found.")

to

sddraft = os.path.join(sharing_draft_folder, f"{service_name}.sddraft")
sd = os.path.join(sharing_draft_folder, f"{service_name}.sd")

print(f"{service_name} published successfully!")

 

And for the Exception try,

except Exception:
print("Publishing failed.")
print(arcpy.GetMessages(0))
print(arcpy.GetMessages(1))
print(arcpy.GetMessages(2))
raise

 

2nd script:

You are missing your drive letter, PROJECT = r"\GISdata\ArcGISPro_Projects\SamplePublishArcPly.aprx", something like, PROJECT = r"C:\GISdata\ArcGISPro_Projects\SamplePublishArcPly.aprx"

 

before C:\GIS\Logs, add 

os.makedirs(r"C:\GIS\Logs", exist_ok=True)
os.makedirs(OUTPUT_FOLDER, exist_ok=True) 

 

Error Handling try

try:
...
except Exception as ex:
logging.error(ex)
logging.error(arcpy.GetMessages())
raise

import arcpy
import os

aprx_path = r"C:\GISdata\ArcGISPro_Projects\SamplePublishArcPly.aprx"

map_name = "SampleAutoPublish"
service_name = "SampleAutoPublish"

portal_url = "https://www.arcgis.com"
username = "xyzx"
password = "yyyy"

sharing_draft_folder = r"C:\GIS\Publishing"

description = "Sample Auto Publish Feature Layer"
tags = "GIS, Caldwell County, Sample"

arcpy.SignInToPortal(portal_url, username, password)

aprx = arcpy.mp.ArcGISProject(aprx_path)

maps = aprx.listMaps(map_name)

if not maps:
    raise Exception(f"Map '{map_name}' not found.")

map_obj = maps[0]

sharing_draft = map_obj.getWebLayerSharingDraft(
    "HOSTING_SERVER",
    "FEATURE",
    service_name
)

sharing_draft.summary = description
sharing_draft.description = description
sharing_draft.tags = tags
sharing_draft.overwriteExistingService = True

os.makedirs(sharing_draft_folder, exist_ok=True)

sddraft = os.path.join(
    sharing_draft_folder,
    f"{service_name}.sddraft"
)

sd = os.path.join(
    sharing_draft_folder,
    f"{service_name}.sd"
)

try:

    print("Creating SDDraft...")
    sharing_draft.exportToSDDraft(sddraft)

    print("Staging service...")
    arcpy.server.StageService(sddraft, sd)

    print("Uploading service...")
    arcpy.server.UploadServiceDefinition(
        sd,
        "HOSTING_SERVER"
    )

    print(f"{service_name} published successfully!")

except Exception:

    print("Publishing failed.")
    print(arcpy.GetMessages(0))
    print(arcpy.GetMessages(1))
    print(arcpy.GetMessages(2))
    raise

2nd script:

Also, Double check you are signed in and correct portal connection

 arcpy.server.UploadServiceDefinition(sd, PORTAL)

print(arcpy.GetActivePortalURL())

 

import arcpy
import os
import datetime
import logging

PROJECT = r"C:\GISdata\ArcGISPro_Projects\SamplePublishArcPly.aprx"
MAP_NAME = "SampleAutoPublish"
SERVICE_NAME = "SampleAutoPublish"

OUTPUT_FOLDER = r"C:\GIS\Publishing"
LOG_FOLDER = r"C:\GIS\Logs"

PORTAL = "https://www.arcgis.com"
USERNAME = "your_username"
PASSWORD = "your_password"

os.makedirs(OUTPUT_FOLDER, exist_ok=True)
os.makedirs(LOG_FOLDER, exist_ok=True)

logging.basicConfig(
    filename=os.path.join(LOG_FOLDER, "Publish.log"),
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)

try:

    arcpy.SignInToPortal(PORTAL, USERNAME, PASSWORD)

    aprx = arcpy.mp.ArcGISProject(PROJECT)

    maps = aprx.listMaps(MAP_NAME)

    if not maps:
        raise Exception(f"Map '{MAP_NAME}' not found.")

    m = maps[0]

    sharing_draft = m.getWebLayerSharingDraft(
        "HOSTING_SERVER",
        "FEATURE",
        SERVICE_NAME
    )

    sharing_draft.overwriteExistingService = True

    sddraft = os.path.join(OUTPUT_FOLDER, f"{SERVICE_NAME}.sddraft")
    sd = os.path.join(OUTPUT_FOLDER, f"{SERVICE_NAME}.sd")

    for f in [sddraft, sd]:
        if os.path.exists(f):
            os.remove(f)

    sharing_draft.exportToSDDraft(sddraft)

    arcpy.server.StageService(sddraft, sd)

    arcpy.server.UploadServiceDefinition(
        sd,
        "HOSTING_SERVER"
    )

    logging.info(f"{SERVICE_NAME} successfully overwritten.")

    print(f"Completed: {datetime.datetime.now()}")

except Exception as ex:

    logging.error(str(ex))
    logging.error(arcpy.GetMessages())

    print("Publish failed.")
    print(ex)
    print(arcpy.GetMessages())

 

 

0 Kudos