Получить список всех маршрутов, определенных в приложении Falcon - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть RESTful маршруты в приложении Falcon, определенные как упрощенные коды ниже.Мой вопрос заключается в том, как получить список всех маршрутов с их сопоставленными обработчиками?

Мой поиск в Google приводит к мало полезным страницам - одна похожая проблема решена для приложения Flask здесь но ни одна страница не говорит о Соколе.

api = falcon.API(middleware=middleware)
api.add_route('/v1/model_names1', SomeHandlerMappingResource1())
api.add_route('/v1/model_names2', SomeHandlerMappingResource2())

class SomeHandlerMappingResource1:
    def on_get(self, req, resp):
        pass # some biz logic of GET method
    def on_post(self, req, resp):
        pass # some biz logic of POST method
    # etc.

class SomeHandlerMappingResource2:
    pass # similar to handler resource 1 above 

1 Ответ

0 голосов
/ 04 февраля 2019

Приведенный ниже код вернет список кортежей с URL и соответствующими им ресурсами:

def get_all_routes(api):
    routes_list = []

    def get_children(node):
        if len(node.children):
            for child_node in node.children:
                get_children(child_node)
        else:
            routes_list.append((node.uri_template, node.resource))
    [get_children(node) for node in api._router._roots]
    return routes_list

Вывод

[
    ('/v1/things', <v1.v1_app.ThingsResource object at 0x7f555186de10>), 
    ('/v2/things', <v2.v2_app.ThingsResource object at 0x7f5551871470>), 
    ('/v3/things/{name}', <v3.v3_app.ThingsResource object at 0x7f5551871ba8>)
]

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


Если вам не нравится вышеуказанная функция, вы можете добиться чего-то похожего, расширив класс API.

Я сделал Github-репо для управления версиями приложения Falcon, из которого вы можете получить представление о разделении URL-адресов и их относительных ресурсов. Github Link

Вы можете иметь список маршрутов и добавить их с помощью Extended API-класс

URL-адреса и ресурсыбудет как:

from v1.v1_app import things

urls = [
    ('/things', things),
]
...