# Resize the file system in UI, under VM -> Hardware -> Click on the disk to resize, click "Resize disk" button
# Confirm increase in disk space (1TB in my case)
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 1T 0 part
from django.contrib.admin import ModelAdmin | |
from .paginator import LargeTablePaginator | |
class MyTableAdmin(ModelAdmin): | |
... | |
paginator = LargeTablePaginator | |
show_full_result_count = False # Recommended to avoid another count() | |
... |
# @ https://cheat.readthedocs.io/en/latest/python/mock.html | |
obj.call_count # number of times it was called | |
obj.called == obj.call_count > 0 | |
obj.call_args_list # a list of (args,kwargs), one for each call | |
obj.call_args # obj.call_args_list[-1] (args,kwargs from last call) | |
obj.return_value # set to what it should return | |
obj.side_effect # set to an exception class or instance that should be raised when its called | |
obj.assert_called() # doesn't work with autospec=True? just assert obj.called | |
obj.assert_called_with(*args, **kwargs) # last call was with (*args, **kwargs) |
# test as follows: | |
# 1. start logstash: | |
# logstash -f ~/logstash.conf --config.reload.automatic | |
# 2. send it data: | |
# echo '{"container": "/spiff", "bleh": "blah"}' | nc localhost 6060 | |
input { | |
tcp { |
FROM ubuntu:16.04 as base | |
USER root | |
## Setting default environment variables | |
ENV WEB_ROOT=/web_root | |
# Root project folder | |
ENV ARCHES_ROOT=${WEB_ROOT}/arches | |
ENV WHEELS=/wheels | |
ENV PYTHONUNBUFFERED=1 |
""" | |
Usage example: | |
from logger import get_logger | |
log = get_logger() | |
log.info('my_event', my_key1='val 1', my_key2=5, my_key3=[1, 2, 3], my_key4={'a': 1, 'b': 2}) | |
List of metadata keys in each log message: | |
event | |
_func |
from typing import Optional | |
import base64 | |
from passlib.context import CryptContext | |
from datetime import datetime, timedelta | |
import jwt | |
from jwt import PyJWTError | |
from pydantic import BaseModel |
Репозиторий - это слой абстракции, инкапсулирующий в себе всё, что относится к способу хранения данных. Назначение: Разделение бизнес-логики от деталей реализации слоя доступа к данным.
Паттерн Репозиторий стал популярным благодаря DDD (Domain Driven Design). В противоположность к Database Driven Design в DDD разработка начинается с проектирования бизнес логики, принимая во внимание только особенности предметной области и игнорируя все, что связано с особенностями базы данных или других способов хранения данных. Способ хранения бизнес объектов реализуется во вторую очередь.
Применение данного паттерна не предполагает создание только одного объекта репозитория во всем приложении. Хорошей практикой считается создание отдельных репозиториев для каждого бизнес-объекта или контекста, например: OrdersRepository, UsersRepository, AdminRepository.
The set
lines
- These lines deliberately cause your script to fail. Wait, what? Believe me, this is a good thing.
- With these settings, certain common errors will cause the script to immediately fail, explicitly and loudly. Otherwise, you can get hidden bugs that are discovered only when they blow up in production.
set -euxo pipefail
is short for:
set -e
set -u
- Ревью - задача с наивысшим приоритетом. Желательно приступать к ревью как можно скорее. Это поможет избежать массового мержа задач в конце спринта и не будет тратить время коллег, особенно если задачи взаимозависимы. Начинаем ревью задачи при первом стабильном билде.
- Прежде всего нужно проверить соответствие указанного номера задачи, репозитория и версии указанным в Jira, а в ходе ревью обратить внимание, соответствуют ли внесенные изменения поставленной задаче.
- Названия коммитов и PR пишутся с большой буквы, они должны содержать номер задачи, описывать внесенные изменения и быть обезличенными. Плохой пример: “сделал правки”, хороший пример: “UFSUI-1111 Исправлена работа скролла в Select при открытии вверх”.
- На ревью обязательно нужно как посмотреть код, так и проверить корректность работы компонента с внесенными изменениями. Код стоит проверять досконально в каждом файле. При проверке работы нужно попытаться воспроизвести все возможные кейсы использования компонента. Не стоит пренебрегать одним из ш