-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathesriRestServiceUtils.py
165 lines (137 loc) · 5.44 KB
/
esriRestServiceUtils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# esriRestServiceUtils.py
# Author: Micah Babinski
# Date: 12/19/2016
# Description: Contains functions which support retrieving REST Service Directory Info
# import required modules
import urllib2, json
# ConnectToServer
def ConnectToServer(serverUrl):
"""
Creates a live connection to a REST services directory
"""
connectionUrl = serverUrl + "/?f=pjson"
connection = json.loads(urllib2.urlopen(connectionUrl, '').read())
return connection
# ListFolders
def ListFolders(serverUrl):
"""
Returns a live list of folders contained within a certain services directory
"""
connectionUrl = serverUrl + "/?f=pjson"
serverConnection = json.loads(urllib2.urlopen(connectionUrl, '').read())
if "folders" in serverConnection.keys():
folders = serverConnection["folders"]
else:
folders = []
return folders
# ListServicesByFolder
def ListServicesByFolder(serverUrl, folderName):
"""
Returns a live list of services running in a given folder
"""
connectionUrl = serverUrl + "/" + folderName + "/?f=pjson"
serverConnection = json.loads(urllib2.urlopen(connectionUrl, '').read())
services = serverConnection["services"]
serviceList = []
for service in services:
serviceList.append("{} ({})".format(service["name"], service["type"]))
return serviceList
# ListAllServices
def ListAllServices(serverUrl):
"""
Lists all services contained within a REST service directory (includes subfolders)
"""
# create empty list
serviceList = []
# connect to server root and add root services to service list
connectionUrl = serverUrl + "/?f=pjson"
serverConnection = json.loads(urllib2.urlopen(connectionUrl, '').read())
rootServices = serverConnection["services"]
for service in rootServices:
serviceList.append("Root/{} ({})".format(service["name"], service["type"]))
# list folders
folders = ListFolders(serverUrl)
# add the services in each list to the overall list
for folder in folders:
folderServices = ListServicesByFolder(serverUrl, folder)
for service in folderServices:
serviceList.append(service)
# return the result
return serviceList
# ListAllServicesByType
def ListAllServicesByType(serverUrl, serviceType):
"""
Lists all services of a given type within a REST services directory
Available Types:
ImageServer
GeometryServer
FeatureServer
MapServer
GeoDataServer
GPServer
IndexGenerator
SearchServer
IndexingLauncher
"""
# create empty list
serviceList = []
# connect to server root and add root services to service list
connectionUrl = serverUrl + "/?f=pjson"
serverConnection = json.loads(urllib2.urlopen(connectionUrl, '').read())
rootServices = serverConnection["services"]
for service in rootServices:
if service["type"] == serviceType:
serviceList.append("Root/{} ({})".format(service["name"], service["type"]))
# list folders
folders = ListFolders(serverUrl)
# add the services in each list to the overall list
for folder in folders:
folderServices = ListServicesByFolder(serverUrl, folder)
for service in folderServices:
if service.split(" (")[1] == serviceType + ")":
serviceList.append(service)
return serviceList
# GetServiceCount
def GetServiceCount(serverUrl):
"""
Returns an integer count of all services contained within a REST Service directory
"""
return len(ListAllServices(serverUrl))
# GetServiceProperties
def GetServiceProperties(serverUrl, folderName, serviceName, serviceType):
"""
Returns information about the service:
Name
Type
Version Number
Description
Copyright
"""
if folderName.upper() != "ROOT":
connectionUrl = serverUrl + "/" + folderName + "/" + serviceName + "/" + serviceType + "/?f=pjson"
else:
connectionUrl = serverUrl + "/" + serviceName + "/" + serviceType + "/?f=pjson"
serverConnection = json.loads(urllib2.urlopen(connectionUrl, '').read())
if serviceType == "MapServer":
properties = {"Name": serviceName,
"Type": serviceType,
"Version": serverConnection["currentVersion"],
"Description": serverConnection["serviceDescription"],
"Copyright": serverConnection["copyrightText"],
"Capabilities": serverConnection["capabilities"],
"Cached Map Service": serverConnection["singleFusedMapCache"]}
if serviceType == "FeatureServer":
properties = {"Name": serviceName,
"Type": serviceType,
"Version": serverConnection["currentVersion"],
"Description": serverConnection["serviceDescription"],
"Copyright": serverConnection["copyrightText"],
"Capabilities": serverConnection["capabilities"]}
if serviceType == "ImageServer":
properties = {"Name": serviceName,
"Type": serviceType,
"Version": serverConnection["currentVersion"],
"Description": serverConnection["serviceDescription"],
"Copyright": serverConnection["copyrightText"],
"Capabilities": serverConnection["capabilities"]}
return properties