Beispiel: Erstellen einer Site

In diesem Beispiel wird eine ArcGIS-Server-Site basierend auf vom Benutzer angegebenen Werten für das primäre Site-Administratorkonto, den Konfigurationsspeicherort und das Stammverzeichnis der Serververzeichnisse erstellt. Dies sind die gleichen Werte, die auch beim manuellen Erstellen einer Site in ArcGIS Server Manager erforderlich sind.

Die Operation "createNewSite" in der ArcGIS Server Administrator-API kann mit weniger Code aufgerufen werden, indem einfach der gewünschte Benutzername und das gewünschte Kennwort für den primären Site-Administrator sowie der Servername und die Port-Nummer angegeben werden. Das Beispiel unten bietet zusätzlich die Flexibilität zum Definieren des gewünschten Konfigurationsspeicherorts und Speicherorts des Stammserververzeichnisses. Ein Großteil des Codes bezieht sich auf das Erstellen der Verzeichnisse.

Beim programmgesteuerten Definieren der Serververzeichnisse muss ein Großteil der JavaScript Object Notation (JSON) mit den Verzeichniseigenschaften an die Operation "createNewSite" übergeben werden. Im Beispiel unten werden die Verzeichniseigenschaften mit Python-Wörterbüchern konfiguriert. Diese Wörterbücher werden dann mit der Python-Funktion json.dumps() in JSON serialisiert. Damit kann die Lesbarkeit des Beispiels bewahrt werden.

Die unten verwendeten Verzeichniseigenschaften entsprechen den Standardeigenschaften, die von Manager beim Erstellen einer Site verwendet werden. Sie können diese nach Belieben anpassen.

# Demonstrates how to create a new site

# For Http calls
import httplib, urllib, json

# For system tools
import sys, os

# For reading passwords without echoing
import getpass

# Defines the entry point into the script
def main(argv=None):
  
    # Ask for admin/publisher user name and password
    username = raw_input("Enter desired primary site administrator name: ")
    password = getpass.getpass("Enter desired primary site administrator password: ")

    # Ask for server name
    serverName = raw_input("Enter server name: ")
    serverPort = 6080 

    # Ask for config store and root server directory paths
    configStorePath = raw_input("Enter config store path: ")
    rootDirPath = raw_input("Enter root server directory path: ")
    
    # Set up required properties for config store
    configStoreConnection={"connectionString": configStorePath, "type": "FILESYSTEM"}
 
    # Set up paths for server directories             
    cacheDirPath = os.path.join(rootDirPath, "arcgiscache")
    jobsDirPath = os.path.join(rootDirPath, "arcgisjobs")
    outputDirPath = os.path.join(rootDirPath, "arcgisoutput")
    systemDirPath = os.path.join(rootDirPath, "arcgissystem")
   
    # Create Python dictionaries representing server directories
    cacheDir = dict(name = "arcgiscache",physicalPath = cacheDirPath,directoryType = "CACHE",cleanupMode = "NONE",maxFileAge = 0,description = "Stores tile caches used by map, globe, and image services for rapid performance.", virtualPath = "")    
    jobsDir = dict(name = "arcgisjobs",physicalPath = jobsDirPath, directoryType = "JOBS",cleanupMode = "TIME_ELAPSED_SINCE_LAST_MODIFIED",maxFileAge = 360,description = "Stores results and other information from geoprocessing services.", virtualPath = "")
    outputDir = dict(name = "arcgisoutput",physicalPath = outputDirPath,directoryType = "OUTPUT",cleanupMode = "TIME_ELAPSED_SINCE_LAST_MODIFIED",maxFileAge = 10,description = "Stores various information generated by services, such as map images.", virtualPath = "")
    systemDir = dict(name = "arcgissystem",physicalPath = systemDirPath,directoryType = "SYSTEM",cleanupMode = "NONE",maxFileAge = 0,description = "Stores files that are used internally by the GIS server.", virtualPath = "")
 
    # Serialize directory information to JSON    
    directoriesJSON = json.dumps(dict(directories = [cacheDir, jobsDir, outputDir, systemDir]))      
  
    # Construct URL to create a new site
    createNewSiteURL = "/arcgis/admin/createNewSite"
    
    # Set up parameters for the request
    params = urllib.urlencode({'username': username, 'password': password, 'configStoreConnection': 

configStoreConnection, 'directories':directoriesJSON, 'f': 'json'})
    
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
    
    # Connect to URL and post parameters    
    httpConn = httplib.HTTPConnection(serverName, serverPort)
    httpConn.request("POST", createNewSiteURL, params, headers)
    
    # Read response
    response = httpConn.getresponse()
    if (response.status != 200):
        httpConn.close()
        print "Error while creating the site."
        return
    else:
        data = response.read()
        httpConn.close()
        
        # Check that data returned is not an error object
        if not assertJsonSuccess(data):          
            print "Error returned by operation. " + str(data)
        else:
            print "Site created successfully"
     
        return
    

# A function that checks that the input JSON object 
#  is not an error object.
def assertJsonSuccess(data):
    obj = json.loads(data)
    if 'status' in obj and obj['status'] == "error":
        print "Error: JSON object returns an error. " + str(obj)
        return False
    else:
        return True
    
        
# Script start
if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
9/23/2013