Задать вопрос
  • Соответствует ли мой код парадигме ООП?

    Простите за критику, но здесь читают много новичков.
    ООП как парадигма требует строгую наследственность

    Будто речь идет о живом существе. Основным элементом в ООП, является объект.
    Использование наследования не играет такой большой роли в ООП, к примеру как
    полиморфизм. Про наследование много чего плохого могу сказать, но иногда
    бывает полезно для второстепенных задач.
    Прочитайте теоритическую часть ООП и в частности про отношение к наследованию
    в современном мире. ООП не особо жалуют сейчас, а наследование одно из худших
    идей что пришли вместе с ООП.
  • Как получить значение в переменную?

    Я не использовал боты VK, но есть универсальный ответ для всех подобных случаев с Python. Оператор dir. Возвращает список атрибутов объекта:
    if event.type == VkBotEventType.MESSAGE_NEW:
        peer_id = event.object.peer_id
        message = event.object.text
        object_attrs = dir(event.object.reply_message) # Для отладки, потом нужно удалить
        print(object_attrs) # Для отладки, потом нужно удалить
        # reply_message = event.object.reply_message.from_id
        # print(reply_message)
  • С чего начинается создание API?

    Я так понимаю, что Вы хотите сместить с чисто серверной логики на случай, когда часть
    функционала отдана клиентской части? В этом случае отделяют высокоуровневую логику
    в вызовы через API.

    Как организовать авторизацию с учетом прав доступа.

    Посмотрите библиотеки на PHP по RBAC, если хотите сделать что то сложное. Или
    попросту выделите поле role в котором будут admin, manager, ... Про механизм
    авторизации, так же, есть OAuth2 для серезного случая или элементарный JWT.
    Примеров в интернете полно, поле role помещается в JWT токен. Получив такой
    запрос на API с таким токеном в заголовке, сервер проверит подпись и прочитает
    поле role и соответственно в обработчике отвегнет запрос или сформирует ответ.
    На счет JWT, не забывайте следовать рекомендациям по безопасности.

    Как оформляется структура версий. Для каждой версии нужно отдельный проект.

    С этим проще. Версионирование важная часть API. Классика: api.site.com/v1/... или
    site.com/api/v1/... Далее v2, v3, ... при калечащих изменениях в API

    Хочу узнать ваше мнение или совет о том с чего лучше начинать написать. Ранее API не писал. Столько всего нужно переписать, но хотя бы понять с чего

    Дело это не простое. Есть литература и доклады с конференции для развития
    навыков проектирования API. Для разделения сервера на две части, Вам нужно
    определить границы модулей в Вашем текущем сайте. И некоторые модули
    вывести отдельным сервисом.

    К сожалению, это все хорошо, но если у Вас нет опыта и знании, то Александр Аксентьев
    в сухом остатке будет прав. Примером ужасных API полно. Потеряете время или
    будете умножать версии, что в итоге плохо.
    Разделяйте, когда будете готовы. Лучшим руководством считаю руководства от
    дядюшки Боба (Роберт Мартин). Прочитайте книгу "Чистая архитектура",
    проведите рефакторинг существующего кода. Когда определятся модули
    следующие принципам SOLID, разделение пройдет безболезненно и выбор
    формата API облегчится благодаря интерфейсам модулей.
  • Обязательно ли использовать try/else?

    А кто же его знает, что автору надо. Если это разовый вызов, одно решение, если, например программа в цикле собирает данные с разных страничек, например, в в список, то вот именно list.append(f(url)) и нужно оборачивать в try/except...

    Об этом, как раз я и писал.

    Я не собираюсь оспаривать, что Вы написали. Не забывайте, что платформа создана для того,
    чтобы задавать вопросы и получать ответы. Если считаете мой ответ не верным, пишите свой.
    Не исключаю, что он будет лучше чем мой. Автор вопроса получит более квалифицированный
    ответ, и все будут довольны. Пусть решает zlodiak или пользователи платформы.

    Вы не считаете, что ветка растет спор ради спора. Это я о нас с Вами. На этом заканчиваю, Вы
    можете поступать как хотите.
  • Обязательно ли использовать try/else?

    Andy_U, если Вы про то, что в блоке except нет присвоения html или выхода(sys.exit(1)), то значит, что Вы не внимательно читали мой ответ. Мой комментарий был не для пропуска, а для замены его соответсвующими инструкциями.

    # Ваши инструкции для ошибочной ситуации

    Это как раз то место, о котором я писал. Где следует разрешать проблему. Как я и писал, абсолютно верного ответа для ситуации автора вопроса не представляется выбрать. Все из за того, что вопрос задан отдельно от его случая использования. В этом блоке допустимы различные варианты разрешения проблемы:
    • sys.exit(1). Выход в ОС с ошибкой. Больше годится для утилит, ...
    • return "". Можно вернуть None или вызвать свой тип исключения. raise MyException к примеру. Это случай, к примеру для пропуска этого случая через обработку ошибки на уровне в котором вызывают эту функцию
    • Не исключаю, что кому то в самый раз будет возвращать значение по умолчанию. return "{\"value\": \"\", \"count\": 0}"Если нужно получать всегда какой нибудь ответ
    • Еще масса вариантов


    Я не стал подробно расписывать все это в ответе, но все же zlodiak отметил ответ решением. Думаю, ему стало понятно о чем я писал. Тем не менее, вот у меня появилось время, и я подробно раскрыл некоторые случаи о которых писал
  • Какую библиотеку Python использовать для управления приложениями?

    Вот код из официальной документации. Поможет найти координаты кнопки по ее картинке, и нажать по середине кнопки
    >>> import pyautogui
        >>> button7location = pyautogui.locateOnScreen('button.png') # returns (left, top, width, height) of matching region
        >>> button7location
        (1416, 562, 50, 41)
        >>> buttonx, buttony = pyautogui.center(button7location)
        >>> buttonx, buttony
        (1441, 582)
        >>> pyautogui.click(buttonx, buttony)  # clicks the center of where the button was found
  • Почему psycopg2 ругается на python3.5?

    Все верно. bbkmzzzz прав. И Ваш комментарии подтверждает это.
    Просто пакеты Python требуют для установки установщик (setuptools,
    distutils, ...). Такой вот каламбур. В Вашем случае зависимость от
    setuptools. Установите его:
    sudo apt-get install python3-setuptools
    И повторите установку пакета
  • Обязательно ли использовать try/else?

    Вы должно быть спутали else с finally. Второй вариант не ошибочен.
  • Какая NOSQL СУБД максимально быстрая с вертикальным масштабированием для многотерабайтной базы?

    Ладно, хочется закрыть уже этот вопрос.
    В ходе переписки, показалось, что Вы ставите цель в низкоуровневой опимизации.
    Я ничего против не имею, но низкоуровневая оптимизация не позволит существенно
    облегчить (ускорить) задачу. Ведь Mongo и без того считается одной из самых быстрых
    БД. Выжимать "все соки" из БД может не самый лучший путь?! Я бы посмотрел на
    выскокоуровневую оптимизацию.Учет бизнес логики, случай использования (cases),
    фильтрация данных (уменьшение) до записи в БД, паковка записей, ...

    Ты привели технические детали, без случай (case) использования. Поэтому я сначала
    описал все туманно, а после все же опустился до низкогоуровневой оптимизации.
    Если хотите, можете открыть новый вопрос, без технических подробностей реализации,
    а больше про формат данных, целей и задач проекта, способ использования в примере
    и немного техничекой статистики данных (кол-во записей, объем, трафик).
  • Книга про Микросервисы?

    Рекомендую эту книгу. Доступно и без магии объясняет не только как строить микросервисы, но и когда и зачем принимать решение о переходе на него.
    Полезно для получения основы. После прочтения и получения некоторой практики, рекомендую к просмотру доклады от Netflix на YouTube к примеру. Event Source, GRPC, ...
  • Почему так происходит?

    Да, простите за невнимательность! Мозги набрекрень :)
  • Почему так происходит?

    Не совсем не тот случай. И объяснить можно было бы не приводя пример из книги. То, что DVoropaev очевидно, хотел увидеть
    >>> a = 0
    >>> def f1():
    ...       global a
    ...       a = 1
    ... 
    >>> f1()
    >>> a
    1

    Все дело в том, что под именем a сначало была определена глобальная переменная со значением 0. После, в функции f1 под тем же именем локальная (видимая внутри функции) с значением 1, которая не имела отношение к глобальной переменной.
    Решение: Указать в функции, что внутри функции будет изменяться переменная из глобальной области видимости, посредством: global a
  • Как реализовать такой временной цикл?

    Для ответа не хватает данных. Какое БД? Не понятно, что должно записываться в БД, поля time и value только вводят взаблуждение. Поле time в SQL не допустимо, а value как бы намекает про key-value БД. Да и по описанию, кажется, что программа для разового запуска. Нет даты, ...
  • Какую выбрать nosql базу highload проекта?

    Дмитрий Энтелис, излагаете здравые мысли, но поспешили в выводами в некоторых вопросах:
    1.
    @evil0o: Из них нужно генерировать отчеты с большим количеством объеденений этих таблиц.
    @DmitriyEntelis: Если Вам нужны объединения - Вам не нужен nosql.

    Вы очевидно упустили, что речь идет про генерацию отчетов. В nosql для подобных случаев успешно применяют механизм агригирования данных, где есть (не во всех nosql) и объединение (join).
    2. Утверждение спорное, но допустимое для сучаев, когда релиционное БД хорошо изучены и проверены, а nosql нет.
    3. (y) Тут я соглашусь
  • Какой стек технологий нужно освоить Python Junior?

    Хороший ответ. Единственное, добавил бы в пункт 1:
    Запишитесь на онлайн курс или прочтите хорошую книгу по Python
    Умение гуглить определенно нужно, но фрагментарные знания дают короткоживущие выгоды. Если решили стать разработчиком, то в свободное время выделите час другой для полноценного изучения языка программирования и приемам работы (алгоритмы, инструменты, паттерны, ...).

    Пункт 3 отличный совет без всяких оговорок. Работодатели будут смотреть Ваши работы однозначно. Не бойтесь ошибиться, выкладывайте свои программы (проекты) даже если сами считаете, что у Вас плохой уровень. Опытного специалиста Вы все равно не проведете, а наличие работ лучше его отсутствия. И не забывайте улушать (рефакторить) свои программы по мере увеличения Вашего уровня.
  • Как нажать несколько кнопок одновременно на selenium python?

    Chvalov,
    Примерно такая же задача, нужно отправить несколько форм на сайте, но после отправки первой формы идет переход на страницу success, как быть в данном случае ?

    Selenium по сути ручка для управления браузером, и можно проделать только те операции, что можно проделать на браузере.
    На вашем месте я бы подумал вот о чем:
    • Нужен ли в действительности Selenium для этой задачи? Я Selenium использую когда 1) работаю с сайтами сделанными как SPA, 2) создатели сайта замудрили и использовали JS там где не надо или 3) для таких странных целей как создание снимков экрана сайта или печать на принтер. Первым делом я рассматриваю для использование отличную библиотеку requests, и если с ним не получится работать, то приходится использовать Selenium. Приходится, т.к. это не легковесный вариант (запущенный браузер, драйвер управления, загрузка в браузере всех ресурсов(html, css, js, jpg, ...), ...)
    • Критично ли время? Может, и в правду, просто последовательно отправлять форму и после перехода возвращатся обратно. Ведь это и так многократно превышает по производительности чем делать то же в ручную.
    Можно ли принудительно заставить открывать все в новых вкладках или постоянно чекать url и возвращаться обратно и не будет ли вечный цикл (если url имеет вид site.com а после открытия в браузере site.com/main ) ?

    Можно открыть N вкладок, но активной может быть только одна вкладка, и выигрыша особого и не будет, ведь заполнение и отправку не получится выполнить параллельно. Выигрыш только в том, что можно N форм загрузить одновременно.

    Про вечный цикл совсем не понятно. Вы про то, что сайт может "запомнить" об отправке и будет перенаправлять на другую страницу при попытке повторного заполнения формы? Имея дело с Selenium можно сначала отработать алгоритм "в живую" в браузере, и проверить все моменты
  • Как логично совместить документы mongodb с объектами проекта?

    Max Payne, у Вас невнятное постановка вопроса.
    1. Я правильно понимаю, что у Вас ORM для доступа к документам в Mongo? Если да, то какой?
    2. Пример Вы приводите с классом Chat, а использование с User. Опечатка?
    3. Идея программы запутана, т.е. не понятно что Вы хотели изначально сделать. Попытайтесь четко описать цель программы, т.к. это важнее Вашей реализации. Возможно выбор реализации идеи ошибочно или неоптимально и есть лучшие решения
  • Какой смысл в refresh токене?

    Access token постоянно гуляет по проводам, перехватить его сравнительно легко и поэтому его часто меняют.

    Конечно бред. Думать о синферах в 2019 году, когда спошь и рядом рекомендуют и местами заставляют работать через https.
  • IT-блог как трудовая книжка программиста?

    По всем кроме github.com согласен. Представители многих крупных и мелких компании не однократно высказывались, что профиль в системах контроля версии является хорошим индикатором для оценки специалиста. Нужно помнить, что результатом труда программиста является код. И кто будет спорить, что проверка конечного произведенного продукта поможет оценить уровень человека который его произвел?