Python 上传服务并覆盖同名服务
import
arcpy, os, sysimport
xml.dom.minidom as DOMarcpy.env.overwriteOutput=True# Update these variables# The tempPath variable is a relative path which is the same directory# this script is saved to. You can modify this value to a path on your# system to hold the temporary files.serviceName = "importantPoints"tempPath = sys.path[0]path2MXD = r"C:\path2MXD\pts.mxd"userName = " "passWord = " "# All paths are built by joining names to the tempPathSDdraft = os.path.join(tempPath,"tempdraft.sddraft")newSDdraft = os.path.join(tempPath,"updatedDraft.sddraft")SD =os.path.join(tempPath, serviceName
+".sd")mxd =arcpy.mapping.MapDocument(path2MXD)arcpy.mapping.CreateMapSDDraft(mxd, SDdraft, serviceName,"MY_HOSTED_SERVICES")# Read the contents of the original SDDraft into an xml parserdoc =DOM.parse(SDdraft)# The follow 5 code pieces modify the SDDraft from a new MapService# with caching capabilities to a FeatureService with Query,Create,# Update,Delete,Uploads,Editing capabilities. The first two code# pieces handle overwriting an existing service. The last three pieces# change Map to Feature Service, disable caching and set appropriate# capabilities. You can customize the capabilities by removing items.# Note you cannot disable Query from a Feature Service.tagsType = doc.getElementsByTagName('Type')for
tagType in
tagsType: iftagType.parentNode.tagName
=='SVCManifest': iftagType.hasChildNodes(): tagType.firstChild.data="esriServiceDefinitionType_Replacement"tagsState = doc.getElementsByTagName('State')for
tagState in
tagsState: iftagState.parentNode.tagName
=='SVCManifest': iftagState.hasChildNodes(): tagState.firstChild.data="esriSDState_Published"# Change service type from map service to feature servicetypeNames = doc.getElementsByTagName('TypeName')for
typeName in
typeNames: iftypeName.firstChild.data
=="MapServer": typeName.firstChild.data="FeatureServer"#Turn off cachingconfigProps = doc.getElementsByTagName('ConfigurationProperties')[0]propArray = configProps.firstChildpropSets = propArray.childNodesfor
propSet in
propSets: keyValues=propSet.childNodes forkeyValue
inkeyValues: ifkeyValue.tagName
=='Key': ifkeyValue.firstChild.data
=="isCached": keyValue.nextSibling.firstChild.data="false"#Turn on feature access capabilitiesconfigProps = doc.getElementsByTagName('Info')[0]propArray = configProps.firstChildpropSets = propArray.childNodesfor
propSet in
propSets: keyValues=propSet.childNodes forkeyValue
inkeyValues: ifkeyValue.tagName
=='Key': ifkeyValue.firstChild.data
=="WebCapabilities": keyValue.nextSibling.firstChild.data="Query,Create,Update,Delete,Uploads,Editing"# Write the new draft to diskf =open(newSDdraft,'w')doc.writexml( f )f.close()# Analyze the serviceanalysis = arcpy.mapping.AnalyzeForSD(newSDdraft)if
analysis['errors']=={}: # Stage the service arcpy.StageService_server(newSDdraft, SD) # Upload the service. The OVERRIDE_DEFINITION parameter allows you to override the # sharing properties set in the service definition with new values. In this case, # the feature service will be shared to everyone on ArcGIS.com by specifying the # SHARE_ONLINE and PUBLIC parameters. Optionally you can share to specific groups # using the last parameter, in_groups. arcpy.UploadServiceDefinition_server(SD,"My Hosted Services", serviceName, "", "", "",
"", "OVERRIDE_DEFINITION","SHARE_ONLINE", "PUBLIC","SHARE_ORGANIZATION",
"") print"Uploaded and overwrote service"else: # If the sddraft analysis contained errors, display them and quit. printanalysis['errors']
原文http://blogs.esri.com/esri/arcgis/2013/04/23/updating-arcgis-com-hosted-feature-services-with-python/
转载自:https://blog.csdn.net/lvdou25181/article/details/23912603


