Ответы пользователя по тегу Python
  • Как создать метаклас в зависимости от env переменной?

    @Zanak
    А зачем метакласс? Чтобы закрепить интерфейс, достаточно породится от абстрактного родительского класса. А для постройки конкретного класса - шаблон "фабрика" вам в помощь.
    Как вариант - можете поиграться с importlib и грузить модули по имени, в стиле а-ля плагин.
    Ответ написан
    Комментировать
  • Кастомная валидация vs использование Pydantic?

    @Zanak
    Если у вас только один класс, то большой разницы не вижу, руками, или с помощью библиотеки.
    Если у вас возможна потребность в проверке +100500 классов, тогда точно выбор за специальным инструментом, например педантик.
    Ответ написан
    Комментировать
  • McRCON - Выдает ошибку при правильном коде, где проблема?

    @Zanak
    Не может найти имя для открытия соединения. Проверте наличие имени в DNS.
    Ответ написан
    Комментировать
  • Как сделать ожидание сообщения?

    @Zanak
    Если это
    If event.text.lower() == ‘Промокод’:
        ...

    копипаста из вашей попытки решить вопрос, то условие ни когда не сработает.
    По api вконтакте не специалист, но правдоподобный ответ легко гуглится.
    Ответ написан
    Комментировать
  • Стоит ли размещать логику импортов в __init__.py?

    @Zanak
    Основная задача __init__.py - это настройка импорта твоего пакета в основной код. Ты можешь как угодно тусовать модули и пакеты нижнего уровня и скрыть этот факт за отдачей в виде "from your_package import *" с помощью init файла.
    Нет ни чего предосудительного, если в этом файле будует присутствовать код инициализации, но определенную осторожнось соблюдать следует. Например, можно, случайно, получить цикл при импорте модулей. Другой пример, мы используем модели, которые используют соединение с БД, которое открывается позже.
    Опять же, возможно это только мои проблемы, я сходу не могу сказать, сколько раз выполнится код инициализации, если модуль импортируется более более 1 раза, и отработает ли ваша логика, если в одном случае это "from your_module import *", в другом "from your_module import name1, name2", а в третьем "import your_module as ym".
    Ответ написан
    Комментировать
  • Как встроить итератор или генератор в уже написанный парсер python?

    @Zanak
    1. Понять, по каким данным желаем итерировать. Если по разобранным данным, то меняем parse_file/counter чтобы она возвращала результат разбора, если по результатам расчета, то создаем метод/методы, для реализации генератора/итератора.
    2. Все подготовительные операции должны быть сделаны до начала возможных итераций. Как минимум - это открыть файл, как максимум - произвести предварительный расчет.
    3. В случае генератора мы правим counter или result, чтобы она использовала yield current_value для отдачи вызывающей стороне текущего значения (в зависимости от того, что хотим возвращать).
    4. В случае итератора реализуем __iter__ и __next__ методы, первый вернет собственно сам итератор, а второй возвращает текущее значение. За подробностями предлагаю сходить в документацию :)

    Вроде ни чего не забыл. :)
    Ответ написан
    Комментировать
  • Как мне расширить конструктор класса X конструктором класса N?

    @Zanak
    Не очень понял, при каких обстоятельствах возник этот кейс, поэтому вопросы:
    - расширить класс X до класса N разве не означает, что N является потомком X?
    - в методе handler родитель создает инстанс потомка, вы уверены, что это правильно?

    Здесь, на мой взгляд, напрашивается наследование или инкапсуляция.
    Если CmdHandler расширяет Server, то можно использовать наследование, утащив общие методы и данные в родительский класс.
    Если классы предназначены для взаимодействия, и их функционал не пересекается, то, я бы, посмотрел в сторону передачи инстанса обработчика конструктору сервера или отдельному методу регистрации в инстансе.
    Ответ написан
    Комментировать
  • Как умножить каждый элемент списка на разные числа?

    @Zanak
    zip забыли :)

    l1 = [1, 2, 3, 4, 5, 6, 7]
    l2 = [5, 4, 8, 3, 7, 8, 9]
    l3 = [l * r for (l, r) in zip(l1, l2)]
    print(l3)
    Ответ написан
    Комментировать
  • Как подключить свой UI к FastAPI?

    @Zanak
    Давайте, для начала, поймем ваши цели. Вы хотите создать свой API, пообщаться с существующим, или приделать свой UI для известного API?

    Для создания своего API указанный инструмент, FastAPI, вполне подходит. Не все фреймворки умеют формировать/отдавать swagger спеку, но некоторые это позволяют. Собственно, для создания собственного сервиса и API, по которому он будет отдавать данные, swagger непременным условием не является. Спека для swagger пишется первой, когда у вас есть генератор, который может построить заготовку проекта на нужном вам языке. Во всех остальных случаях, она, или пишется вручную, или формируется по написанному коду, с использованием соответствующих инструментов.

    Пообщаться с существующим API можно, помимо, например, Postman-а и подобных инструментов, с помощью SwaggerUI, который написан на JS и может быть размещен, например, на вашем сервере. Достаточно подсунуть ему спеку интересующего вас сервера и он, в более или менее удобной форме, позволит увидеть доступные вызовы, отправить запрос, получить ответ, ну и прочитать описание каждого вызова, если автор спеки об этом позаботился. Задача swagger - это представить машинно понятное описание api, со всеми используемыми структурами запросов и ответов, чтобы клиентский код сумел его разобрать, отправить запрос, обработать ответ, и возможно, по крайней мере теоретически, сформировать форму, чтобы пользователь мог ввести свои данные, например, для отправки их в БД. Ни для чего больше, как машинно понятное описание API swagger не предназначен.

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

    В выборе средств реализации пользовательского UI вы не ограничены ни чем. Мобильное приложение, десктоп, веб с шаблонами a-la django, spa приложение, все к вашим услугам. На реализацию серверной части это ни как не завязано.
    Ответ написан
    Комментировать
  • Почему не работает postgreSQL?

    @Zanak
    Постгри вы установили?
    Обычный порт для постгри - это 5432. Когда pgadmin-у указываете localhost и этот порт соединение происходит? Для пользователя postgres с паролем, указанным при инсталяции, авторизация проходит?
    Добейтесь успешного соединения с помощью psql или pgadmin, потом беритесь за питон. Будет реально быстрее, в смысле понимания, что именно не пошло.
    Ответ написан
    Комментировать
  • Как "заставить" функции выполнятся после условий, если сначала их нужно написать?

    @Zanak
    Если я правильно понял вопрос, то ваша проблема здесь:
    figures = {'1': triangle(point=point, angle=0, length=200), '2': square(point=point, angle=0, length=200),
               '3': pentangle(point, angle=0, length=100), '4': sixangle(point=point, angle=0, length=100)}

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

    @Zanak
    А кодировку своих исходников указываете? Лучше скрипты держать в кодировке utf8, которая является "родной", для 3 ветки питона.
    В заголовок ответа сервера с погодой можно попробовать посмотреть, какую кодировку он указывает, и попробовать перекодировать (но сначала попробуйте просто указать кодировку своих скриптов, иногда хватает этого)?
    Ответ написан
    3 комментария
  • Почему из-за Popen.wait() подпроцесс работает некоректно?

    @Zanak
    1. У вас компилится windows-gui приложение. Попробуйте явно посмотреть в сторону -m параметра для g++ и добавить правильное значение в ваш cmd сценарий. Форточек под рукой нет, подробнее сказать не могу.
    2. Эта функция вроде как запускает вашу команду с указанными параметрами и ждет завершения, разве нет? (Это по поводу ожидания завершения)
    Ответ написан
    Комментировать
  • Как использовать переменную из функции другого файла?

    @Zanak
    > global var
    Это значит, что вы хотите использовать глобальную переменную, но это не объявление переменной как таковой. Вне функции bar вам надо объявить эту переменную, тогда в функции вы сможете ее инициализировать.
    Ответ написан
    Комментировать
  • Почему FLASK render_template может искажать форматирование передаваемого в качестве параметра HTML-файла?

    @Zanak
    Лучше бы увидеть вашу вьюху, потому что странно, в том виде, как вы описываете, проблем быть не должно.
    Вот чего гугл предложил на запрос "python flask render_template plain html": раз, два, три, ну и четыре.
    Ответ написан
    Комментировать
  • Почему Flask часто падает на сервере разработки, production но не выводит ошибок traceback?

    @Zanak
    Первейший совет: воспользуйтесь поиском, в данном случае может помочь поиск по "flask debug on", или подобным критериям.
    Обычно включение отладки и изучение логов помогает.
    Можно попробовать посоветовать мониторить использование памяти. Не уверен на сто процентов, но в одном из проектов у меня процесс по тихому сыпался, когда утыкался в память, и оптимизация по этому поводу помогла решить проблему.
    Если сервер сидит за apache/nginx, загляните в их логи, иногда бывает полезно.
    Более содержательных идей вряд ли смогу предложить, не видя код.
    Ответ написан
  • Зачем в классе-наследнике вызывать инициализацию класса-родителя в Python?

    @Zanak
    Во первых, разве вызов super не должен выглядеть так:
    super(Example, self).__init__()?
    Когда мы переопределяем метод в потомке класса, то мы можем заново реализовать всю работу этого метода, и тогда вызов super не нужен вовсе.
    Если мы хотим только немного изменить поведение метода, то нам остается в подходящем месте встроить вызов метода родителя, сообщив среде исполнения родителя какого типа мы ищем (в вашем случае Example) и ссылку на текущий экземпляр (это self).
    Теперь собственно ответ на ваш вопрос: инициализация класса родителя может быть сложным процессом, потому что свойства предка сами могут быть объектами, которые важно правильно построить и инициализировать, и если вы не готовы делать это сами, в каждом случае, когда создаете нового наследника, то вы можете вызвать super.
    Только вызывайте его правильно. :)
    Ответ написан
    1 комментарий
  • Как обновить статику/очистить кэш в браузере на python-flask?

    @Zanak
    Поиск ваш друг. Можно заставить страницы устареть например так. Хинт для пыха, но адаптируется на раз.
    Ответ написан
    Комментировать
  • Что означает за странное (namespace)?

    @Zanak
    Подозреваю, что здесь, в пункте 6.4.1 и таится ответ на ваш вопрос.
    Ответ написан
    4 комментария
  • Flask 400 error?

    @Zanak
    jsonify не спасет отца русской демократии? :)
    Ответ написан
    Комментировать