Задать вопрос
  • Дублирование логов в python logging?

    Vindicar
    @Vindicar
    Юрий, ну это зависит от задачи.
    Если тебе нужен раздельный логгинг на постоянной основе - просто создай несколько объектов logging.Logger. Например, дочерние лог-объекты по умолчанию прокидывают сообщения родителям.
    logger = logging.getLogger(__name__)
    logger_dump = logger.getChild('info')
    # logger_dump = logging.getLogger(f'{__name__}.info')  # сделало бы то же самое

    Тогда на logger_dump можешь навесить дополнительный handler, и любое сообщение в этот лог будет обрабатываться и logger в целом, и logger_dump в частности. Но, конечно, не стоит создавать отдельный логгер вообще на каждую функцию.

    Альтернативно, неважную инфу можешь скинуть на уровень debug, а более важную на info. При этом обрати внимание на первый параметр Handler-класса - это уровень, который он будет писать. Т.е. у тебя на одном логе может висеть два хэндлера-логописца, но один будет писать всё подряд, а другой - только не ниже info, например. Но тогда warning и выше тоже пойдёт в оба обработчика - не думаю, что тебе это надо.
    Написано
  • Дублирование логов в python logging?

    Vindicar
    @Vindicar
    Юрий, какой пример? Код за тебя написать?
    class MyHandler(logging.Handler):
        def __init__(self, level=logging.NOTSET, ...):  # в конструктор передаёшь подключение к БД, имя таблицы ну и что там ещё надо
            super().__init__(level)
            ...   # тут сохраняешь полученное подключение, проверяешь наличие таблицы и т.п.
    
        def emit(self, record: logging.LogRecord) -> None:
            # этот метод будет вызван уже после применения фильтров: по уровню и кастомных
            ...  # пишешь тут логику записи в БД. Логами внутри этого метода пользоваться нельзя!
    
    
    class MyFilter(logging.Filter):
        def filter(self, record: logging.LogRecord) -> bool:
            # тут определяешь, представляет ли для тебя интерес сообщение record
            return True  # если представляет, верни True, иначе False

    А настройки как-то так:
    loghandler = MyHandler(logging.NOTSET, ...)  # экземпляр твоего логописца
    logfilter = MyFilter()  # экземпляр фильтра
    loghandler.addFilter(logfilter)  # привязываем фильтр
    log = logger.getLogger(...)
    log.addHandler(loghandler)  # привязываем логописец


    Если честно, у тебя логи настроены как говно - важная и неважная инфа из разных частей программы сыпется в один и тот же лог с одним и тем же уровнем. Или раздели её в разные логи с отдельными настройками, или логируй её с разным уровнем. Тогда и свой фильтр не потребуется. А вот если не судьба разделить выводимое раз и навсегда... тогда без фильтра никак.
    Написано
  • Никакой vpn не работает ни amnezia vpn wg, tor, vless + reality?

    Vindicar
    @Vindicar
    MisterRobotsk,
    Полагаете, что есть какое-то сопоставление вида "пользователь домашнего интернета подключён к IP 6.7.8.9 и оттуда же одновременно происходит коннект к такому-то сайту", и на основе этого принимается решение, что это ВПН?

    Да, именно так. Правда, какой-то странный у тебя белый список, если трафик на впн-сервер не блокируется заодно с остальным.
    Написано
  • Как скачать ChatGPT из Google play?

    Vindicar
    @Vindicar
    Не проще использовать через сайт? Странице доступно меньше инфы, чем приложению, забанить сложнее.
    Написано
  • Как получить из URL имя страницы?

    Vindicar
    @Vindicar
    С моим кодом

    Код словно нейронка писала, причем по запросу типа "Как получить из URL имя страницы код питон", а не по задаче в целом. Даже из примера видно что title страницы тут ни причем.
    Написано
  • Есть ли способ сжать данные?

    Vindicar
    @Vindicar
    firstmixon, в какие массивы? numpy?
    В нумпи есть отображаемые в память массивы (memmap). Это файл, который сам подчитывается в память по мере надобности.
    А вообще, повторяю вопрос: как именно выглядят данные, какие операции с ними выполняются?
    Написано
  • Есть ли способ сжать данные?

    Vindicar
    @Vindicar
    Сжать-то можно, но вот работать с ними потом как?
    Какие операции ты планируешь выполнять, будешь ли ты хранить эти данные всегда в памяти, или в отдельном хранилище, откуда их можно подгружать постепенно, и т.п.
    Написано
  • Как запустить отдельный скрипт в субпроцессах, получив интерфейс типа concurrent.futures.Executor?

    Vindicar
    @Vindicar Автор вопроса
    rPman, основной скрипт тащит несколько тяжёлых модулей типа scipy. Они будут импортированы и в клон, порождённый мультипроцессингом. Хотя я могу попробовать завернуть импорты и объявление классов в тело программы, т.е. что-то типа.
    import asyncio
    import module_A  # модуль A нужен воркеру
    
    def worker_func(x):  # функция-воркер
        ...
    
    async def main():
        import module_B
        import module_C
        import concurrent.futures as cf
        ...
    
    if __name__ == '__main__':
        asyncio.run(main())

    Но проблема в том, что worker_func() находится глубоко в одном из моих модулей, которые я подключаю динамически через importlib. Я пока ещё пишу прототип, который позволит проверить, помешает это или нет.
    Написано
  • Как правильно спроектировать эту функцию?

    Vindicar
    @Vindicar
    Kirgus, то, что ты пытался сделать, реализуется через functools.singledispatch. Но на практике обычно можно (и нужно) обойтись более простыми и очевидными способами.
    Написано
  • Как правильно спроектировать эту функцию?

    Vindicar
    @Vindicar
    Everything_is_bad, погодь, я кое-что вспомнил...
    Написано
  • Как правильно спроектировать эту функцию?

    Vindicar
    @Vindicar
    Everything_is_bad, это тоже вариант, да. Просто я не знаю, как у него распределены обязанности в коде, поэтому пока придерживаюсь более близкого к оригиналу варианта.
    Написано
  • Можно ли отключить SSL сертификат при парсинге?

    Vindicar
    @Vindicar
    Для работы использовал прокси из библиотеки proxybroker2 с настройками
    [("HTTP", ("Anonymous", "High")), ("HTTPS", ("Anonymous", "High"))]

    Ну судя по тому, что эти прокси делают подмену SSL сертификата, доверия им нет и быть не может.
    Написано
  • Как сделать, чтобы pyrogram корректно получал id чата и сохранял в бд для будущего использования?

    Vindicar
    @Vindicar
    В приведённом тобой коде нет ни одной строки, где в лог выводилось бы сообщение "не является участником чата с кэшированным ID". Так что я хз что у тебя происходит, так как ты не показал код, который реально выполняется.
    Написано
  • SSH +reverse https proxy, при чём тут openSSL(VPN)?

    Vindicar
    @Vindicar
    Нейронка не поняла вопроса в посте.
    Написано
  • SSH +reverse https proxy, при чём тут openSSL(VPN)?

    Vindicar
    @Vindicar
    Quqas, ну я фз что это за примеры.

    Но вообще-то тут нужно понимать, как работает опция ProxyCommand. Я это понимаю таким образом:
    Обычно SSH-клиент устанавливает сетевое соединение, производит handshake (договаривается с сервером о ключе, алгоритме шифрования, убеждается, что сервер тот, за кого себя выдаёт, и т.п.), потом организует шифрованный канал и начинает рабочую сессию.
    Если используется опция ProxyCommand, то вместо установки сетевого соединения SSH-клиент выполняет указанную команду, и использует её пару stdin-stdout в качестве сетевого соединения. Далее всё то же самое: handshake, шифрованный канал, рабочая сессия.

    Т.е. чтобы приведённый пример работал, нужно чтобы на целевом сервере на 443 порту крутился какой-то реверс-прокси (точнее, TLS termination proxy), который распакует трафик из туннеля и пробросит его на порт, который слушает SSH-сервер. Имхо, SSH-сервер про эти фокусы вообще ничего не знает.
    Написано
  • SSH +reverse https proxy, при чём тут openSSL(VPN)?

    Vindicar
    @Vindicar
    Quqas, во, это стоило в вопрос написать.
    ssh сервер зависит от реализации - некоторые используют OpenSSH для шифрования. Но толку от этого не будет, так как получится, что от клиента поступает трафик, "обёрнутый в два слоя", а сервер снимает только один слой.
    Так что нужно будет что-то на обоих концах. Есть возможность при загрузке запустить на роутере openssl с серверным настройками?
    Написано
  • Как совместить два .pdf файла?

    Vindicar
    @Vindicar
    Во-первых, честно скажи, код нейронка писала?
    Во-вторых, что-то я не понял, что именно ты пытаешься сделать. А без этого не определишь, есть ошибки в логике или нет.
    В-третьих, каким образом и сколько раз вызывается эта функция?
    Написано
  • Не копятся ли строки в памяти при работе с python?

    Vindicar
    @Vindicar
    fenrir, Ну с интернированными строками ничего не поделаешь.
    А так, я просто имел ввиду, что в релаьном коде всё может быть намного сложнее, и строку может удерживать что-то вне цикла.
    Написано
  • Как вывести время в шаблоне Django в соответствии с часовым поясом?

    Vindicar
    @Vindicar
    DenisProk, я бы это не делал.
    Вопрос такой: в БД лежит корректное время, если считать его заданным в UTC (зона +0)?
    Если да, то меняй форматирование при выводе времени, или вообще не парься.
    Если нет, то меняй код, который его туда вносит.
    Написано