Exemple : empêcher la copie de données au moment de la publication
Ce script permet de bloquer la copie de données sur le serveur au moment de la publication. L'option qui permet de bloquer la copie des données est disponible dans ArcGIS 10.1 Service Pack 1 et les versions ultérieures.
Lorsque vous publiez un élément tel qu'un document ArcMap sur ArcGIS Server, le serveur vérifie toutes les sources de données référencées dans le document pour déterminer si elles sont inscrites auprès d'ArcGIS Server. Les données provenant de sources non inscrites sont copiées par défaut sur le serveur et placées dans les répertoires du serveur. En tant qu'administrateur de serveur, vous souhaiterez peut-être bloquer la copie des données pour forcer l'inscription des données et empêcher l'accumulation de jeux de données sur le serveur.
Vous ne devez exécuter ce script qu'une fois sur votre serveur pour bloquer la copie des données.
# Demonstrates how to disable automatic data copying when publishing to the server
# For Http calls
import httplib, urllib, json
# For system tools
import sys
# For reading passwords without echoing
import getpass
# Defines the entry point into the script
def main(argv=None):
# Print some info
print
print "This sample script disables automatic data copying when publishing to the server"
print
# Ask for admin/publisher user name and password
username = raw_input("Enter user name: ")
password = getpass.getpass("Enter password: ")
# Ask for server name
serverName = raw_input("Enter server name: ")
serverPort = 6080
# Get a token
token = getToken(username, password, serverName, serverPort)
if token == "":
print "Could not generate a token with the username and password provided."
return
# Construct URL to start a service - as an example the Geometry service
UpdateDatastoreConfigurationURL = "/arcgis/admin/data/config/update"
# This request only needs the token and the response formatting parameter
params = urllib.urlencode({'token': token, 'f': 'json','datastoreConfig':'{"blockDataCopy": true}'})
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", UpdateDatastoreConfigurationURL, params, headers)
# Read response
response = httpConn.getresponse()
if (response.status != 200):
httpConn.close()
print "Error while attempting to change the data store configuration."
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. " + data
else:
print "Operation completed successfully!"
return
# A function to generate a token given username, password and the adminURL.
def getToken(username, password, serverName, serverPort):
# Token URL is typically http://server[:port]/arcgis/admin/generateToken
tokenURL = "/arcgis/admin/generateToken"
# URL-encode the token parameters
params = urllib.urlencode({'username': username, 'password': password, 'client': 'requestip', '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", tokenURL, params, headers)
# Read response
response = httpConn.getresponse()
if (response.status != 200):
httpConn.close()
print "Error while fetching tokens from admin URL. Please check the URL and try again."
return
else:
data = response.read()
httpConn.close()
# Check that data returned is not an error object
if not assertJsonSuccess(data):
return
# Extract the token from it
token = json.loads(data)
return token["token"]
# 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:]))
Vous avez un commentaire à formuler concernant cette rubrique ?