Hi,
This is AJAX to flask server project.
For more info about this project I have a couple postings about it here, please see link-1 link-2
When I run the python code in the terminal I get the TypeError: ‘top_block_22’ object is not callable error. The program starts running without problems, but once I start moving the slider the program will give that error.
More details:
This is AJAX to flask server project. I created a ‘Slider’ folder inside Flask directory : /home/fit-pc/my_flask_app/virtualenv/Slider. In this folder I have Templates and Static folders. Inside Templates folder I have my index.html file (see below). This index.html file had the script for the roundSlider widget that I am trying to use to control some variable value inside my python code ‘top_block_22.py’. My main python code is in the main Slider folder. Static folder is just empty.
Please, I need your help to solve this problem.
error log:
fit
-
pc@fitpc
-
fitlet2:~$ python
/
home
/
fit
-
pc
/
my_flask_app
/
virtualenv
/
Slider
/
top_block_22.py
*
Running on http:
/
/
127.0
.
0.1
:
5000
/
(Press CTRL
+
C to quit)
*
Restarting with stat
*
Debugger
is
active!
*
Debugger PIN:
269
-
962
-
008
127.0
.
0.1
-
-
[
26
/
Jul
/
2019
11
:
20
:
11
]
"GET / HTTP/1.1"
200
-
gr::log :INFO: audio source
-
Audio sink arch: alsa
127.0
.
0.1
-
-
[
26
/
Jul
/
2019
11
:
20
:
15
]
"GET /valueofslider?slide_val=903 HTTP/1.1"
500
-
Traceback (most recent call last):
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1997
,
in
__call__
return
self
.wsgi_app(environ, start_response)
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1985
,
in
wsgi_app
response
=
self
.handle_exception(e)
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1540
,
in
handle_exception
reraise(exc_type, exc_value, tb)
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1982
,
in
wsgi_app
response
=
self
.full_dispatch_request()
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1615
,
in
full_dispatch_request
return
self
.finalize_request(rv)
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1630
,
in
finalize_request
response
=
self
.make_response(rv)
File
"/usr/lib/python2.7/dist-packages/flask/app.py"
, line
1740
,
in
make_response
rv
=
self
.response_class.force_type(rv, request.environ)
File
"/usr/lib/python2.7/dist-packages/werkzeug/wrappers.py"
, line
921
,
in
force_type
response
=
BaseResponse(
*
_run_wsgi_app(response, environ))
File
"/usr/lib/python2.7/dist-packages/werkzeug/wrappers.py"
, line
59
,
in
_run_wsgi_app
return
_run_wsgi_app(
*
args)
File
"/usr/lib/python2.7/dist-packages/werkzeug/test.py"
, line
923
,
in
run_wsgi_app
app_rv
=
app(environ, start_response)
TypeError:
'top_block_22'
object
is
not
callable
And here is the Python code:
from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
from flask import Flask, render_template, jsonify, request, redirect, url_for
from random import randint
class top_block_22(gr.top_block):
def __init__(self, slide_val):
self.slide_val = slide_val
gr.top_block.__init__(self, "Top Block 22")
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 32000
##################################################
# Blocks
##################################################
self.blocks_add_xx = blocks.add_vff(1)
self.audio_sink = audio.sink(32000, '', True)
self.analog_sig_source_x_1 = analog.sig_source_f(samp_rate, analog.GR_COS_WAVE, 440, 0.4, 0)
self.analog_sig_source_x_0 = analog.sig_source_f(samp_rate, analog.GR_COS_WAVE, 350, 0.4, 0)
self.analog_noise_source_x_0 = analog.noise_source_f(analog.GR_GAUSSIAN, 0.005, -42)
##################################################
# Connections
##################################################
self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx, 2))
self.connect((self.analog_sig_source_x_0, 0), (self.blocks_add_xx, 0))
self.connect((self.analog_sig_source_x_1, 0), (self.blocks_add_xx, 1))
self.connect((self.blocks_add_xx, 0), (self.audio_sink, 0))
app = Flask(__name__)
@app.route('/')
def hex_color():
return render_template("index.html")
@app.route('/valueofslider')
def slide():
slide_val = request.args.get('slide_val')
return top_block_22(slide_val)
def main(top_block_cls=top_block_22, options=None):
tb = top_block_cls()
tb.start()
try:
raw_input('Press Enter to quit: ')
except EOFError:
pass
tb.stop()
tb.wait()
samp_rate = int(slide_val) + 100
print(samp_rate)
return(slide_val) # Still need to return or get TypeError
if __name__ == '__main__':
app.run(debug=True)
And this is the index.html script:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery roundSlider - JS Bin</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/roundSlider/1.3.2/roundslider.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/roundSlider/1.3.2/roundslider.min.js"></script>
</head>
<body>
<!-- Only html needed -->
<div id="slider"></div>
<script>
var val;
$("#slider").roundSlider({
radius: 215,
min: 0,
max: 40000,
change: function () {
var obj1 = $("#slider").data("roundSlider");
val = obj1.getValue();
value: 1
$.getJSON('/valueofslider', {
slide_val: val
});
}
});
</script>
</body>