Add pydantic talk
parent
ff129754fb
commit
c155f7aef4
|
|
@ -0,0 +1,59 @@
|
||||||
|
\definecolor{KITgreen}{RGB}{0,150,130}
|
||||||
|
\definecolor{KITpalegreen}{RGB}{130,190,60}
|
||||||
|
\definecolor{KITblue}{RGB}{70,100,170}
|
||||||
|
\definecolor{KITyellow}{RGB}{250,230,20}
|
||||||
|
\definecolor{KITorange}{RGB}{220,160,30}
|
||||||
|
\definecolor{KITbrown}{RGB}{160,130,50}
|
||||||
|
\definecolor{KITred}{RGB}{160,30,40}
|
||||||
|
\definecolor{KITlilac}{RGB}{160,0,120}
|
||||||
|
\definecolor{KITcyanblue}{RGB}{80,170,230}
|
||||||
|
\definecolor{KITseablue}{RGB}{50,80,140}
|
||||||
|
\definecolor{KITblack}{RGB}{0,0,0}
|
||||||
|
|
||||||
|
|
||||||
|
\setbeamercolor{normal text}{fg=white,bg=black}
|
||||||
|
\setbeamercolor{alerted text}{fg=KITred!100}
|
||||||
|
\setbeamercolor{example text}{fg=white}
|
||||||
|
\setbeamercolor{structure}{fg=white}
|
||||||
|
|
||||||
|
%\setbeamerfont{alerted text}{series=\bfseries}
|
||||||
|
|
||||||
|
\setbeamercolor{palette primary}{fg=black!15,bg=black!85}
|
||||||
|
\setbeamercolor{palette secondary}{fg=black!15,bg=black!85}
|
||||||
|
\setbeamercolor{palette tertiary}{fg=black!15,bg=black!85}
|
||||||
|
\setbeamercolor{palette quaternary}{fg=black!15,bg=black!85}
|
||||||
|
|
||||||
|
\setbeamercolor{palette sidebar primary}{fg=black!25}
|
||||||
|
\setbeamercolor{palette sidebar secondary}{fg=black!25}
|
||||||
|
\setbeamercolor{palette sidebar tertiary}{fg=black!25}
|
||||||
|
\setbeamercolor{palette sidebar quaternary}{fg=black!25}
|
||||||
|
|
||||||
|
\setbeamercolor{item projected}{fg=black,bg=kit-green100}
|
||||||
|
|
||||||
|
% setup blocks in shaded KIT-colors
|
||||||
|
\setbeamercolor{block title}{fg=white,bg=KITgreen!75}
|
||||||
|
\setbeamercolor{block title alerted}{fg=white,bg=KITorange!75}
|
||||||
|
\setbeamercolor{block title example}{fg=white,bg=KITcyanblue!75}
|
||||||
|
|
||||||
|
\setbeamercolor{block body}{fg=black,bg=KITgreen!15}
|
||||||
|
\setbeamercolor{block body alerted}{fg=black, bg=KITorange!15}
|
||||||
|
\setbeamercolor{block body example}{fg=black,bg=KITcyanblue!15}
|
||||||
|
|
||||||
|
% setup progress bar in KITgreen
|
||||||
|
\setbeamercolor{progress bar}{fg=KITgreen, bg=KITgreen!15}
|
||||||
|
\setbeamercolor{title separator}{fg=KITgreen, bg=KITgreen!15}
|
||||||
|
\setbeamercolor{progress bar in head/foot}{fg=KITgreen, bg=KITgreen!15}
|
||||||
|
\setbeamercolor{progress bar in section page}{fg=KITgreen, bg=KITgreen!15}
|
||||||
|
|
||||||
|
% for \implitem and \item[bla] stuff to look right:
|
||||||
|
\setbeamercolor{itemize item}{fg=KITgreen!75}
|
||||||
|
\setbeamercolor{enumerate item}{fg=KITgreen!75}
|
||||||
|
\setbeamercolor{itemize subitem}{fg=KITgreen!75}
|
||||||
|
\setbeamercolor{itemize subsubitem}{fg=KITgreen!75}
|
||||||
|
|
||||||
|
\setbeamercolor{description item}{fg=black}
|
||||||
|
\setbeamercolor{description subitem}{fg=black}
|
||||||
|
\setbeamercolor{description subsubitem}{fg=black}
|
||||||
|
|
||||||
|
% make background of slide slightly gray to reduce eye strain
|
||||||
|
\setbeamercolor{background canvas}{fg=black!75, bg=black!75}
|
||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 152 KiB |
|
|
@ -0,0 +1,158 @@
|
||||||
|
\documentclass[10pt,aspectratio=169]{beamer}
|
||||||
|
|
||||||
|
\usetheme[progressbar=frametitle]{metropolis}
|
||||||
|
\input{color_config.tex}
|
||||||
|
\usepackage{appendixnumberbeamer}
|
||||||
|
\usepackage{svg}
|
||||||
|
\usepackage{booktabs}
|
||||||
|
\usepackage{listings}
|
||||||
|
\usepackage[scale=2]{ccicons}
|
||||||
|
|
||||||
|
\usepackage{pgfplots}
|
||||||
|
\usepgfplotslibrary{dateplot}
|
||||||
|
|
||||||
|
\usepackage{xspace}
|
||||||
|
\newcommand{\themename}{\textbf{\textsc{metropolis}}\xspace}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\setbeamertemplate{frametitle}{%
|
||||||
|
\nointerlineskip%
|
||||||
|
\begin{beamercolorbox}[%
|
||||||
|
wd=\paperwidth,%
|
||||||
|
sep=0pt,%
|
||||||
|
leftskip=\metropolis@frametitle@padding,%
|
||||||
|
rightskip=\metropolis@frametitle@padding,%
|
||||||
|
]{frametitle}%
|
||||||
|
\metropolis@frametitlestrut@start%
|
||||||
|
\insertframetitle%
|
||||||
|
\nolinebreak%
|
||||||
|
\metropolis@frametitlestrut@end%
|
||||||
|
\hfill
|
||||||
|
\raisebox{-0.6ex}{\includegraphics[height=6ex,keepaspectratio]{logo-hadinet-darkmode.png}}
|
||||||
|
\end{beamercolorbox}%
|
||||||
|
}
|
||||||
|
\setbeamertemplate{title page}{
|
||||||
|
\begin{minipage}[\paperheight]{\textwidth}
|
||||||
|
\ifx\inserttitle\@empty\else\usebeamertemplate*{title}\fi
|
||||||
|
\ifx\insertsubtitle\@empty\else\usebeamertemplate*{subtitle}\fi
|
||||||
|
\usebeamertemplate*{title separator}
|
||||||
|
\begin{columns}
|
||||||
|
\begin{column}{.6\textwidth}
|
||||||
|
\ifx\beamer@shortauthor\@empty\else\usebeamertemplate*{author}\fi
|
||||||
|
\ifx\insertdate\@empty\else\usebeamertemplate*{date}\fi
|
||||||
|
\ifx\insertinstitute\@empty\else\usebeamertemplate*{institute}\fi
|
||||||
|
\vfill
|
||||||
|
\end{column}
|
||||||
|
\begin{column}{.3\textwidth}
|
||||||
|
\vfill\hfill
|
||||||
|
\includegraphics[height=.4\textheight,keepaspectratio]{logo-hadinet-darkmode.png}
|
||||||
|
\end{column}
|
||||||
|
\end{columns}
|
||||||
|
\vfill
|
||||||
|
\end{minipage}
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{12} % for bold
|
||||||
|
\DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{12} % for normal
|
||||||
|
\usepackage{xcolor}
|
||||||
|
\definecolor{keyword}{RGB}{138, 172, 201}
|
||||||
|
\definecolor{class}{RGB}{205, 138, 196}
|
||||||
|
\definecolor{string}{RGB}{121, 189, 139}
|
||||||
|
\newcommand\pythonstyle{\lstset{
|
||||||
|
language=Python,
|
||||||
|
basicstyle=\ttm\small,
|
||||||
|
morekeywords={self},
|
||||||
|
keywordstyle=\ttb\small\color{keyword},
|
||||||
|
emph={StudentRoom,FastAPI},
|
||||||
|
emphstyle=\ttb\small\color{class},
|
||||||
|
stringstyle=\color{string},
|
||||||
|
frame=tb,
|
||||||
|
showstringspaces=false
|
||||||
|
}}
|
||||||
|
|
||||||
|
\title{Pydantic}
|
||||||
|
\subtitle{Favorite Tool for Data Validation in python}
|
||||||
|
% \date{\today}
|
||||||
|
\date{31.08.2023}
|
||||||
|
\author{Lewi}
|
||||||
|
\institute{}
|
||||||
|
% \titlegraphic{\hfill\includegraphics[height=1.5cm]{logo.pdf}}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\maketitle
|
||||||
|
\begin{frame}{dataclasses}
|
||||||
|
\begin{itemize}
|
||||||
|
\item
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}{Why Pydantic}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Encourages Usage of Type Hints
|
||||||
|
\item Fast
|
||||||
|
\item Autogenerates JSON Schema
|
||||||
|
\item Complete custom validation
|
||||||
|
\item Used in many other useful Frameworks
|
||||||
|
\item Awesome Documentation
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}[fragile]{Basics}
|
||||||
|
\pythonstyle
|
||||||
|
\begin{lstlisting}[language=Python]
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
class StudentRoom(BaseModel):
|
||||||
|
room_number: str
|
||||||
|
rent: int
|
||||||
|
|
||||||
|
r = StudentRoom(room_number='a111', rent=250)
|
||||||
|
print(r.room_number)
|
||||||
|
# > a111
|
||||||
|
r2 = StudentRoom(room_number='a111', rent=[250])
|
||||||
|
# > Input should be a valid integer
|
||||||
|
# > [type=int_type, input_value=[250], input_type=list]
|
||||||
|
\end{lstlisting}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}{What to use it for?}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Configuration Validation
|
||||||
|
\item Data Modeling
|
||||||
|
\item REST Validation
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}[fragile]{JSON Schema}
|
||||||
|
\pythonstyle
|
||||||
|
\begin{lstlisting}[language=Python]
|
||||||
|
StudentRoom.model_json_schema()
|
||||||
|
# > {'properties': {
|
||||||
|
# > 'room_number': {'title': 'Room Number', 'type': 'string'},
|
||||||
|
# > 'rent': {'title': 'Rent', 'type': 'integer'}
|
||||||
|
# > },
|
||||||
|
# > 'required': ['room_number', 'rent'],
|
||||||
|
# > 'title': 'StudentRoom',
|
||||||
|
# > 'type': 'object'
|
||||||
|
# > }
|
||||||
|
\end{lstlisting}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}[fragile]{FastApi}
|
||||||
|
\pythonstyle
|
||||||
|
\begin{lstlisting}[language=Python]
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
def read_root():
|
||||||
|
return {"Hello": "World"}
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/items/{item_id}")
|
||||||
|
def read_item(item_id: int, q: Union[str, None] = None):
|
||||||
|
return {"item_id": item_id, "q": q}
|
||||||
|
\end{lstlisting}
|
||||||
|
\end{frame}
|
||||||
|
\end{document}
|
||||||
Loading…
Reference in New Issue