Im trying to troubleshoot this script:
It failes at arcpy.StageService_server (Line 155)
I created a simple mxd to run for test with one point layer.
Some Norwegian words inside the script just ignore them
agol_brukernavn = 'xxx' # The username
agol_passord = 'xxx' # The password
What am I missing here??
---------------------------------------------------------------------
# -*- coding: mbcs -*-
# -*- coding: iso-8859-1 -*-
###!/usr/bin/python
'''
# -*- coding: mbcs -*-
# -*- coding: iso-8859-15 -*-
# -*- coding: iso-8859-1 -*-
# coding: iso-8859-1
Script som automatiserer oppdateringen av en ArcGIS Online Hosted Feature
Service.
1) Bytt ut:
stien til MXDen = path2MXD
tjenestenavnet = serviceName
brukernavn
passord til din organisasjonskonto så vil skriptet kjøre.
Script og mxd i samme mappe!
CD DOS til samme mappe som script og mxd
OBS! Hvis ikke ArcGISConnection.exe kjører kan du få en feilmelding om at 'My
Hosted Services' ikke fins. Dette kan løses ved å ha ArcMap kjørende (se NIM091175
for bug angaænde dette).
Videre oppfølging skrive loggfil for status
Logg:
2013.07.04 - Første utgave
Trøbbel med norske tegn: Skript feilet: 'ascii' codec can't decode byte 0xe5 in position 6: ordinal not in range(128).
Workaround remove all norwegian characters
Valgt # -*- coding: iso-8859-15 -*- se http://no.wikipedia.org/wiki/ISO_8859
Foruten Unicode finnes de nordiske bokstavene �?�?�?�?�? og äåæöø (i den rekkefølgen) i følgende tegnsett:
ISO-8859-1, ISO-8859-4, ISO-8859-9, ISO-8859-10, ISO-8859-14, ISO-8859-15 og ISO-8859-16.
Bare de to siste av denne tegnsettfamilien inneholder eurotegnet �?�..encode('iso8859_10')u foran teksstrenger setter den til unicode literal bnyttes på overskrifter
2013.07.08 Lang runde med testing på write f se step X
Feil ble løst ved å legge Layer inn i nytt tomt mxd Dokument, se nærmere på hvordan denne type feil kan identifiseres.
'''
import arcpy, os , sys
import geodatamail
import xml.dom.minidom as DOM
import codecs
# Step 1 Hovedvariabler
# PubAGOLTEST
arcpy.env.overwriteOutput = True
serviceName = 'TestVeglogg'
tempPath= os.path.dirname(sys.argv[0]) # Henter mappen som scriptet ligger i
##tempPath = geodatamail.temp_dir() # Henter mappen som scriptet ligger i
##path2MXD = os.path.join(tempPath, 'PubAGOLTEST.mxd') # Denne peker på en mxd som ligger i samme mappe som scriptet
path2MXD = os.path.join(tempPath, 'AGOLPUBLISH10.2.mxd') # Denne peker på en mxd som ligger i samme mappe som scriptet
#Bytt ut med real input
agol_brukernavn = 'xxx'
agol_passord = 'xxx'
arcpy.env.workspace = tempPath
# Path replaced by arcpy.env.workspace
##SDdraft = os.path.join(tempPath, r'tmpdraft.sddraft')
##newSDdraft = os.path.join(tempPath, r'opddraft.sddraft')
##SD = os.path.join(tempPath, serviceName + r'.sd')
SDdraft = 'tmpdraft.sddraft'
newSDdraft = 'opddraft.sddraft'
SD = 'opddraft.sd'
inServer = 'MY_HOSTED_SERVICES'
arcpy.AddMessage('Variables input')
try:
# Step 2 Logg på ArcGIS Online og lag en SDdraft (utkast til karttjeneste)
arcpy.SignInToPortal_server(agol_brukernavn, agol_passord, 'http://www.arcgis.com/')
mxd = arcpy.mapping.MapDocument(path2MXD)
arcpy.mapping.CreateMapSDDraft(mxd, SDdraft, serviceName, inServer)
del mxd
arcpy.AddMessage(' Signed in on Arcgis Online with user: ' + agol_brukernavn)
arcpy.AddMessage(' Path: ' + tempPath)
arcpy.AddMessage(' Prosjekt: ' + str(path2MXD))
arcpy.AddMessage(' Draft: ' + str(SDdraft))
arcpy.AddMessage(' Servicename: ' + str(serviceName))
# Les karttjenesedokumentet inn i en XML-parser
# add capabilities
doc = DOM.parse(SDdraft)
## arcpy.AddMessage(doc.toprettyxml())
#Step 3a Gå igjennom dokumentet
arcpy.AddMessage(' Går igjennom MXD: ' + str(path2MXD))
tagsType = doc.getElementsByTagName('Type')
for tagType in tagsType:
if tagType.parentNode.tagName == 'SVCManifest':
if tagType.hasChildNodes():
tagType.firstChild.data = 'esriServiceDefinitionType_Replacement'
tagsState = doc.getElementsByTagName('State')
for tagState in tagsState:
if tagState.parentNode.tagName == 'SVCManifest':
if tagState.hasChildNodes():
tagState.firstChild.data = 'esriSDState_Published'
#Step 3b Bytt fra vanlig karttjeneste til en som støtter redigering
arcpy.AddMessage(' Bytter fra vanlig karttjeneste til en som støtter redigering')
typeNames = doc.getElementsByTagName('TypeName')
for typeName in typeNames:
if typeName.firstChild.data == 'MapServer':
typeName.firstChild.data = 'FeatureServer'
#Step 3c Skru på redigeringsmuligheter
arcpy.AddMessage(' Skru på redigeringsmuligheter')
configProps = doc.getElementsByTagName('Info')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
keyValues = propSet.childNodes
for keyValue in keyValues:
if keyValue.tagName == 'Key':
if keyValue.firstChild.data == 'WebCapabilities':
keyValue.nextSibling.firstChild.data = 'Query,Create,Update,Delete,Uploads,Editing'
#Step 3d Skru av caching
arcpy.AddMessage(' Skrur av caching')
configProps = doc.getElementsByTagName('ConfigurationProperties')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
keyValues = propSet.childNodes
for keyValue in keyValues:
if keyValue.tagName == 'Key':
if keyValue.firstChild.data == 'isCached':
keyValue.nextSibling.firstChild.data = 'false'
#Step 4 Lagre den modifiserte karttjenesten
arcpy.AddMessage(' Lagrer den modifiserte karttjenesten: ' + newSDdraft)
# Write the new draft to disk
# output to a new sddraft
try:
if os.path.exists(newSDdraft): os.remove(newSDdraft)
f = open(newSDdraft, 'w+')
doc.writexml(f)
f.close()
arcpy.AddMessage( ' TEST Step3 OK')
#Step 5 Analyser kartdokumentet før det publiseres (påkrevd)
try:
arcpy.AddMessage(' Analyserer kartdokumentet før det publiseres (påkrevd)')
analysis = arcpy.mapping.AnalyzeForSD(newSDdraft)
arcpy.AddMessage(' Test step 4 OK')
if analysis['errors'] == {}:
# Lager karttjenestedokument ut fra draften
arcpy.AddMessage(' Test step 5 Stage before') # Feiler her 20140130
arcpy.StageService_server(newSDdraft, SD)
arcpy.AddMessage(' Test step 6 Stage after')
# Laster opp tjenesten. Her settes det om tjenesten skal være offentlig
# tilgjengelig eller om den skal bare være synlig for organisasjonen.
arcpy.AddMessage(' Starter å laste opp tjenesten')
arcpy.UploadServiceDefinition_server(SD, inServer, serviceName,
'', '', '', '', 'OVERRIDE_DEFINITION',
'SHARE_ONLINE', 'PRIVATE',
'SHARE_ORGANIZATION', '')
##geodatamail.sendEmail('minmail@minorganisasjon.no','Oppdaterte karttjeneste: {0}'.format(serviceName), '')
arcpy.AddMessage('Tjeneste - ferdig lastet opp')
else:
arcpy.AddMessage(analysis['errors'])
##geodatamail.sendEmail('minmail@minorganisasjon.no','Feil i kartdokumentet', 'Feilmelding:\n{0}'.format(analysis['errors']))
except:
arcpy.AddMessage( ' Feil Lagring doc')
except:
arcpy.AddMessage(' Error on DocWrite')
except Exception as feil:
arcpy.AddMessage('Skript feilet: {0}'.format(feil))
##geodatamail.sendEmail('minmail@minorganisasjon.no', 'Skript for oppdatering av {0} feilet'.format(serviceName), 'FEILMELDING: \n{0}'.format(feil))
It failes at arcpy.StageService_server (Line 155)
I created a simple mxd to run for test with one point layer.
Some Norwegian words inside the script just ignore them
agol_brukernavn = 'xxx' # The username
agol_passord = 'xxx' # The password
What am I missing here??
---------------------------------------------------------------------
# -*- coding: mbcs -*-
# -*- coding: iso-8859-1 -*-
###!/usr/bin/python
'''
# -*- coding: mbcs -*-
# -*- coding: iso-8859-15 -*-
# -*- coding: iso-8859-1 -*-
# coding: iso-8859-1
Script som automatiserer oppdateringen av en ArcGIS Online Hosted Feature
Service.
1) Bytt ut:
stien til MXDen = path2MXD
tjenestenavnet = serviceName
brukernavn
passord til din organisasjonskonto så vil skriptet kjøre.
Script og mxd i samme mappe!
CD DOS til samme mappe som script og mxd
OBS! Hvis ikke ArcGISConnection.exe kjører kan du få en feilmelding om at 'My
Hosted Services' ikke fins. Dette kan løses ved å ha ArcMap kjørende (se NIM091175
for bug angaænde dette).
Videre oppfølging skrive loggfil for status
Logg:
2013.07.04 - Første utgave
Trøbbel med norske tegn: Skript feilet: 'ascii' codec can't decode byte 0xe5 in position 6: ordinal not in range(128).
Workaround remove all norwegian characters
Valgt # -*- coding: iso-8859-15 -*- se http://no.wikipedia.org/wiki/ISO_8859
Foruten Unicode finnes de nordiske bokstavene �?�?�?�?�? og äåæöø (i den rekkefølgen) i følgende tegnsett:
ISO-8859-1, ISO-8859-4, ISO-8859-9, ISO-8859-10, ISO-8859-14, ISO-8859-15 og ISO-8859-16.
Bare de to siste av denne tegnsettfamilien inneholder eurotegnet �?�..encode('iso8859_10')u foran teksstrenger setter den til unicode literal bnyttes på overskrifter
2013.07.08 Lang runde med testing på write f se step X
Feil ble løst ved å legge Layer inn i nytt tomt mxd Dokument, se nærmere på hvordan denne type feil kan identifiseres.
'''
import arcpy, os , sys
import geodatamail
import xml.dom.minidom as DOM
import codecs
# Step 1 Hovedvariabler
# PubAGOLTEST
arcpy.env.overwriteOutput = True
serviceName = 'TestVeglogg'
tempPath= os.path.dirname(sys.argv[0]) # Henter mappen som scriptet ligger i
##tempPath = geodatamail.temp_dir() # Henter mappen som scriptet ligger i
##path2MXD = os.path.join(tempPath, 'PubAGOLTEST.mxd') # Denne peker på en mxd som ligger i samme mappe som scriptet
path2MXD = os.path.join(tempPath, 'AGOLPUBLISH10.2.mxd') # Denne peker på en mxd som ligger i samme mappe som scriptet
#Bytt ut med real input
agol_brukernavn = 'xxx'
agol_passord = 'xxx'
arcpy.env.workspace = tempPath
# Path replaced by arcpy.env.workspace
##SDdraft = os.path.join(tempPath, r'tmpdraft.sddraft')
##newSDdraft = os.path.join(tempPath, r'opddraft.sddraft')
##SD = os.path.join(tempPath, serviceName + r'.sd')
SDdraft = 'tmpdraft.sddraft'
newSDdraft = 'opddraft.sddraft'
SD = 'opddraft.sd'
inServer = 'MY_HOSTED_SERVICES'
arcpy.AddMessage('Variables input')
try:
# Step 2 Logg på ArcGIS Online og lag en SDdraft (utkast til karttjeneste)
arcpy.SignInToPortal_server(agol_brukernavn, agol_passord, 'http://www.arcgis.com/')
mxd = arcpy.mapping.MapDocument(path2MXD)
arcpy.mapping.CreateMapSDDraft(mxd, SDdraft, serviceName, inServer)
del mxd
arcpy.AddMessage(' Signed in on Arcgis Online with user: ' + agol_brukernavn)
arcpy.AddMessage(' Path: ' + tempPath)
arcpy.AddMessage(' Prosjekt: ' + str(path2MXD))
arcpy.AddMessage(' Draft: ' + str(SDdraft))
arcpy.AddMessage(' Servicename: ' + str(serviceName))
# Les karttjenesedokumentet inn i en XML-parser
# add capabilities
doc = DOM.parse(SDdraft)
## arcpy.AddMessage(doc.toprettyxml())
#Step 3a Gå igjennom dokumentet
arcpy.AddMessage(' Går igjennom MXD: ' + str(path2MXD))
tagsType = doc.getElementsByTagName('Type')
for tagType in tagsType:
if tagType.parentNode.tagName == 'SVCManifest':
if tagType.hasChildNodes():
tagType.firstChild.data = 'esriServiceDefinitionType_Replacement'
tagsState = doc.getElementsByTagName('State')
for tagState in tagsState:
if tagState.parentNode.tagName == 'SVCManifest':
if tagState.hasChildNodes():
tagState.firstChild.data = 'esriSDState_Published'
#Step 3b Bytt fra vanlig karttjeneste til en som støtter redigering
arcpy.AddMessage(' Bytter fra vanlig karttjeneste til en som støtter redigering')
typeNames = doc.getElementsByTagName('TypeName')
for typeName in typeNames:
if typeName.firstChild.data == 'MapServer':
typeName.firstChild.data = 'FeatureServer'
#Step 3c Skru på redigeringsmuligheter
arcpy.AddMessage(' Skru på redigeringsmuligheter')
configProps = doc.getElementsByTagName('Info')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
keyValues = propSet.childNodes
for keyValue in keyValues:
if keyValue.tagName == 'Key':
if keyValue.firstChild.data == 'WebCapabilities':
keyValue.nextSibling.firstChild.data = 'Query,Create,Update,Delete,Uploads,Editing'
#Step 3d Skru av caching
arcpy.AddMessage(' Skrur av caching')
configProps = doc.getElementsByTagName('ConfigurationProperties')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
keyValues = propSet.childNodes
for keyValue in keyValues:
if keyValue.tagName == 'Key':
if keyValue.firstChild.data == 'isCached':
keyValue.nextSibling.firstChild.data = 'false'
#Step 4 Lagre den modifiserte karttjenesten
arcpy.AddMessage(' Lagrer den modifiserte karttjenesten: ' + newSDdraft)
# Write the new draft to disk
# output to a new sddraft
try:
if os.path.exists(newSDdraft): os.remove(newSDdraft)
f = open(newSDdraft, 'w+')
doc.writexml(f)
f.close()
arcpy.AddMessage( ' TEST Step3 OK')
#Step 5 Analyser kartdokumentet før det publiseres (påkrevd)
try:
arcpy.AddMessage(' Analyserer kartdokumentet før det publiseres (påkrevd)')
analysis = arcpy.mapping.AnalyzeForSD(newSDdraft)
arcpy.AddMessage(' Test step 4 OK')
if analysis['errors'] == {}:
# Lager karttjenestedokument ut fra draften
arcpy.AddMessage(' Test step 5 Stage before') # Feiler her 20140130
arcpy.StageService_server(newSDdraft, SD)
arcpy.AddMessage(' Test step 6 Stage after')
# Laster opp tjenesten. Her settes det om tjenesten skal være offentlig
# tilgjengelig eller om den skal bare være synlig for organisasjonen.
arcpy.AddMessage(' Starter å laste opp tjenesten')
arcpy.UploadServiceDefinition_server(SD, inServer, serviceName,
'', '', '', '', 'OVERRIDE_DEFINITION',
'SHARE_ONLINE', 'PRIVATE',
'SHARE_ORGANIZATION', '')
##geodatamail.sendEmail('minmail@minorganisasjon.no','Oppdaterte karttjeneste: {0}'.format(serviceName), '')
arcpy.AddMessage('Tjeneste - ferdig lastet opp')
else:
arcpy.AddMessage(analysis['errors'])
##geodatamail.sendEmail('minmail@minorganisasjon.no','Feil i kartdokumentet', 'Feilmelding:\n{0}'.format(analysis['errors']))
except:
arcpy.AddMessage( ' Feil Lagring doc')
except:
arcpy.AddMessage(' Error on DocWrite')
except Exception as feil:
arcpy.AddMessage('Skript feilet: {0}'.format(feil))
##geodatamail.sendEmail('minmail@minorganisasjon.no', 'Skript for oppdatering av {0} feilet'.format(serviceName), 'FEILMELDING: \n{0}'.format(feil))