diff --git a/hadinet/SNT-pydantic/color_config.tex b/hadinet/SNT-pydantic/color_config.tex new file mode 100644 index 0000000..4d3b66d --- /dev/null +++ b/hadinet/SNT-pydantic/color_config.tex @@ -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} diff --git a/hadinet/SNT-pydantic/logo-hadinet-darkmode.pdf b/hadinet/SNT-pydantic/logo-hadinet-darkmode.pdf new file mode 100644 index 0000000..1e11970 Binary files /dev/null and b/hadinet/SNT-pydantic/logo-hadinet-darkmode.pdf differ diff --git a/hadinet/SNT-pydantic/logo-hadinet-darkmode.png b/hadinet/SNT-pydantic/logo-hadinet-darkmode.png new file mode 100644 index 0000000..c9f7875 Binary files /dev/null and b/hadinet/SNT-pydantic/logo-hadinet-darkmode.png differ diff --git a/hadinet/SNT-pydantic/main.tex b/hadinet/SNT-pydantic/main.tex new file mode 100644 index 0000000..755f80d --- /dev/null +++ b/hadinet/SNT-pydantic/main.tex @@ -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}