Skip to content

Instantly share code, notes, and snippets.

View dmontagu's full-sized avatar

David Montague dmontagu

  • Pydantic
  • Bozeman, MT
View GitHub Profile
@dmontagu
dmontagu / safe_arrays.py
Last active January 28, 2020 13:05
Proof of concept tracking numpy array data types and shapes
from typing import TYPE_CHECKING, Any, Generic, Tuple, Type, TypeVar, Union
import numpy as np
from typing_extensions import Literal
T = TypeVar("T")
S = TypeVar("S")
class Dimension(Generic[T]):
@dmontagu
dmontagu / mypy.ini
Last active September 30, 2019 05:06
Static configs
# dmypy start -- --config-file mypy.ini -m fastapi -m pydantic -m starlette ; dmypy check backend/app/app
[mypy]
plugins = sqlmypy,backend/app/pydanticmypy.py:strict
follow_imports = silent
strict_optional = True
warn_redundant_casts = True
warn_unused_ignores = True
disallow_any_generics = True
check_untyped_defs = True
@dmontagu
dmontagu / fastapi_cbv.py
Last active March 27, 2025 19:40
FastAPI CBV
import inspect
from typing import Any, Callable, List, Type, TypeVar, Union, get_type_hints
from fastapi import APIRouter, Depends
from pydantic.typing import is_classvar
from starlette.routing import Route, WebSocketRoute
T = TypeVar("T")
CBV_CLASS_KEY = "__cbv_class__"
UserCreateT = TypeVar("UserCreateT", bound=UserCreate)
UserCreateRequestT = TypeVar("UserCreateRequestT", bound=UserCreateRequest)
UserInDBT = TypeVar("UserInDBT", bound=UserInDB)
UserUpdateT = TypeVar("UserUpdateT", bound=UserUpdate)
UserApiT = TypeVar("UserApiT", bound=UserBaseInDB)
UserOrmT = TypeVar("UserOrmT", bound=BaseUser)
logger = logging.getLogger(__name__)
@dmontagu
dmontagu / Makefile
Created September 5, 2019 09:42
FastAPI project makefile
.DEFAULT_GOAL := default
app_root = backend/app
pkg_src = $(app_root)/app
tests_src = $(app_root)/tests
local_tests_src = $(app_root)/tests/local
isort = isort -rc $(pkg_src) $(tests_src)
black = black $(pkg_src) $(tests_src)
flake8 = flake8 $(pkg_src) $(tests_src)
mypy = mypy $(pkg_src)
@dmontagu
dmontagu / build.py
Created September 4, 2019 07:12
CMake + Cython extension building with poetry
"""
Adapted from https://github.com/pybind/cmake_example
"""
import os
import platform
import re
import subprocess
import sys
import sysconfig
from distutils.version import LooseVersion
@dmontagu
dmontagu / mypy.ini
Last active August 7, 2019 09:23
Pydantic mypy plugin for signature checking
[mypy]
plugins = pydanticmypy.py
follow_imports = silent
strict_optional = True
warn_redundant_casts = True
warn_unused_ignores = True
disallow_any_generics = True
check_untyped_defs = True
ignore_missing_imports = True
@dmontagu
dmontagu / orm_mode_patch.py
Created June 15, 2019 06:33
Inherit from APIModel instead of BaseModel to get from_orm functionality
from typing import Any, Dict, Set, Type, TypeVar
from pydantic import BaseConfig, BaseModel, ConfigError, DictError, validate_model
from pydantic.utils import change_exception
Model = TypeVar("Model", bound=BaseModel)
class APIModel(BaseModel):
@dmontagu
dmontagu / generics.py
Created June 14, 2019 10:08
pydantic generics
from typing import Any, Dict, Generic, Optional, Tuple, Type, TypeVar, Union, get_type_hints, no_type_check
from pydantic import BaseModel, create_model, validator
from pydantic.class_validators import gather_validators
class BaseGenericModel:
def __init__(self, *args: Any, **kwargs: Any) -> None:
pass
@dmontagu
dmontagu / main.py
Last active June 14, 2019 13:18
FastAPI app with response shape wrapping
from functools import lru_cache
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union
from pydantic import BaseModel, create_model
from starlette.requests import Request
from starlette.responses import JSONResponse
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder