# Buggy code
def post(self, name):
    global model_swapping_map
    data = request.json

    from_data = g.default_store.get_datasource_obj(data.get("data_source_name"))

    try:
        format_flag = data.get("format_flag")
    except:
        format_flag = "explain"

    try:
        kwargs = data.get("kwargs")
    except:
        kwargs = {}

    if type(kwargs) != type({}):
        kwargs = {}

    if from_data is None:
        from_data = data.get("from_data")
    if from_data is None:
        from_data = data.get("when_data")
    if from_data is None:
        abort(400, "No valid datasource given")

    # Not the fanciest semaphor, but should work since restplus is multi-threaded and this condition should rarely be reached
    while name in model_swapping_map and model_swapping_map[name] is True:
        time.sleep(1)

    results = g.mindsdb_native.predict(name, when_data=from_data, **kwargs)
    return preparse_results(results, format_flag)


# Traceback (AttributeError)
2020-06-25 14:30:32,318 - INFO - Starting MindsDB Mysql proxy server on tcp://127.0.0.1:47335
2020-06-25 14:30:32,334 - INFO - Waiting for incoming connections...
127.0.0.1 - - [25/Jun/2020 14:31:14] "GET /util/ping HTTP/1.1" 200 -
Exception on /datasources/ [GET]
Traceback (most recent call last):
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask_restx/api.py", line 375, in wrapper
resp = resource(*args, **kwargs)
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask/views.py", line 89, in view
return self.dispatch_request(*args, **kwargs)
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask_restx/resource.py", line 44, in dispatch_request
resp = meth(*args, **kwargs)
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/flask_restx/marshalling.py", line 248, in wrapper
resp = f(*args, **kwargs)
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/mindsdb/api/http/namespaces/datasource.py", line 40, in get
return g.default_store.get_datasources()
File "/home/zoran/MyProjects/mindsdb-examples/new/lib/python3.7/site-packages/werkzeug/local.py", line 347, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: '_AppCtxGlobals' object has no attribute 'default_store'
127.0.0.1 - - [25/Jun/2020 14:31:18] "GET /datasources/ HTTP/1.1" 500 -
Exception on /datasources/ [GET]

# Fixed code
def post(self, name):
    global model_swapping_map
    data = request.json

    from_data = ca.default_store.get_datasource_obj(data.get("data_source_name"))

    try:
        format_flag = data.get("format_flag")
    except:
        format_flag = "explain"

    try:
        kwargs = data.get("kwargs")
    except:
        kwargs = {}

    if type(kwargs) != type({}):
        kwargs = {}

    if from_data is None:
        from_data = data.get("from_data")
    if from_data is None:
        from_data = data.get("when_data")
    if from_data is None:
        abort(400, "No valid datasource given")

    # Not the fanciest semaphor, but should work since restplus is multi-threaded and this condition should rarely be reached
    while name in model_swapping_map and model_swapping_map[name] is True:
        time.sleep(1)

    results = ca.mindsdb_native.predict(name, when_data=from_data, **kwargs)
    return preparse_results(results, format_flag)