havenondemand 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +103 -88
- data/examples/attendant_test.mp3 +0 -0
- data/examples/call_post_request_combination.rb +61 -0
- data/examples/callback_async.rb +50 -0
- data/examples/callback_sync.rb +34 -0
- data/examples/post_file.rb +52 -0
- data/examples/post_multiple_files.rb +52 -0
- data/examples/returnresponse_async.rb +23 -0
- data/examples/returnresponse_sync.rb +15 -0
- data/examples/review.jpg +0 -0
- data/havenondemand.gemspec +1 -1
- data/lib/havenondemand.rb +2 -394
- data/lib/havenondemand/version.rb +1 -1
- data/lib/hodclient.rb +275 -0
- data/lib/hoderrorcode.rb +13 -0
- data/lib/hodresponseparser.rb +88 -0
- metadata +14 -4
- data/examples/examples.rb +0 -67
- data/examples/testhelper.rb +0 -2
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative "../lib/havenondemand.rb"
|
2
|
+
|
3
|
+
$client = HODClient.new("YOUR_API_KEY", "v1")
|
4
|
+
$parser = HODResponseParser.new()
|
5
|
+
|
6
|
+
# call Haven OnDemand APIs using asynchronous mode
|
7
|
+
|
8
|
+
def syncCallback(response)
|
9
|
+
response = $parser.parse_payload(response)
|
10
|
+
if response != nil
|
11
|
+
puts response
|
12
|
+
else
|
13
|
+
errors = $parser.get_last_errors()
|
14
|
+
errors.each { |error|
|
15
|
+
eCode = error["error"]
|
16
|
+
if eCode == ErrorCode::QUEUED
|
17
|
+
jobID = error["jobID"]
|
18
|
+
sleep(2)
|
19
|
+
$client.get_job_status(jobID, method(:syncCallback))
|
20
|
+
elsif eCode == ErrorCode::IN_PROGRESS
|
21
|
+
jobID = error["jobID"]
|
22
|
+
sleep(5)
|
23
|
+
$client.get_job_status(jobID, method(:syncCallback))
|
24
|
+
else
|
25
|
+
puts eCode
|
26
|
+
puts error["detail"]
|
27
|
+
puts error["reason"]
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def asyncCallback(response)
|
34
|
+
jobID = $parser.parse_jobid(response)
|
35
|
+
if jobID != nil
|
36
|
+
$client.get_job_status(jobID, method(:syncCallback))
|
37
|
+
else
|
38
|
+
errors = $parser.get_last_errors()
|
39
|
+
errors.each { |error|
|
40
|
+
eCode = error["error"]
|
41
|
+
puts eCode
|
42
|
+
puts error["detail"]
|
43
|
+
puts error["reason"]
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
params = {}
|
49
|
+
params["file"] = ["pathto/filename1.xxx","pathto/filename2.xxx"]
|
50
|
+
params["entity_type"] = ['people_eng','places_eng']
|
51
|
+
hodApp = 'extractentities'
|
52
|
+
$client.post_request(hodApp, params, true, method(:asyncCallback))
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative "../lib/havenondemand.rb"
|
2
|
+
|
3
|
+
$client = HODClient.new("YOUR_API_KEY", "v1")
|
4
|
+
$parser = HODResponseParser.new()
|
5
|
+
|
6
|
+
|
7
|
+
params = {}
|
8
|
+
params["text"] = "Haven OnDemand is awesome"
|
9
|
+
params["language"] = 'eng'
|
10
|
+
hodApp = 'analyzesentiment'
|
11
|
+
# get_request with return response in asynchronous mode
|
12
|
+
r = $client.get_request(hodApp, params, true, nil)
|
13
|
+
jobID = $parser.parse_jobid(r)
|
14
|
+
r = $client.get_job_result(jobID)
|
15
|
+
|
16
|
+
# post_request with return response in asynchronous mode
|
17
|
+
=begin
|
18
|
+
r = $client.post_request(hodApp, params, true, nil)
|
19
|
+
jobID = $parser.parse_jobid(r)
|
20
|
+
r = $client.get_job_result(jobID)
|
21
|
+
=end
|
22
|
+
|
23
|
+
puts r
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative "../lib/havenondemand.rb"
|
2
|
+
|
3
|
+
$client = HODClient.new("YOUR_API_KEY", "v1")
|
4
|
+
|
5
|
+
params = {}
|
6
|
+
params["text"] = "Haven OnDemand is awesome"
|
7
|
+
params["language"] = 'eng'
|
8
|
+
hodApp = 'analyzesentiment'
|
9
|
+
# get_request with return response in synchronous mode
|
10
|
+
r = $client.get_request(hodApp, params, false, nil)
|
11
|
+
|
12
|
+
# post_request with return response in synchronous mode
|
13
|
+
#r = $client.post_request(hodApp, params, false, nil)
|
14
|
+
|
15
|
+
puts r
|
data/examples/review.jpg
ADDED
Binary file
|
data/havenondemand.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'havenondemand/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "havenondemand"
|
8
8
|
spec.version = Havenondemand::VERSION
|
9
|
-
spec.authors = ["Phong Vu","Tyler Nappy"
|
9
|
+
spec.authors = ["Phong Vu", "Tyler Nappy", " Martin Zerbib"]
|
10
10
|
spec.email = ["phong.vu@hpe.com"]
|
11
11
|
spec.summary = %q{Haven OnDemand Ruby Client}
|
12
12
|
spec.description = %q{}
|
data/lib/havenondemand.rb
CHANGED
@@ -1,394 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'Unirest'
|
4
|
-
require 'json'
|
5
|
-
#require 'httpclient'
|
6
|
-
#require 'byebug'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
class HODError < StandardError
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
class HODResponse
|
20
|
-
|
21
|
-
attr_accessor :response
|
22
|
-
|
23
|
-
def initialize(response)
|
24
|
-
#@query=query
|
25
|
-
|
26
|
-
@response=response
|
27
|
-
end
|
28
|
-
|
29
|
-
def json()
|
30
|
-
@response.body
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
class HODAsyncResponse < HODResponse
|
36
|
-
|
37
|
-
attr_accessor :response
|
38
|
-
attr_accessor :jobID
|
39
|
-
def initialize(response,client)
|
40
|
-
#@query=query
|
41
|
-
@response=response
|
42
|
-
@client=client
|
43
|
-
@jobID =response.body["jobID"]
|
44
|
-
end
|
45
|
-
|
46
|
-
def status()
|
47
|
-
@client.getStatus(@jobID)
|
48
|
-
end
|
49
|
-
|
50
|
-
def result()
|
51
|
-
@client.getResult(@jobID)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
class HODClient
|
59
|
-
@@version=1
|
60
|
-
@@apidefault="v1"
|
61
|
-
def initialize(apikey, version="v1")
|
62
|
-
# Instance variables
|
63
|
-
if apikey=='http://api.havenondemand.com' || apikey=='http://api.havenondemand.com/' || apikey=='https://api.havenondemand.com' || apikey=='https://api.havenondemand.com/'
|
64
|
-
raise ArgumentError, "Using an outdated wrapper constructor method. No need to include API URL.\nInclude as such:\n client = HODClient(API_KEY, VERSION)\n where version is optional"
|
65
|
-
end
|
66
|
-
@@apidefault=version
|
67
|
-
@url = "https://api.havenondemand.com"
|
68
|
-
@apikey = apikey
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
def getStatus(jobID)
|
74
|
-
data={"apikey"=>@apikey}
|
75
|
-
response=Unirest.post "#{@url}/#{@@version}/job/status/#{jobID}",
|
76
|
-
headers:{ "Accept" => "application/json" },
|
77
|
-
parameters:data
|
78
|
-
return HODResponse.new(response)
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
def getResult(jobID)
|
83
|
-
data={"apikey"=>@apikey}
|
84
|
-
response=Unirest.post "#{@url}/#{@@version}/job/result/#{jobID}",
|
85
|
-
headers:{ "Accept" => "application/json" },
|
86
|
-
parameters:data
|
87
|
-
return HODResponse.new(response)
|
88
|
-
end
|
89
|
-
|
90
|
-
def deleteIndex(index)
|
91
|
-
if index.class.name=="HODIndex"
|
92
|
-
index=index.name
|
93
|
-
end
|
94
|
-
|
95
|
-
data=Hash.new
|
96
|
-
data[:index]=index
|
97
|
-
|
98
|
-
delete=post("deletetextindex",data)
|
99
|
-
confirm=delete.json()["confirm"]
|
100
|
-
data[:confirm]=confirm
|
101
|
-
delete=post("deletetextindex",data)
|
102
|
-
return delete
|
103
|
-
end
|
104
|
-
|
105
|
-
def deleteConnector(connector)
|
106
|
-
data=connectorUtil(connector)
|
107
|
-
delete=post("deleteconnector",data)
|
108
|
-
return delete
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
|
-
def connectorUtil(connector)
|
113
|
-
if index.class.name=="HODConnector"
|
114
|
-
connector=connector.name
|
115
|
-
end
|
116
|
-
data=Hash.new
|
117
|
-
data[:connector]=connector
|
118
|
-
return data
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
|
-
def startConnector(connector)
|
123
|
-
data=connectorUtil(connector)
|
124
|
-
return post("startconnector",data)
|
125
|
-
end
|
126
|
-
|
127
|
-
def retrieveConnectorConfig(connector)
|
128
|
-
data=connectorUtil(connector)
|
129
|
-
return post("retrieveconfig",data)
|
130
|
-
end
|
131
|
-
|
132
|
-
def connectorstatus(connector)
|
133
|
-
data=connectorUtil(connector)
|
134
|
-
return post("connectorstatus",data)
|
135
|
-
end
|
136
|
-
|
137
|
-
def post_combination(combination, data=Hash.new, async=false)
|
138
|
-
handler="executecombination"
|
139
|
-
data[:apikey]=@apikey
|
140
|
-
syncpath="sync"
|
141
|
-
syncpath="async" if async
|
142
|
-
data[:combination] = combination
|
143
|
-
data[:parameters] = data[:parameters].to_json
|
144
|
-
Unirest.timeout(30)
|
145
|
-
|
146
|
-
response=Unirest.post "#{@url}/#{@@version}/api/#{syncpath}/#{handler}/#{@@apidefault}",
|
147
|
-
headers:{ "Accept" => "application/json", "Content-Type" => "application/json"},
|
148
|
-
parameters:data
|
149
|
-
if response.code == 200
|
150
|
-
|
151
|
-
if async
|
152
|
-
return HODAsyncResponse.new(response,self)
|
153
|
-
end
|
154
|
-
return HODResponse.new(response)
|
155
|
-
else
|
156
|
-
puts response.body
|
157
|
-
#puts data[:json].encoding.name
|
158
|
-
raise HODError.new "Error #{response.body["error"]} -- #{response.body["reason"]}"
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
def post(handler, data=Hash.new, async=false)
|
164
|
-
data[:apikey]=@apikey
|
165
|
-
syncpath="sync"
|
166
|
-
if async
|
167
|
-
syncpath="async"
|
168
|
-
end
|
169
|
-
Unirest.timeout(30)
|
170
|
-
response=Unirest.post "#{@url}/#{@@version}/api/#{syncpath}/#{handler}/#{@@apidefault}",
|
171
|
-
headers:{ "Accept" => "application/json", "Content-Type" => "application/json"},
|
172
|
-
parameters:data
|
173
|
-
if response.code == 200
|
174
|
-
|
175
|
-
if async
|
176
|
-
return HODAsyncResponse.new(response,self)
|
177
|
-
end
|
178
|
-
return HODResponse.new(response)
|
179
|
-
else
|
180
|
-
puts response.body
|
181
|
-
#puts data[:json].encoding.name
|
182
|
-
raise HODError.new "Error #{response.body["error"]} -- #{response.body["reason"]}"
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
def getIndex(name)
|
189
|
-
#indexes=self.listIndexes()
|
190
|
-
|
191
|
-
index=HODIndex.new(name,client:self)
|
192
|
-
#puts (index in indexes)
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
def createIndex(name,flavor="standard",parametric_fields=[],index_fields=[])
|
199
|
-
data=Hash.new
|
200
|
-
data[:index]=name
|
201
|
-
data[:flavor]=flavor
|
202
|
-
data[:parametric_fields]=parametric_fields
|
203
|
-
data[:index_fields]=index_fields
|
204
|
-
self.post("createtextindex",data)
|
205
|
-
return HODIndex.new(name,client:self)
|
206
|
-
end
|
207
|
-
|
208
|
-
def listIndexes()
|
209
|
-
r=post("listindex")
|
210
|
-
|
211
|
-
indexes=r["index"].map { |index| HODIndex.new(index["index"],index["flavor"],index["type"],client:self)}
|
212
|
-
|
213
|
-
end
|
214
|
-
|
215
|
-
|
216
|
-
def addDoc(doc, index)
|
217
|
-
self.addDocs([doc],index)
|
218
|
-
end
|
219
|
-
|
220
|
-
def addDocs(docs, index,async=false)
|
221
|
-
|
222
|
-
|
223
|
-
# puts docs
|
224
|
-
# puts docs.length
|
225
|
-
#jsondocs= docs.map { |doc| doc.data}
|
226
|
-
jsondocs=docs
|
227
|
-
#puts jsondocs
|
228
|
-
docs=Hash.new
|
229
|
-
docs[:documents]=jsondocs
|
230
|
-
|
231
|
-
#puts docs.to_json
|
232
|
-
docs=docs.to_json
|
233
|
-
puts docs.length
|
234
|
-
#puts docs
|
235
|
-
#docs=render :json => JSON::dump(docs)
|
236
|
-
data={json:docs,index:index}
|
237
|
-
|
238
|
-
return self.post("addtotextindex",data,async)
|
239
|
-
end
|
240
|
-
|
241
|
-
end
|
242
|
-
|
243
|
-
class HODConnector
|
244
|
-
|
245
|
-
attr_reader :client
|
246
|
-
attr_reader :name
|
247
|
-
|
248
|
-
|
249
|
-
def initialize(name,client=nil)
|
250
|
-
@name=name
|
251
|
-
@client=client
|
252
|
-
end
|
253
|
-
|
254
|
-
def create(type="web",config=Hash.new, destination="", schedule="",description="")
|
255
|
-
config("addtotextindex",type,config,destination,schedule,description)
|
256
|
-
end
|
257
|
-
|
258
|
-
|
259
|
-
def update(type="web",config=Hash.new, destination="", schedule="",description="")
|
260
|
-
config("addtotextindex",type,config,destination,schedule,description)
|
261
|
-
end
|
262
|
-
|
263
|
-
def config(method,type="",config="", destination="", schedule="",description="")
|
264
|
-
data=Hash.new
|
265
|
-
data[:connector]=@name
|
266
|
-
if type!=""
|
267
|
-
data[:type]=type
|
268
|
-
end
|
269
|
-
if config!=""
|
270
|
-
data[:config]=JSON.dump config
|
271
|
-
end
|
272
|
-
if destination!=""
|
273
|
-
destination={"action"=>"addtotextindex", "index" => destination }
|
274
|
-
data[:destination]=JSON.dump destination
|
275
|
-
end
|
276
|
-
if schedule != ""
|
277
|
-
data[:schedule]=JSON.dump schedule
|
278
|
-
end
|
279
|
-
data[:description]=description
|
280
|
-
result=@client.post(method,data)
|
281
|
-
puts result
|
282
|
-
end
|
283
|
-
|
284
|
-
def delete()
|
285
|
-
@client.deleteConnector(@name)
|
286
|
-
end
|
287
|
-
|
288
|
-
def config()
|
289
|
-
@client.retrieveConnectorConfig(@name)
|
290
|
-
end
|
291
|
-
|
292
|
-
def status()
|
293
|
-
@client.connectorStatus(@name)
|
294
|
-
end
|
295
|
-
|
296
|
-
def ==(other_object)
|
297
|
-
comparison_object.equal?(self) || (comparison_object.instance_of?(self.class) && @name == other_object.name)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
class HODIndex
|
306
|
-
|
307
|
-
attr_reader :client
|
308
|
-
attr_reader :name
|
309
|
-
|
310
|
-
|
311
|
-
def initialize(name,flavor="standard",type="normal",client:nil)
|
312
|
-
@name=name
|
313
|
-
|
314
|
-
@client=client
|
315
|
-
@docs=[]
|
316
|
-
end
|
317
|
-
|
318
|
-
def query(text,data=Hash.new)
|
319
|
-
data[:database_match]=@name
|
320
|
-
|
321
|
-
data[:text]=text
|
322
|
-
result=@client.post("querytextindex",data)
|
323
|
-
result["documents"].map!{|doc| HODDoc.new(doc) }
|
324
|
-
return result
|
325
|
-
end
|
326
|
-
def size()
|
327
|
-
return @docs.length
|
328
|
-
end
|
329
|
-
def pushDoc(doc)
|
330
|
-
@docs.push(doc)
|
331
|
-
|
332
|
-
end
|
333
|
-
|
334
|
-
def commit(async=false)
|
335
|
-
# docs={document:@docs}
|
336
|
-
# data={json:docs.to_json,index:@name}
|
337
|
-
# puts docs.to_json
|
338
|
-
|
339
|
-
#r=@client.post("addtotextindex",data)
|
340
|
-
#@docs=[]
|
341
|
-
response=addDocs(@docs,async)
|
342
|
-
@docs=[]
|
343
|
-
return response
|
344
|
-
end
|
345
|
-
|
346
|
-
def addDoc(doc)
|
347
|
-
docs=Hash.new
|
348
|
-
|
349
|
-
# docs[:document]=[doc.data]
|
350
|
-
# data={json:docs.to_json,index:@name}
|
351
|
-
# @client.postasync("addtotextindex",data)
|
352
|
-
puts @client.addDoc(doc,@name)
|
353
|
-
end
|
354
|
-
|
355
|
-
|
356
|
-
def addDocs(docs,async=false)
|
357
|
-
|
358
|
-
# docs[:document]=[doc.data]
|
359
|
-
# data={json:docs.to_json,index:@name}
|
360
|
-
# @client.postasync("addtotextindex",data)
|
361
|
-
|
362
|
-
return @client.addDocs(docs,@name,async)
|
363
|
-
end
|
364
|
-
|
365
|
-
def delete()
|
366
|
-
clientcheck()
|
367
|
-
@client.deleteIndex(self)
|
368
|
-
end
|
369
|
-
|
370
|
-
def ==(other_object)
|
371
|
-
comparison_object.equal?(self) || (comparison_object.instance_of?(self.class) && @name == other_object.name)
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
class HODDoc
|
378
|
-
|
379
|
-
attr_accessor :data
|
380
|
-
attr_accessor :sentiment
|
381
|
-
attr_accessor :entities
|
382
|
-
def initialize(data)
|
383
|
-
#@query=query
|
384
|
-
@entities=Hash.new
|
385
|
-
@data=data
|
386
|
-
end
|
387
|
-
|
388
|
-
def to_json(options={})
|
389
|
-
return render :json => JSON::dump(@data)
|
390
|
-
end
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
end
|
1
|
+
require File.join(File.dirname(__FILE__), "hodclient.rb")
|
2
|
+
require File.join(File.dirname(__FILE__), "hodresponseparser.rb")
|