Typing | Модуль аннотации (часть 1)
🙂 Разбирая валидацию данных с Pydantic, я упомянул аннотации типов. Они позволяют указать желаемый тип переменной в помощь разработчикам и IDE. Однако в Python для этого есть целый встроенный модуль typing, который очень хорошо работает вместе с Pydantic.
👀 Этот модуль позволяет расширить наши аннотации, с помощью него можно создавать пользовательские типы данных, использовать специальные типы и много другое. Однако я еще раз напоминаю, что в самом Python это никак не влияет на исполнение кода, это всего лишь подсказка.
🔤 Первое, что можно сделать вместе с typing, это указакать желаемые типы данных, к примеру, в словаре.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Dict[str, int] — такая конструкция говорит, что ключи в словаре должны быть строкой, а значения числом.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Валидация данных в Python (часть 4)
🙂 Сериализация (serialization) — процесс преобразования объектов в удобный для хранения и передачи формат. В Pydantic, конечно же, для этого все предусмотрено. Основные методы для конвератции модели и ее полей это
👀 Оба метода очень похожи, однако первый просто конвертирует модель и подмодели в обычный словарь, а второй возвращает строку в формате JSON. Также у методов есть немало полезных аргументов, к примеру, с помощью include и exclude можно указать какие поля стоит оставить или исключить.
🔤 Если нам недостаточно обычной конвертации, то мы можем создать собственную сериализацию. Для этого есть два декоратора:
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
model_dump() и model_dump_json(). @field_serializer и @model_serializer. Первый используется, чтобы настроить сериализацию конкретных полей, а второй — всей модели. Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Typing | Модуль аннотации (часть 2)
🚶♀️ Сегодня мы разберем довольно полезные функции встроенного модуля typing:
🔤
🔤
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
TypeVar и Annotated. На работу чистого Python кода функции никак не влияют, однако, к примеру, Pydantic умеет с этим работать и распознавать новые типы. TypeVar — это класс, который используется для создания обобщённых типов (generics) в функциях и классах. Он позволяет создавать шаблоны, которые могут работать с различными типами данных. Также одним из полезных параметров ялявется bound, который может ограничить типы, которые могут быть присвоены обобщённому типу.Annotated — это специальная функция, которая используется для добавления метаданных к аннотациям типов. Если типы, созданные с помощью TypeVar, обычно распознаются IDE, то метаданные созданы для внешних библиотек и инструментов. Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Валидация данных в Python (заключительная часть)
🥱 И наконец нельзя не рассказать про допольнительный модуль Pydantic — Pydantic Settings. Этот модуль позволяет загружать настройки или классы конфигурации из переменных среды или секретных файлов. Модуль очень мощный и широко применяется популярными библиотеками, к примеру, FastAPI.
🔤 Чтобы его установить, нужно воспользоватся следующей командой:
👀 Это может быть полезно для сохранения конфиденциальности и в принципе это упрощает работу с окружением. Также с помощью
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
pip install pydantic-settings. Потом нужно создать новую модель, но этот раз она должа наследоваться от BaseSettings. Функционал такой же как и у BaseModel, однако инициализатор попытается прочитать все поля, которые не были переданы в качестве аргументов из переменных среды.SettingsConfigDict можно устанавливать некоторые настройки, к примеру, указать, что переменные должны быть считаны из специального .env файла.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Шаблоны проектирования (часть 3)
🥱 Шаблон «Стратегия» (Strategy) — поведенческий паттерн (behavioral pattern), который предлагает определить семейство алгоритмов, поместить каждый в отдельный класс и сделать их объекты взаимозаменяемыми.
👀 Представим, что в коде есть всего один класс, отвечающий за навигацию. Каждый раз, когда вы хотите добавить новый вид построения маршрута, (автомобильный, пешеходный и т.д.), вам приходится этот класс изменять, что не очень удобно и может испортить уже работающий код.
😎 «Стратегия» предлагает выделить все алгоритмы маршрутов в отдельные классы — стратегии, а в изначальном классе навигации — контексте, создать поле для хранения ссылки на один из алгоритмов. Контекст не выбирает алгоритм, он просто делегирует работу связанному объекту стратегии.
📌 Этот паттерн используется довольно часто, он соблюдает принцип OCP и значительно повышает гибкость кода. Однако, если у вас немного алгоритмов, использовать паттерн смысла нет — он просто раздует код, к тому же многие языки программирования позволяют сделать все тоже самое без дополнительных классов.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Углубляемся в ООП (часть 1)
🙂 Все знают про четыре столпа ООП: инкапсуляция, наследование, полиморфизм и абстракция. Понимание и правильное применение этих принципов поможет сделать код куда лучше. Однако на этом концепции не заканчиваются, еще одной важной концепцией является ассоциация.
👀 Ассоциация — это слабый тип отношений между классами, который устанавливается через их объекты. Каждый объект независим, и между собой эти объекты могут взамодействовать. Просто представьте отношения между учеником и учителем.
📌 Также бывает три вида ассоциации:
🔤 one-to-one — каждому объекту одного класс соответствует один объект другого.
🔤 one-to-many — один объект одного класса может быть связан с несколькими объектами другого.
🔤 many-to-many — несколько объектов одного класса могут быть связаны с несколькими объектами другого класса.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Углубляемся в ООП (часть 2)
😎 Агрегация — это форма ассоциации, в которой все объекты опять же имеют отдельные жизненные циклы, однако один объект принадлежит другому. Это отношения «целое/часть» (whole/part), где целому или родителю принадлежит часть или потомок.
🥱 Просто представьте отношения между библиотекой и книгами. Библиотека содержит разные книги, однако, удалив саму библиотеку, книги останутся, как и наоборот. И, понятное дело, книгам не может принадлежать библиотека.
📌 Также, как и ассоциация, агрегация может быть 3 видов: one-to-one, one-to-many, many-to-many. Эта концепция тоже используется очень часто и помогает описать разные жизненные задачи.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
ScrapeGraphAI | ИИ-парсер
🙂 ScrapeGraphAI — это Python библиотека , созданная для автоматизированного сбора данных с сайтов и файлов. Для сбора данных она использует LLM (large language model), что делает работу с библиотекой очень простой.
🧠 Однако инструмент не привязан к конкретной модели, поэтому вы можете использовать, как, к примеру, и модели от OpenAI, как и модели, установленные на ваш компьютер с помощью Ollama. При этом структура кода остается одной и той же, что делает ScrapeGraphAI довольно полезным инструментом.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Создаем свой API (введение)
😎 API (Application Programming Interface) — это интерфейс, который позволяет программным системам взаимодействовать друг с другом. API определяет набор правил и протоколов, которые используются для создания и интеграции программного обеспечения.
🙂 API функционирует по принципу запросов и ответов. Клиент отправляет запрос к серверу, сервер его обрабатывает и дает ответ. Обычно для этого используются протоколы HTTP или HTTPS. При создании API используются специальные методы HTTP для выполнения разных задач, вот основной список:
🔤 POST — отправка данных для создания ресурса.
🔤 GET — получение данных
🔤 PATCH — обновление данных.
🔤 DELETE — удаление данных.
☺️ Для создания API в Python можно воспользоватся несложным фреймворком FastAPI, который основан на уже нам знакомом Pydantic и Starlette — набор инструментов ASGI для создания асинхронных веб-сервисов. Чтобы создать свое первое приложение, выполните команды ниже:
🔤 Установите фреймворк с помощью команды
🔤 Скопируйте код выше в новый файл и запустите его в режиме разработки с помощью команды
🔤 Вы увидите довольно объемный вывод, и, перейдя по специальному адресу для обращения к серверу, который работает на вашем компьютере —
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
pip install fastapi.fastapi dev path/to/file.py в терминале.http://127.0.0.1:8000/, вы сможете получить первый ответ от своего API.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
Создаем свой API (часть 1)
😎 Первое с чем стоит разобраться — это параметры или переменные в пути URL. Задаются они по схожему принципу, как в обычном форматировании строк с помощью метода format(). Выглядит это все дело примерно так:
🙂 Тут мы создаем фукнцию, которая будет обрабатывать GET запрос в случае, когда в пути после items есть какое-то значение. Значение параметра пути item_id перейдет в аргумент функции item_id. Важно, чтобы эти названия совпадали, иначе аргумент функции будет считаться параметром запроса (query parameter).
☺️ Таким образом, если мы, к примеру, перейдем по ссылке
👀 В дальнейшем рассматривать голый ответ от сервера может стать неудобно, поэтому FastAPI автоматически генерирует довольно удобные документации вашего API. Чтобы их рассмотреть перейдите по следующим ссылкам:
🔤 Документация, предоставленная Swagger UI —
🔤 Докуменация, предоставленная ReDoc —
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
http://127.0.0.1:8000/items/2, то наш API выдаст следующий ответ: {"item_id":2}. Также из-за того, что FastAPI использует Pydantic можно настроить валидацию переменных, просто указав тип с помощью стандартной аннотации типов. http://127.0.0.1:8000/docs. http://127.0.0.1:8000/redoc. Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🚀🌐 ВАКАНСИЯ: FrontEnd Developer Junior 🌐🚀
Требования к кандидату:
➡️ JavaScript/ES6+: Знания и опыт в разработке на чистом JavaScript и современных стандартах ECMAScript.
➡️ Фреймворки: Владение React JS. Опыт работы с другими фреймворками – большой плюс!
➡️ HTML5 & CSS3: Продвинутые навыки в создании современных и отзывчивых интерфейсов.
➡️ RESTful API: Опыт работы с взаимодействием фронтенда с бэкендом через RESTful API.
➡️ Сборщики и модульные системы: Знание инструментов типа Webpack, Babel и понимание модульных систем (CommonJS, ES6 Modules).
➡️ Git: Навыки работы с системами контроля версий, в том числе опыт с Git.
Будет плюсом:
➡️ Тестирование кода: Знание и опыт в написании модульных и интеграционных тестов.
➡️ Опыт работы с GraphQL: Понимание и практический опыт работы с GraphQL API.
➡️ Английский язык: Хорошее понимание технической документации на английском.
Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и принимать инициативу.
🐱 Оклад: 500$ / месяц
🤖 Контакты @lunasantrope
Требования к кандидату:
Будет плюсом:
Софт-скилы:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Создаем свой API (часть 2)
😎 Все, что не является параметром пути (path parameter), автоматически становится параметром запроса (query parameter). Параметры запроса находятся в URL после знака
🔤
🙂 Здесь /items/ будет путем, а skip и limit параметрами запроса со значениями 0 и 10. Разные виды параметров, конечно, между собой можно комбинировать и, конечно же, они могут быть и обязательными и необязательными.
👀 Также можно очень удобно настроить валидацию параметров. Сделать это можно немного разными способами, однако документация рекоменудет использовать функцию
🔤 Документация Pydantic: КЛИК
🔤 Документация FastAPI: КЛИК
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
? и разделяются между собой знаком &. http://127.0.0.1:8000/items/?skip=0&limit=10Annotated из встроенного модуля typing вместе с функциями Query и Path для валидации параметров запроса и пути. Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Forwarded from ITDEAL
🚀🌐 ВАКАНСИЯ: FrontEnd Developer Junior 🌐🚀
Требования к кандидату:
➡️ JavaScript/ES6+: Знания и опыт в разработке на чистом JavaScript и современных стандартах ECMAScript.
➡️ Фреймворки: Владение React JS. Опыт работы с другими фреймворками – большой плюс!
➡️ HTML5 & CSS3: Продвинутые навыки в создании современных и отзывчивых интерфейсов.
➡️ RESTful API: Опыт работы с взаимодействием фронтенда с бэкендом через RESTful API.
➡️ Сборщики и модульные системы: Знание инструментов типа Webpack, Babel и понимание модульных систем (CommonJS, ES6 Modules).
➡️ Git: Навыки работы с системами контроля версий, в том числе опыт с Git.
Будет плюсом:
➡️ Тестирование кода: Знание и опыт в написании модульных и интеграционных тестов.
➡️ Опыт работы с GraphQL: Понимание и практический опыт работы с GraphQL API.
➡️ Английский язык: Хорошее понимание технической документации на английском.
Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и принимать инициативу.
🐱 Оклад: 500$ / месяц
🤖 Контакты @lunasantrope
Требования к кандидату:
Будет плюсом:
Софт-скилы:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Углубляемся в ООП (часть 3)
☺️ Композиция — это вид агрегации, однако с куда более сильной связью. Это тоже отношения «целое/часть» (whole/part), однако часть не может существовать отдельно от целого и может быть частью только одного целого за раз. А в свою очередь целое контролирует жизненный цикл части.
👀 Просто представьте анатомию человека: сердце может быть частью тела только одного человека (сиамских близнецов мы не рассматриваем) и оно не может существовать от человека отдельно.
😎 Также нужно добавить, что останавливаться только на композиции или агрегации не обязательно: можно вполне объединить их вместе. К примеру, один компонент может сразу создаваться вместе с целым в виде композиции, однако, если компонентов больше, то взаимодейстсвовать с целым они могут за счет агрегации.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Шаблоны проектирования (часть 4)
🖥 Паттерн «Фасад» — это структурный шаблон проектирования (structural patterns) , который обеспечивает упрощенный (но ограниченный) интерфейс для сложной системы классов, библиотеки или платформы.
🙂 Работать с библиотекой или фреймворком напрямую не всегда удобно: проекту не нужен полный функционал, однако инициализировать все объекты и соблюдать порядок все равно придется. Тогда на помощью приходит «Фасад», который предлагает оставить и организовать только те функции, которые действительно нужны.
👀 Также фасадов в проекте может быть несколько, таким образом вы сможете разбить работу с библиотекой или API на несколько слоев. Важно отметить, что обычно фасад полностью управляет жизненным циклом объектов, которые использует, другими словами вид отношений — композиция.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3