Hi there,
I really have a tough time getting python based feature service creation to work. I finally got an answer from Maarten van Hulzen in Holland, who showed me how to first upload the SD file and then publish like this:
#Upload:
import requests
....
filesUp = {"file": open(sdFile, 'rb')}
r = requests.post(url, files=filesUp,verify=False);
resultJson = r.json()
itemID = resultJson['id']
#Publish
LogMessage("Start publish job")
publishURL = portal +'/sharing/rest/content/users/{}/publish'.format(UserName)
url = publishURL + "?f=json&token=" + token
pubParams ='{"name":"'+serviceName.encode('utf-8').strip() + '","title":"' +serviceTitle.encode('utf-8').strip() + '"}'
publishParams = {'itemID': itemID, 'filetype': 'serviceDefinition','overwrite':True, 'publishParameters':pubParams}
r = requests.post(url,publishParams,verify=False
However, for large files, this doesn't work. I get a MemoryError. Using
from requests_toolbelt import (MultipartEncoder)
...
payload = MultipartEncoder({"file": open(sdFile, 'rb'),"name":os.path.basename(sdFile)})
r = requests.post(url,data=payload,verify=False,headers={"Content-Type": payload.content_type})
I can now upload files, but publish fails with:
message=Error getting Item Info from DataStore
messageCode=PUB_0031
Using requests and MultipartEncoder is nice and simple, but there must be something missing on the uploaded Service Definition, giving problems to publishing.
Does anybody have an idea how to solve this? Thanks in advance.