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.
Files changed (217) hide show
  1. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.pre-commit-config.yaml +14 -4
  2. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/CHANGELOG.md +87 -0
  3. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/PKG-INFO +19 -7
  4. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/README.md +6 -0
  5. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/faq.rst +2 -3
  6. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/cli.rst +20 -0
  7. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/configuration.rst +57 -15
  8. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/creatingdocumentation.rst +3 -3
  9. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/encryption.rst +3 -2
  10. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/helpfunction.rst +3 -4
  11. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/installation.rst +21 -2
  12. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/tui.rst +5 -3
  13. edupsyadmin-9.0.0/docs/tutorial/update.rst +77 -0
  14. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/pyproject.toml +81 -79
  15. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__version__.py +1 -1
  16. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/versions/2026_02_21_0453-4087c43f0c7c_initial_migration.py +33 -11
  17. {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
  18. edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_13_0545-ea4c3f900604_encrypt_class_columns.py +138 -0
  19. edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_13_0620-515a72d06f10_encrypt_derived_dates.py +180 -0
  20. edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_16_0900-d7e8f9a0b1c2_add_metadata_table.py +54 -0
  21. edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_03_23_1030-e2b4c6d8f0a1_encrypt_sensitive_text_fields.py +205 -0
  22. edupsyadmin-9.0.0/src/edupsyadmin/alembic/versions/2026_04_10_1200-f3a5b7c9d1e2_set_encrypted_text_fields_non_nullable.py +69 -0
  23. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/add_convenience_data.py +56 -60
  24. edupsyadmin-9.0.0/src/edupsyadmin/api/cft_report.py +170 -0
  25. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/display_client_details.py +12 -12
  26. edupsyadmin-9.0.0/src/edupsyadmin/api/fill_form.py +248 -0
  27. edupsyadmin-9.0.0/src/edupsyadmin/api/flatten_pdf.py +151 -0
  28. edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/__init__.py +14 -0
  29. edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_fillpdf.py +20 -0
  30. edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_pdf2image.py +41 -0
  31. edupsyadmin-9.0.0/src/edupsyadmin/api/flattening/flatten_pypdf.py +1302 -0
  32. edupsyadmin-9.0.0/src/edupsyadmin/api/lgvt.py +250 -0
  33. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/managers.py +49 -46
  34. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/migration.py +56 -80
  35. edupsyadmin-9.0.0/src/edupsyadmin/api/migration_fs.py +116 -0
  36. edupsyadmin-9.0.0/src/edupsyadmin/api/reports.py +348 -0
  37. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/setup_demo.py +15 -19
  38. edupsyadmin-9.0.0/src/edupsyadmin/api/taetigkeitsbericht_from_db.py +311 -0
  39. edupsyadmin-9.0.0/src/edupsyadmin/api/types.py +92 -0
  40. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/__init__.py +51 -18
  41. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/create_documentation.py +32 -8
  42. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/delete_client.py +1 -1
  43. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/edit_config.py +10 -3
  44. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/flatten_pdfs.py +5 -2
  45. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/get_clients.py +15 -5
  46. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/info.py +1 -1
  47. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/mk_report.py +2 -2
  48. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/new_client.py +17 -11
  49. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/rotate_key.py +3 -3
  50. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/set_client.py +6 -4
  51. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/setup_demo.py +1 -1
  52. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/taetigkeitsbericht.py +5 -3
  53. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/commands/tui.py +16 -9
  54. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/utils.py +2 -3
  55. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/config.py +10 -1
  56. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/encrypt.py +25 -6
  57. edupsyadmin-9.0.0/src/edupsyadmin/core/enums.py +53 -0
  58. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/logger.py +8 -3
  59. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/paths.py +2 -8
  60. edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_BfsKi.md → edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_BfsKi.txt +0 -1
  61. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/data/sampleconfig.yml +4 -2
  62. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/db/clients.py +206 -227
  63. edupsyadmin-9.0.0/src/edupsyadmin/db/column_types.py +113 -0
  64. edupsyadmin-9.0.0/src/edupsyadmin/db/converters.py +77 -0
  65. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/info.py +14 -1
  66. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/clients_overview.py +94 -35
  67. edupsyadmin-9.0.0/src/edupsyadmin/tui/clients_overview_app.py +40 -0
  68. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/dialogs.py +0 -2
  69. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edit_client.py +52 -31
  70. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edit_client_app.py +3 -2
  71. edupsyadmin-9.0.0/src/edupsyadmin/tui/editconfig.py +326 -0
  72. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/editconfig.tcss +5 -0
  73. edupsyadmin-8.2.0/src/edupsyadmin/tui/editconfig.py → edupsyadmin-9.0.0/src/edupsyadmin/tui/editconfig_app.py +92 -347
  74. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edupsyadmintui.py +85 -55
  75. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/fill_form_app.py +32 -30
  76. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/fill_form_widget.py +49 -40
  77. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/academic_year.py +7 -2
  78. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/python_type.py +3 -1
  79. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/taetigkeitsbericht_check_key.py +1 -1
  80. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_max_none_snapshot.png +0 -0
  81. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_min_none_snapshot.png +0 -0
  82. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_cft_report/test_cft_report_snapshot.png +0 -0
  83. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[nos_nta_internal-libreoffice].png +0 -0
  84. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[nos_nta_internal-reportlab].png +0 -0
  85. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[umlaut_internal-libreoffice].png +0 -0
  86. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_fillpdf_snapshot[umlaut_internal-reportlab].png +0 -0
  87. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[nos_nta_internal-libreoffice].png +0 -0
  88. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[nos_nta_internal-reportlab].png +0 -0
  89. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[umlaut_internal-libreoffice].png +0 -0
  90. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pdf2image_snapshot[umlaut_internal-reportlab].png +0 -0
  91. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[nos_nta_internal-libreoffice].png +0 -0
  92. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[nos_nta_internal-reportlab].png +0 -0
  93. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[umlaut_internal-libreoffice].png +0 -0
  94. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_flatten_pdf_snapshots/test_flatten_pdf_pypdf_snapshot[umlaut_internal-reportlab].png +0 -0
  95. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_lgvt/test_lgvt_report_grade_11_snapshot.png +0 -0
  96. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_lgvt/test_lgvt_report_grade_9_snapshot.png +0 -0
  97. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_reports/test_taetigkeitsbericht_report_snapshot.png +0 -0
  98. edupsyadmin-9.0.0/test/edupsyadmin/api/__snapshots__/test_taetigkeitsbericht_from_db/test_taetigkeitsbericht_snapshot.png +0 -0
  99. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_add_convenience_data.py +17 -13
  100. edupsyadmin-9.0.0/test/edupsyadmin/api/test_cft_report.py +118 -0
  101. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_decryption_behavior.py +4 -4
  102. edupsyadmin-9.0.0/test/edupsyadmin/api/test_fill_form.py +73 -0
  103. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_flatten_pdf.py +6 -2
  104. edupsyadmin-9.0.0/test/edupsyadmin/api/test_flatten_pdf_snapshots.py +101 -0
  105. edupsyadmin-9.0.0/test/edupsyadmin/api/test_lgvt.py +124 -0
  106. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_managers.py +187 -63
  107. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/api/test_migration.py +66 -72
  108. edupsyadmin-9.0.0/test/edupsyadmin/api/test_migration_fs.py +97 -0
  109. edupsyadmin-9.0.0/test/edupsyadmin/api/test_reports.py +85 -0
  110. edupsyadmin-9.0.0/test/edupsyadmin/api/test_taetigkeitsbericht_from_db.py +315 -0
  111. edupsyadmin-9.0.0/test/edupsyadmin/api/test_write_form_md.py +131 -0
  112. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_cli_benchmark.py +2 -2
  113. edupsyadmin-9.0.0/test/edupsyadmin/benchmark/test_decryption_benchmark.py +84 -0
  114. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_encrypt_benchmark.py +2 -2
  115. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/benchmark/test_key_derivation_benchmark.py +1 -1
  116. edupsyadmin-9.0.0/test/edupsyadmin/conftest.py +478 -0
  117. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_config.py +6 -0
  118. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_encrypt.py +1 -0
  119. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/core/test_logger.py +1 -1
  120. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/data/sample_form_mantelbogen.pdf +0 -0
  121. edupsyadmin-9.0.0/test/edupsyadmin/db/test_clients.py +151 -0
  122. edupsyadmin-9.0.0/test/edupsyadmin/db/test_metadata.py +46 -0
  123. edupsyadmin-9.0.0/test/edupsyadmin/db/test_types.py +232 -0
  124. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/sample_pdf_form.py +1 -1
  125. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/test_cli.py +31 -26
  126. edupsyadmin-9.0.0/test/edupsyadmin/test_gdpr_logging.py +104 -0
  127. edupsyadmin-9.0.0/test/edupsyadmin/test_sync_types.py +143 -0
  128. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview.svg +183 -0
  129. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview_long_names.svg +181 -0
  130. 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
  131. 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
  132. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/__snapshots__/test_editclient/test_initial_layout_new_client.svg +12 -12
  133. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_add_new_school_container.svg +1195 -0
  134. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_edit_new_school_container.svg +1195 -0
  135. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_editconfig_initial_layout.svg +1074 -0
  136. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_edupsyadmintui/test_edupsyadmintui_initial_layout.svg +229 -0
  137. edupsyadmin-9.0.0/test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/test_fill_form_initial_layout.svg +212 -0
  138. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_clientsoverview.py +86 -10
  139. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_dialogs.py +1 -1
  140. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_editclient.py +6 -1
  141. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_editconfig.py +60 -11
  142. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_edupsyadmintui.py +23 -18
  143. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/test_fill_form_tui.py +73 -23
  144. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/uv.lock +690 -656
  145. edupsyadmin-8.2.0/docs/tutorial/update.rst +0 -96
  146. edupsyadmin-8.2.0/src/edupsyadmin/api/cft_report.py +0 -116
  147. edupsyadmin-8.2.0/src/edupsyadmin/api/fill_form.py +0 -160
  148. edupsyadmin-8.2.0/src/edupsyadmin/api/flatten_pdf.py +0 -81
  149. edupsyadmin-8.2.0/src/edupsyadmin/api/lgvt.py +0 -135
  150. edupsyadmin-8.2.0/src/edupsyadmin/api/reports.py +0 -60
  151. edupsyadmin-8.2.0/src/edupsyadmin/api/taetigkeitsbericht_from_db.py +0 -364
  152. edupsyadmin-8.2.0/src/edupsyadmin/cli/commands/migrate_encryption.py +0 -199
  153. edupsyadmin-8.2.0/src/edupsyadmin/tui/clients_overview_app.py +0 -65
  154. edupsyadmin-8.2.0/test/edupsyadmin/api/test_fill_form.py +0 -36
  155. edupsyadmin-8.2.0/test/edupsyadmin/api/test_taetigkeitsbericht_from_db.py +0 -152
  156. edupsyadmin-8.2.0/test/edupsyadmin/conftest.py +0 -374
  157. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_clientsoverview/test_clients_overview.svg +0 -184
  158. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_add_new_school_container.svg +0 -1195
  159. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_edit_new_school_container.svg +0 -1195
  160. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_editconfig/test_initial_layout.svg +0 -1074
  161. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_edupsyadmintui/test_edupsyadmintui_initial_layout.svg +0 -228
  162. edupsyadmin-8.2.0/test/edupsyadmin/tui/__snapshots__/test_fill_form_tui/test_initial_layout.svg +0 -209
  163. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.github/workflows/publish.yml +0 -0
  164. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.gitignore +0 -0
  165. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.python-version +0 -0
  166. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/.readthedocs.yaml +0 -0
  167. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/LICENSE.txt +0 -0
  168. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/Makefile +0 -0
  169. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/_static/samplewebuntisfile.csv +0 -0
  170. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/clients_model.rst +0 -0
  171. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/conf.py +0 -0
  172. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/index.rst +0 -0
  173. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/make.bat +0 -0
  174. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/requirements.txt +0 -0
  175. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/taetigkeitsbericht_keywords.rst +0 -0
  176. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/editingclients.rst +0 -0
  177. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/docs/tutorial/taetigkeitsbericht.rst +0 -0
  178. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_iLst.sh +0 -0
  179. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_iRst.sh +0 -0
  180. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_lrst.sh +0 -0
  181. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/add_nona_nons.sh +0 -0
  182. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/change_keywordtaet_nsessions.sh +0 -0
  183. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/profile.sh +0 -0
  184. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/shellscripts/publish_to_testpypi.sh +0 -0
  185. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__init__.py +0 -0
  186. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/__main__.py +0 -0
  187. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/README +0 -0
  188. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/env.py +0 -0
  189. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic/script.py.mako +0 -0
  190. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/alembic.ini +0 -0
  191. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/api/__init__.py +0 -0
  192. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/cli/__main__.py +0 -0
  193. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/core/__init__.py +0 -0
  194. /edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_BfsEV.md → /edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_BfsEV.txt +0 -0
  195. /edupsyadmin-8.2.0/src/edupsyadmin/data/Faecher_Faks.md → /edupsyadmin-9.0.0/src/edupsyadmin/data/Faecher_Faks.txt +0 -0
  196. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/data/taetigkeitsbericht_categories.csv +0 -0
  197. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/db/__init__.py +0 -0
  198. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0/src/edupsyadmin}/py.typed +0 -0
  199. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/__init__.py +0 -0
  200. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/tui/edupsyadmintui.tcss +0 -0
  201. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/__init__.py +0 -0
  202. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/convert_measures.py +0 -0
  203. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/datediff.py +0 -0
  204. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/int_from_str.py +0 -0
  205. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/src/edupsyadmin/utils/path_utils.py +0 -0
  206. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/.gitignore +0 -0
  207. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/cli/test_utils.py +0 -0
  208. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/data/sample_form_anschreiben.pdf +0 -0
  209. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/sample_webuntis_export.py +0 -0
  210. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/tui/__snapshots__/test_dialogs/test_yes_no_dialog.svg +0 -0
  211. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_academic_year.py +0 -0
  212. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_convert_measures.py +0 -0
  213. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_datediff.py +0 -0
  214. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_int_from_str.py +0 -0
  215. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_path_utils.py +0 -0
  216. {edupsyadmin-8.2.0 → edupsyadmin-9.0.0}/test/edupsyadmin/utils/test_python_type.py +0 -0
  217. {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.2
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.0
18
+ rev: v8.30.1
17
19
  hooks:
18
20
  - id: gitleaks
19
21
  - repo: https://github.com/commitizen-tools/commitizen
20
- rev: v4.13.9
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.28
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: 8.2.0
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.0
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.0
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.0.0
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.0; extra == 'flattenpdf'
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, ``salt.txt``, ``edupsyadmin.db`` und
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 (Salt, Datenbank und Konfigurationsdatei)
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) gespeichert. Darin
8
- stehen wichtige Einstellungen wie deine Schulen oder Vorlagen-Sets.
9
- Standardmäßig liegt diese Datei unter ``~/.config/edupsyadmin/config.yml``.
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/test_initial_layout.svg
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
- #. **Passwort**: Lege hier *einmalig* ein sicheres Passwort für die
36
- Verschlüsselung fest.
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
- .. warning::
39
- Ändere dieses Passwort später nicht mehr, wenn du bereits Daten in
40
- der Datenbank hast! Sonst können die Daten nicht mehr entschlüsselt
41
- werden.
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 kopieren**: Klicke im Datei-Explorer mit der rechten Maustaste auf
77
- eine der heruntergeladenen Dateien und wähle "Als Pfad kopieren". Füge
78
- diesen Pfad in ein Feld unter deinem ``lrst`` Set ein. Wiederhole das für
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/test_initial_layout.svg
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: ``birthday_encr``.
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**: {{ birthday_encr }}
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 dem optionalen Paket bitwarden-keyring installieren:
44
+ - edupsyadmin mit der optionalen Abhängigkeit (Extra) ``bwbackend``
45
+ installieren:
45
46
 
46
47
  .. code-block :: console
47
48
 
48
- uv tool install --with bitwarden-keyring edupsyadmin
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,migrate-encryption,mk-report,new-client,set-client,setup-demo,taetigkeitsbericht,tui} ...
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,migrate-encryption,mk-report,new-client,set-client,setup-demo,taetigkeitsbericht,tui}
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
- migrate-encryption [DEPRECATED] Migrate database to new encryption system
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`` mit der ``pdf2image`` Bibliothek benötigt
181
- **Poppler**.
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``, ``class_name``). Mit ``--columns``
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 (``class_name``) und dann Nachname
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.