Skip to content

Commit 3782bde

Browse files
committed
Merge pull request #16 from telefonicaid/task/third
Task/third
2 parents 3b646a4 + 0dd2b5b commit 3782bde

File tree

1 file changed

+83
-34
lines changed

1 file changed

+83
-34
lines changed
Lines changed: 83 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
#!/usr/bin/python
22

3+
34
__author__ = 'macs'
45

5-
from flask import Flask, request, Response
6+
from flask import Flask, request, Response, g
67
from sys import argv
8+
from time import sleep
9+
import threading
710
import random
811
import json
12+
import requests
913

1014
app = Flask(__name__)
1115

1216
# Default arguments
13-
port = 7010
14-
host = '0.0.0.0'
17+
port = 6500
18+
host = '127.0.0.1'
1519

1620
# Arguments from command line
1721
if len(argv) > 1:
@@ -20,40 +24,80 @@
2024

2125
@app.route('/sync/request', methods=['POST'])
2226
def treat_sync_request():
23-
global lastRequest, myResponse, cont
27+
global last_request, cont, delay
2428

25-
my_result = {}
29+
app.logger.info("Received sync request")
30+
# Increase the number of requests
2631
cont += 1
27-
lastRequest = request.data
28-
jdata = json.loads(request.data)
29-
my_result["result"] = 'action-' + jdata['action'] + ', extra-' + jdata['extra']
30-
resp = Response()
31-
return Response(response=json.dumps(my_result), status=200, content_type='application/json', headers=resp.headers)
32+
33+
# Store the last request
34+
last_request = request.data
35+
app.logger.info('Request data received: ' + last_request)
36+
37+
# Set delay if needed
38+
if delay is not '':
39+
app.logger.info("Delay stated")
40+
sleep(int(delay))
41+
delay = ''
42+
43+
# Retrieve request information
44+
service = request.headers['fiware-service']
45+
subservice = request.headers['fiware-servicepath']
46+
button_id = json.loads(request.data)['button']
47+
headers = {'Accept': 'application/json', 'content-type': 'application/json', 'fiware-service': service,
48+
'fiware-servicepath': subservice}
49+
50+
# Generate sync response
51+
sync_response = {'externalId': generate_uid(), 'buttonId': button_id, 'details': {}}
52+
sync_response['details']['rgb'] = '66CCDD'
53+
sync_response['details']['t'] = '2'
54+
app.logger.info('Response sent: ' + json.dumps(sync_response))
55+
56+
return Response(response=json.dumps(sync_response), status=200, headers=headers)
3257

3358

3459
@app.route('/async/create', methods=['POST'])
3560
def treat_async_create():
36-
global asyncRequest
61+
global last_request
3762

38-
uid = str(random.randint(1, 999))
39-
asyncRequest[uid] = '{"state": "P"}'
40-
print asyncRequest
41-
myresp = '{"id": ' + uid + ', "details": {"rgb" : "66CCDD", "t": 2}}'
42-
return Response(response=myresp, status=200, content_type='application/json')
63+
app.logger.info("Recived async create")
64+
# Store the last request
65+
last_request = request.data
66+
app.logger.info('Request data received: ' + last_request)
4367

68+
# Retrieve callback url and buttonId from request
69+
service = request.headers['fiware-service']
70+
subservice = request.headers['fiware-servicepath']
71+
url_callback = json.loads(request.data)['callback']
72+
button_id = json.loads(request.data)['button']
4473

45-
@app.route('/async/requests', methods=['POST','GET'])
46-
def treat_async_request_all():
47-
global asyncRequest
74+
# Compose the async response
75+
async_response = {'externalId': str(generate_uid()), 'buttonId': str(button_id), 'details': {}}
76+
async_response['details']['rgb'] = '66CCDD'
77+
async_response['details']['t'] = '2'
4878

49-
return Response(response=str(asyncRequest), status=200)
79+
# Invoke callback response
80+
t = threading.Thread(target=invoke_ca, args=(async_response, url_callback, service, subservice))
81+
t.start()
82+
return Response(response='Create Received OK', status=200)
5083

5184

52-
@app.route('/async/request/<uid>', methods=['POST','GET'])
53-
def treat_async_request(uid):
54-
global asyncRequest
85+
def invoke_ca(async_response, url_callback, service, subservice):
86+
# Wait until request is finished
87+
sleep(3)
5588

56-
return Response(response=asyncRequest[uid], status=200, content_type='application/json')
89+
# Send data to urlCallback
90+
headers = {'Accept': 'application/json', 'content-type': 'application/json', 'fiware-service': service,
91+
'fiware-servicepath': subservice}
92+
app.logger.info('Response sent to ' + url_callback + ' is: ' + json.dumps(async_response))
93+
r = requests.post(url_callback, data=json.dumps(async_response), headers=headers)
94+
return r
95+
96+
97+
def generate_uid():
98+
uid = str(random.randint(1, 9999999))
99+
app.logger.info('Generated uid: ' + uid)
100+
return uid
57101

58102

59103
@app.route('/setResponseToError', methods=['GET'])
@@ -72,12 +116,19 @@ def treat_set_response_to_ok():
72116
return Response(response='Simulator set to OK', status=200)
73117

74118

119+
@app.route('/setDelayToSync', methods=['GET'])
120+
def treat_set_delay_to_sync():
121+
global delay
122+
123+
delay = request.args.get('delay')
124+
return Response(response='Delay to next sync request set to ' + delay, status=200)
125+
126+
75127
@app.route('/last', methods=['GET'])
76128
def treat_last():
77-
global lastRequest
129+
global last_request
78130

79-
resp_last = Response()
80-
return Response(response=lastRequest, status=200, content_type='application/json', headers=resp_last.headers)
131+
return Response(response=last_request, status=200)
81132

82133

83134
@app.route('/count', methods=['GET'])
@@ -88,19 +139,17 @@ def count():
88139

89140
@app.route('/reset', methods=['GET'])
90141
def reset():
91-
global lastRequest, asyncRequest, cont
92-
lastRequest = ''
93-
asyncRequest = {}
142+
global last_request, cont
143+
last_request = ''
94144
cont = 0
95145
return Response(status=200)
96146

97147

98148
# Globals
99-
lastRequest = ''
149+
last_request = ''
100150
responseError = ''
101-
myResponse = '{"details": {"rgb":"66CC00","t":2}}'
102151
cont = 0
103-
asyncRequest = {}
152+
delay = ''
104153

105154
if __name__ == '__main__':
106-
app.run(host=host, port=port)
155+
app.run(host=host, port=port, debug=True)

0 commit comments

Comments
 (0)