Nano Hash - криптовалюты, майнинг, программирование

Python передает аргументы функции Flask

Я пишу сценарий приложения Flask и столкнулся с функцией, которая принимает аргументы и функции вне приложения flask в автономном сценарии, но не принимает аргумент TFEVT_node_id, который я передаю ему внутри приложения Flask. Вот код фляги:

#################################################
# Flask Setup
#################################################
#app = Flask(__name__, static_url_path='')
app = Flask(__name__)
CORS(app)
#################################################
#global variables
TFEVT_node_id = ''
token = ''
#################################################
# CityIQ API calls
#################################################
def get_token():
    print("Get Token")
    url = 'https://auth.aa.cityiq.io/oauth/token'
    querystring = {"grant_type":"client_credentials"}

    response = requests.get(url, auth=HTTPBasicAuth(client,secret), params=querystring).json()
    token = response['access_token']
    print("Token Received")
    return token

#given a specific subasset this function returns the CityIQ traffic events for a given period of time in minutes
def get_traffic(TFEVT_node_id, lookback_minutes):
    url_string = '/events'
    url = "https://sandiego.cityiq.io/api/v2/event/assets/"+TFEVT_node_id+url_string
    ts = datetime.datetime.now().timestamp()
    CityIQ_Current_TS = int(ts*1000)
    CityIQ_TS_Calc_TS =  datetime.datetime.now() - timedelta(minutes=lookback_minutes)
    CityIQ_Starttime_TS =  int((ts-(lookback_minutes*60))*1000)
    querystring = {"eventType":"TFEVT","startTime":CityIQ_Starttime_TS,"endTime":CityIQ_Current_TS,"pageSize":"100"}
    payload = ""
    headers = {
            'Authorization': "Bearer {}".format(token),
            'Predix-Zone-Id': "SD-IE-TRAFFIC",
            'cache-control': "no-cache",
            }
    response = requests.request("GET", url, headers=headers, params=querystring).json()
    return(response)

#give it an CityIQ node ID and it will return the asset TFEVT child .
def get_asset_TFEVT(node_id):
    url = "https://sandiego.cityiq.io/api/v2/metadata/assets/"+node_id+"/subAssets"
    payload = ""
    headers = {
        'Authorization': "Bearer {}".format(token),
        'Predix-Zone-Id': "SD-IE-ENVIRONMENTAL",
        'cache-control': "no-cache",
        }
    response = requests.request("GET", url, data=payload, headers=headers).json()
    for i in response['assets']:
        if any('TFEVT' in i for i in [i][0]['eventTypes']):
            global TFEVT_node_id
            TFEVT_node_id = ([i][0]['assetUid'])
    return(TFEVT_node_id)

#test def that should be removed in production
def test(TFEVT_node_id, lookback_minutes):
    found_cars = get_traffic(TFEVT_node_id, lookback_minutes)
    print(found_cars)
    return(found_cars)

#################################################
# Flask Routes
#################################################
@app.route('/')
def hello_world():
    global token
    token = get_token()
    return 'documentation comming soon!'

@app.route('/test/<string:node_id>')
def go(node_id):
    global token
    token = get_token()
    global TFEVT_node_id
    TFEVT_node_id = get_asset_TFEVT(node_id)
    cars_list = []
    lookback_minutes = 15
    env_output = {}
    ccars = test(TFEVT_node_id, lookback_minutes)
    cars_list.append(ccars)
    env_output.update({'Cars' : cars_list})

if __name__ == '__main__':
    app.run()

Опять же, я получаю желаемый результат, когда эти функции запускаются вне приложения Flask. Внутри приложения Flask (выполнение приведенного выше кода) возвращается TypeError: функция просмотра не вернула допустимый ответ. Я проследил это до ответа 404 в функции gettraffic, где переменная минут просмотра прошла, а TFEVT_node_id — нет.

Я новичок в Python.


Ответы:


1

Ваша функция go() не имеет возврата. Ожидается ответ. См.: Об ответах.

29.06.2019
  • спасибо за ответ, однако проблема была не в этом... Даже при возврате функции go() она по-прежнему выдает ту же ошибку. 29.06.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..