\documentclass[aspectratio=169]{beamer}
%\setbeameroption{show notes on second screen}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\definecolor{SUSEgreen}{RGB}{115, 186, 37}
\usecolortheme[named=SUSEgreen]{structure}

\usepackage{fontspec}
\setmainfont{Urania Czech}
\setsansfont{Urania Czech}

\usepackage{minted}

\title{Python packaging in openSUSE}
\subtitle{Advantages against other distributions}
\author[mcepl]{Matěj Cepl \\ \texttt{mcepl@cepl.eu}}
\date[openSUSECon 2022]{openSUSE Conference, June 2022}
\newcommand{\authortitle}{}
\newcommand{\organization}{SUSE}
\newcommand{\event}{OpenSUSE Conference 2022}

\begin{document}

\frame{\titlepage}

% \begin{frame}
% 
% \begin{tikzpicture}[remember picture,overlay]
%     \node at (5cm,-0.5cm) {\includegraphics[width=9.33cm,height=8cm,keepaspectratio]{package.png}};
% \end{tikzpicture}
% 
% \end{frame}

\begin{frame}
\frametitle{Problems in the Python non-specific packaging}

\begin{itemize}
    \item Multiple interpreters
    \item Complicated commands
    \item Not enough checking
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\frametitle{Multiple interpreters}

\begin{minipage}[t]{.35\textwidth}
\begin{minted}{spec}
%build
%if %{with python3}
%py3_build
%else
%py2_build
%endif
\end{minted}
\end{minipage} %
\hfill %
\pause %
\begin{minipage}[t]{.35\textwidth}
\begin{minted}{spec}
%build
%python_build
\end{minted}
\end{minipage}

\end{frame}

\begin{frame}[fragile]
\frametitle{Complicated commands}

\begin{minted}{spec}
%check
export PYTHONPATH=%{buildroot}%{python_sitelib} PYTHONDONTWRITEBYTECODE=1
pytest --ignore=build.* -v
\end{minted}

\note{And this is still not correct, because it must be done for all
Python versions separately (and those \texttt{--ignore=build*}
must be arranged accordingly). And we need to be able to take
  into consideration existing \texttt{PYTHONPATH}.}

\pause

Or we do:

\begin{minted}{spec}
%check
%pytest
\end{minted}

\end{frame}


\begin{frame}[fragile]
\frametitle{Example}

\scriptsize

\begin{minted}{spec}
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name:           python-foobar
Version:        1.0.2
Release:        0
Summary:        Example foobar package
License:        MIT
URL:            https://github.com/bumba/foobar
Source:         https://files.pythonhosted.org/packages/source/f/foobar/foobar-%{version}.zip
# PATCH-FIX-UPSTREAM remove_mock.patch bsc#123456 mcepl@suse.com
# we don't need stinking mock
Patch0:         remove_mock.patch
BuildRequires:  %{python_module appdirs}
BuildRequires:  %{python_module pytest}
BuildRequires:  fdupes
BuildRequires:  python-rpm-macros
Requires:       python-appdirs
BuildArch:      noarch
%python_subpackages

%description
foobar is a collection of enhancements to the Python packages that
allow you to build and distribute Python packages,
\end{minted}

\note[item]{Eliminate as much boiler-plate as possible. We
  have only two lines now, which are same every time: that
  python\_module definition and Release. And in both cases we are
  just forced to have them there by the mechanics of RPM.}
\note[item]{Note that macro python\_subpackages, that’s the
  root of all machinations. In effect this SPEC file is just a
  foundation, I don’t want to use the term “template”, because
  that would be misleading, for multiple generated ones.}

\end{frame}


\begin{frame}[fragile]
\frametitle{Example (cont.)}

\scriptsize

\begin{minted}{spec}
%prep
%autosetup -p1 -n foobar-%{version}

%build
export NOBUMPA=1
%python_build

%install
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}

%check
%pytest

%files %{python_files}
%license LICENSE
%doc CHANGES.rst README.rst
%{_bindir}/foobar
%{python_sitelib}/foobar
%{python_sitelib}/foobar-%{version}*-info

%changelog
\end{minted}

\note[item]{Using \texttt{autosetup} to avoid dealing with each patch again.}

\end{frame}

\begin{frame}
    \frametitle{Not enough checking}

    \begin{itemize}
        \item Given the number of packages we maintain (over
            2,500 in Factory) we need to put as much work as possible
            on machines.
        \item Packages are auto-generated by `py2pack`.
    \end{itemize}

\note[item]{They are auto-generated, but they are more like a
  ready-to-cook food, they need to be finished.}
\note[item]{And yes, it is similar to the Fedora’s
  \texttt{pyp2rpm}, but we have never managed to unify two
  code-bases. If anybody is willing to do the work, it would be
  lovely.}

\end{frame}

\begin{frame}
    \frametitle{Thank you!}
    My email is mcepl@cepl.eu.\vspace{1em}

    \tiny \LaTeX\hspace{0.01em} source of this presentation is
    available on https://gitlab.com/mcepl/opensuseconf.git.

\end{frame}


\end{document}
