Внедрите консоль в Da sh, которая обновляется со статусом промежуточных шагов на сервере. - PullRequest
1 голос
/ 05 августа 2020

Что у меня есть: В основном у меня есть панель инструментов в Da sh Python, на которой есть кнопка GetData. Обработчик обратного вызова для этой кнопки получает данные из 3 источников, диаграмм dr aws 3 и отправляет обратно выходной Div, красиво оборачивая все эти диаграммы. У меня также есть текстовая область на экране клиента, которая обновляется после того, как вся работа будет выполнена на сервере, и служит консолью.

Что я хочу:

Специальная область на экране клиента для вести текущий журнал действий, инициированных на сервере клиентом. Это означало бы,

a) Я хотел бы обновить текст в консоли, добавив статус промежуточных шагов на сервере. На мой взгляд, я могу обновить значение в текстовой области только ОДИН РАЗ, прямо в конце обработчика обратного вызова кнопки. б) Я также хотел бы связать эту консоль в качестве вывода с несколькими обратными вызовами кнопок, чтобы я мог отправлять журнал того, что происходит на сервере, с запросом клиента обратно клиенту.

Мысли?

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Мне удалось добиться этого,

a) Запись в файл журнала. б) Использование компонента ad cc .Interval с выводом, привязанным к текстовой области, которая опрашивает файл журнала и показывает последние 20 строк из него

Пока есть только один пользователь / клиент, но когда их станет больше, нужно подумать о фильтрации и т. п.

1 голос
/ 06 августа 2020

Для этого типа использования я обычно использую варианты следующего подхода

  1. Сгенерируйте уникальный ключ для каждого экземпляра журнала, например, если вам нужны все журналы для текущего пользователя, вы можете использовать идентификатор сеанса или GUID, сгенерированный при загрузке страницы
  2. Во время выполнения обратного вызова на сервере выходные данные журнала записываются в ресурс на стороне сервера (кэш Redis, файл и т. д. c.), идентифицированный ключом
  3. Используя обратный вызов, инициированный компонентом Interval, и ключ как State (чтобы можно было определить правильный журнал), журнал считывается с сервера
0 голосов
/ 05 августа 2020

Я не уверен, что это сработает, но вы можете создать декоратор журналирования прямо перед обратным вызовом как таковым:

@callback(...)
@myLogger
def function(a, b, c):
    pass

def myLogger(fn):
     @wraps    
     def wrapper(*args, **kwargs)
        code_info = fn.__code__
        code_vars = fn.__code__.co_names ## There are many options here
                                         ## check fn.__code__.__dict__ 
                                         ## in repl
        retval = fn(args, kwargs)
        print(f"func: {fn.__name__}, args: {args}, kwargs: {kwargs}, retval: {retval}")
        return retval
     return wrapper

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

callback(myLogger(function(...)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...