Skip to content

Instantly share code, notes, and snippets.

@bofm
bofm / py_guidelines.md
Created June 23, 2024 11:34
Python Project Development Guidelines

Project Guidelines

Favor Class Composition Over Inheritance

  • Reduced Coupling: Using composition over inheritance reduces coupling between classes, making the codebase easier to maintain and understand.
  • Explicit Dependencies: It's clear what dependencies are required by a class.
  • Increased Flexibility: Composition allows dynamic behavior swapping, unlike inheritance which is static.
  • Ease of Testing: Testing composed objects is often simpler because you can isolate components.
# Good: Using Composition
@bofm
bofm / calculate_new_coverage.py
Last active September 11, 2023 07:52
Calculate test coverage for the new code only. Usable in pull/merge requests.
"""
Calculates test coverage for the new code only, that is for the added and
changed lines of code.
Usage:
pytest --cov --cov-report=xml
git diff master..HEAD |python calculate_new_coverage.py --coverage-report coverage.xml
"""
@bofm
bofm / argparse_call.py
Created July 6, 2023 08:56
Automatically parse args and call a function based on it's signature.
import inspect
from argparse import ArgumentParser
def argparse_call(fn):
sig = inspect.signature(fn)
p = ArgumentParser()
for param in sig.parameters.values():
kwargs = {
'type': param.annotation,
@bofm
bofm / pydantic_typed_dict.py
Last active January 13, 2021 21:00
python pydantic typed dict validation
from functools import wraps
from typing import TypedDict
from pydantic import BaseModel, validate_arguments
def replace_typed_dict_annotations(annotations):
new_annotations = {}
for k, T in annotations.items():
if type(T).__name__ == '_TypedDictMeta':
from typing import (
Any,
Dict,
NamedTuple,
)
import pytest
class Case(NamedTuple):
from dataclasses import dataclass
import pytest
from lib.util import paths_eq
from collections.abc import Mapping
_MISS = object()
@bofm
bofm / f.py
Last active June 28, 2020 11:37
f
from functools import partial
class F:
__slots__ = ('fns',)
def __init__(self, *fns):
self.fns = fns
def __call__(self, *args, **kwargs):
@bofm
bofm / compose.py
Last active June 12, 2020 22:23
Python compose picklable
class compose:
__slots__ = ('f', 'fs')
def __init__(self, *fs):
self.f, *self.fs = reversed(fs)
def __call__(self, *args, **kwargs):
result = self.f(*args, **kwargs)
for f in self.fs:
result = f(result)
@bofm
bofm / files.txt
Last active August 27, 2019 16:58
tarantool repplicaset bootstrap problems
t1.lua| box.cfg{
t1.lua| feedback_enabled = false,
t1.lua| replication_connect_timeout = 1,
t1.lua| replication_connect_quorum = 0,
t1.lua| instance_uuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1",
t1.lua| replicaset_uuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
t1.lua| replication = {
t1.lua| "127.0.0.1:3301",
t1.lua| "127.0.0.1:3302",
t1.lua| "127.0.0.1:3303",
@bofm
bofm / docker-compose.yaml
Created July 31, 2019 14:58
tarantool bootstrap fail
version: '3.7'
services:
t1:
image: tarantool/tarantool:1.10.2
ports:
- '3301:3301'
entrypoint: ''
hostname: t1
command: