Запрос встроенного документа Python Eve

Есть ли способ запросить встроенный документ в канун Python? Например: у меня есть следующий ответ:
URL: http://127.0.0.1:5000/shipments/57fafd5bb9211367f5b2006e

{
    "_updated": "Mon, 10 Oct 2016 02:30:51 GMT",
    "track": "57fafd5bb9211367f5b2006d",
    "ref_no": "268771821909",
    "_created": "Mon, 10 Oct 2016 02:30:51 GMT",
    "_id": "57fafd5bb9211367f5b2006e",
    "_etag": "af5af366b7dba18456be6112c59172b1dfe21593"
}

Ниже приведен ответ, когда для встроенного документа установлено значение 1: URL-адрес: http://127.0.0.1:5000/shipments/57fafd5bb9211367f5b2006e?embedded={"track":1}

{
"_updated": "Mon, 10 Oct 2016 02:30:51 GMT",
"track": {
    "_updated": "Mon, 10 Oct 2016 02:37:57 GMT",
    "tracks": [
        {
        "status": "MS",
        "remark": "None",
        "datetime": "Mon, 10 Oct 2016 02:30:51 GMT"
        },
        {
        "status": "DP",
        "remark": "Not Good",
        "datetime": "Mon, 10 Oct 2016 02:31:51 GMT"
        }
        ],
    "_created": "Mon, 10 Oct 2016 02:30:51 GMT",
    "_id": "57fafd5bb9211367f5b2006d",
    "_etag": "9eac811c400d9c8a9507ae83988daeb5a5ec5c6c"
    },
"ref_no": "268771821909",
"_created": "Mon, 10 Oct 2016 02:30:51 GMT",
"_id": "57fafd5bb9211367f5b2006e",
"_etag": "af5af366b7dba18456be6112c59172b1dfe21593"
}

Схема дорожек:

schema = {
    'awb_number' : {'type' : 'string'},
    'tracks'     : {'type':'list',
            'schema' : { 'type':'dict',
            'schema'   : {
            'status'   : {'type':'string', 'allowed': STATUS},
            'remark'   : {'type':'string', 'allowed': REMARK},
            'datetime' : {'type':'string'},
            }
        }
    }

}

Теперь я хочу запросить status последнего элемента в массиве tracks. Что-то вроде этого в Python:

if tracks[-1]['status'] == 'DP': print 'Do this'.

Но я не уверен, как я могу запросить то же самое в URL-адресе.


person Shashank Sachan    schedule 10.10.2016    source источник
comment
schema[''tracks'']["status"] должен привести вас туда, вы не можете индексировать словари с порядком, так как это неупорядоченная коллекция.   -  person kpie    schedule 10.10.2016
comment
tracks - это список, поэтому я пытаюсь использовать tracks[-1], которые дадут мне последний элемент списка (который будет словарем), а затем я пытаюсь получить значение ключа «status»: tracks[ -1].status, но не уверен, что мы можем сделать то же самое в URL   -  person Shashank Sachan    schedule 10.10.2016
comment
треки[-1][статус]   -  person kpie    schedule 10.10.2016


Ответы (2)


Я хочу запросить статус последнего элемента в массиве дорожек. Что-то вроде этого в Python

Вам нужно получить ответ на то, что вы запросили после всего взаимодействия с базой данных и встраивания (если таковые имеются). Этого можно добиться, добавив перехватчик событий.

Вы можете попробовать что-то вроде

def do_something_with_result(resource, response):
    '''
       resource: contains who called (in your case, shipments probably)
       response: the data which you get back after the fetching
    '''

Ответом будет словарь, содержащий данные, где вы можете найти track. Теперь эту функцию нужно добавить в текущее приложение фляги как событие.

from flask import current_app as app

app.on_fetched_item += do_something_with_result

Обратите внимание, что это будет срабатывать после извлечения каждого элемента. Если вы хотите конкретно для одного конкретного ресурса on_fetched_item_<resource_name>. Затем сигнатура прежней функции меняется на do_something_with_result(response)

person Bineeth Mohan    schedule 25.09.2018
comment
Привет @BineethMohan, не могли бы вы добавить больше деталей в свой ответ? Если вы не уверены, посетите справочный центр, чтобы получить помощь по как написать хороший ответ. - person toti08; 25.09.2018
comment
Обновил ответ. Оставьте отзыв, так как это мой первый ответ. Спасибо :) - person Bineeth Mohan; 26.09.2018

Я пробовал это, и это работает.

client = MongoClient('localhost', 27017)
db = client['test']
collection = db["interests"]

r=collection.find({})
for data in r:
    for i in data['mylist']:
        if i['status']=='no':
           print("done")

Моя схема интересов выглядела так:

interests={
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'schema':{
    'interest':{
        'type':'objectid',
        'required':True,
        'data_relation': {
            'resource': 'works',
            # make the owner embeddable with ?embedded={"owner":1}
            'embeddable': True
        },
    },
    'mylist':{
        'type':'list',
        'schema':{
            'type':'dict',
            'schema':{
                'myfield':{
                    'type':'string'
                },
                'status':{
                    'type':'string'
                }
            }
        }
    }
  }
}

Надеюсь, это решит вашу проблему.

person Eswar    schedule 15.02.2019