roger_bakkestuen

ArcGis 10.2 Publish with pythin arcpy.StageService_server failes

Discussion created by roger_bakkestuen on Jan 30, 2014
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))

Outcomes