# ---------------------------------------------------------------------------
# Script: Creating an Service Definition File and Overwritting Existing Feature Service on ArcGIS Online
# Description: This script does the following:
# (1) Sets up the variables
# (2) Creates an SD File
# (3) Overwrites Existing Feature Service
#
# Date: 9/12/2017
#
# ---------------------------------------------------------------------------
import arcpy
import os, sys, string, time
from arcgis.gis import GIS
# Set the date.
Date = time.strftime("%m-%d-%Y", time.localtime())
# Set the time.
Time = time.strftime("%I:%M:%S %p", time.localtime())
print ("Process started at " + str(Date) + " " + str(Time) + "." + "\n")
### Start setting variables
# Set the path to the project
prjPath = r"J:\ENGSYS\GIS_Testing\ArcGISOnline_PublishingSrvc\TestScript.aprx"
# Update the following variables to match:
# Feature service/SD name in arcgis.com, user/password of the owner account
sd_fs_name = "TestDocumentPortal_WFL1"
portal = "https://XXXX.maps.arcgis.com" # Can also reference a local portal
user = "XXXXX"
password = "XXXX"
# Set sharing options
shrOrg = True
shrEveryone = False
shrGroups = ""
### End setting variables
# Local paths to create temporary content
relPath = sys.path[0]
sddraft = os.path.join(relPath, "WebUpdate.sddraft")
sd = os.path.join(relPath, "WebUpdate.sd")
# Create a new SDDraft and stage to SD
print("Creating SD file")
arcpy.env.overwriteOutput = True
prj = arcpy.mp.ArcGISProject(prjPath)
mp = prj.listMaps()[0]
arcpy.mp.CreateWebLayerSDDraft(mp, sddraft, sd_fs_name, 'MY_HOSTED_SERVICES', 'FEATURE_ACCESS','', True, True)
arcpy.StageService_server(sddraft, sd)
print("Connecting to {}".format(portal))
gis = GIS(portal, user, password)
# Find the SD, update it, publish /w overwrite and set sharing and metadata
print("Search for original SD on portal...")
sdItem = gis.content.search("{} AND owner:{}".format(sd_fs_name, user), item_type="Service Definition")[0]
print("Found SD: {}, ID: {} \n Uploading and overwriting...".format(sdItem.title, sdItem.id))
sdItem.update(data=sd)
print("Overwriting existing feature service...")
fs = sdItem.publish(overwrite=True)
if shrOrg or shrEveryone or shrGroups:
print("Setting sharing options...")
fs.share(org=shrOrg, everyone=shrEveryone, groups=shrGroups)
print("Finished updating: {} - ID: {}".format(fs.title, fs.id))
print ("Process completed at " + str(Date) + " " + str(Time) + ".")
My script above runs successfully.
I am trying to add to it by emailing a specified user if it fails. I have read multiple samples, but have not gotten one to work. Anyone have something a novice python user could use?
Why don't you wrap the code in a try, except, finally... and then use something like this to send an email. This works with Outlook.
import smtplib
from email.message import EmailMessagedef sendEmail(fromWriter,toReader,msgSubject,body,priority= '0'):
msg = EmailMessage()
msg.set_content(body)
msg['Subject'] = msgSubject
msg['From'] = fromWriter
msg['To'] = toReader
msg['X-Priority'] = priority
s = smtplib.SMTP('your mail server url')
s.send_message(msg)
s.quit()
returnif __name__ == '__main__':
fromWriter = 'from@company.com'
toReader = ['to@company.com']
msgSubject = 'This is a test'
body = """
This is a test email.
"""
sendEmail(fromWriter,toReader,msgSubject,body)