• Что выбрать Aiohttp или Sanic?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Выбирать всегда сложно.
    Если критерием является скорость, то вот сравнение

    starlette - разрабатывает Tom Christie. Реально крутой разработчик, автор, в том числе и Django Rest Framework. Быстро, мощно, хорошо документировано.

    aiohttp проигрывает почти в 2-3 раза

    Посмотри, что ещё под asyncio есть

    Сравнение с sanic по скорости я не нашёл.

    В любом случае лучше попробовать всё на простом примере и для себя определиться, что проще/лучше/быстрее/расширяемее...

    Возьми простой пример и повтори его на starlette и sanic. И сравни результат и свои ощущения...
    Ответ написан
    Комментировать
  • Как сделать 3х-уровневый json в python?

    Зачем столько уровней?
    songs = { "hostname": ["song1","song2","song3","song4"], "hostname2": ["song1","song2","song3","song4"] }
    json.dumps(songs)
    Ответ написан
    3 комментария
  • Как построить архитектуру для автотестов?

    Я насколько это возможно покажу как подхожу я к автотестам на АПИ.
    У нас есть пулл АПИшек и пулл Авторизаций для них, каждый из них это отдельный микросервис, написанный на разных языках python, jawa, go, в целом это не так важно. Есть документация по ним значит как формировать и отправлять и получать запросики понятно.

    # Условно у меня есть одна абстрация для всех классов, куда я сложил какие-то базовые вещи для всех.
    
    @dataclass
    class ApiAbstraction(ABC):
        config: Any = field(init=True) 
        session: ClientSession = field(init=True, default_factory=ClientSession)
    
        async def close(self):
            await self.session.close()
    
    # И есть разные классы, для авторизации и апи
    @dataclass
    class ApiBLABLA(ApiAbstraction):
        # Загрузить файл
        async def send_file(self, filepath: str):
            endpoint = f"app/files"
            new_url = urljoin(self.config.api, endpoint)
            headers = {"accept": JSON}
            file = os.path.abspath(filepath)
            data = {"file": open(file, "r")}
            raw_result = await self.session.post(new_url, headers=headers, data=data)
            result = await raw_result.json()
            response = get_response_instance(result)
            if response.success:
                file = FileUploadModel.init_from_data(response.result)
                return file
            return response
    
    # Условно класс для авторизации
    @dataclass
    class Auth(ApiAbstraction):
        async def login(self):
            endpoint = "auth/blabla"
            new_url = urljoin(self.config.auth, endpoint)
            headers = {}
            raw_response = await self.session.get(new_url, headers=headers)
            content = await raw_response.json(content_type=None)
            response = get_response_instance(content, AuthModel)
            return response
     
    # Для ответов у меня есть модели, в которые конвертируется JSON ответ. можно и напрямую работать, но нам захотелось через модели. 
    
    @dataclass
    class AuthModel(AbstractClass):
        key: str = ''


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

    В целом почти все тоже самое что и с UI тестами.
    Ответ написан
    5 комментариев
  • Как обменять одну криптовалюту на другую?

    longclaps
    @longclaps
    Как-то так:
    эфир = биткойны * курс(эфир к биткойн)
    Ответ написан
    5 комментариев
  • Как развиваться в программировании не привязываясь к языку?

    myjcom
    @myjcom
    Clean Code: A handbook of software craftsmanship / Чистый код: Создание, анализ и рефакторинг
    Год издания: 2013
    Автор: Robert Martin / Роберт Мартин
    ISBN: 978-5-496-00487-9

    The Clean Coder: A Code of Conduct for Professional Programmers / Идеальный программист. Как стать профессионалом разработки ПО
    Год издания: 2012
    Автор: Robert C. Martin / Роберт Мартин
    ISBN: 978-5-459-01044-2

    Алгоритмы. Справочник с примерами на C, C++, Java и Python
    Год издания: 2017
    Автор: Хайнеман Д., Поллис Г., Селков С.
    ISBN: 978-5-9908910-7-4

    Design Patterns. Elements of Reusable Object-Oriented Software/Приемы объектно-ориентированного проектирования. Паттерны проектирования
    Год издания: 2015
    Автор: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides/Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж
    ISBN: 978-5-496-00389-6

    Test-driven development by example / Экстремальное программирование. Разработка через тестирование
    Год издания: 2017
    Автор: Kent Beck / Кент Бек
    ISBN: 978-5-496-02570-6

    Грокаем Алгоритмы. Иллюстрированное пособие для программистов и любопытствущих
    Год издания: 2017
    Автор: Бхаргава А
    ISBN: 978-5-496-02541-6

    Алгоритмы. Теория и практическое применение
    Год издания: 2016
    Автор: Стивенс Род
    ISBN: 978-5-699-81729-0

    прочитать нужно все

    ну и на закуску
    C Unleashed / Искусство программирования на C. Фундаментальные алгоритмы, структуры данных и примеры приложений. Энциклопедия программиста
    Год: 2001
    Автор: Heathfield R., Kirby L. / Хэзфилд Р., Кирби Л.
    ISBN: 0-672-31896-2 / 966-7393-82-8
    Ответ написан
    9 комментариев
  • Как сделать кнопки телеграм?

    a1exDi
    @a1exDi
    Geek
    Найти ответ на этот вопрос в Google у меня заняло секунд 7.

    Callback buttons
    Ответ написан
    Комментировать
  • Выполняются ли остальные выражения в python if если результат уже ясен из первого выражения?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Легко же проверить:
    >>> def return_false1():
    ...     print('run 1')
    ...     return False
    ...
    >>> def return_false2():
    ...     print('run 2')
    ...     return False
    ...
    >>> def return_false3():
    ...     print('run 3')
    ...     return False
    ...
    >>>
    >>> if return_false1() and return_false2() and return_false3():
    ...     print('I newer executed')
    ...
    run 1
    >>>

    да и про ленивые вычисления в Питоне уже выше сказали.
    Ответ написан
    Комментировать