(chore): Initilised devops tools (#29)
* Added a first action * Repaired a typo * Repaired a typo2 * Repaired a typo2 * Added flake8 action * Repaired a typo in the flake8 action. * Added a first bandit action * Added a first batch * Added a first batch * Added a first batch * Added a first batch * Added a first batch * Added the flake8-prebuild as a need to flake8 * Added the flake8-prebuild as a need to flake8 * Added the flake8-prebuild as a need to flake8 * Added the docker socket to the volume. * Added the flake8-prebuild as a need to flake8 * Removed latest part from container. * Removed latest part from container. * Removed latest part from container. * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 poetry * Reworked flake8 poetry * Changed to 64bit * Some edits to the runner * Added python setup * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added ra run linter * Added ra run linter * Added ra run linter * Added ra run linter * Removed redundant version * Removed redundant version * Added isort * Added isort * Added isort * Added poetry install * Added poetry install * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Uses nodejs and python image * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Removed selfhosted runner * Removed self hosted runner * Removed self hosted runner * Removed self hosted runner * Added black and flake8 tests * Removed self hosted runner * Removed self hosted runner * Removed unneded actions * Added a mypy error. * Removed poetry call before boetry setup * Removed poetry call before poetry setup * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added the snook poetry builder * Reworked the repo a bit * Removed unneeded poetry installation * Added the isort action * Added isort test * Added ruff * Added full ruff configuration * Added full ruff configuration2 * Added full ruff configuration2 * Removed duplicat configurations * Removed some redundant pre-commit hooks * Removed unneeded actions. * Removed unneeded actions. * Repaired ruff * Added tests. * Removed * Removed * Removed a missing file * Removed a missing file * Removed a missing file * Removed a missing file * Removed a missing file * Added reports as artifacts * Added reports as artifacts * Added reports as artifacts * Removed the unneded poetry test * Added a license checker. * Added a license checker. * Removed some unneeded configuration. * Removed the import reformatted. * Added doc generation. * Added doc generation. * Added license summary. * Add * Add lint * Switched pip-licenses to poetry. * Switched pip-licenses to poetry. * Switched pip-licenses to poetry. * Remove some more packages. * Remove some more packages. * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added version codes to the main package * Changed the format of the md files * Presentation first draft * Version up and added extensions * Version up and added extensions * Version up and added extensions * Removed the venv path from docbuild * Actions version up * Actions version up * Actions version up * Actions version up * Actions version up * Actions version up * Experiements with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * First draft of the sphinx documentation. * Added the protocol to the time series. * Added the protocol to the time series. * First draft ot a first build pipline * Added mermaid version support * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Add safety * Add safety * Add safety * Added the action on pull_request_target * Added the action on pull_request_target * Added the action on pull_request_target * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a build step * Added a build step * Added a build step * Added a build step * Changed the lint action to work only on python changes. * Changed the lint action to work only on python changes. * Changed the lint action to work only on python changes. * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Coverage * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Repaired a bug. * Repaired a bug. * Repaired a bug. * Repaired a bug. * Repaired a bug. * Added a github branch.ref * Removed a poetry install * Docbuild now excludes templates * Added the seminarpräsentation to the documentation build * Added the seminarpräsentation to the documentation build * Added the seminarpräsentation to the documentation build * dded a few images * Changed the pre-commit image * Changed the pre-commit image * Presentation done * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx
20
documentations/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?=
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SOURCEDIR = .
|
||||
BUILDDIR = _build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@ -1,27 +1,27 @@
|
||||
# Pflichtenheft: Kapitalgesellschaften referenzregister
|
||||
|
||||
Version 0.1 Erstellt am 07.04.2023
|
||||
Version 0.1 Erstellt am 07.04.2023
|
||||
|
||||
|Autoren | Matrikelnummer |
|
||||
|----------|---------|
|
||||
| Kim Mesewinkel | 000 |
|
||||
| Tristan Nolde | 000 |
|
||||
| Sebastian Zelenie | 000 |
|
||||
| Philip Horstenkamp | 000 |
|
||||
| Sascha Zhu | 000 |
|
||||
| Tim Ronneburg | 000 |
|
||||
| Autoren | Matrikelnummer |
|
||||
|--------------------|----------------|
|
||||
| Kim Mesewinkel | 000 |
|
||||
| Tristan Nolde | 000 |
|
||||
| Sebastian Zelenie | 000 |
|
||||
| Philip Horstenkamp | 000 |
|
||||
| Sascha Zhu | 000 |
|
||||
| Tim Ronneburg | 000 |
|
||||
|
||||
|
||||
|
||||
|
||||
## Historie der Dokumentenversion <a name="historie"></a>
|
||||
|
||||
|Version | Datum | Autor | Änderungsgrund / Bemerkung |
|
||||
|----------|---------| ---------| ---------|
|
||||
| 0.1 | 07.04.2023 | Tim Ronneburg | Intialaufsetzen des Pflichtenhefts |
|
||||
| 0.2 | 000 |
|
||||
| ... | 000 |
|
||||
| 1.0 | 000 |
|
||||
| Version | Datum | Autor | Änderungsgrund / Bemerkung |
|
||||
|-----------|------------|---------------|----------------------------------------|
|
||||
| 0.1 | 07.04.2023 | Tim Ronneburg | Initiales aufsetzen des Pflichtenhefts |
|
||||
| 0.2 | 000 | | |
|
||||
| ... | 000 | | |
|
||||
| 1.0 | 000 | | |
|
||||
|
||||
## Inhaltsverzeichnis <a name="inhaltsverzeichnis"></a>
|
||||
[Historie der Dokumentenversion](#historie)
|
||||
@ -78,7 +78,7 @@ Test
|
||||
|
||||
|
||||
|
||||
## Funktionale Anforderungenn <a name="f_anforderung"></a>
|
||||
## Funktionale Anforderungen <a name="f_anforderung"></a>
|
||||
|
||||
### **Muss Ziele**
|
||||
|
||||
@ -115,9 +115,9 @@ Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Pos
|
||||
### **Muss Ziele**
|
||||
|
||||
### N100 <a name="n100"></a>
|
||||
Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen
|
||||
Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen
|
||||
- Umsatz
|
||||
-
|
||||
-
|
||||
-
|
||||
bewertet und bemessen.
|
||||
|
||||
@ -144,4 +144,4 @@ Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000
|
||||
|
||||
## Lieferumfang <a name="lieferumfang"></a>
|
||||
|
||||
## Anhang / Ressourcen <a name="anhang/ressourcen"></a>
|
||||
## Anhang / Ressourcen <a name="anhang/ressourcen"></a>
|
||||
|
88
documentations/conf.py
Normal file
@ -0,0 +1,88 @@
|
||||
"""Python sphinx documentation build configuration."""
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# For the full list of built-in configuration values, see the documentation:
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
import os
|
||||
import sys
|
||||
from importlib.metadata import metadata
|
||||
from typing import Final
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||
|
||||
_DISTRIBUTION_METADATA = metadata("aki-prj23-transparenzregister")
|
||||
|
||||
__author__: Final[str] = _DISTRIBUTION_METADATA["Author"]
|
||||
__email__: Final[str] = _DISTRIBUTION_METADATA["Author-email"]
|
||||
__version__: Final[str] = _DISTRIBUTION_METADATA["Version"]
|
||||
|
||||
project: Final[str] = "transparenzregister"
|
||||
copyright: Final[str] = "2023, AKI PRJ23" # noqa: A001
|
||||
author: Final[str] = __author__
|
||||
version: Final[str] = __version__
|
||||
release: Final[str] = __version__
|
||||
|
||||
|
||||
sys.path.insert(0, os.path.abspath("../src")) # Add the path to your Python package
|
||||
sys.path.insert(0, os.path.abspath("../src/aki_prj23_transparenzregister"))
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||
|
||||
extensions: Final[list[str]] = [
|
||||
"sphinx.ext.autodoc",
|
||||
"nbsphinx",
|
||||
"myst_parser",
|
||||
"sphinx.ext.napoleon",
|
||||
"sphinx_copybutton",
|
||||
"sphinx_autodoc_typehints",
|
||||
"sphinx.ext.intersphinx",
|
||||
"sphinx.ext.autosectionlabel",
|
||||
"sphinx.ext.viewcode",
|
||||
"IPython.sphinxext.ipython_console_highlighting",
|
||||
"sphinxcontrib.mermaid",
|
||||
]
|
||||
|
||||
# templates_path : Final[list[str]] = ["_templates"]
|
||||
exclude_patterns: Final[list[str]] = ["_build", "Thumbs.db", ".DS_Store", "templates"]
|
||||
|
||||
root_doc: Final[str] = "index"
|
||||
# master_doc = "index"
|
||||
|
||||
autodoc_default_flags: Final[list[str]] = [
|
||||
"members",
|
||||
"inherited-members",
|
||||
"show-inheritance",
|
||||
]
|
||||
autodoc_class_signature: Final[str] = "separated"
|
||||
autodoc_default_options: Final[dict[str, bool]] = {
|
||||
_: True for _ in autodoc_default_flags
|
||||
}
|
||||
autodoc_typehints: Final[str] = "signature"
|
||||
simplify_optional_unions: Final[bool] = True
|
||||
typehint_defaults: Final[str] = "comma"
|
||||
source_suffix: Final[list[str]] = [".rst", ".md"]
|
||||
mermaid_output_format: Final[str] = "raw"
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||
|
||||
html_theme: Final[str] = "sphinx_rtd_theme"
|
||||
html_static_path: Final[list[str]] = ["_static"]
|
||||
|
||||
napoleon_google_docstring: Final[bool] = True
|
||||
napoleon_numpy_docstring: Final[bool] = False
|
||||
|
||||
|
||||
nbsphinx_execute = "never"
|
||||
|
||||
intersphinx_mapping: Final[dict[str, tuple[str, None]]] = {
|
||||
"python": ("https://docs.python.org/3", None),
|
||||
"pandas": ("https://pandas.pydata.org/docs/", None),
|
||||
"numpy": ("https://numpy.org/doc/stable/", None),
|
||||
"matplotlib": ("https://matplotlib.org/stable/", None),
|
||||
"scikit-learn": ("https://scikit-learn.org/stable/", None),
|
||||
"sphinx": ("https://docs.sympy.org/latest/", None),
|
||||
}
|
53
documentations/index.rst
Normal file
@ -0,0 +1,53 @@
|
||||
.. Your Package Name documentation master file, created by Sphinx
|
||||
|
||||
Transparenzregister Dokumentation
|
||||
=================================
|
||||
This is the documentation for the AKI project group on the german transparenzregister and an Analysis there of.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: Project planung
|
||||
|
||||
Pflichtenheft
|
||||
timeline.md
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
:caption: Meeting Notes:
|
||||
|
||||
meeting-notes/*
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 3
|
||||
:caption: Research
|
||||
|
||||
research/*
|
||||
research/*.ipynb
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 0
|
||||
:caption: Seminararbeiten
|
||||
|
||||
seminararbeiten/DevOps/Seminarpräsentation.ipynb
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 0
|
||||
:caption: Modules
|
||||
|
||||
modules
|
||||
|
||||
.. automodule:: aki_prj23_transparenzregister
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
:autodoc_member_order:
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
35
documentations/make.bat
Normal file
@ -0,0 +1,35 @@
|
||||
@ECHO OFF
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=.
|
||||
set BUILDDIR=_build
|
||||
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.https://www.sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
goto end
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||
|
||||
:end
|
||||
popd
|
BIN
documentations/seminararbeiten/DevOps/Action-Summary.PNG
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
documentations/seminararbeiten/DevOps/Action.PNG
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
documentations/seminararbeiten/DevOps/Coverage.PNG
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
documentations/seminararbeiten/DevOps/Lint-error.PNG
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
documentations/seminararbeiten/DevOps/Pre-commit.PNG
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
documentations/seminararbeiten/DevOps/Pull_request.PNG
Normal file
After Width: | Height: | Size: 40 KiB |
698
documentations/seminararbeiten/DevOps/Seminarpräsentation.ipynb
Normal file
@ -0,0 +1,698 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"jupyter": {
|
||||
"outputs_hidden": false
|
||||
},
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"# DevOps for the Transparenzregister analysis"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"jupyter": {
|
||||
"outputs_hidden": false
|
||||
},
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## Dependency management in Python\n",
|
||||
"### Tools\n",
|
||||
"\n",
|
||||
"- `The requirements.txt` lists all the dependencies of a project with version number and optionally with hashes and additional indexes and conditions for system specific differences.\n",
|
||||
" - Changes are difficult because auf interdependency. \n",
|
||||
" - Sync with requirements.txt is impossible via pip.\n",
|
||||
" - All indirekt requirements need to be changed manually. \n",
|
||||
" - Security and other routine upgrades for bugfixes are annoying and difficult to solve.\n",
|
||||
" - Adding new requirements is complex."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"jupyter": {
|
||||
"outputs_hidden": false
|
||||
},
|
||||
"slideshow": {
|
||||
"slide_type": "skip"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"- `pip-tools` is the next level up.\n",
|
||||
" - Generates `requirements.txt` from `requirements.ini`\n",
|
||||
" - Allows for sync with ``requirements.txt`\n",
|
||||
" - No solution to manage multiple combinations of requirements for multiple problems.\n",
|
||||
" - Applications or packages with dev and build tools\n",
|
||||
" - Applications or packages with test and lint tools\n",
|
||||
" - packages with additional typing packages\n",
|
||||
" - A combination there of\n",
|
||||
"- `pip-compile-multi` is an extension of `pip-tools` and allows for the generation of multiple requirements files.\n",
|
||||
" - Only configured combinations of dependency groups are allowed.\n",
|
||||
" - Different configurations may find different solutions."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"jupyter": {
|
||||
"outputs_hidden": false
|
||||
},
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"- `poetry` is the most advanced tool to solve python dependencies\n",
|
||||
" - Comparable to Javas `maven`\n",
|
||||
" - Finds a complete solution for all requirement groups and installed groups as defined\n",
|
||||
" - Allows for upgradable packages in defined bounds.\n",
|
||||
" - Exports a solution that can be used on multiple machines to guarantee the same environment\n",
|
||||
" - Handling of Virtual environments\n",
|
||||
" - Automatically includes requirements in metadata and other entries for wheel when building\n",
|
||||
" - Build and publication management\n",
|
||||
" - Complete packaging configuration in `pyproject.toml` as required in **PEP 621**\n",
|
||||
" - Supports plugins"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Defined Poetry dependency groups in our project\n",
|
||||
"| Group | Contents & Purpose |\n",
|
||||
"|:--------|:--------------------------------------------------------------------|\n",
|
||||
"| root | The packages needed for the package itself |\n",
|
||||
"| develop | Packages needed to support the development such as `jupyter` |\n",
|
||||
"| lint | Packages needed for linting such as `mypy`, `pandas-stubs` & `ruff` |\n",
|
||||
"| test | Packages needed for testing such as `pytest` |\n",
|
||||
"| doc | Packages needed for the documentation build such as `sphinx` |"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "skip"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### How to use poetry\n",
|
||||
"- `poetry new <project-name>` command creates a new poject with folder structure and everything.\n",
|
||||
"- `poetry init` adds a poetry configuration to an existing project.\n",
|
||||
"\n",
|
||||
"- `poetry install` If the project is already configured will install the dependencies.\n",
|
||||
" - kwarg `--with dev` force it to install the dependencies to develop with. In our case that would be a jupyter setup.\n",
|
||||
" - kwarg `--without lint,test` forces poetry to not install the dependencies for the groups lint and test. For our case that would include pytest, mypy and typing packages."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "skip"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"- `poetry add pandas_typing<=2` would add pandas with a versions smaller than `2.0.0` as a dependency.\n",
|
||||
" - kwarg `--group lint` would configure it as part of the dependency group typing.\n",
|
||||
" - A package can be part of multiple groups.\n",
|
||||
" - By default, it is part of the package requirements that are part of the requirements if a build wheel is installed.\n",
|
||||
" - Only direct requirements are configured! Indirect requirements are solved.\n",
|
||||
"- `poetry update` updates the dependency solution and syncs the new dependencies.\n",
|
||||
"- Requirement files can be exported.\n",
|
||||
"\n",
|
||||
"The full documentation can be found [here](https://python-poetry.org/)!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## Linter\n",
|
||||
"\n",
|
||||
"Python is an\n",
|
||||
"\n",
|
||||
"- interpreted\n",
|
||||
"- weak typed\n",
|
||||
"\n",
|
||||
"programing language.\n",
|
||||
"Without validation of types and other compile mechanisms that highlight some errors.\n",
|
||||
"\n",
|
||||
"Lint stands for *lint is not a software testing tool* and analyses the code for known patterns that can lead to different kinds of problems."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Why lint: Application perspective:\n",
|
||||
"- In Compiled programming languages many errors a thrown when a software is build. This is a first minimum quality gate for code.\n",
|
||||
"- Hard typing also enforces a certain explicit expectation on arguments are expected. This is a secondary quality gate for code python does not share.\n",
|
||||
"- This allows for a certain flexibility but allows for careless mistakes.\n",
|
||||
"- Helps to find inconsistencies\n",
|
||||
"- Helps to find security vulnerabilities"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Why lint: Human perspective:\n",
|
||||
"- Certainty that naming conventions are followed allows for an easier code understanding.\n",
|
||||
"- Auto whitespace formatting (Black) \n",
|
||||
" - Absolut whitespace formatting allows for a clean differentials when versioning with git.\n",
|
||||
" - The brain does not need to adapt on how somebody else formats his code\n",
|
||||
" - No time wasted on beatification of code through whitespace\n",
|
||||
"- Classic linter\n",
|
||||
" - Faster increas in abilities\n",
|
||||
" - Nobody needs to read a long styleguide\n",
|
||||
" - Reminds the programmer of style rules when they are violated\n",
|
||||
" - Contributers from otside the project can contribute easier\n",
|
||||
" - Code simplifications are pointed out\n",
|
||||
" - Reduces the number of variances for the same functionality"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Collection of Recommended linter\n",
|
||||
"\n",
|
||||
"- Black for an automatic and absolut whitespace formatting. (No configuration options)\n",
|
||||
"- Ruff faster rust implementation of many commonly used linters.\n",
|
||||
" - Reimplementation of the following tools:\n",
|
||||
" - flake8 (Classic python linter, unused imports, pep8)\n",
|
||||
" - isort Automatic import sorting (Vanilla python, third party, your package)\n",
|
||||
" - bandit (Static code analysis for security problems)\n",
|
||||
" - pylint (General static code analysis)\n",
|
||||
" - many more\n",
|
||||
" - Fixes many things that have `simple` fixes\n",
|
||||
" - Relatively new\n",
|
||||
" - Endorsed from project like pandas, FastAPI, Hugging Face, SciPy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"- mypy\n",
|
||||
" - Checks typing for python\n",
|
||||
" - Commonly used linter for typing\n",
|
||||
" - Often needs support of typing tools\n",
|
||||
" - Sometimes additional typing information is needed from packages such as `pandas_stubs`."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"- pip-audit checks dependencies against vulnarability db\n",
|
||||
"- pip-license checks if a dependency has an allowed license"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Testing with Pytest\n",
|
||||
"\n",
|
||||
"Even tough python comes with its own testing framework a much more lightweight and more commonly used testing framework is `pytest`\n",
|
||||
"\n",
|
||||
"``tests/basic_test.py``\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"from ... import add\n",
|
||||
"\n",
|
||||
"def test_addition():\n",
|
||||
" assert add(4, 3) == 7, \"The addtion did not result into the correct result\"\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Parametizeed Test\n",
|
||||
"\n",
|
||||
"In addition, pytest contains the functionality to parameter its inputs\n",
|
||||
"\n",
|
||||
"``tests/parametriesed_test.py``\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import pytest\n",
|
||||
"\n",
|
||||
"from ... import add\n",
|
||||
"\n",
|
||||
"@pytest.mark.parametize(\"inputvalues,output_value\", [[(1,2,3), 6], [(21, 21), 42]])\n",
|
||||
"def test_addition(inputvalues: tuple[float, ...], output_value: [float]):\n",
|
||||
" assert add(*inputvalues) == output_value\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Tests with setup and teardown\n",
|
||||
"\n",
|
||||
"Setting up an enviroment and cleaning it up afterwords is possible with `pytest`'s `fixture`\n",
|
||||
"\n",
|
||||
"``tests/setup_and_teardown_test.py`` \n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import pytest\n",
|
||||
"\n",
|
||||
"from sqlalchemy.orm import Session\n",
|
||||
"\n",
|
||||
"@pytest.fixture()\n",
|
||||
"def create_test_sql() -> Generator[Session, None, None]:\n",
|
||||
" # create_test_sql_table\n",
|
||||
" # create sql connection\n",
|
||||
" yield sql_session\n",
|
||||
" # delete sql connection\n",
|
||||
" # delete sql tables\n",
|
||||
" \n",
|
||||
"def test_sql_table(create_test_sql) -> None:\n",
|
||||
" assert sql_engine.query(HelloWorldTable).get(\"hello\") == \"world\"\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Tests are run with the following command\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"poetry run pytest tests/\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Code Coverage\n",
|
||||
"\n",
|
||||
"Code coverage reports count how many times a line was executed and therfore tested.\n",
|
||||
"\n",
|
||||
"They can eiter be integrated into an IDE for higliting of missing code or reviewed directly.\n",
|
||||
"\n",
|
||||
"Either over third party software or by the html version that can be found with the build artifacts."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## pre-commits\n",
|
||||
"\n",
|
||||
"Git is a filesystem based versioning application.\n",
|
||||
"That includes parts of its code are accessible and ment to be manipulated.\n",
|
||||
"At different times of the application a manipulate script can be executed.\n",
|
||||
"Typicle moments are on:\n",
|
||||
"- pull\n",
|
||||
"- push / push received\n",
|
||||
"- pre-commit / pre-merge / pre-rebase\n",
|
||||
"\n",
|
||||
"The `pre-commit` package hooks into the commit and implements a set of programms before committing\n",
|
||||
"Files can be **edited** or **validated**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"`pre-commit` execute fast tests on changed files to ensure quality of code.\n",
|
||||
"\n",
|
||||
"**Bohems Law**\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Since they are executed on commit on only the newly committed files a response is much faster.\n",
|
||||
"The normally only include linting and format validation tools no testing.\n",
|
||||
"Sometimes autofixer such as black, isort and ruff."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Configured pre-commit hooks:\n",
|
||||
"\n",
|
||||
"- format checker + pretty formatter (xml,json,ini,yaml,toml)\n",
|
||||
"- secret checker => No passwords or private keys\n",
|
||||
"- file naming convention checker for tests\n",
|
||||
"- syntax checker\n",
|
||||
"- ruff => Linter\n",
|
||||
"- black => Whitespace formatter\n",
|
||||
"- poetry checker\n",
|
||||
"- mypy => typing checker\n",
|
||||
"- md-toc => Adds a table oc contents to an *.md where `<!--TOC-->` is placed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Pre commits are installed with the command\n",
|
||||
"```bash\n",
|
||||
"pre-commit install\n",
|
||||
"```\n",
|
||||
"The pre commits after that executed on each commit.\n",
|
||||
"\n",
|
||||
"If the pre-commits need to be skipped the -n option skips them on commit.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## Documentation build with sphinx\n",
|
||||
"\n",
|
||||
"There is no single way to use to build a python documentation.\n",
|
||||
"Sphinx is a commonly used libarary.\n",
|
||||
"\n",
|
||||
"- Builds a package documentation from code\n",
|
||||
"- Native in rest\n",
|
||||
"- Capable of importing *.md, *.ipynb\n",
|
||||
"- Commonly used read the docs theme\n",
|
||||
"- Allows links to third party documentations via inter-sphinx (pandas, numpy, etc.)\n",
|
||||
"\n",
|
||||
"Currently implemented to build a documentation on pull_requests and the main branch.\n",
|
||||
"\n",
|
||||
"Automatically deployed from the main branch."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## GitHub\n",
|
||||
"\n",
|
||||
"GitHub is a central hub for git repositories to be stored and manged.\n",
|
||||
"\n",
|
||||
"In addition, it hosts project management tools and devops tools for:\n",
|
||||
"- testing\n",
|
||||
"- linting\n",
|
||||
"- analysing\n",
|
||||
"- building\n",
|
||||
"- deploying code\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Example GitHub action workflow\n",
|
||||
"\n",
|
||||
"Workflows are defined in `.github/workflows/some-workflow.yaml`\n",
|
||||
"```yaml\n",
|
||||
"name: Build\n",
|
||||
"\n",
|
||||
"on: # when to run the action\n",
|
||||
" pull_request:\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"A single action of a workflow.\n",
|
||||
"\n",
|
||||
"```yaml\n",
|
||||
"jobs:\n",
|
||||
" build:\n",
|
||||
" runs-on: ubuntu-latest # on what kind of runner to run an action\n",
|
||||
" steps:\n",
|
||||
" - uses: actions/setup-python@v4 # setup python\n",
|
||||
" with:\n",
|
||||
" python-version: 3.11\n",
|
||||
" - uses: snok/install-poetry@v1 # setup poetry\n",
|
||||
" with:\n",
|
||||
" version: 1.4.2\n",
|
||||
" virtualenvs-path: ~/local/share/virtualenvs\n",
|
||||
" - uses: actions/checkout@v3\n",
|
||||
" - run: |\n",
|
||||
" poetry install --without develop,doc,lint,test\n",
|
||||
" poetry build\n",
|
||||
" - uses: actions/upload-artifact@v3\n",
|
||||
" with:\n",
|
||||
" name: builds\n",
|
||||
" path: dist/\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Test and Build-pipeline with GitHub actions\n",
|
||||
"On push and pull request:\n",
|
||||
"- Lint + license check + dependency security audit\n",
|
||||
" - Problem summaries in GitHub actions + Problem notification via mail\n",
|
||||
"- Test with pytest + coverage reports + coverage comment on pull request\n",
|
||||
"- Python Build\n",
|
||||
"- Documentation Build\n",
|
||||
"- Documentation deployment to GitHub pages (on push to main)\n",
|
||||
"\n",
|
||||
"On Tag:\n",
|
||||
"- Push: Docker architecture and CD context still unclear"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Build artifacts\n",
|
||||
"\n",
|
||||
"- Dependencies / versions and licenses\n",
|
||||
"- Security report\n",
|
||||
"- Unit test reports and coverage report as `.coverage` / `coverage.xml` / `html`!\n",
|
||||
"- Build wheel\n",
|
||||
"- Build documentation\n",
|
||||
"- probably. one or more container\n",
|
||||
"- if needed documentation as pdf"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### Dependabot\n",
|
||||
"\n",
|
||||
"Dependabot is a GitHub tool to refresh dependencies if newer ones come available or if the currently used ones develop security flaws.\n",
|
||||
"Dependabot is currently not python compatible.\n",
|
||||
"Dependabot is a tool for a passive maintenance of a project without the need for much human overside."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "subslide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"### GitHub Runner Configuration and what does not work\n",
|
||||
"\n",
|
||||
"Most GitHub actions for python reley on the `actions/python-setup` action.\n",
|
||||
"This action is not available for linux arm.\n",
|
||||
"Workarounds with a python docker container / an installation of python on the runner and other tools do not work well."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"celltoolbar": "Slideshow",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.0"
|
||||
},
|
||||
"rise": {
|
||||
"scroll": true
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
BIN
documentations/seminararbeiten/DevOps/bohems-law.png
Normal file
After Width: | Height: | Size: 21 KiB |
@ -1,75 +1,71 @@
|
||||
```mermaid
|
||||
%%{init:
|
||||
{
|
||||
"theme": "neutral"
|
||||
}
|
||||
}%%
|
||||
gantt
|
||||
%%Timeline created 11-04-2023
|
||||
%%use Mermaid.js for visualization
|
||||
title Timeline PG Transparenzregister
|
||||
dateFormat YYYY-MM-DD
|
||||
section Organisation
|
||||
Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d
|
||||
Erstellen des Organigramms : done, after a1 , 1d
|
||||
GitHub : done, 2023-04-06, 7d
|
||||
Zeitplanung SoSe : active , 2023-04-06, 7d
|
||||
# Timeline
|
||||
```{mermaid}
|
||||
|
||||
section Dokumentation
|
||||
Meeting Notes: active, 2023-03-30, 10w
|
||||
Seminarthemen: active, 2023-04-13, 8w
|
||||
Lastenheft: active, 2023-04-06, 5w
|
||||
Pflichtenheft: milestone, 2023-05-11
|
||||
Reserve: crit, 2023-06-08, 1w
|
||||
gantt
|
||||
|
||||
title Timeline PG Transparenzregister
|
||||
dateFormat YYYY-MM-DD
|
||||
section Organisation
|
||||
Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d
|
||||
Erstellen des Organigramms : done, after a1 , 1d
|
||||
GitHub : done, 2023-04-06, 7d
|
||||
Zeitplanung SoSe : active , 2023-04-06, 7d
|
||||
|
||||
section Dokumentation
|
||||
Meeting Notes: active, 2023-03-30, 10w
|
||||
Seminarthemen: active, 2023-04-13, 8w
|
||||
Lastenheft: active, 2023-04-06, 5w
|
||||
Pflichtenheft: milestone, 2023-05-11
|
||||
Reserve: crit, 2023-06-08, 1w
|
||||
|
||||
|
||||
section Meeting
|
||||
Weekly 1 : done, 2023-03-30, 0.5h
|
||||
Statustermin 1 : done ,2023-03-30 , 1h
|
||||
Weekly 2 : done, 2023-04-06, 2h
|
||||
section Meeting
|
||||
Weekly 1 : done, 2023-03-30, 0.5h
|
||||
Statustermin 1 : done ,2023-03-30 , 1h
|
||||
Weekly 2 : done, 2023-04-06, 2h
|
||||
|
||||
Statustermin 2 : active, 2023-04-13, 1h
|
||||
Weekly 3 : active, 2023-04-13, 0.5h
|
||||
Weekly 4 : active, 2023-04-20, 2h
|
||||
Statustermin 2 : active, 2023-04-13, 1h
|
||||
Weekly 3 : active, 2023-04-13, 0.5h
|
||||
Weekly 4 : active, 2023-04-20, 2h
|
||||
|
||||
Weekly 5 : active, 2023-04-27, 0.5h
|
||||
Statustermin 3 : active, 2023-04-27, 1h
|
||||
Weekly 5 : active, 2023-04-27, 0.5h
|
||||
Statustermin 3 : active, 2023-04-27, 1h
|
||||
|
||||
Weekly 6 : active, 2023-05-04, 2h
|
||||
Weekly 6 : active, 2023-05-04, 2h
|
||||
|
||||
Weekly 7 : active, 2023-05-11, 0.5h
|
||||
Statustermin 4 : active, 2023-05-11, 1h
|
||||
Weekly 7 : active, 2023-05-11, 0.5h
|
||||
Statustermin 4 : active, 2023-05-11, 1h
|
||||
|
||||
Weekly 8 : active, 2023-05-18, 2h
|
||||
Weekly 9 : active, 2023-05-25, 0.9h
|
||||
Statustermin 5 : active, 2023-05-25, 1h
|
||||
Weekly 8 : active, 2023-05-18, 2h
|
||||
Weekly 9 : active, 2023-05-25, 0.9h
|
||||
Statustermin 5 : active, 2023-05-25, 1h
|
||||
|
||||
Weekly 10 : active, 2023-06-01, 2h
|
||||
Weekly 11 : active, 2023-06-01, 0.9h
|
||||
Statustermin 6 : active, 2023-06-08, 1h
|
||||
Weekly 10 : active, 2023-06-01, 2h
|
||||
Weekly 11 : active, 2023-06-01, 0.9h
|
||||
Statustermin 6 : active, 2023-06-08, 1h
|
||||
|
||||
section Recherche
|
||||
Unternehmensformen : active, 2023-04-06, 14d
|
||||
Kennzahlen : active, 2023-04-10, 14d
|
||||
Datenquellen : active, 2023-04-10, 14d
|
||||
rechtliche Verwendbarkeit: active, 2023-04-06, 18d
|
||||
Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24
|
||||
Reserve: crit, 2023-04-24, 3d
|
||||
section Recherche
|
||||
Unternehmensformen : active, 2023-04-06, 14d
|
||||
Kennzahlen : active, 2023-04-10, 14d
|
||||
Datenquellen : active, 2023-04-10, 14d
|
||||
rechtliche Verwendbarkeit: active, 2023-04-06, 18d
|
||||
Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24
|
||||
Reserve: crit, 2023-04-24, 3d
|
||||
|
||||
section Definition
|
||||
fachl. Aufgabe : active, 2023-04-27, 1d
|
||||
techn. Aufgabe : active, 2023-04-27, 1d
|
||||
Funktionelle Anf. : active, 2023-04-27, 7d
|
||||
Qualitative Anf. : active, 2023-04-27, 7d
|
||||
Modell: active, 2023-05-04, 7d
|
||||
Hierarchie: active, 2023-05-04, 7d
|
||||
Definition der Anforderungen : milestone, 2023-05-11
|
||||
Reserve: crit, 2023-05-11, 1w
|
||||
section Definition
|
||||
fachl. Aufgabe : active, 2023-04-27, 1d
|
||||
techn. Aufgabe : active, 2023-04-27, 1d
|
||||
Funktionelle Anf. : active, 2023-04-27, 7d
|
||||
Qualitative Anf. : active, 2023-04-27, 7d
|
||||
Modell: active, 2023-05-04, 7d
|
||||
Hierarchie: active, 2023-05-04, 7d
|
||||
Definition der Anforderungen : milestone, 2023-05-11
|
||||
Reserve: crit, 2023-05-11, 1w
|
||||
|
||||
section Proof of concept
|
||||
Project Proposal : active, 2023-05-18, 10d
|
||||
Vorstellung Project Proposal: milestone, 2023-05-28
|
||||
Implementierung des Proposals: active, 2023-05-25, 14d
|
||||
Vorstellung Proof of Concept: milestone, 2023-06-08
|
||||
Reserve: crit, 2023-06-08, 1w
|
||||
section Proof of concept
|
||||
Project Proposal : active, 2023-05-18, 10d
|
||||
Vorstellung Project Proposal: milestone, 2023-05-28
|
||||
Implementierung des Proposals: active, 2023-05-25, 14d
|
||||
Vorstellung Proof of Concept: milestone, 2023-06-08
|
||||
Reserve: crit, 2023-06-08, 1w
|
||||
```
|
||||
|