Skip to content

Instantly share code, notes, and snippets.

@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':
@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 / 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 / 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