Exemple : inscrire des dossiers et des bases de données répertoriés dans un fichier texte
Cet exemple de script permet de lire une liste au format de fichier texte des emplacements de vos données et d'inscrire chaque dossier et base de données auprès d'ArcGIS Server. Bien que vous puissiez inscrire des bases de données et des dossiers via le gestionnaire ou ArcGIS for Desktop, utilisez ce script pour procéder plus rapidement si vous devez inscrire de nombreux emplacements.
Le fichier en entrée doit être structuré comme suit :
#dsName|dsType|serverPath|clientPath|hostname
dsName=sharedData|dsType=FOLDER|serverPath=C:\data|clientPath=C:\data
dsName=qalab|dsType=FOLDER|serverPath=\\qalab_server\data|clientPath=c:\mydata|hostname=qalab_publisher
dsName=pebbles|dsType=DATABASE|serverPath=C:\data\SDE_Connections\Connection to pebbles864.sde|clientPath=C:\dataSDE_Connections\Connection to pebbles864.sde
dsName=bedrock|dsType=DATABASE|serverPath=C:\data\SDE_Connections\Connection to bedrock.sde|clientPath=C:\dataSDE_Connections\Connection to armenia.sde
dsName=oaktree|dsType=DATABASE|serverPath=C:\data\SDE_Connections\Connection to oaktree.sde|clientPath=managed
- dsName : nom de l'élément du stockage de données. Il peut s'agir d'un nom quelconque.
- dsType : type d'élément du stockage de données que vous inscrivez. Il peut s'agir de FOLDER ou DATABASE.
- serverPath : chemin d'accès aux données perçu par la machine serveur.
- clientPath : chemin d'accès aux données perçu par les machines de l'éditeur. S'il n'est pas indiqué, le chemin d'accès au serveur sera utilisé. Si vous indiquez le mot-clé managed, cela signifie que vous inscrivez cet élément du stockage de données en tant que base de données gérée d'ArcGIS Server.
- hostname : nom de la machine de l'éditeur. Il n'est nécessaire que si la valeur clientPath indique un chemin d'accès basé sur un dossier. Si cette propriété est omise, le nom de la machine qui exécute le script sera utilisé.
Avant d'utiliser ce script, reportez-vous à la rubrique A propos de l'inscription des données auprès du serveur.
import sys,os
import getpass
import arcpy
import codecs
def main(argv=None):
# Ask for admin user name and password
username = raw_input("Enter user name: ")
password = getpass.getpass("Enter password: ")
# Ask for server name & port
serverName = raw_input("Enter server name: ")
serverPort = raw_input("Enter server port: ")
# Create a connection file to the server and save it in the same location as that of the script
serverURL="http://"+serverName+":"+str(serverPort)+"/arcgis/admin"
try:
arcpy.mapping.CreateGISServerConnectionFile("PUBLISH_GIS_SERVICES",os.curdir,serverName+".ags",serverURL,"ARCGIS_SERVER",username=username,password=password)
except Exception, e:
print e.message
agsConnection = os.path.join(os.curdir, serverName+".ags")
if not os.path.isfile(agsConnection):
print("Unable to connect to ArcGIS Server. Exiting.")
sys.exit(1)
# Input File that contains the data store information
dataStoresFile = raw_input("Path to pipe-delimited text file containing datastore information: ")
num = 0
datastores = {}
for datastoreRow in readlinesFromInputFile(dataStoresFile):
datastoreEntry = {}
for index in range(len(datastoreRow)):
datastoreProp = datastoreRow[index].split("=")
if datastoreProp[0] == "dsName":
datastoreEntry["connection_name"] = datastoreProp[1]
if datastoreProp[0] == "dsType":
datastoreEntry["datastore_type"] = datastoreProp[1]
if datastoreProp[0] == "serverPath":
datastoreEntry["server_path"] = datastoreProp[1]
if datastoreProp[0] == "clientPath":
datastoreEntry["client_path"] = datastoreProp[1]
if datastoreProp[0] == "hostname":
datastoreEntry["hostname"] = datastoreProp[1]
# Add the datastore information to a dictionary
datastores["datastore" + str(num)] = datastoreEntry
num +=1
# Call helper functions to register datastores
addDataStores(datastores,agsConnection)
# A function that reads lines from the input file
def readlinesFromInputFile(filename, delim='|'):
file = codecs.open(filename,'r','utf-8-sig')
for line in file.readlines():
# Remove the trailing whitespaces and the newline characters
line = line.rstrip()
if line.startswith('#') or len(line) == 0:
pass # Skip the lines that contain # at the beginning or any empty lines
else:
# Split the current line into list
yield line.split(delim)
file.close()
def addDataStores(datastoresDict,agsConnection):
for datastoreToAdd in datastoresDict:
# Build the dictionary with the role name and description
datastoresDict[datastoreToAdd]["connection_file"] = agsConnection
print "Adding the datastore: " + datastoresDict[datastoreToAdd]['connection_name']
try:
arcpy.AddDataStoreItem(**datastoresDict[datastoreToAdd])
print "Successfully added the datastore: " + datastoresDict[datastoreToAdd]['connection_name']
except Exception, e:
print "Adding of the datastore: " + datastoresDict[datastoreToAdd]['connection_name'] + " failed."
print e.message
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
5/10/2014