#### FeatureSharingDraft w/ TimeZone #Only modify variables in the main() function import arcpy import os import xml.dom.minidom as DOM import codecs import xml.etree.ElementTree as ET # Function to enable extensions def enable_extensions(sddraftPath, soe): # Read the sddraft xml. doc = DOM.parse(sddraftPath) # Find all elements named TypeName. This is where the server object extension # (SOE) names are defined. typeNames = doc.getElementsByTagName('TypeName') for typeName in typeNames: # Get the TypeName we want to enable. if typeName.firstChild.data == soe: extension = typeName.parentNode for extElement in extension.childNodes: # Enable Feature Access. if extElement.tagName == 'Enabled': extElement.firstChild.data = 'true' # Write to sddraft. f = open(sddraftPath, 'w') doc.writexml(f) f.close() # Function to configure properties of an extension # soe = extension for which properties have to be added def enable_configproperties(sddraftPath, soe, property_set): # Read the sddraft xml. doc = DOM.parse(sddraftPath) # Find all elements named TypeName. This is where the server object extension # (SOE) names are defined. typeNames = doc.getElementsByTagName('TypeName') for typeName in typeNames: # Get the TypeName we want to enable. if typeName.firstChild.data == soe: extension = typeName.parentNode # prp = extension.childNodes.getElementsByTagNameNS('PropertyArray') for extElement in extension.childNodes: if extElement.tagName == 'Definition': for definition in extElement.childNodes: if definition.tagName == 'ConfigurationProperties': for config_prop in definition.childNodes: if config_prop.tagName == 'PropertyArray': for prop in property_set: prop_set = doc.createElement("PropertySetProperty") attr = doc.createAttribute("xsi:type") attr.value = "typens:PropertySetProperty" prop_set.setAttributeNode(attr) prop_key = doc.createElement("Key") txt = doc.createTextNode(prop["key"]) prop_key.appendChild(txt) prop_set.appendChild(prop_key) prop_value = doc.createElement("Value") attr = doc.createAttribute("xsi:type") attr.value = "xs:string" prop_value.setAttributeNode(attr) txt = doc.createTextNode(prop["value"]) prop_value.appendChild(txt) prop_set.appendChild(prop_value) config_prop.appendChild(prop_set) # Write to sddraft f = open(sddraftPath, 'w') doc.writexml(f) f.close() # main() if __name__ == "__main__": #Set variables username = "your_username" pw = "your_password" outdir = r"C:\...." service = "ArcGIS Online Hosted Feature Service Name" pro_project = r"C:\...\your_project_name.aprx" #Overwrite the output arcpy.env.overwriteOutput = True # Connecting to the target portal arcpy.SignInToPortal("https://arcgis.com", username, pw) # Set output file names sddraft_filename = service + ".sddraft" sddraft_output_filename = os.path.join(outdir, sddraft_filename) #Access maps in the Pro project aprx = arcpy.mp.ArcGISProject(pro_project) m = aprx.listMaps()[0] # use if you want to share selected layers # layers = m.listLayers() # lyr = layers[0] #Specific to on-premise Enterprise deployements #in_server = "federated server url" #sddraft.federatedServerUrl = in_server #sddraft.copyDataToServer = False #sddraft.exportToSDDraft("location and name of sddraft") #Online - update summary through use limitations with your strings sddraft = m.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", service) sddraft.summary = "My Summary" sddraft.tags = "My Tags" sddraft.description = "My Description" sddraft.credits = "My Credits" sddraft.useLimitations = "My Use Limitations" sddraft.overwriteExistingService = True # Create Service Definition Draft file sddraft.exportToSDDraft(sddraft_output_filename) # Set timezone - obtain valid dateFieldsTimezoneID values with arcpy.time.ListTimeZones() property_set = [{ "key": "dateFieldsRespectsDayLightSavingTime", "value": "true" }, { "key": "dateFieldsTimezoneID", "value": "Pacific Standard Time" }] # To set time zone on hosted feature service, soe = "FeatureServer" enable_configproperties(sddraftPath=sddraft_output_filename, soe="FeatureServer", property_set=property_set) # Enable extensions on server enable_extensions(sddraftPath=sddraft_output_filename, soe="FeatureServer") # enable_extensions(sddraftPath, "VersionManagementServer") # enable_extensions(sddraftPath, "LRServer") # Stage Service sd_filename = service + ".sd" sd_output_filename = os.path.join(outdir, sd_filename) arcpy.StageService_server(sddraft_output_filename, sd_output_filename) # Share to portal print("Uploading Service Definition...") arcpy.UploadServiceDefinition_server(sd_output_filename, "My Hosted Services")