edupsyadmin 8.2.0__tar.gz → 9.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.pre-commit-config.yaml +14 -4
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/CHANGELOG.md +87 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/PKG-INFO +19 -7
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/README.md +6 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/faq.rst +2 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/cli.rst +20 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/configuration.rst +57 -15
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/creatingdocumentation.rst +3 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/encryption.rst +3 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/helpfunction.rst +3 -4
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/installation.rst +21 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/tui.rst +5 -3
- edupsyadmin-9.0.0/docs/tutorial/update.rst +77 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/pyproject.toml +81 -79
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__version__.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/versions/2026_02_21_0453-4087c43f0c7c_initial_migration.py +33 -11
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/versions/2026_03_02_1222-635a9d68fbe8_add_case_active_column_to_clients.py +0 -1
- edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_13_0545-ea4c3f900604_encrypt_class_columns.py +138 -0
- edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_13_0620-515a72d06f10_encrypt_derived_dates.py +180 -0
- edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_16_0900-d7e8f9a0b1c2_add_metadata_table.py +54 -0
- edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_23_1030-e2b4c6d8f0a1_encrypt_sensitive_text_fields.py +205 -0
- edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_04_10_1200-f3a5b7c9d1e2_set_encrypted_text_fields_non_nullable.py +69 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/add_convenience_data.py +56 -60
- edupsyadmin-9.0.0/src/edupsyadmin/api/cft_report.py +170 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/display_client_details.py +12 -12
- edupsyadmin-9.0.0/src/edupsyadmin/api/fill_form.py +248 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/flatten_pdf.py +151 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/__init__.py +14 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_fillpdf.py +20 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_pdf2image.py +41 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_pypdf.py +1302 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/lgvt.py +250 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/managers.py +49 -46
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/migration.py +56 -80
- edupsyadmin-9.0.0/src/edupsyadmin/api/migration_fs.py +116 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/reports.py +348 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/setup_demo.py +15 -19
- edupsyadmin-9.0.0/src/edupsyadmin/api/taetigkeitsbericht_from_db.py +311 -0
- edupsyadmin-9.0.0/src/edupsyadmin/api/types.py +92 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/__init__.py +51 -18
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/create_documentation.py +32 -8
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/delete_client.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/edit_config.py +10 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/flatten_pdfs.py +5 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/get_clients.py +15 -5
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/info.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/mk_report.py +2 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/new_client.py +17 -11
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/rotate_key.py +3 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/set_client.py +6 -4
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/setup_demo.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/taetigkeitsbericht.py +5 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/tui.py +16 -9
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/utils.py +2 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/config.py +10 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/encrypt.py +25 -6
- edupsyadmin-9.0.0/src/edupsyadmin/core/enums.py +53 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/logger.py +8 -3
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/paths.py +2 -8
- edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_BfsKi.md → edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_BfsKi.txt +0 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/data/sampleconfig.yml +4 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/db/clients.py +206 -227
- edupsyadmin-9.0.0/src/edupsyadmin/db/column_types.py +113 -0
- edupsyadmin-9.0.0/src/edupsyadmin/db/converters.py +77 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/info.py +14 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/clients_overview.py +94 -35
- edupsyadmin-9.0.0/src/edupsyadmin/tui/clients_overview_app.py +40 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/dialogs.py +0 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edit_client.py +52 -31
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edit_client_app.py +3 -2
- edupsyadmin-9.0.0/src/edupsyadmin/tui/editconfig.py +326 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/editconfig.tcss +5 -0
- edupsyadmin-8.2.0/src/edupsyadmin/tui/editconfig.py → edupsyadmin-9.0.0/src/edupsyadmin/tui/editconfig_app.py +92 -347
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edupsyadmintui.py +85 -55
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/fill_form_app.py +32 -30
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/fill_form_widget.py +49 -40
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/academic_year.py +7 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/python_type.py +3 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/taetigkeitsbericht_check_key.py +1 -1
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_max_none_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_min_none_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[nos_nta_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[nos_nta_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[umlaut_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[umlaut_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[nos_nta_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[nos_nta_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[umlaut_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[umlaut_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[nos_nta_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[nos_nta_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[umlaut_internal-libreoffice].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[umlaut_internal-reportlab].png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_lgvt/test_lgvt_report_grade_11_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_lgvt/test_lgvt_report_grade_9_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_reports/test_taetigkeitsbericht_report_snapshot.png +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_taetigkeitsbericht_from_db/test_taetigkeitsbericht_snapshot.png +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_add_convenience_data.py +17 -13
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_cft_report.py +118 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_decryption_behavior.py +4 -4
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_fill_form.py +73 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_flatten_pdf.py +6 -2
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_flatten_pdf_snapshots.py +101 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_lgvt.py +124 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_managers.py +187 -63
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_migration.py +66 -72
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_migration_fs.py +97 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_reports.py +85 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_taetigkeitsbericht_from_db.py +315 -0
- edupsyadmin-9.0.0/test/edupsyadmin/api/test_write_form_md.py +131 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_cli_benchmark.py +2 -2
- edupsyadmin-9.0.0/test/edupsyadmin/benchmark/test_decryption_benchmark.py +84 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_encrypt_benchmark.py +2 -2
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_key_derivation_benchmark.py +1 -1
- edupsyadmin-9.0.0/test/edupsyadmin/conftest.py +478 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_config.py +6 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_encrypt.py +1 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_logger.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/data/sample_form_mantelbogen.pdf +0 -0
- edupsyadmin-9.0.0/test/edupsyadmin/db/test_clients.py +151 -0
- edupsyadmin-9.0.0/test/edupsyadmin/db/test_metadata.py +46 -0
- edupsyadmin-9.0.0/test/edupsyadmin/db/test_types.py +232 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/sample_pdf_form.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/test_cli.py +31 -26
- edupsyadmin-9.0.0/test/edupsyadmin/test_gdpr_logging.py +104 -0
- edupsyadmin-9.0.0/test/edupsyadmin/test_sync_types.py +143 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview.svg +183 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview_long_names.svg +181 -0
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_existing_client[client_dict_set_by_user0].svg → edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_existing_client[nos_nta_user].svg +19 -18
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_existing_client[client_dict_set_by_user1].svg → edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_existing_client[umlaut_user].svg +17 -18
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_new_client.svg +12 -12
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_add_new_school_container.svg +1195 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_edit_new_school_container.svg +1195 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_editconfig_initial_layout.svg +1074 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_edupsyadmintui/test_edupsyadmintui_initial_layout.svg +229 -0
- edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/test_fill_form_initial_layout.svg +212 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_clientsoverview.py +86 -10
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_dialogs.py +1 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_editclient.py +6 -1
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_editconfig.py +60 -11
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_edupsyadmintui.py +23 -18
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_fill_form_tui.py +73 -23
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/uv.lock +690 -656
- edupsyadmin-8.2.0/docs/tutorial/update.rst +0 -96
- edupsyadmin-8.2.0/src/edupsyadmin/api/cft_report.py +0 -116
- edupsyadmin-8.2.0/src/edupsyadmin/api/fill_form.py +0 -160
- edupsyadmin-8.2.0/src/edupsyadmin/api/flatten_pdf.py +0 -81
- edupsyadmin-8.2.0/src/edupsyadmin/api/lgvt.py +0 -135
- edupsyadmin-8.2.0/src/edupsyadmin/api/reports.py +0 -60
- edupsyadmin-8.2.0/src/edupsyadmin/api/taetigkeitsbericht_from_db.py +0 -364
- edupsyadmin-8.2.0/src/edupsyadmin/cli/commands/migrate_encryption.py +0 -199
- edupsyadmin-8.2.0/src/edupsyadmin/tui/clients_overview_app.py +0 -65
- edupsyadmin-8.2.0/test/edupsyadmin/api/test_fill_form.py +0 -36
- edupsyadmin-8.2.0/test/edupsyadmin/api/test_taetigkeitsbericht_from_db.py +0 -152
- edupsyadmin-8.2.0/test/edupsyadmin/conftest.py +0 -374
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview.svg +0 -184
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_add_new_school_container.svg +0 -1195
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_edit_new_school_container.svg +0 -1195
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_initial_layout.svg +0 -1074
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_edupsyadmintui/test_edupsyadmintui_initial_layout.svg +0 -228
- edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/test_initial_layout.svg +0 -209
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.github/workflows/publish.yml +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.gitignore +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.python-version +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.readthedocs.yaml +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/LICENSE.txt +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/Makefile +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/_static/samplewebuntisfile.csv +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/clients_model.rst +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/conf.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/index.rst +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/make.bat +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/requirements.txt +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/taetigkeitsbericht_keywords.rst +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/editingclients.rst +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/taetigkeitsbericht.rst +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_iLst.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_iRst.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_lrst.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_nona_nons.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/change_keywordtaet_nsessions.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/profile.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/publish_to_testpypi.sh +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__init__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__main__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/README +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/env.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/script.py.mako +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic.ini +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/__init__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/__main__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/__init__.py +0 -0
- /edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_BfsEV.md → /edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_BfsEV.txt +0 -0
- /edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_Faks.md → /edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_Faks.txt +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/data/taetigkeitsbericht_categories.csv +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/db/__init__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0/src/edupsyadmin}/py.typed +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/__init__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edupsyadmintui.tcss +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/__init__.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/convert_measures.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/datediff.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/int_from_str.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/path_utils.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/.gitignore +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/cli/test_utils.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/data/sample_form_anschreiben.pdf +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/sample_webuntis_export.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/__snapshots__/test_dialogs/test_yes_no_dialog.svg +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_academic_year.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_convert_measures.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_datediff.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_int_from_str.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_path_utils.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_python_type.py +0 -0
- {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_taetigkeitsbericht_check_key.py +0 -0
|
@@ -6,18 +6,20 @@ repos:
|
|
|
6
6
|
- id: check-yaml
|
|
7
7
|
- id: end-of-file-fixer
|
|
8
8
|
- id: trailing-whitespace
|
|
9
|
+
- id: mixed-line-ending
|
|
10
|
+
args: ['--fix=lf']
|
|
9
11
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
10
|
-
rev: v0.15.
|
|
12
|
+
rev: v0.15.12
|
|
11
13
|
hooks:
|
|
12
14
|
- id: ruff-check
|
|
13
15
|
args: [ "--config=pyproject.toml", "--fix" ]
|
|
14
16
|
- id: ruff-format
|
|
15
17
|
- repo: https://github.com/gitleaks/gitleaks
|
|
16
|
-
rev: v8.30.
|
|
18
|
+
rev: v8.30.1
|
|
17
19
|
hooks:
|
|
18
20
|
- id: gitleaks
|
|
19
21
|
- repo: https://github.com/commitizen-tools/commitizen
|
|
20
|
-
rev: v4.
|
|
22
|
+
rev: v4.15.0
|
|
21
23
|
hooks:
|
|
22
24
|
- id: commitizen
|
|
23
25
|
- repo: https://github.com/rstcheck/rstcheck
|
|
@@ -31,7 +33,7 @@ repos:
|
|
|
31
33
|
- id: sphinx-lint
|
|
32
34
|
args: ["--enable=all"]
|
|
33
35
|
- repo: https://github.com/rvben/rumdl-pre-commit
|
|
34
|
-
rev: v0.1.
|
|
36
|
+
rev: v0.1.87
|
|
35
37
|
hooks:
|
|
36
38
|
- id: rumdl-fmt # Auto-format and fail if issues remain
|
|
37
39
|
- repo: local
|
|
@@ -43,3 +45,11 @@ repos:
|
|
|
43
45
|
types: [python]
|
|
44
46
|
args: [--python=.venv/]
|
|
45
47
|
pass_filenames: true
|
|
48
|
+
- repo: https://github.com/tox-dev/pyproject-fmt
|
|
49
|
+
rev: "v2.21.1"
|
|
50
|
+
hooks:
|
|
51
|
+
- id: pyproject-fmt
|
|
52
|
+
- repo: https://github.com/dosisod/refurb
|
|
53
|
+
rev: "v2.3.1"
|
|
54
|
+
hooks:
|
|
55
|
+
- id: refurb
|
|
@@ -1,3 +1,90 @@
|
|
|
1
|
+
## 9.0.0 (2026-05-04)
|
|
2
|
+
|
|
3
|
+
### Feat
|
|
4
|
+
|
|
5
|
+
- **api.flatten_pdf**: add a pypdf flattening implementation that works with checkboxes, multiline text input and radio buttons
|
|
6
|
+
|
|
7
|
+
### Fix
|
|
8
|
+
|
|
9
|
+
- **cli**: do not access keyring for flatten-pdfs
|
|
10
|
+
- **api.flattening.flatten_pypdf**: improve field attribute resolution and resource cloning
|
|
11
|
+
- **api.flattening.flatten_pypdf**: convert non-ASCII characters into octal escapes for flattening
|
|
12
|
+
- **api.flattening**: fix issue with type checks and with lazy import
|
|
13
|
+
- **config**: resolve LGVT configuration type errors
|
|
14
|
+
|
|
15
|
+
### Refactor
|
|
16
|
+
|
|
17
|
+
- **api**: replace dataframe_image with native ReportLab tables
|
|
18
|
+
- **api**: improve PDF reports and Tätigkeitsbericht report type safety
|
|
19
|
+
- **api.fill_form**: refactor for better readability
|
|
20
|
+
- **api.add_convenience_data**: remove unnecessary casts and simplify date conversions
|
|
21
|
+
- **db.clients**: extract gender validation and class int extraction into functions
|
|
22
|
+
- **db**: move custom types and converters out of clients.py
|
|
23
|
+
- refactor: consolidate batch form-filling logic and improve TUI reporting
|
|
24
|
+
|
|
25
|
+
## 9.0.0a0 (2026-04-16)
|
|
26
|
+
|
|
27
|
+
### BREAKING CHANGE
|
|
28
|
+
|
|
29
|
+
- Form field names need to change, for example: birthday_encr_de > birthday_de and lrst_last_test_date_encr_de > lrst_last_test_date_de
|
|
30
|
+
|
|
31
|
+
### Feat
|
|
32
|
+
|
|
33
|
+
- **api.add_convenience_data**: mark changing the _add_dates function change in 9fb38da as breaking change
|
|
34
|
+
- add configurable template and output directories
|
|
35
|
+
- log number of entries in database before get_clients and tui
|
|
36
|
+
- **api**: replace pyfpdf with reportlab and unify report output code
|
|
37
|
+
- **api.fill_form**: add aliases for encrypted fields during form filling
|
|
38
|
+
- **db.clients**: encrypt nta and nos string fields
|
|
39
|
+
- **info**: show the backup path in info
|
|
40
|
+
- migrate to version-less stable paths for config and data
|
|
41
|
+
- move encryption salt to database metadata
|
|
42
|
+
- encrypt all client date fields and standardize presentation
|
|
43
|
+
- encrypt class_name and class_int columns
|
|
44
|
+
|
|
45
|
+
### Fix
|
|
46
|
+
|
|
47
|
+
- **db.clients**: set encrypted text fields to non-nullable in clients model
|
|
48
|
+
- **api.setup_demo**: use the same school as in sampleconfig.yml to prevent tui crash
|
|
49
|
+
- **api.migration**: ensure database migrations respect custom salt and encryption is ready for migrations
|
|
50
|
+
- **alembic**: support custom paths in salt migration
|
|
51
|
+
- **alembic**: modify migrations to handle NULL values more robustly
|
|
52
|
+
- **api.migration**: stamp legacy databases correctly with the initial migration
|
|
53
|
+
- secure database schema by enforcing NOT NULL on encrypted columns
|
|
54
|
+
- standardise encrypted field types and null handling
|
|
55
|
+
- **cli**: scrub sensitive data from logs
|
|
56
|
+
|
|
57
|
+
### Refactor
|
|
58
|
+
|
|
59
|
+
- **api.flatten_pdf**: refactor for readability and easier testing
|
|
60
|
+
- make the code more pythonic
|
|
61
|
+
- **tui.editconfig**: split application logic from the UI component definitions
|
|
62
|
+
- **tui.editconfig**: refactor for readability
|
|
63
|
+
- **tui**: remove duplicate code and standardize name of ctrl+q binding
|
|
64
|
+
- **api.managers**: allow single column strings as an argument to get_clients_overview
|
|
65
|
+
- **api.fill_form**: refactor fill_form for readability
|
|
66
|
+
- **core.logger**: update type hints to reflect recent changes
|
|
67
|
+
- replace hardcoded srings with StrEnum for type safety
|
|
68
|
+
- **core.logger**: properly register custom Logger class
|
|
69
|
+
- **db.clients**: remove validators that did nothing
|
|
70
|
+
- **py.typed**: move py.typed to the intended location
|
|
71
|
+
- add some new pre-commit hooks and fix issues the hooks raise
|
|
72
|
+
- **api.managers**: consolidate client data retrieval
|
|
73
|
+
- **api.managers**: optimize get_all_clients_df using sqlalchemy core
|
|
74
|
+
- **api.managers**: remove redundant code
|
|
75
|
+
- **taetigkeitsbericht_from_db**: query only required columns
|
|
76
|
+
- remove deprecated v7 to v8 encryption migration command
|
|
77
|
+
|
|
78
|
+
### Perf
|
|
79
|
+
|
|
80
|
+
- **api.migration**: only create db backup when a migration is required
|
|
81
|
+
|
|
82
|
+
## 8.2.1 (2026-03-08)
|
|
83
|
+
|
|
84
|
+
### Refactor
|
|
85
|
+
|
|
86
|
+
- add ClientData TypedDict and enhance type hinting
|
|
87
|
+
|
|
1
88
|
## 8.2.0 (2026-03-08)
|
|
2
89
|
|
|
3
90
|
### Feat
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edupsyadmin
|
|
3
|
-
Version:
|
|
3
|
+
Version: 9.0.0
|
|
4
4
|
Summary: edupsyadmin provides tools to help school psychologists with their documentation
|
|
5
|
+
Project-URL: documentation, https://edupsyadmin.readthedocs.io
|
|
6
|
+
Project-URL: homepage, https://github.com/LKirst/edupsyadmin.git
|
|
5
7
|
Author: Lukas Liebermann
|
|
6
8
|
License: MIT
|
|
7
9
|
License-File: LICENSE.txt
|
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
8
12
|
Requires-Python: >=3.14
|
|
9
13
|
Requires-Dist: alembic>=1.14.1
|
|
10
14
|
Requires-Dist: cryptography>=43.0.3
|
|
11
15
|
Requires-Dist: fillpdf>=0.7.3
|
|
12
|
-
Requires-Dist: keyring>=25.5
|
|
16
|
+
Requires-Dist: keyring>=25.5
|
|
13
17
|
Requires-Dist: pandas>=2.2.3
|
|
14
18
|
Requires-Dist: platformdirs>=4.3.6
|
|
15
19
|
Requires-Dist: pydantic>=2.12.3
|
|
16
|
-
Requires-Dist: pypdf>=5.1
|
|
20
|
+
Requires-Dist: pypdf>=5.1
|
|
21
|
+
Requires-Dist: python-dateutil>=2.9.0.post0
|
|
17
22
|
Requires-Dist: python-liquid>=1.12.1
|
|
18
23
|
Requires-Dist: pyyaml>=6.0.2
|
|
24
|
+
Requires-Dist: rich>=14.3.3
|
|
19
25
|
Requires-Dist: scipy>=1.14.1
|
|
20
26
|
Requires-Dist: sqlalchemy>=2.0.36
|
|
21
|
-
Requires-Dist: textual>=8
|
|
27
|
+
Requires-Dist: textual>=8
|
|
22
28
|
Provides-Extra: bwbackend
|
|
23
29
|
Requires-Dist: bitwarden-keyring>=0.3.1; extra == 'bwbackend'
|
|
24
30
|
Provides-Extra: flattenpdf
|
|
25
|
-
Requires-Dist: pdf2image>=1.17
|
|
31
|
+
Requires-Dist: pdf2image>=1.17; extra == 'flattenpdf'
|
|
26
32
|
Provides-Extra: reportsandtaetigkeitsber
|
|
27
|
-
Requires-Dist: dataframe-image>=0.2.6; extra == 'reportsandtaetigkeitsber'
|
|
28
|
-
Requires-Dist: fpdf2>=2.8.3; extra == 'reportsandtaetigkeitsber'
|
|
29
33
|
Requires-Dist: matplotlib>=3.9.2; extra == 'reportsandtaetigkeitsber'
|
|
34
|
+
Requires-Dist: numpy>=2.4.4; extra == 'reportsandtaetigkeitsber'
|
|
35
|
+
Requires-Dist: reportlab>=4.2.5; extra == 'reportsandtaetigkeitsber'
|
|
30
36
|
Description-Content-Type: text/markdown
|
|
31
37
|
|
|
32
38
|
# edupsyadmin
|
|
@@ -203,6 +209,12 @@ Run the test suite:
|
|
|
203
209
|
.venv/bin/python -m pytest -v -n auto --cov=src test/
|
|
204
210
|
```
|
|
205
211
|
|
|
212
|
+
Run the benchmarks (set `--benchmark-time-unit=s` to set the unit to seconds)
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
.venv/bin/python -m pytest --benchmark-only test/
|
|
216
|
+
```
|
|
217
|
+
|
|
206
218
|
Build documentation:
|
|
207
219
|
|
|
208
220
|
```text
|
|
@@ -172,6 +172,12 @@ Run the test suite:
|
|
|
172
172
|
.venv/bin/python -m pytest -v -n auto --cov=src test/
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
+
Run the benchmarks (set `--benchmark-time-unit=s` to set the unit to seconds)
|
|
176
|
+
|
|
177
|
+
```text
|
|
178
|
+
.venv/bin/python -m pytest --benchmark-only test/
|
|
179
|
+
```
|
|
180
|
+
|
|
175
181
|
Build documentation:
|
|
176
182
|
|
|
177
183
|
```text
|
|
@@ -23,18 +23,17 @@ Wie greife ich auf Backups zu?
|
|
|
23
23
|
|
|
24
24
|
Rufe ``edupsyadmin`` in dem Ordner auf, in dem das Backup liegt.
|
|
25
25
|
Mit dem Befehl ``ls`` kannst du überprüfen, ob in dem Ordner in dem du
|
|
26
|
-
``edupsyadmin`` aufrufst, ``
|
|
26
|
+
``edupsyadmin`` aufrufst, ``edupsyadmin.db`` und
|
|
27
27
|
``config.yml`` liegen. Wenn nicht, bist du vielleicht im falschen Ordner
|
|
28
28
|
und musst mit ``cd "pfad/deiner/sicherung/"`` noch an die richtige Stelle
|
|
29
29
|
in deinem Dateisystem gehen.
|
|
30
30
|
|
|
31
31
|
Damit ``edupsyadmin`` nicht die aktuellen Dateien, sondern das Backup
|
|
32
|
-
verwendet, musst du auf die Dateien (
|
|
32
|
+
verwendet, musst du auf die Dateien (Datenbank und Konfigurationsdatei)
|
|
33
33
|
verweisen in jedem Befehl. Hier ist zum Beispiel der Befehl, um die Klienten
|
|
34
34
|
in der Datenbank anzuzeigen (``get-clients``):
|
|
35
35
|
|
|
36
36
|
.. code-block:: console
|
|
37
37
|
|
|
38
38
|
$ edupsyadmin --config_path "./config.yml" get-clients \
|
|
39
|
-
--salt_path "./salt.txt" \
|
|
40
39
|
--database_url "sqlite:///edupsyadmin.db"
|
|
@@ -151,6 +151,26 @@ Löscht einen (oder mehrere) Klienten unwiderruflich aus der Datenbank.
|
|
|
151
151
|
|
|
152
152
|
$ edupsyadmin delete-client 1 2
|
|
153
153
|
|
|
154
|
+
Verschlüsselung aktualisieren (``rotate-key``)
|
|
155
|
+
----------------------------------------------
|
|
156
|
+
|
|
157
|
+
Wenn du dein Passwort in der Konfiguration (``edit-config``) geändert hast,
|
|
158
|
+
werden neue Daten mit dem neuen Passwort verschlüsselt. Bestehende Daten
|
|
159
|
+
bleiben mit dem alten Passwort verschlüsselt, aber weiterhin lesbar.
|
|
160
|
+
|
|
161
|
+
Mit dem Befehl ``rotate-key`` kannst du alle Daten in der Datenbank
|
|
162
|
+
vollständig auf das aktuellste Passwort umstellen. Dies ist eine gute
|
|
163
|
+
Sicherheitspraxis.
|
|
164
|
+
|
|
165
|
+
.. code-block:: console
|
|
166
|
+
|
|
167
|
+
$ edupsyadmin rotate-key
|
|
168
|
+
|
|
169
|
+
Nach der Re-Verschlüsselung wirst du gefragt, ob alte, nun nicht mehr
|
|
170
|
+
benötigte Schlüssel aus deinem Schlüsselspeicher (Keyring) gelöscht werden
|
|
171
|
+
sollen. Wenn du dies bestätigst, wird nur noch dein aktuelles Passwort
|
|
172
|
+
benötigt, um auf alle Daten zuzugreifen.
|
|
173
|
+
|
|
154
174
|
PDF-Formulare für den Druck vorbereiten (``flatten-pdfs``)
|
|
155
175
|
----------------------------------------------------------
|
|
156
176
|
|
|
@@ -4,12 +4,44 @@ Konfiguration
|
|
|
4
4
|
Nach der Installation ist der nächste Schritt die Konfiguration von
|
|
5
5
|
``edupsyadmin``.
|
|
6
6
|
|
|
7
|
-
Die Konfiguration wird in einer Textdatei (YAML-Format
|
|
8
|
-
|
|
9
|
-
Standardmäßig liegt diese Datei unter
|
|
7
|
+
Die Konfiguration wird in einer Textdatei (im YAML-Format, einem einfachen
|
|
8
|
+
Textformat für Einstellungen) gespeichert. Darin stehen wichtige Einstellungen
|
|
9
|
+
wie deine Schulen oder Vorlagen-Sets. Standardmäßig liegt diese Datei unter
|
|
10
|
+
``~/.config/edupsyadmin/config.yml``.
|
|
11
|
+
|
|
12
|
+
.. tip::
|
|
13
|
+
**Pfade zu Ordnern und Dateien kopieren**
|
|
14
|
+
|
|
15
|
+
In dieser Konfiguration musst du mehrfach Pfade zu Ordnern oder Dateien
|
|
16
|
+
angeben. So kopierst du einen Pfad:
|
|
17
|
+
|
|
18
|
+
.. tab-set::
|
|
19
|
+
|
|
20
|
+
.. tab-item:: Windows
|
|
21
|
+
|
|
22
|
+
#. Rechtsklick auf die Datei oder den Ordner im Explorer
|
|
23
|
+
#. Wähle "Als Pfad kopieren"
|
|
24
|
+
#. Der Pfad wird mit Anführungszeichen kopiert – diese kannst du
|
|
25
|
+
beim Einfügen entfernen
|
|
26
|
+
|
|
27
|
+
.. tab-item:: macOS
|
|
28
|
+
|
|
29
|
+
#. Rechtsklick auf den Ordner oder die Datei im Finder
|
|
30
|
+
#. Halte die :kbd:`Alt`-Taste (⌥) gedrückt
|
|
31
|
+
#. Wähle "... als Pfadname kopieren"
|
|
32
|
+
|
|
33
|
+
.. tab-item:: Linux
|
|
34
|
+
|
|
35
|
+
#. Rechtsklick auf den Ordner oder die Datei im Dateimanager
|
|
36
|
+
#. Wähle "Pfad kopieren" oder "Adresse kopieren"
|
|
37
|
+
(je nach Dateimanager)
|
|
38
|
+
|
|
39
|
+
*Hinweis: Die genaue Bezeichnung kann je nach verwendetem
|
|
40
|
+
Dateimanager variieren.*
|
|
41
|
+
|
|
10
42
|
|
|
11
43
|
Wir müssen diese Datei aber nicht von Hand bearbeiten. Starte einfach die
|
|
12
|
-
Konfigurations-TUI mit diesem Befehl:
|
|
44
|
+
Konfigurations-Oberfläche (Text User Interface, kurz TUI) mit diesem Befehl:
|
|
13
45
|
|
|
14
46
|
.. code-block:: console
|
|
15
47
|
|
|
@@ -17,7 +49,7 @@ Konfigurations-TUI mit diesem Befehl:
|
|
|
17
49
|
|
|
18
50
|
Die Oberfläche, die du jetzt siehst, sollte so aussehen:
|
|
19
51
|
|
|
20
|
-
.. image:: ../../test/edupsyadmin/tui/__snapshots__/test_editconfig/
|
|
52
|
+
.. image:: ../../test/edupsyadmin/tui/__snapshots__/test_editconfig/test_editconfig_initial_layout.svg
|
|
21
53
|
:alt: Konfiguration in der TUI bearbeiten
|
|
22
54
|
:width: 100%
|
|
23
55
|
:align: center
|
|
@@ -32,13 +64,24 @@ Gehen wir die Felder nun Schritt für Schritt durch:
|
|
|
32
64
|
#. **Benutzername**: Ersetze den Platzhalternutzername ``sample.username``
|
|
33
65
|
durch deinen eigenen Benutzernamen. Wähle etwas Kurzes ohne Leerzeichen
|
|
34
66
|
oder Sonderzeichen.
|
|
35
|
-
#. **
|
|
36
|
-
|
|
67
|
+
#. **template_directory**: Pfad zum Ordner, in dem du die leeren
|
|
68
|
+
Formular-Vorlagen abgelegt hast (siehe Tipp oben zum Kopieren von Pfaden).
|
|
69
|
+
#. **output_directory** (optional): Ordner, in dem ausgefüllte Formulare
|
|
70
|
+
standardmäßig gespeichert werden sollen (siehe Tipp oben zum Kopieren von
|
|
71
|
+
Pfaden).
|
|
72
|
+
|
|
73
|
+
**Passwort**
|
|
74
|
+
|
|
75
|
+
Lege hier ein sicheres Passwort für die Verschlüsselung fest.
|
|
76
|
+
|
|
37
77
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
78
|
+
.. tip::
|
|
79
|
+
Du kannst dieses Passwort später jederzeit ändern. ``edupsyadmin``
|
|
80
|
+
unterstützt Schlüssel-Rotation, sodass bestehende Daten weiterhin
|
|
81
|
+
entschlüsselt werden können. Wenn du dein Passwort änderst, empfiehlt
|
|
82
|
+
es sich jedoch, anschließend den Befehl ``edupsyadmin rotate-key``
|
|
83
|
+
auszuführen, um alle Daten in der Datenbank auf das neue Passwort
|
|
84
|
+
zu migrieren.
|
|
42
85
|
|
|
43
86
|
**Schulpsychologie-Einstellungen**
|
|
44
87
|
|
|
@@ -73,10 +116,9 @@ bestehenden Beispiel-Formularsätze und lege ein neues an:
|
|
|
73
116
|
- `sample_form_mantelbogen.pdf`_
|
|
74
117
|
- `sample_form_stellungnahme.pdf`_
|
|
75
118
|
|
|
76
|
-
#. **Pfade
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
die zweite Datei.
|
|
119
|
+
#. **Pfade eintragen**: Kopiere den Pfad zur ersten heruntergeladenen Datei
|
|
120
|
+
(siehe Tipp oben). Füge diesen Pfad in ein Feld unter deinem ``lrst``
|
|
121
|
+
Set ein. Wiederhole das für die zweite Datei.
|
|
80
122
|
|
|
81
123
|
Abschließend klicke auf **Speichern**, um die Konfiguration zu sichern.
|
|
82
124
|
|
|
@@ -13,7 +13,7 @@ Ablauf
|
|
|
13
13
|
#. **Dialog öffnen**: Drücke das Tastenkürzel :kbd:`Strg+f`. Es öffnet sich der
|
|
14
14
|
Dialog "Formulare ausfüllen".
|
|
15
15
|
|
|
16
|
-
.. image:: ../../test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/
|
|
16
|
+
.. image:: ../../test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/test_fill_form_initial_layout.svg
|
|
17
17
|
:alt: Dialog zum Ausfüllen von Formularen
|
|
18
18
|
|
|
19
19
|
#. **Formulare auswählen**: In diesem Dialog hast du zwei Möglichkeiten,
|
|
@@ -51,7 +51,7 @@ exportiert:
|
|
|
51
51
|
|
|
52
52
|
#. Ein Textfeld hinzugen für den Vornamen mit dem Feldnamen ``first_name_encr``.
|
|
53
53
|
|
|
54
|
-
#. Ein Textfeld hinzufügen für das Geburtsdatum: ``
|
|
54
|
+
#. Ein Textfeld hinzufügen für das Geburtsdatum: ``birthday_de``.
|
|
55
55
|
|
|
56
56
|
#. Über Datei - Expoertieren als - Als PDF exportieren ... die Datei als PDF
|
|
57
57
|
exportieren. In dem Fenster das sich öffnet, die Option aktivieren
|
|
@@ -65,4 +65,4 @@ Variable in doppelten geschwungenen Klammern:
|
|
|
65
65
|
# Protokoll
|
|
66
66
|
|
|
67
67
|
**Name**: {{ last_name_encr }}, {{ first_name_encr }}
|
|
68
|
-
**Geboren am**: {{
|
|
68
|
+
**Geboren am**: {{ birthday_de }}
|
|
@@ -41,11 +41,12 @@ die Sitzung entschlüsselt wird. Dafür musst du:
|
|
|
41
41
|
|
|
42
42
|
- ein Bitwarden-Konto anlegen: `<https://bitwarden.com>`_
|
|
43
43
|
- die Bitwarden CLI installieren: `<https://bitwarden.com/help/cli/>`_
|
|
44
|
-
- edupsyadmin mit
|
|
44
|
+
- edupsyadmin mit der optionalen Abhängigkeit (Extra) ``bwbackend``
|
|
45
|
+
installieren:
|
|
45
46
|
|
|
46
47
|
.. code-block :: console
|
|
47
48
|
|
|
48
|
-
uv tool install --
|
|
49
|
+
uv tool install edupsyadmin[bwbackend] --python 3.14
|
|
49
50
|
|
|
50
51
|
- dich einmalig in der Shell (z.B. Powershell über das Windows Terminal)
|
|
51
52
|
einloggen:
|
|
@@ -29,7 +29,7 @@ anzeigen. Im Beispiel unten, sind die möglichen Unterbefehle markiert.
|
|
|
29
29
|
|
|
30
30
|
$ edupsyadmin --help
|
|
31
31
|
usage: edupsyadmin [-h] [-v] [-w WARN]
|
|
32
|
-
{create-documentation,delete-client,edit-config,flatten-pdfs,get-clients,info,
|
|
32
|
+
{create-documentation,delete-client,edit-config,flatten-pdfs,get-clients,info,mk-report,new-client,set-client,setup-demo,taetigkeitsbericht,tui} ...
|
|
33
33
|
|
|
34
34
|
options:
|
|
35
35
|
-h, --help show this help message and exit
|
|
@@ -37,7 +37,7 @@ anzeigen. Im Beispiel unten, sind die möglichen Unterbefehle markiert.
|
|
|
37
37
|
-w, --warn WARN logger warning level [WARN]
|
|
38
38
|
|
|
39
39
|
subcommands:
|
|
40
|
-
{create-documentation,delete-client,edit-config,flatten-pdfs,get-clients,info,
|
|
40
|
+
{create-documentation,delete-client,edit-config,flatten-pdfs,get-clients,info,mk-report,new-client,set-client,setup-demo,taetigkeitsbericht,tui}
|
|
41
41
|
create-documentation
|
|
42
42
|
Fill a pdf form or a text file with a liquid template
|
|
43
43
|
delete-client Delete a client in the database
|
|
@@ -45,8 +45,7 @@ anzeigen. Im Beispiel unten, sind die möglichen Unterbefehle markiert.
|
|
|
45
45
|
flatten-pdfs Flatten pdf forms (experimental)
|
|
46
46
|
get-clients Show clients overview or single client
|
|
47
47
|
info Get useful information for debugging
|
|
48
|
-
|
|
49
|
-
mk-report Create a report for a given test type. (experimental)
|
|
48
|
+
mk-report Create a report for a given test type.
|
|
50
49
|
new-client Add a new client
|
|
51
50
|
set-client Change values for one or more clients
|
|
52
51
|
setup-demo Create a sandboxed demo environment.
|
|
@@ -177,8 +177,15 @@ benötigen zusätzliche Programme, die nicht automatisch mitinstalliert werden.
|
|
|
177
177
|
Poppler (für ``flatten-pdfs``)
|
|
178
178
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
179
179
|
|
|
180
|
-
Die Funktion ``flatten-pdfs``
|
|
181
|
-
|
|
180
|
+
Die Funktion ``flatten-pdfs`` benötigt das Programm **Poppler** und die
|
|
181
|
+
Python-Bibliothek ``pdf2image``. Letztere wird über die optionale Abhängigkeit
|
|
182
|
+
(Extra) ``flattenpdf`` installiert.
|
|
183
|
+
|
|
184
|
+
.. code-block:: console
|
|
185
|
+
|
|
186
|
+
$ uv tool upgrade edupsyadmin --with flattenpdf
|
|
187
|
+
|
|
188
|
+
Zur Installation von Poppler:
|
|
182
189
|
|
|
183
190
|
.. tab-set::
|
|
184
191
|
:sync-group: installation-os
|
|
@@ -207,6 +214,18 @@ Die Funktion ``flatten-pdfs`` mit der ``pdf2image`` Bibliothek benötigt
|
|
|
207
214
|
`poppler-tools` je nach Distribution.
|
|
208
215
|
|
|
209
216
|
|
|
217
|
+
Berichte und Tätigkeitsbericht (für ``mk-report`` und ``taetigkeitsbericht``)
|
|
218
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
219
|
+
|
|
220
|
+
Um grafische Berichte und den Tätigkeitsbericht als PDF zu erstellen, müssen
|
|
221
|
+
zusätzliche Bibliotheken installiert werden. Dies geschieht über die optionale
|
|
222
|
+
Abhängigkeit (Extra) ``reportsandtaetigkeitsber``:
|
|
223
|
+
|
|
224
|
+
.. code-block:: console
|
|
225
|
+
|
|
226
|
+
$ uv tool upgrade edupsyadmin --with reportsandtaetigkeitsber
|
|
227
|
+
|
|
228
|
+
|
|
210
229
|
Verschlüsselung
|
|
211
230
|
---------------
|
|
212
231
|
|
|
@@ -16,7 +16,9 @@ aus:
|
|
|
16
16
|
|
|
17
17
|
Wie du siehst, ist die TUI in zwei Hauptbereiche unterteilt:
|
|
18
18
|
|
|
19
|
-
- **Links**: Eine Übersichtstabelle aller Klienten in der Datenbank.
|
|
19
|
+
- **Links**: Eine Übersichtstabelle aller Klienten in der Datenbank. Die Farbe
|
|
20
|
+
der ``client_id`` signalisiert dabei den Status des Falls (``case_active``):
|
|
21
|
+
Grün steht für einen aktiven Fall, Rot für einen abgeschlossenen Fall.
|
|
20
22
|
- **Rechts**: Ein Formular zur Anzeige und Bearbeitung der Daten des
|
|
21
23
|
ausgewählten Klienten.
|
|
22
24
|
|
|
@@ -39,7 +41,7 @@ angehören:
|
|
|
39
41
|
|
|
40
42
|
Zusätzlich können die angezeigten Spalten mit ``--columns`` angepasst werden.
|
|
41
43
|
Eine Auswahl an Spalten wird immer angezeigt (``client_id``, ``school``,
|
|
42
|
-
``last_name_encr``, ``first_name_encr``, ``
|
|
44
|
+
``last_name_encr``, ``first_name_encr``, ``class_name_encr``). Mit ``--columns``
|
|
43
45
|
können weitere Spalten hinzugefügt werden.
|
|
44
46
|
|
|
45
47
|
Folgender Befehl zeigt zusätzlich die Spalte für ``notes_encr`` und
|
|
@@ -98,7 +100,7 @@ sortiert werden:
|
|
|
98
100
|
* - :kbd:`s`
|
|
99
101
|
- Schule (``school``) und dann Nachname
|
|
100
102
|
* - :kbd:`c`
|
|
101
|
-
- Klasse (``
|
|
103
|
+
- Klasse (``class_name_encr``) und dann Nachname
|
|
102
104
|
|
|
103
105
|
Nächste Schritte
|
|
104
106
|
----------------
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Update
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
.. caution::
|
|
5
|
+
|
|
6
|
+
Wenn du mit einem bestehenden Datensatz updatest, informiere dich
|
|
7
|
+
vorher, ob von deiner Version auf die neue Version sogenannte "breaking
|
|
8
|
+
changes" durchgeführt wurden, d.h. Änderungen, die zu Inkompatibilitäten
|
|
9
|
+
von deiner Datenbank zur neuen Version der App führen.
|
|
10
|
+
|
|
11
|
+
Ein verlässlicher Hinweis dafür, dass keine breaking changes durchgeführt
|
|
12
|
+
wurden und einem Update mit Migration der Daten nichts im Wege steht, ist
|
|
13
|
+
dass sich die erste Ziffer in der Version nicht von der installierten auf
|
|
14
|
+
die neue Version geändert hat. Das kannst du auf `PYPI
|
|
15
|
+
<https://pypi.org/project/edupsyadmin/#history>`_ prüfen.
|
|
16
|
+
|
|
17
|
+
Um keine Dateien zu überschreiben, hat edupsyadmin in früheren Versionen für
|
|
18
|
+
jede Version einen eigenen Unterordner für Konfigurationsdatei und Datenbank
|
|
19
|
+
erstellt. Ab Version 9.0.0 werden diese Daten automatisch in einen stabilen
|
|
20
|
+
Ordner migriert, damit bei zukünftigen Updates keine manuellen Schritte mehr
|
|
21
|
+
nötig sind.
|
|
22
|
+
|
|
23
|
+
Bei jedem Update, das eine Datenbank-Migration erfordert, erstellt edupsyadmin
|
|
24
|
+
automatisch ein Backup der Datenbank unter ``edupsyadmin.db.bak`` im selben
|
|
25
|
+
Ordner.
|
|
26
|
+
|
|
27
|
+
.. warning::
|
|
28
|
+
|
|
29
|
+
Backups müssen manuell gelöscht werden, sobald das Update erfolgreich
|
|
30
|
+
abgeschlossen wurde, um den Datenschutz zu gewährleisten. Wenn zum
|
|
31
|
+
Beispiel ein Klient gelöscht wird, bleibt dessen Datensatz im Backup
|
|
32
|
+
weiterhin bestehen, bis die Backup-Datei gelöscht wird.
|
|
33
|
+
|
|
34
|
+
Überprüfe mit folgendem Befehl, wo deine Dateien liegen und ob ein Backup
|
|
35
|
+
existiert:
|
|
36
|
+
|
|
37
|
+
.. code-block:: console
|
|
38
|
+
|
|
39
|
+
$ edupsyadmin info
|
|
40
|
+
|
|
41
|
+
Update der App
|
|
42
|
+
--------------
|
|
43
|
+
|
|
44
|
+
Aktualisiere vor dem Update uv und python:
|
|
45
|
+
|
|
46
|
+
.. tab-set::
|
|
47
|
+
:sync-group: update-os
|
|
48
|
+
|
|
49
|
+
.. tab-item:: Windows
|
|
50
|
+
:sync: windows-os
|
|
51
|
+
|
|
52
|
+
.. code-block:: console
|
|
53
|
+
|
|
54
|
+
$ winget upgrade uv
|
|
55
|
+
$ uv python upgrade
|
|
56
|
+
|
|
57
|
+
.. tab-item:: macOS und Linux
|
|
58
|
+
:sync: macos-linux-os
|
|
59
|
+
|
|
60
|
+
.. code-block:: console
|
|
61
|
+
|
|
62
|
+
$ uv self update
|
|
63
|
+
$ uv python upgrade
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
Nun aktualisiere edupsyadmin mit:
|
|
67
|
+
|
|
68
|
+
.. code-block:: console
|
|
69
|
+
|
|
70
|
+
$ uv tool upgrade edupsyadmin --python 3.14
|
|
71
|
+
|
|
72
|
+
Mit ``edupsyadmin --version`` kannst du überprüfen, welche Version von
|
|
73
|
+
edupsyadmin jetzt installiert ist.
|
|
74
|
+
|
|
75
|
+
Nach dem Update migriert edupsyadmin deine Daten beim ersten Start automatisch
|
|
76
|
+
an den neuen, stabilen Speicherort. Du musst keine Dateien mehr manuell
|
|
77
|
+
verschieben.
|