Skip to content

Commit 9028d61

Browse files
committed
Merge branch 'feature/api-header' into development
2 parents 7690bbd + b6b0c53 commit 9028d61

File tree

6 files changed

+59
-12
lines changed

6 files changed

+59
-12
lines changed

app/endpoint/controllers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ def api():
169169
if intent.apiTrigger:
170170
isJson = False
171171
parameters = result_json["extractedParameters"]
172-
172+
headers = intent.apiDetails.get_headers()
173+
app.logger.info("headers %s"%headers)
173174
url_template = Template(
174175
intent.apiDetails.url, undefined=SilentUndefined)
175176
rendered_url = url_template.render(**context)
@@ -181,7 +182,7 @@ def api():
181182

182183
try:
183184
result = call_api(rendered_url,
184-
intent.apiDetails.requestType,
185+
intent.apiDetails.requestType,headers,
185186
parameters, isJson)
186187
except Exception as e:
187188
app.logger.warn("API call failed", e)

app/endpoint/utils.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_synonyms():
2222
app.logger.info("loaded synonyms %s",synonyms)
2323
return synonyms
2424

25-
def call_api(url, type, parameters = {}, is_json=False):
25+
def call_api(url, type,headers={}, parameters = {}, is_json=False):
2626
"""
2727
Call external API
2828
:param url:
@@ -33,19 +33,19 @@ def call_api(url, type, parameters = {}, is_json=False):
3333
"""
3434
app.logger.info("Initiating API Call with following info: url => {} payload => {}".format(url,parameters))
3535
if "GET" in type:
36-
response = requests.get(url, params=parameters)
36+
response = requests.get(url,headers=headers, params=parameters)
3737
elif "POST" in type:
3838
if is_json:
39-
response = requests.post(url, json=parameters)
39+
response = requests.post(url,headers=headers, json=parameters)
4040
else:
41-
response = requests.post(url, params=parameters)
41+
response = requests.post(url,headers=headers, params=parameters)
4242
elif "PUT" in type:
4343
if is_json:
44-
response = requests.put(url, json=parameters)
44+
response = requests.put(url,headers=headers, json=parameters)
4545
else:
46-
response = requests.put(url, params=parameters)
46+
response = requests.put(url,headers=headers, params=parameters)
4747
elif "DELETE" in type:
48-
response = requests.delete(url, params=parameters)
48+
response = requests.delete(url,headers=headers, params=parameters)
4949
else:
5050
raise Exception("unsupported request method.")
5151
result = json.loads(response.text)

app/intents/controllers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def create_intent():
3636
api_details.jsonData = content.get("apiDetails").get("jsonData")
3737

3838
api_details.url = content.get("apiDetails").get("url")
39+
api_details.headers = content.get("apiDetails").get("headers")
3940
api_details.requestType = content.get("apiDetails").get("requestType")
4041
intent.apiDetails = api_details
4142
else:

app/intents/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ class ApiDetails(EmbeddedDocument):
3030
"DELETE",
3131
"PUT"],
3232
required=True)
33+
headers = ListField(default=[])
3334
isJson = BooleanField(default=False)
3435
jsonData = StringField(default="{}")
3536

37+
def get_headers(self):
38+
headers = {}
39+
for header in self.headers:
40+
headers[header["headerKey"]]=header["headerValue"]
41+
return headers
3642

3743
class Intent(Document):
3844
name = StringField(max_length=100, required=True, unique=True)

frontend/src/app/agent/intent/intent.component.html

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,27 @@ <h2>Parameters
4848
<h3>
4949
<mat-checkbox formControlName="apiTrigger">API trigger</mat-checkbox>
5050
</h3>
51-
<section [formGroup]="intentForm.controls.apiDetails" *ngIf="apiTrigger()" fxLayout="column" fxLayoutGap="10px">
5251

52+
<section [formGroup]="intentForm.controls.apiDetails" *ngIf="apiTrigger()" fxLayout="column" fxLayoutGap="10px">
53+
<h3>HTTP Headers
54+
<button type="button" mat-mini-fab (click)="addHeader()" color="primary">
55+
<mat-icon aria-label="Add header">add</mat-icon>
56+
</button>
57+
</h3>
58+
<div class="api-headers" *ngFor="let header of intentForm.controls.apiDetails.controls.headers.controls; let j=index;" fxLayoutGap="10px">
59+
<div fxLayout="row" [formGroup]="header" fxLayoutGap="10px">
60+
<mat-form-field fxFlex="40">
61+
<input matInput formControlName="headerKey" placeholder="new key">
62+
</mat-form-field>
63+
<mat-form-field fxFlex="40">
64+
<input matInput formControlName="headerValue" placeholder="value">
65+
</mat-form-field>
66+
<button mat-icon-button (click)="deleteHeader(j)">
67+
<mat-icon aria-label="Delete this Header">delete</mat-icon>
68+
</button>
69+
</div>
5370

71+
</div>
5472

5573
<div fxLayout="row" fxLayoutGap="20px">
5674
<mat-form-field fxFlex="90">

frontend/src/app/agent/intent/intent.component.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class IntentComponent implements OnInit {
4040
intentId: [''],
4141
userDefined: [true],
4242
speechResponse: [''],
43-
apiTrigger: [''],
43+
apiTrigger: [false],
4444
apiDetails: this.initApiDetails(),
4545
parameters: this.fb.array(
4646
this.intent && this.intent.parameters ? this.intent.parameters.map(n => {
@@ -99,8 +99,12 @@ export class IntentComponent implements OnInit {
9999

100100
initApiDetails(parameter = null) {
101101
const fields = {
102-
isJson: [''],
102+
isJson: [false],
103103
url: [''],
104+
headers: this.fb.array(
105+
this.intent && this.intent.apiTrigger ? this.intent.apiDetails.headers.map(n => {
106+
return this.initApiHeaders();
107+
}) : []),
104108
requestType: [''],
105109
jsonData: ['']
106110
};
@@ -110,7 +114,24 @@ export class IntentComponent implements OnInit {
110114
}
111115
return g;
112116
}
117+
initApiHeaders() {
118+
const fields = {
119+
headerKey: [''],
120+
headerValue: [''],
121+
};
122+
const g = this.fb.group(fields);
123+
return g;
124+
}
125+
126+
addHeader(){
127+
const header = <FormArray>this.intentForm.controls["apiDetails"]["controls"]["headers"];
128+
header.push(this.initApiHeaders());
113129

130+
}
131+
deleteHeader(j) {
132+
const control = <FormArray>this.intentForm.controls["apiDetails"]["controls"]["headers"];
133+
control.removeAt(j);
134+
}
114135
save() {
115136
const form = this.intentForm.value;
116137
if (form._id && form._id.$oid) {

0 commit comments

Comments
 (0)