Skip to content

Commit ac3dfa5

Browse files
committed
Migrate to ibm-watson
1 parent c24915b commit ac3dfa5

File tree

3 files changed

+82
-57
lines changed

3 files changed

+82
-57
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Node-RED Watson Nodes for IBM Cloud
1515
- Natural Language Classifier node
1616
- Language Identifier node
1717
- Language Translator node
18+
- Translator Util node
1819
- New NLU Model Manager node.
1920
- NLC CreateClassifier is broken until defect on ibm-watson is fixed.
2021
- Remove X-Watson-Technology-Preview Neural translation option for Language Translator node

services/language_translator_util/v3.html

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@
3838
</div>
3939

4040
<div class="form-row credentials">
41-
<label>&nbsp;</label>
42-
<input type="checkbox" id="node-input-default-endpoint" style="display: inline-block; width: auto; vertical-align: top;">
43-
<label for="node-input-cwm-default-endpoint" style="width: 70%;"> Use Default Service Endpoint</label>
44-
</div>
45-
<div class="form-row">
4641
<label for="node-input-cwm-service-endpoint"><i class="fa fa-tag"></i> Service Endpoint</label>
4742
<input type="text" id="node-input-service-endpoint" placeholder="https://gateway.watsonplatform.net/language-translator/api">
4843
</div>
@@ -74,8 +69,7 @@
7469
category: 'IBM Watson',
7570
defaults: {
7671
name: {value: ""},
77-
'default-endpoint' :{value: true},
78-
'service-endpoint' :{value: 'https://gateway.watsonplatform.net/language-translator/api'}
72+
'service-endpoint' :{value: ''}
7973
},
8074
credentials: {
8175
username: {type:"text"},
@@ -94,15 +88,6 @@
9488
return this.name ? "node_label_italic" : "";
9589
},
9690
oneditprepare: function() {
97-
$('#node-input-default-endpoint').change(function () {
98-
var checked = $('#node-input-default-endpoint').prop('checked')
99-
if (checked) {
100-
$('#node-input-service-endpoint').parent().hide();
101-
} else {
102-
$('#node-input-service-endpoint').parent().show();
103-
}
104-
});
105-
10691
$.getJSON('watson-translator-util/vcap/')
10792
.done(function (service) {
10893
$('.credentials').toggle(!service);

services/language_translator_util/v3.js

Lines changed: 80 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,59 @@
1515
**/
1616

1717
module.exports = function (RED) {
18+
const SERVICE_IDENTIFIER = 'language-translator',
19+
LanguageTranslatorV3 = require('ibm-watson/language-translator/v3'),
20+
{ IamAuthenticator } = require('ibm-watson/auth'),
21+
LANGS = {
22+
'es': 'Spanish',
23+
'ar': 'Arabic',
24+
'arz': 'Spoken Arabic',
25+
'en': 'English',
26+
'fr': 'French',
27+
'it': 'Italian',
28+
'zh': 'Chinese',
29+
'ko': 'Korean',
30+
'pt': 'Portuguese',
31+
'de': 'German',
32+
'ja': 'Japanese',
33+
'nl': 'Dutch',
34+
'pl': 'Polish',
35+
'ru': 'Russian',
36+
'tr': 'Turkish',
37+
'zh-TW' : 'Taiwanese',
38+
'zht': 'Traditional Chinese',
39+
'bg' : 'Bulgarian',
40+
'ca' : 'Catalan',
41+
'cs' : 'Czech',
42+
'da' : 'Danish',
43+
'el' : 'Greek',
44+
'et' : 'Estonian',
45+
'fi' : 'Finnish',
46+
'ga' : 'Galican',
47+
'he' : 'Hebrew',
48+
'hi' : 'Hindi',
49+
'hr' : 'Croatian',
50+
'hu' : 'Hungarian',
51+
'id' : 'Indonesian',
52+
'lt' : 'Lithuanian',
53+
'ms' : 'Malay',
54+
'nb' : 'Norwegian Bokmål',
55+
'ro' : 'Romanian',
56+
'sk' : 'Slovak',
57+
'sl' : 'Slovenian',
58+
'sv' : 'Swedish',
59+
'th' : 'Thai'
60+
};
61+
1862
var pkg = require('../../package.json'),
19-
LanguageTranslatorV3 = require('watson-developer-cloud/language-translator/v3'),
2063
cfenv = require('cfenv'),
2164
username = null, password = null, sUsername = null, sPassword = null,
2265
apikey = null, sApikey = null,
23-
service = cfenv.getAppEnv().getServiceCreds(/language translator/i),
66+
payloadutils = require('../../utilities/payload-utils'),
67+
serviceutils = require('../../utilities/service-utils'),
68+
responseutils = require('../../utilities/response-utils'),
69+
//service = cfenv.getAppEnv().getServiceCreds(/language translator/i),
70+
service = serviceutils.getServiceCreds(SERVICE_IDENTIFIER),
2471
endpoint = '',
2572
sEndpoint = 'https://gateway.watsonplatform.net/language-translator/api';
2673

@@ -68,9 +115,10 @@ module.exports = function (RED) {
68115
// The node has received an input as part of a flow, need to determine
69116
// what the request is for, and based on that if the required fields
70117
// have been provided.
71-
this.on('input', function (msg) {
118+
this.on('input', function(msg, send, done) {
72119

73-
var message = '',
120+
let message = '',
121+
authSettings = {},
74122
serviceSettings = {
75123
version: '2018-05-01',
76124
headers: {
@@ -85,12 +133,14 @@ module.exports = function (RED) {
85133
}
86134

87135
if (apikey) {
88-
serviceSettings.iam_apikey = apikey;
136+
authSettings.apikey = apikey;
89137
} else {
90-
serviceSettings.username = username;
91-
serviceSettings.password = password;
138+
authSettings.username = username;
139+
authSettings.password = password;
92140
}
93141

142+
serviceSettings.authenticator = new IamAuthenticator(authSettings);
143+
94144
endpoint = sEndpoint;
95145
if ((!config['default-endpoint']) && config['service-endpoint']) {
96146
endpoint = config['service-endpoint'];
@@ -118,42 +168,26 @@ module.exports = function (RED) {
118168
}
119169

120170
function makeLanguageBeautifier(string) {
121-
var langs = {
122-
'es': 'Spanish',
123-
'ar': 'Arabic',
124-
'arz': 'Spoken Arabic',
125-
'en': 'English',
126-
'fr': 'French',
127-
'it': 'Italian',
128-
'zh': 'Chinese',
129-
'ko': 'Korean',
130-
'pt': 'Portuguese',
131-
'de': 'German',
132-
'ja': 'Japanese',
133-
'nl': 'Dutch',
134-
'pl': 'Polish',
135-
'ru': 'Russian',
136-
'tr': 'Turkish',
137-
'zh-TW' : 'Taiwanese',
138-
'zht': 'Traditional Chinese'
139-
};
140-
return langs[string];
171+
if (LANGS[string]) {
172+
return LANGS[string];
173+
}
174+
return string;
141175
}
142176
// ---- END OF UTILITY FUNCTIONS ----
143177

144178
if (lt) {
145-
lt.listModels({},function (err, models ){
146-
if (err) {
147-
node.error(err,msg);
148-
} else {
149-
msg.payload = models;
179+
node.status({fill:'blue', shape:'dot', text:'fetching models'});
180+
lt.listModels({})
181+
.then((response) => {
182+
node.status({fill:'blue', shape:'dot', text:'parsing response'});
183+
responseutils.parseResponseFor(msg, response, 'models');
150184

185+
msg.payload = msg.models;
151186
// the overall array would be used to populate the dropdown list
152187
var dropdown_array = [];
153188
var domain_src_target_model = [];
154189
var domain_src_target = '';
155190
var sTmp3 = '';
156-
msg.options_dropdown = {};
157191
msg.dropdown_object = {};
158192

159193
// Populating 'DOMAIN's into an array which would be returned by the msg object
@@ -176,13 +210,13 @@ module.exports = function (RED) {
176210
msg.options_target_lang = {};
177211
msg.target_lang_object = {};
178212

179-
for (var i = 0; i < msg.payload.models.length; i++) {
180-
ldom[i] = msg.payload.models[i].domain;
213+
for (var i = 0; i < msg.models.length; i++) {
214+
ldom[i] = msg.models[i].domain;
181215
ldom[i] = capitalize(ldom[i]);
182-
model_id_array[i] = msg.payload.models[i].model_id;
183-
src_lang_array[i] = msg.payload.models[i].source;
216+
model_id_array[i] = msg.models[i].model_id;
217+
src_lang_array[i] = msg.models[i].source;
184218
src_lang_array[i] = makeLanguageBeautifier(src_lang_array[i]);
185-
target_lang_array[i] = msg.payload.models[i].target;
219+
target_lang_array[i] = msg.models[i].target;
186220
target_lang_array[i] = makeLanguageBeautifier(target_lang_array[i]);
187221

188222
sTmp3 = makeLanguageBeautifier(target_lang_array[i]);
@@ -226,9 +260,14 @@ module.exports = function (RED) {
226260
msg.target_lang_object = Object.keys(msg.options_target_lang);
227261
msg.dropdown_object = dropdown_array;
228262

229-
node.send(msg);
230-
}
231-
});
263+
node.status({});
264+
send(msg);
265+
done();
266+
})
267+
.catch((err) => {
268+
let errMsg = payloadutils.reportError(node, msg, err);
269+
done(errMsg);
270+
});
232271
} else {
233272
node.error('Error instantiating the language service',msg);
234273
}

0 commit comments

Comments
 (0)