Задать вопрос
  • Как передать в данном примере объект в функцию в данном примере websocket.WebSocketApp?

    Kanakagawa
    @Kanakagawa
    Увлекаюсь программированием на языке python
    Можно передать объект c в функцию on_message с использованием lambda-функции или partial-функции из модуля functools.
    from modules.config import Config
    import json
    import websocket
    import _thread
    import time
    import rel
    from functools import partial
    
    def on_message(c, ws, message):
        print(c.some_property)  # Пример использования свойства объекта Config
        print(message)
    
    # Остальные функции on_error, on_close, on_open остаются без изменений
    
    if __name__ == '__main__':
        c = Config()
        websocket.enableTrace(True)
        ws = websocket.WebSocketApp("ws://echo.websocket.events",
                                    on_open=on_open,
                                    on_message=partial(on_message, c),  # Передача объекта c через partial-функцию
                                    on_error=on_error,
                                    on_close=on_close)
    
        ws.run_forever(dispatcher=rel,
                       reconnect=5)
        rel.signal(2, rel.abort)
        rel.dispatch()
    Ответ написан
    Комментировать
  • Как правильно поставлять готовые приложения на Python?

    @PNEroshevich
    Я пришел к следующему варианту, требовалось разворачивать микросервисы на машине без интернета. Чтобы собрать папку с пакетами (под windows)
    for /F "tokens=*" %%i in (requirements.txt) do (
    python.exe -m pip download --quiet --platform manylinux2014_x86_64 --platform linux_x86_64 --python-version 310 --platform any --only-binary=:all: -d \dist %%i
    )


    А для установки

    python -m pip install --no-deps -r requirements.txt --no-index --find-links   /dist


    Пакеты скачиваются под определенную платформу, может отличаться
    Ответ написан
    Комментировать
  • Почему iter из пакета ElementTree не находит тэги?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    При поиске тегов вам нужно указывать пространство имен:
    import requests
    from xml.etree import ElementTree
    
    response = requests.get(
        'https://s3-ap-northeast-1.amazonaws.com/data.binance.vision?delimiter=/&prefix=data/spot/monthly/klines/BTCUSDT/1h/')
    print(response)
    archive_tree = ElementTree.fromstring(response.content)
    namespace = archive_tree.tag.split('}')[0].strip('{')
    for files in archive_tree.iter(f'{{{namespace}}}Key'):
        print(files.text)

    Output:
    <Response [200]>
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-08.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-08.zip.CHECKSUM
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-09.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-09.zip.CHECKSUM
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-10.zip
    data/spot/monthly/klines/BTCUSDT/1h/BTCUSDT-1h-2017-10.zip.CHECKSUM
    ...
    Ответ написан
    Комментировать
  • Как в bootsrap5 растянуть ( !не прижать! ) блок до низа страницы?

    neuotq
    @neuotq
    Прокрастинация
    Можно сделать на флексах
    main - делаем минимум во весь экран и флех колонкой
    последний элемент растягиваем во флексе и его делаем тоже флексом. Ну и его содержание растягиваем во флексе
    Ответ написан
    1 комментарий
  • Как перенести профиль remmina с паролями на другой ПК?

    deepblack
    @deepblack
    У меня пароли хранятся в seahorse оттуда его можно скопировать в текстовом виде (или поискать другой способ самостоятельно):
    spoiler
    611939a2f37e2041002815.png


    Еще по паролям: https://askubuntu.com/a/1264777/537824

    Конфиги тут ~/.local/share/remmina
    Ответ написан
    1 комментарий
  • Как мне импортировать методы класса при компиляции dll С++11?

    @none7
    Почему при работе с процедурами Вы положили в .h файл только декларацию функции, а в случае с классами запихнули всю реализацию? Нужно отделять мух от котлет. Методы можно реализовать и отдельно от объявления класса, если указывать их полное имя, например
    // xyz.h
    class xyz
    {
    private:
      int abc;
    public:
      PROJECT2_API int printing_int();
    };
    //xyz.cpp
    PROJECT2_API int hyz::printing_int() { // return 5
        return abc;
    }


    P.S. Мне очень интересно как Ваш код будет работать в вот таком случае.
    void printing(char* pChar) {
      char a[] = "Example String";
      strcpy_s(pChar, strlen(a) + 1, a);
    }
    int main() {
      char[4] buff = {0};
      printing(buff);
      printf("%s\n", buff);
    }
    Ответ написан
    4 комментария
  • Как сделать в sql запросе сортировку по двум условиям для двух выборок?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ORDER BY `guid` IS NULL, `sort` DESC
    Ответ написан
    1 комментарий
  • Как запустить composer с определенной версией php?

    @OkOl
    /opt/php/7.3/bin/php composer.phar .......
    Ответ написан
    Комментировать
  • Чем заархивировать файлы с определенными условиям на UBUNTU?

    @pfg21
    ex-турист
    поставь пакет rar из репозитория. в него упакован полноценный консольный rar, взятый с оф.сайта https://www.rarlab.com/download.htm или качни с rarlab последний релиз будет поновее.
    pfg@srv:~$ lsb_release -d
    Description:    Ubuntu 20.04
    pfg@srv:~$ rar
    
    RAR 5.50   Copyright (c) 1993-2017 Alexander Roshal   14 Jun 2017
    Trial version             Type 'rar -?' for help

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

    в 5ом формате рар умеет записывать линукс права и владельцев файла, а также разбирается в симлинках и хардлинках. спец.файлы пока не умеет а жаль
    Ответ написан
    8 комментариев
  • Быстрый способ подбора всех возможных вариаций значений массива какие есть способы?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Судя по постановке задачи и примеру, речь идёт не о всех возможных начениях массива, а обо всех возможных подмножествах множества мощностью 179.
    Если каждый элемент надмножества может либо входить, либо не входить, то кажое из множеств можно сопоставить с 179-битным двоичным числом. Очевидно, что таких чисел 2^179. Если убрать из набора пустое множество (в примере его не было), то вариантов станет на один меньше: 2^179-1.
    В десятичной системе это вот столько вариантов: 766247770432944429179173513575154591809369561091801087

    Автор вопроса не говорит как именно он хочет получить все эти варианты, но в любом случае сохранить такое количество элементов невозможно, в нащем Солнце атомов примерно всего лишь в сто раз больше, чем это число. Чувствуете проблемочку, да?

    Но задачу-то решать как-то надо. Давайте воспользуемся кодом Грея, чтобы можно было при переходе от варианта к варианту ограничиться изменением всего лишь одного бита. Но и это не поможет нам перебрать все варианты за разумное время.
    Пусть на один вариант нам потребуется безумно мало времени: один такт процессора. Сохранять мы варанты никуда не будем (потребовалось бы десять Юпитеров, чтобы на их атомах записать все варианты), просто покажем на экране. Да, за один такт этого не получится, но предсьавим себе что у нас такой специальный процессор с частотой 3 гигагерца. И нам потребуется 8099185802817355231125623242284335104 лет его работы.
    И всё это бессмысленно. Протсо автор вопроса не понимает чего хочет.
    Ответ написан
  • Как замокать приватное свойство в классе phpunit?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Имитация вашего объекта:
    class Relay
    {
        private $privateProperty;
    
        public function __construct()
        {
            $this->privateProperty = new \stdClass();
        }
    
        // метод, который работает с приватным свойством
        public function call()
        {
            return $this->privateProperty;
        }
    }


    Способ 1: Нативный PhpUnit + Reflection API
    use PHPUnit\Framework\TestCase;
    
    class RelayTest extends TestCase
    {
        public function testCall(): void
        {
            $reflectionClass = new \ReflectionClass(Relay::class);
            $reflectionProperty = $reflectionClass->getProperty('privateProperty');
            $reflectionProperty->setAccessible(true);
    
            // создаем наш объект БЕЗ конструктора
            $relay = $reflectionClass->newInstanceWithoutConstructor();
    
            // Меняем свойство и вызываем метод, работающий с этим приватным полем
            $reflectionProperty->setValue($relay, 1111);
            self::assertEquals(1111, $relay->call());
    
            // Меняем свойство и вызываем метод, работающий с этим приватным полем
            $reflectionProperty->setValue($relay, 'aaaa');
            self::assertEquals('aaaa', $relay->call());
        }
    }


    Способ 2: Через Codeception Stub
    class RelayTest extends TestCase
        public function testCall(): void
        {
            /** @var Example $stub */
            $stub = Stub::make(Relay::class, [
                'privateProperty' => 1111,
            ]);
            self::assertEquals(1111, $stub->call());
    
            $stub = Stub::make(Relay::class, [
                'privateProperty' => 'aaaa',
            ]);
            self::assertEquals('aaaa', $stub->call());
        }
    }

    Отступления и полезные советы:
    • Почему-то стандартный, давно используемый мною, способ с инъекцией в мок приватного филда не зашел и выдавал null всегда.
    • Юзайте Inversion of Control Principle, например инъекцию зависимости через конструктор или инъекцию через метод с присвоением в конструкторе NullObject. Оба способа будут хороши для тестирования.
    Ответ написан
    1 комментарий