Python security best practices cheat sheet
Updated cheat sheet to make sure you keep your Python code secur
Список полезных советов про работу с внешними данными, сканированию кода, загрузке пакетов, сериализации данных, форматированию строк и другим мерам безопасности:
https://snyk.io/blog/python-security-best-practices-cheat-sheet/
@pythonl
Updated cheat sheet to make sure you keep your Python code secur
Список полезных советов про работу с внешними данными, сканированию кода, загрузке пакетов, сериализации данных, форматированию строк и другим мерам безопасности:
https://snyk.io/blog/python-security-best-practices-cheat-sheet/
@pythonl
📚9 must-have Python developer tools.
9 обязательных инструментов Python разработчика.
1. PyCharm IDE
2. Jupyter notebook
3. Keras
4. Pip Package
5. Python Anywhere
6. Scikit-Learn
7. Sphinx
8. Selenium
9. Sublime Text
@pythonl
9 обязательных инструментов Python разработчика.
1. PyCharm IDE
2. Jupyter notebook
3. Keras
4. Pip Package
5. Python Anywhere
6. Scikit-Learn
7. Sphinx
8. Selenium
9. Sublime Text
@pythonl
🤖Errbot
Errbot is a chatbot. It allows you to start scripts interactively from your chatrooms for any reason: random humour, chatops, starting a build, monitoring commits, triggering alerts...
Errbot - это чат-бот, который можно подключить к чату, при этом бот будет вести осмысленный и интересный диалог.
🖥 Github
@pythonl
Errbot is a chatbot. It allows you to start scripts interactively from your chatrooms for any reason: random humour, chatops, starting a build, monitoring commits, triggering alerts...
Errbot - это чат-бот, который можно подключить к чату, при этом бот будет вести осмысленный и интересный диалог.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
If you want to manage your Github resources (repositories, user profiles, organizations, etc.) from Python scripts, try PyGithub. Above is an example to get a list of Github repositories when searching for a certain topic.
Если вы хотите управлять Github (репозиториями, профилями пользователей, организациями и т.д.) с помощью скриптов на Python, попробуйте PyGithub. Выше приведен пример получения списка репозиториев Github при поиске определенной темы.
$ pip install PyGithub
📌 Документация
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
D-Tale: A Python Library to Visualize and Analyze your Data Without Code
The GIF above shows how your DataFrame will look like when using D-Tale. D-Tale is also useful for analyzing and visualizing your data without code.
D-Tale: Библиотека Python для визуализации и анализа данных без кода
В приведенном выше GIF показано, как будет выглядеть ваш DataFrame при использовании D-Tale. D-Tale также полезен для анализа и визуализации данных без кода.
▪D-Tale.
@pythonl
The GIF above shows how your DataFrame will look like when using D-Tale. D-Tale is also useful for analyzing and visualizing your data without code.
D-Tale: Библиотека Python для визуализации и анализа данных без кода
В приведенном выше GIF показано, как будет выглядеть ваш DataFrame при использовании D-Tale. D-Tale также полезен для анализа и визуализации данных без кода.
▪D-Tale.
@pythonl
If you want to get the row whose ALL values satisfy a certain condition, use numpy’s all method. To get the row whose AT LEAST one value satisfies a certain condition, use numpy’s any method.
Если вы хотите получить строку, ВСЕ значения которой удовлетворяют определенному условию, используйте метод numpy's all. Чтобы получить строку, в которой хотя бы одно значение удовлетворяет определенному условию, используйте метод numpy's any.
В приведенном коде показана разница в выводах между all и any.
import numpy as np
a = np.array([[1, 2, 1], [2, 2, 5]])
# get the rows whose all values are fewer than 3
mask_all = (a<3).all(axis=1)
print(a[mask_all])
"""
[[1 2 1]]
"""
mask_any = (a<3).any(axis=1)
print(a[mask_any])
"""
[[1 2 1]
[2 2 5]]
"""
▪Numpy docs
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Pydantic: 10 наиболее распространенных вариантов использования
1. Basic Data Validation
Use Pydantic models to validate incoming data easily.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name='John Doe', age=30)
2. Default Values
Define default values for your model fields.
class User(BaseModel):
name: str
age: int = 18 # Default value
3. Optional Fields
Mark fields as optional using the Optional type.
from typing import Optional
class User(BaseModel):
name: str
age: Optional[int] = None
4. Custom Validators
Create custom validators with the @validator decorator.
from pydantic import validator
class User(BaseModel):
name: str
age: int
@validator('age')
def validate_age(cls, value):
if value < 18:
raise ValueError('User must be 18+')
return value
5. Nested Models
Use Pydantic models to validate nested data structures.
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
age: int
address: Address
6. Lists of Models
Handle lists of a specific model.
from typing import List
class User(BaseModel):
name: str
age: int
class UserList(BaseModel):
users: List[User]
7. Union Fields
Use Union to allow a field to be one of several types.
from typing import Union
class User(BaseModel):
identifier: Union[str, int]
8. Value Constraints
Impose constraints on values using Field.
from pydantic import Field
class User(BaseModel):
name: str
age: int = Field(..., gt=0, lt=120) # Greater than 0, less than 120
9. Aliases for Fields
Define aliases for model fields, which can be useful for fields that are Python keywords.
c
lass User(BaseModel):
name: str
class_: str = Field(alias='class')
10. Recursive Models
Make models that can contain themselves.
from typing import Optional
class TreeNode(BaseModel):
value: int
left: Optional['TreeNode'] = None
right: Optional['TreeNode'] = None
TreeNode.update_forward_refs() # Resolve string annotations
▪pydantic
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
f-строки в Python обеспечивают более читабельный, лаконичный и менее подверженный ошибкам способ форматирования строк, чем традиционное форматирование строк. Они обладают множеством полезных функций, которые обязательно пригодятся в повседневной работе.
1. String Interpolation
The most used f-string feature by far is string interpolation. All you need to do is wrap the value or variable in curly braces ({}) and you're good to go.
str_val = 'apples'
num_val = 42
print(f'{num_val} {str_val}') # 42 apples
2. Variable names
Apart from getting a variable's value, you can also get its name alongside the value.
str_val = 'apples'
num_val = 42
print(f'{str_val=}, {num_val = }') # str_val='apples', num_val = 42
3. Mathematical operations
Not syntactically unlike variable names, you can also perform mathematical operations in f-strings.
num_val = 42
print(f'{num_val % 2 = }') # num_val % 2 = 0
4. Printable representation
Apart from plain string interpolation, you might want to get the printable representation of a value.
str_val = 'apples'
print(f'{str_val!r}') # 'apples'
5. Number formatting
Numbers are a great candidate for this. If, for example, you want to trim a numeric value to two digits after the decimal, you can use the .2f format specifier.
price_val = 6.12658
print(f'{price_val:.2f}') # 6.13
6. Date formatting
Finally, dates can also be formatted the same way as numbers, using format specifiers. As usual, %Y denotes the full year, %m is the month and %d is the day of the month.
from datetime import datetime;
date_val = datetime.utcnow()
print(f'{date_val=:%Y-%m-%d}') # date_val=2021-07-09
▪String Formatting Best Practices
▪F-strings или как сделать код чуть более быстрым
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡ Example that demonstrates how to use Redis with the redis-py library, which is a popular Redis client for Python.
Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.
Ниже приведен пример, демонстрирующий, как использовать Redis с библиотекой redis-py, которая является популярным клиентом Redis для Python.
▪Github
@pythonl
Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.
Ниже приведен пример, демонстрирующий, как использовать Redis с библиотекой redis-py, которая является популярным клиентом Redis для Python.
$ pip install redis
import redis
# Create a Redis client
r = redis.Redis(host='localhost', port=6379, db=0)
# String Operations
r.set('mykey', 'Hello Redis!')
value = r.get('mykey')
print(value) # Output: b'Hello Redis!'
# List Operations
r.lpush('mylist', 'element1')
r.lpush('mylist', 'element2')
r.rpush('mylist', 'element3')
elements = r.lrange('mylist', 0, -1)
print(elements) # Output: [b'element2', b'element1', b'element3']
# Set Operations
r.sadd('myset', 'member1')
r.sadd('myset', 'member2')
r.sadd('myset', 'member3')
members = r.smembers('myset')
print(members) # Output: {b'member2', b'member1', b'member3'}
# Hash Operations
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2')
value = r.hget('myhash', 'field1')
print(value) # Output: b'value1'
# Sorted Set Operations
r.zadd('mysortedset', {'member1': 1, 'member2': 2, 'member3': 3})
members = r.zrange('mysortedset', 0, -1)
print(members) # Output: [b'member1', b'member2', b'member3']
# Delete a key
r.delete('mykey')
# Close the Redis connection
r.close()
▪Github
@pythonl
5 ошибок, которых должен избегать каждый разработчик Python!
1. Avoid using global variables
Избегайте использовать глобальных переменных
# Using global variables
my_var = 42
def my_function():
global my_var
my_var += 1
return my_var
# Using local variables
def my_function2(my_var):
my_var += 1
return my_var
2. Avoid blocking I/O operations
Избегайте блокировки операций ввода/вывода
# Blocking I/O
import requests
response = requests.get('https://example.com')
print(response.text)
# Non-blocking I/O using asyncio
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'https://example.com')
print(html)
asyncio.run(main())
3. Avoid using eval() and exec()
избегайте использования eval() и exec()
# Using eval() to execute code
my_var = '1 + 1'
result = eval(my_var)
# Using ast.literal_eval() to safely evaluate literals
import ast
my_var = '[1, 2, 3]'
result = ast.literal_eval(my_var)
4. Avoid using mutable default arguments
Избегайте использования изменяемых аргументов
# Using mutable default arguments
def my_function(my_list=[]):
my_list.append(1)
return my_list
result1 = my_function() # [1]
result2 = my_function() # [1, 1]
# Using immutable default arguments
def my_function2(my_list=None):
if my_list is None:
my_list = []
my_list.append(1)
return my_list
result3 = my_function2() # [1]
result4 = my_function2() # [1]
5. Avoid using *args and **kwargs excessively
Избегайте частого использования *args и **kwargs
def my_function(*args, **kwargs):
arg1 = args[0]
arg2 = kwargs.get('arg2', 'default_value')
return arg1, arg2
result = my_function('value1', arg2='value2')
# Using named arguments and default values
def my_function2(arg1, arg2='default_value'):
return arg
▪Article
▪10 самых распространенных ошибок Python
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные примеры того, как улучшить ваш код на Python
1. Using List Comprehensions
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
2. Using Generators
with open('example.txt') as f:
for line in (line.strip() for line in f):
print(line)
3. Using the zip() function
names = ['Pippo', 'Pluto', 'Paperino']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f'{name} is {age} years old')
4. Using DefaultDictfrom collections import defaultdict
s = 'hello world'
d = defaultdict(int)
for c in s:
d[c] += 1
print(d)
5. Using enumerate()
fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
print(f'{i}: {fruit}')
▪Techniques to Write Better Python Code
▪Улучшение Python-кода
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Typeshed contains external type annotations for the Python standard library and Python builtins, as well as third party packages as contributed by people external to those projects.
Typeshed содержит внешние аннотации типов для стандартной библиотеки Python и встроенных модулей Python, а также пакеты сторонних разработчиков.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Подборка полезных папок с каналами для датасаентисов
Папки, где вы найдете каналы с разбором лучших практик написания кода на Python и Golang до каналов по машинному обучению и нейросетям (папки работают на последних версиях тг).
https://yangx.top/addlist/2Ls-snqEeytkMDgy - Машинное обучение
https://yangx.top/addlist/8vDUwYRGujRmZjFi - Python
https://yangx.top/addlist/MUtJEeJSxeY2YTFi - Golang
Папки, где вы найдете каналы с разбором лучших практик написания кода на Python и Golang до каналов по машинному обучению и нейросетям (папки работают на последних версиях тг).
https://yangx.top/addlist/2Ls-snqEeytkMDgy - Машинное обучение
https://yangx.top/addlist/8vDUwYRGujRmZjFi - Python
https://yangx.top/addlist/MUtJEeJSxeY2YTFi - Golang
Реализация алгоритма топологической сортировки
# a
# / \
# b c
# / \
# d e
edges = {"a": ["c", "b"], "b": ["d", "e"], "c": [], "d": [], "e": []}
vertices = ["a", "b", "c", "d", "e"]
def topological_sort(start, visited, sort):
current = start
visited.append(current)
neighbors = edges[current]
for neighbor in neighbors:
if neighbor not in visited:
sort = topological_sort(neighbor, visited, sort)
sort.append(current)
if len(visited) != len(vertices):
for vertice in vertices:
if vertice not in visited:
sort = topological_sort(vertice, visited, sort)
return sort
if __name__ == "__main__":
sort = topological_sort("a", [], [])
print(sort)
▪Topological sorting
▪Топологическая сортировка
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
ReactPy is a library for building user interfaces in Python without Javascript.
ReactPy - это библиотека для создания пользовательских интерфейсов на языке Python без использования Javascript. Интерфейсы ReactPy создаются из компонентов, которые выглядят и ведут себя аналогично тем, что есть в ReactJS.
▪Github
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
💫 Lark - a parsing toolkit for Python
Lark can parse all context-free languages.
Lark - это набор инструментов синтаксического анализа для Python, созданный с упором на скорость, производительность и модульность.
▪Github
@pythonl
Lark can parse all context-free languages.
Lark - это набор инструментов синтаксического анализа для Python, созданный с упором на скорость, производительность и модульность.
$ pip install lark --upgrade
from lark import Lark
l = Lark('''start: WORD "," WORD "!"
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
''')
print( l.parse("Hello, World!") )
Tree(start, [Token(WORD, 'Hello'), Token(WORD, 'World')])
▪Github
@pythonl
🔥 13 Django Packages to Every Developer Must Install
13 маст хэв пакетов Django, которые установить каждый разработчик.
1. Django Debug Toolbar
Этот мощный пакет предоставляет визуальный интерфейс для отладки, который выводит подробную информацию о SQL-запросах и их показателях производительности.
2. Django Rest Framework
Этот комплексный пакет упрощает создание RESTful API, предоставляя надежные инструменты для сериализации, аутентификации и тд.
3. Celery
Это распределенная асинхронная очередь заданий, которая обладает широким функционалом. В нашем конструкторе сайтов нам часто приходиться запускать асинхронные с точки зрения ответа пользователю задачи.
4. Django-Crispy-Forms
Этот удобный инструмент упрощает процесс рендеринга и стилизации форм.
5. Django-Cache
Этот пакет позволяет хранить часто используемые данные в памяти, уменьшая количество повторяющихся запросов к базе данных.
6. Django Allauth
Этот пакет предлагает комплексные функции регистрации пользователей, входа в систему и управления учетными записями.
10. Django Guardian
Этот пакет позволяет вам управлять разрешениями на уровне объектов, позволяя определять контроль доступа для отдельных экземпляров моделей.
11. Django Storages
Этот пакет интегрируется с популярными провайдерами облачных хранилищ, такими как Amazon S3 и Google Cloud Storage.
12. Django Compressor
Этот пакет автоматически объединяет и сжимает файлы CSS и JavaScript, уменьшая количество HTTP-запросов и улучшая время загрузки страниц.
13. Django Haystack
Этот пакет интегрирует различные поисковые системы, такие как Elasticsearch и Solr, позволяя вам создать надежные поисковые возможности для вашего приложения.
@pythonl
13 маст хэв пакетов Django, которые установить каждый разработчик.
1. Django Debug Toolbar
Этот мощный пакет предоставляет визуальный интерфейс для отладки, который выводит подробную информацию о SQL-запросах и их показателях производительности.
pip install django-debug-toolbar
2. Django Rest Framework
Этот комплексный пакет упрощает создание RESTful API, предоставляя надежные инструменты для сериализации, аутентификации и тд.
pip install djangorestframework
3. Celery
Это распределенная асинхронная очередь заданий, которая обладает широким функционалом. В нашем конструкторе сайтов нам часто приходиться запускать асинхронные с точки зрения ответа пользователю задачи.
pip install celery
4. Django-Crispy-Forms
Этот удобный инструмент упрощает процесс рендеринга и стилизации форм.
pip install django-crispy-forms
5. Django-Cache
Этот пакет позволяет хранить часто используемые данные в памяти, уменьшая количество повторяющихся запросов к базе данных.
pip install django-cache
6. Django Allauth
Этот пакет предлагает комплексные функции регистрации пользователей, входа в систему и управления учетными записями.
pip install django-allauth
10. Django Guardian
Этот пакет позволяет вам управлять разрешениями на уровне объектов, позволяя определять контроль доступа для отдельных экземпляров моделей.
pip install django-guardian
11. Django Storages
Этот пакет интегрируется с популярными провайдерами облачных хранилищ, такими как Amazon S3 и Google Cloud Storage.
pip install django-storages
12. Django Compressor
Этот пакет автоматически объединяет и сжимает файлы CSS и JavaScript, уменьшая количество HTTP-запросов и улучшая время загрузки страниц.
pip install django-compressor
13. Django Haystack
Этот пакет интегрирует различные поисковые системы, такие как Elasticsearch и Solr, позволяя вам создать надежные поисковые возможности для вашего приложения.
pip install django-haystack
@pythonl