Python Portal
57.1K subscribers
2.25K photos
288 videos
51 files
811 links
Всё самое интересное из мира Python

Связь: @devmangx

РКН: https://clck.ru/3GMMF6
Download Telegram
Ловите очередной полезный гайд

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6911😁10👍1
Зарплата 207.000р у Middle-разработчика в Яндекс

«В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса.

Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф 🤯

Читайте: @bigtech_russia
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣30💊156
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь в Minecraft можно генерировать 3D-объекты по одному промпту.

Мод Falcraft добавляет в игру продвинутый AI. Можно на лету менять текстуры блоков через NanoBanana или генерировать целые 3D-структуры одной командой прямо во время игры. 🌟

Скачать на GitHub: https://github.com/blendi-remade/falcraft?tab=readme-ov-file

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
24💊4😁3
Совет по чистым тестам в Python:

В большинстве случаев твои тесты должны покрывать:

- все happy path сценарии
- edge/corner/boundary кейсы
- негативные тесты
- проверки на безопасность и некорректные вводы

import uuid
from dataclasses import dataclass
from typing import Optional


@dataclass
class User:
username: str


class InMemoryUserRepository:
def __init__(self):
self._users = []

def add(self, user: User) -> None:
self._users.append(user)

def search(self, query: Optional[str] = None) -> list[User]:
if query is None:
return self._users
else:
return [
user
for user in self._users
if query in user.username
]


# happy path
def test_search_users_without_query_lists_all_users():
user1 = User(username="[email protected]")
user2 = User(username="[email protected]")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)

assert repository.search() == [user1, user2]


# happy path
def test_search_users_with_email_part_lists_all_matching_users():
user1 = User(username="[email protected]")
user2 = User(username="[email protected]")
user3 = User(username="[email protected]")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)
repository.add(user3)

assert repository.search("doe") == [user1, user3]


# edge test case
def test_search_users_with_empty_query_lists_all_users():
user1 = User(username="[email protected]")
user2 = User(username="[email protected]")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)

assert repository.search("") == [user1, user2]


# negative test case
def test_search_users_with_random_query_lists_zero_users():
user1 = User(username="[email protected]")
repository = InMemoryUserRepository()
repository.add(user1)

assert repository.search(str(uuid.uuid4())) == []


# security test
def test_search_users_with_sql_injection_has_no_effect():
user1 = User(username="[email protected]")
repository = InMemoryUserRepository()
repository.add(user1)

repository.search("DELETE FROM USERS;")
assert repository.search() == [user1]


👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
12