функция, выполняемая в коллекции mongodb с использованием конечной точки Евы, не работает - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь реализовать функцию в качестве конечной точки, которая использует отфильтрованную коллекцию MongoDB (я получаю почтовый документ) для выполнения своей математики и возврата результата обратно клиенту.

То, что я до сих пор делал на своем app.py, было:

from __future__ import unicode_literals
from eve import Eve
import gunicorn.app.base
from gunicorn.six import iteritems
import psutil

def my_func(response):

lsne = sorted(response['var0054'])
net = response['var0054'].sum()
lne = (lsne['var0054']/net)*100

lsms = sorted(response['var0055'])
nms = response['var0055'].sum()
lms = (lsms['var0055']/nms)*100

result1 = sum(lne^2)
result2 = sum(lme^2)

response.clear()
response['ind0063'] = result1
response['ind0062'] = result2

app = Eve()
app.on_fetched_resource_myfunc += my_func

class StandaloneApplication(gunicorn.app.base.BaseApplication):
    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super(StandaloneApplication, self).__init__()
    def load_config(self):
        config = dict([(key, value) for key, value in iteritems(self.options)
                       if key in self.cfg.settings and value is not None])
        for key, value in iteritems(config):
            self.cfg.set(key.lower(), value)
    def load(self):
        return self.application

if __name__ == '__main__':
    NUM_CORES = psutil.cpu_count()
    options = {
        'bind': '%s:%s' % ('0.0.0.0', '8000'),
        'workers': NUM_CORES * 2 + 1,
        'worker_class': 'gevent',
        'threads': 2 * NUM_CORES
    }

    StandaloneApplication(app, options).run()

а по моему settings.py:

 MONGO_URI = "mongodb://localhost:27017/portal_db"

tab_schema = {
"schema": {
    "var0046":{"type": "integer"},
    "var0048":{"type": "integer"},
    "var0052":{"type": "integer"},
    "var0058":{"type": "integer"},
    "var0054":{"type": "integer"},
    "var0055":{"type": "integer"}
    }
}

myfunc = {
'datasource': {
    'source': 'tab0043'
},
'pagination': False
}

DOMAIN = {
"tab0043": tab_schema,
"myfunc": myfunc
}   

Я могу получить доступ к своим данным через "http://0.0.0.0:8000/tab0043", но когда я пробую конечную точку «http: 0.0.0.0: 8000 / myfunc», я получаю сообщение об ошибке:

curl: (52) Empty reply from server
...