libreqda 1.2.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 (254) hide show
  1. libreqda-1.2.0/CHANGELOG.md +481 -0
  2. libreqda-1.2.0/LICENSE.txt +28 -0
  3. libreqda-1.2.0/PKG-INFO +131 -0
  4. libreqda-1.2.0/README.md +73 -0
  5. libreqda-1.2.0/pyproject.toml +121 -0
  6. libreqda-1.2.0/scripts/babelrc +8 -0
  7. libreqda-1.2.0/scripts/dist/LICENSE.txt +33 -0
  8. libreqda-1.2.0/scripts/dist/RELEASE.txt +23 -0
  9. libreqda-1.2.0/scripts/dist/macos/libreqda.icns +0 -0
  10. libreqda-1.2.0/scripts/dist/macos/macos.spec +43 -0
  11. libreqda-1.2.0/scripts/dist/macos/plist.patch +10 -0
  12. libreqda-1.2.0/scripts/dist/macos/taguette.icns +0 -0
  13. libreqda-1.2.0/scripts/dist/macos/taguette_console_wrapper +4 -0
  14. libreqda-1.2.0/scripts/dist/macos.sh +32 -0
  15. libreqda-1.2.0/scripts/dist/pyinstaller_entrypoint.py +19 -0
  16. libreqda-1.2.0/scripts/dist/windows/windows-installer.iss +51 -0
  17. libreqda-1.2.0/scripts/dist/windows/windows.spec +39 -0
  18. libreqda-1.2.0/scripts/edugain/worker_update_edugain_idps.py +89 -0
  19. libreqda-1.2.0/scripts/edugain/worker_update_edugain_idps.sh +9 -0
  20. libreqda-1.2.0/scripts/make_password_reset_link.py +56 -0
  21. libreqda-1.2.0/scripts/make_theme.py +99 -0
  22. libreqda-1.2.0/scripts/new_db_revision.sh +8 -0
  23. libreqda-1.2.0/scripts/register_user.py +76 -0
  24. libreqda-1.2.0/scripts/update_pot.sh +33 -0
  25. libreqda-1.2.0/scripts/update_translations.sh +17 -0
  26. libreqda-1.2.0/scripts/validate.py +140 -0
  27. libreqda-1.2.0/scripts/wipe_and_disable_user.py +90 -0
  28. libreqda-1.2.0/taguette/__init__.py +13 -0
  29. libreqda-1.2.0/taguette/access_control.py +145 -0
  30. libreqda-1.2.0/taguette/convert.py +623 -0
  31. libreqda-1.2.0/taguette/database/__init__.py +177 -0
  32. libreqda-1.2.0/taguette/database/base.py +9 -0
  33. libreqda-1.2.0/taguette/database/copy.py +433 -0
  34. libreqda-1.2.0/taguette/database/models.py +920 -0
  35. libreqda-1.2.0/taguette/demodata.py +688 -0
  36. libreqda-1.2.0/taguette/export.py +500 -0
  37. libreqda-1.2.0/taguette/extract.py +287 -0
  38. libreqda-1.2.0/taguette/import_codebook.py +110 -0
  39. libreqda-1.2.0/taguette/l10n/de_DE/LC_MESSAGES/taguette_javascript.mo +0 -0
  40. libreqda-1.2.0/taguette/l10n/de_DE/LC_MESSAGES/taguette_main.mo +0 -0
  41. libreqda-1.2.0/taguette/l10n/el_EL/LC_MESSAGES/taguette_javascript.mo +0 -0
  42. libreqda-1.2.0/taguette/l10n/el_GR/LC_MESSAGES/taguette_javascript.mo +0 -0
  43. libreqda-1.2.0/taguette/l10n/el_GR/LC_MESSAGES/taguette_main.mo +0 -0
  44. libreqda-1.2.0/taguette/l10n/en_US/LC_MESSAGES/taguette_javascript.mo +0 -0
  45. libreqda-1.2.0/taguette/l10n/en_US/LC_MESSAGES/taguette_main.mo +0 -0
  46. libreqda-1.2.0/taguette/l10n/es_ES/LC_MESSAGES/taguette_javascript.mo +0 -0
  47. libreqda-1.2.0/taguette/l10n/es_ES/LC_MESSAGES/taguette_main.mo +0 -0
  48. libreqda-1.2.0/taguette/l10n/fr_FR/LC_MESSAGES/taguette_javascript.mo +0 -0
  49. libreqda-1.2.0/taguette/l10n/fr_FR/LC_MESSAGES/taguette_main.mo +0 -0
  50. libreqda-1.2.0/taguette/l10n/id_ID/LC_MESSAGES/taguette_javascript.mo +0 -0
  51. libreqda-1.2.0/taguette/l10n/id_ID/LC_MESSAGES/taguette_main.mo +0 -0
  52. libreqda-1.2.0/taguette/l10n/it_IT/LC_MESSAGES/taguette_javascript.mo +0 -0
  53. libreqda-1.2.0/taguette/l10n/it_IT/LC_MESSAGES/taguette_main.mo +0 -0
  54. libreqda-1.2.0/taguette/l10n/nl_NL/LC_MESSAGES/taguette_javascript.mo +0 -0
  55. libreqda-1.2.0/taguette/l10n/nl_NL/LC_MESSAGES/taguette_main.mo +0 -0
  56. libreqda-1.2.0/taguette/l10n/pt_PT/LC_MESSAGES/taguette_javascript.mo +0 -0
  57. libreqda-1.2.0/taguette/l10n/pt_PT/LC_MESSAGES/taguette_main.mo +0 -0
  58. libreqda-1.2.0/taguette/l10n/sv_SE/LC_MESSAGES/taguette_javascript.mo +0 -0
  59. libreqda-1.2.0/taguette/l10n/sv_SE/LC_MESSAGES/taguette_main.mo +0 -0
  60. libreqda-1.2.0/taguette/loki_handler.py +107 -0
  61. libreqda-1.2.0/taguette/main.py +649 -0
  62. libreqda-1.2.0/taguette/migrations/env.py +72 -0
  63. libreqda-1.2.0/taguette/migrations/script.py.mako +24 -0
  64. libreqda-1.2.0/taguette/migrations/versions/09c662cd9483_make_documents_filename_not_null.py +39 -0
  65. libreqda-1.2.0/taguette/migrations/versions/1b29e68900c1_add_user_roles.py +55 -0
  66. libreqda-1.2.0/taguette/migrations/versions/1b96a606551d_update_user_to_have_a_display_name.py +34 -0
  67. libreqda-1.2.0/taguette/migrations/versions/2467bab602b7_add_color_column_to_tags_table.py +33 -0
  68. libreqda-1.2.0/taguette/migrations/versions/382db36f20f4_add_user_disabled.py +66 -0
  69. libreqda-1.2.0/taguette/migrations/versions/43d6c240309d_remove_document_groups.py +81 -0
  70. libreqda-1.2.0/taguette/migrations/versions/447d636f72c5_cascades.py +40 -0
  71. libreqda-1.2.0/taguette/migrations/versions/491de2dc7cd7_add_indexes.py +51 -0
  72. libreqda-1.2.0/taguette/migrations/versions/4c55b3b3ff30_user_login_length.py +58 -0
  73. libreqda-1.2.0/taguette/migrations/versions/61a4abcc8769_user_with_parent_for_permissions.py +40 -0
  74. libreqda-1.2.0/taguette/migrations/versions/6489b5f9cfb5_increase_password_hash_size.py +34 -0
  75. libreqda-1.2.0/taguette/migrations/versions/679f625e6e6a_fix_unique_tags.py +59 -0
  76. libreqda-1.2.0/taguette/migrations/versions/77c4543a5b9b_add_parent_id_column_to_collection_table.py +41 -0
  77. libreqda-1.2.0/taguette/migrations/versions/7c94b7a31e69_add_is_archived_column_to_projets.py +39 -0
  78. libreqda-1.2.0/taguette/migrations/versions/7f56de97e3c8_change_edugain_displayname_length.py +42 -0
  79. libreqda-1.2.0/taguette/migrations/versions/807c0cc0ecf6_remove_invalid_hltags.py +43 -0
  80. libreqda-1.2.0/taguette/migrations/versions/80b1cc9d4c22_add_user_email.py +35 -0
  81. libreqda-1.2.0/taguette/migrations/versions/91ade71ccf4d_add_user_language.py +28 -0
  82. libreqda-1.2.0/taguette/migrations/versions/955db2e523d1_add_collections_tables_and_associations_.py +60 -0
  83. libreqda-1.2.0/taguette/migrations/versions/a1b2c3d4e5f6_add_user_hide_code_counts.py +28 -0
  84. libreqda-1.2.0/taguette/migrations/versions/b23f3b7a638e_add_user_password_change_date.py +36 -0
  85. libreqda-1.2.0/taguette/migrations/versions/b7c1e2d3f4a5_add_project_compact_layout.py +28 -0
  86. libreqda-1.2.0/taguette/migrations/versions/bc8e0e0677e9_rename_command_fields.py +126 -0
  87. libreqda-1.2.0/taguette/migrations/versions/bce44849c2f2_lowercase_logins.py +96 -0
  88. libreqda-1.2.0/taguette/migrations/versions/ca076140922f_update_user_for_external_logins.py +32 -0
  89. libreqda-1.2.0/taguette/migrations/versions/d86c45d7aa8a_add_document_direction.py +127 -0
  90. libreqda-1.2.0/taguette/migrations/versions/db5e31a0233d_remove_blank_highlights.py +88 -0
  91. libreqda-1.2.0/taguette/migrations/versions/dd37d9027a24_unique_tags.py +68 -0
  92. libreqda-1.2.0/taguette/migrations/versions/de678cef2a94_add_project_id_to_collections_and_.py +41 -0
  93. libreqda-1.2.0/taguette/migrations/versions/e459991d960e_add_table_edugainidps.py +39 -0
  94. libreqda-1.2.0/taguette/migrations/versions/e4cf92942271_add_index.py +29 -0
  95. libreqda-1.2.0/taguette/migrations/versions/e4e090a5b511_remove_commands_document_id_fk.py +38 -0
  96. libreqda-1.2.0/taguette/migrations/versions/e9a9f1c77971_add_favorite_column_to_document.py +32 -0
  97. libreqda-1.2.0/taguette/migrations/versions/ecb4065de575_don_t_use_server_default_now_timezone_.py +44 -0
  98. libreqda-1.2.0/taguette/migrations/versions/fbdc29566f62_edugain_fix_field_type.py +42 -0
  99. libreqda-1.2.0/taguette/migrations/versions/fdc6eb54b034_add_parent_id_column_to_tags_table.py +31 -0
  100. libreqda-1.2.0/taguette/static/README.md +34 -0
  101. libreqda-1.2.0/taguette/static/alt_templates/.gitkeep +0 -0
  102. libreqda-1.2.0/taguette/static/assets/test/logos/monsters-university-logo.png +0 -0
  103. libreqda-1.2.0/taguette/static/css/custom.css +1696 -0
  104. libreqda-1.2.0/taguette/static/css/fa-all.min.css +5 -0
  105. libreqda-1.2.0/taguette/static/css/themed.css +3 -0
  106. libreqda-1.2.0/taguette/static/css/themed.css.map +25 -0
  107. libreqda-1.2.0/taguette/static/css/vendor/bootstrap-treeview.min.css +1 -0
  108. libreqda-1.2.0/taguette/static/css/vendor/bootstrap.min.css +6 -0
  109. libreqda-1.2.0/taguette/static/css/vendor/font/context-menu-icons.eot +0 -0
  110. libreqda-1.2.0/taguette/static/css/vendor/font/context-menu-icons.ttf +0 -0
  111. libreqda-1.2.0/taguette/static/css/vendor/font/context-menu-icons.woff +0 -0
  112. libreqda-1.2.0/taguette/static/css/vendor/font/context-menu-icons.woff2 +0 -0
  113. libreqda-1.2.0/taguette/static/css/vendor/hierarchy-select.min.css +1 -0
  114. libreqda-1.2.0/taguette/static/css/vendor/introjs.min.css +2 -0
  115. libreqda-1.2.0/taguette/static/css/vendor/jquery.contextMenu.min.css +16 -0
  116. libreqda-1.2.0/taguette/static/favicon.ico +0 -0
  117. libreqda-1.2.0/taguette/static/js/codebook-viz.js +428 -0
  118. libreqda-1.2.0/taguette/static/js/collection/context-menu.js +180 -0
  119. libreqda-1.2.0/taguette/static/js/collection/hierarchy-select.js +71 -0
  120. libreqda-1.2.0/taguette/static/js/collection/manager.js +217 -0
  121. libreqda-1.2.0/taguette/static/js/document/context-menu.js +92 -0
  122. libreqda-1.2.0/taguette/static/js/document/custom-select.js +82 -0
  123. libreqda-1.2.0/taguette/static/js/document/manager.js +943 -0
  124. libreqda-1.2.0/taguette/static/js/document/treeview.js +593 -0
  125. libreqda-1.2.0/taguette/static/js/highlight/README.md +18 -0
  126. libreqda-1.2.0/taguette/static/js/highlight/crud.js +119 -0
  127. libreqda-1.2.0/taguette/static/js/highlight/extracts.js +497 -0
  128. libreqda-1.2.0/taguette/static/js/highlight/loader.js +109 -0
  129. libreqda-1.2.0/taguette/static/js/highlight/renderer.js +405 -0
  130. libreqda-1.2.0/taguette/static/js/login.js +15 -0
  131. libreqda-1.2.0/taguette/static/js/permissions.js +153 -0
  132. libreqda-1.2.0/taguette/static/js/polling-event.js +145 -0
  133. libreqda-1.2.0/taguette/static/js/project/intro.js +524 -0
  134. libreqda-1.2.0/taguette/static/js/project/manager.js +0 -0
  135. libreqda-1.2.0/taguette/static/js/project/search.js +124 -0
  136. libreqda-1.2.0/taguette/static/js/tag/context-menu.js +133 -0
  137. libreqda-1.2.0/taguette/static/js/tag/explore-codes.js +400 -0
  138. libreqda-1.2.0/taguette/static/js/tag/hierarchy-select.js +69 -0
  139. libreqda-1.2.0/taguette/static/js/tag/manager.js +545 -0
  140. libreqda-1.2.0/taguette/static/js/tag/treeview.js +613 -0
  141. libreqda-1.2.0/taguette/static/js/taguette.js +1790 -0
  142. libreqda-1.2.0/taguette/static/js/utilities.js +714 -0
  143. libreqda-1.2.0/taguette/static/js/vendor/bootstrap-treeview-custum.js +421 -0
  144. libreqda-1.2.0/taguette/static/js/vendor/bootstrap-treeview-custum.min.js +1 -0
  145. libreqda-1.2.0/taguette/static/js/vendor/bootstrap-treeview-default.min.js +1 -0
  146. libreqda-1.2.0/taguette/static/js/vendor/bootstrap.bundle.min.js +7 -0
  147. libreqda-1.2.0/taguette/static/js/vendor/bootstrap.bundle.min.js.map +1 -0
  148. libreqda-1.2.0/taguette/static/js/vendor/hierarchy-select.min.js +1 -0
  149. libreqda-1.2.0/taguette/static/js/vendor/introjs.min.js +17 -0
  150. libreqda-1.2.0/taguette/static/js/vendor/jquery-3.7.1.js +2 -0
  151. libreqda-1.2.0/taguette/static/js/vendor/jquery.contextMenu.min.js +2 -0
  152. libreqda-1.2.0/taguette/static/libreqda.ico +0 -0
  153. libreqda-1.2.0/taguette/static/logo-h.png +0 -0
  154. libreqda-1.2.0/taguette/static/logo.png +0 -0
  155. libreqda-1.2.0/taguette/static/logo_blanc.png +0 -0
  156. libreqda-1.2.0/taguette/static/missing.png +0 -0
  157. libreqda-1.2.0/taguette/static/robots.txt +2 -0
  158. libreqda-1.2.0/taguette/static/scss/components/_badge.scss +42 -0
  159. libreqda-1.2.0/taguette/static/scss/components/_button.scss +169 -0
  160. libreqda-1.2.0/taguette/static/scss/components/_checkbox.scss +40 -0
  161. libreqda-1.2.0/taguette/static/scss/components/_context_menu.scss +28 -0
  162. libreqda-1.2.0/taguette/static/scss/components/_custom_select.scss +150 -0
  163. libreqda-1.2.0/taguette/static/scss/components/_dropdown.scss +43 -0
  164. libreqda-1.2.0/taguette/static/scss/components/_form.scss +54 -0
  165. libreqda-1.2.0/taguette/static/scss/components/_modal.scss +57 -0
  166. libreqda-1.2.0/taguette/static/scss/components/_project_card.scss +163 -0
  167. libreqda-1.2.0/taguette/static/scss/components/_tag.scss +308 -0
  168. libreqda-1.2.0/taguette/static/scss/components/_treeview.scss +76 -0
  169. libreqda-1.2.0/taguette/static/scss/custom.scss +809 -0
  170. libreqda-1.2.0/taguette/static/scss/layout/_credits.scss +62 -0
  171. libreqda-1.2.0/taguette/static/scss/layout/_footer.scss +6 -0
  172. libreqda-1.2.0/taguette/static/scss/layout/_navigation.scss +165 -0
  173. libreqda-1.2.0/taguette/static/scss/layout/_sidebar.scss +37 -0
  174. libreqda-1.2.0/taguette/static/scss/themes/default/_variables.scss +103 -0
  175. libreqda-1.2.0/taguette/static/scss/themes/default/theme.css +3 -0
  176. libreqda-1.2.0/taguette/static/scss/themes/default/theme.css.map +26 -0
  177. libreqda-1.2.0/taguette/static/scss/themes/default/theme.scss +4 -0
  178. libreqda-1.2.0/taguette/static/webfonts/BadScript-OFL.txt +94 -0
  179. libreqda-1.2.0/taguette/static/webfonts/BadScript.ttf +0 -0
  180. libreqda-1.2.0/taguette/static/webfonts/Montserrat-Light.ttf +0 -0
  181. libreqda-1.2.0/taguette/static/webfonts/Montserrat-OFL.txt +93 -0
  182. libreqda-1.2.0/taguette/static/webfonts/fa-brands-400.eot +0 -0
  183. libreqda-1.2.0/taguette/static/webfonts/fa-brands-400.svg +1184 -0
  184. libreqda-1.2.0/taguette/static/webfonts/fa-brands-400.ttf +0 -0
  185. libreqda-1.2.0/taguette/static/webfonts/fa-brands-400.woff +0 -0
  186. libreqda-1.2.0/taguette/static/webfonts/fa-brands-400.woff2 +0 -0
  187. libreqda-1.2.0/taguette/static/webfonts/fa-regular-400.eot +0 -0
  188. libreqda-1.2.0/taguette/static/webfonts/fa-regular-400.svg +467 -0
  189. libreqda-1.2.0/taguette/static/webfonts/fa-regular-400.ttf +0 -0
  190. libreqda-1.2.0/taguette/static/webfonts/fa-regular-400.woff +0 -0
  191. libreqda-1.2.0/taguette/static/webfonts/fa-regular-400.woff2 +0 -0
  192. libreqda-1.2.0/taguette/static/webfonts/fa-solid-900.eot +0 -0
  193. libreqda-1.2.0/taguette/static/webfonts/fa-solid-900.svg +2618 -0
  194. libreqda-1.2.0/taguette/static/webfonts/fa-solid-900.ttf +0 -0
  195. libreqda-1.2.0/taguette/static/webfonts/fa-solid-900.woff +0 -0
  196. libreqda-1.2.0/taguette/static/webfonts/fa-solid-900.woff2 +0 -0
  197. libreqda-1.2.0/taguette/templates/alt_templates/.gitkeep +0 -0
  198. libreqda-1.2.0/taguette/templates/archived_projects.html +50 -0
  199. libreqda-1.2.0/taguette/templates/auth/account.html +74 -0
  200. libreqda-1.2.0/taguette/templates/auth/cilogon.login.html +89 -0
  201. libreqda-1.2.0/taguette/templates/auth/email_reset_password.html +5 -0
  202. libreqda-1.2.0/taguette/templates/auth/external_account.html +60 -0
  203. libreqda-1.2.0/taguette/templates/auth/login.html +144 -0
  204. libreqda-1.2.0/taguette/templates/auth/reset_password.html +27 -0
  205. libreqda-1.2.0/taguette/templates/auth/token_needed.html +7 -0
  206. libreqda-1.2.0/taguette/templates/base.html +209 -0
  207. libreqda-1.2.0/taguette/templates/bug_report.html +158 -0
  208. libreqda-1.2.0/taguette/templates/cookies_prompt.html +15 -0
  209. libreqda-1.2.0/taguette/templates/downloads.html +127 -0
  210. libreqda-1.2.0/taguette/templates/email_bug_report.txt +9 -0
  211. libreqda-1.2.0/taguette/templates/email_reset_password.txt +5 -0
  212. libreqda-1.2.0/taguette/templates/error.html +8 -0
  213. libreqda-1.2.0/taguette/templates/export_codebook.html +20 -0
  214. libreqda-1.2.0/taguette/templates/export_document.html +20 -0
  215. libreqda-1.2.0/taguette/templates/export_highlights.html +47 -0
  216. libreqda-1.2.0/taguette/templates/index.html +347 -0
  217. libreqda-1.2.0/taguette/templates/maintenance.html +8 -0
  218. libreqda-1.2.0/taguette/templates/messages.js +74 -0
  219. libreqda-1.2.0/taguette/templates/modal/change_document.html +68 -0
  220. libreqda-1.2.0/taguette/templates/modal/create_collection.html +100 -0
  221. libreqda-1.2.0/taguette/templates/modal/create_document.html +84 -0
  222. libreqda-1.2.0/taguette/templates/modal/create_highlight.html +38 -0
  223. libreqda-1.2.0/taguette/templates/modal/create_tag.html +73 -0
  224. libreqda-1.2.0/taguette/templates/modal/explore_codes.html +58 -0
  225. libreqda-1.2.0/taguette/templates/modal/manage_collaborators.html +44 -0
  226. libreqda-1.2.0/taguette/templates/modal/merge_tag.html +49 -0
  227. libreqda-1.2.0/taguette/templates/new_password.html +32 -0
  228. libreqda-1.2.0/taguette/templates/partials/alert.html +16 -0
  229. libreqda-1.2.0/taguette/templates/partials/codebook_viz_modal.html +34 -0
  230. libreqda-1.2.0/taguette/templates/partials/confirm.html +17 -0
  231. libreqda-1.2.0/taguette/templates/partials/document_toolbar.html +37 -0
  232. libreqda-1.2.0/taguette/templates/partials/hlinfo.html +13 -0
  233. libreqda-1.2.0/taguette/templates/partials/project_card.html +44 -0
  234. libreqda-1.2.0/taguette/templates/partials/project_card_archived.html +41 -0
  235. libreqda-1.2.0/taguette/templates/partials/project_sidebar.html +99 -0
  236. libreqda-1.2.0/taguette/templates/partials/spinner.html +11 -0
  237. libreqda-1.2.0/taguette/templates/permissions.html +54 -0
  238. libreqda-1.2.0/taguette/templates/project.html +288 -0
  239. libreqda-1.2.0/taguette/templates/project_delete.html +17 -0
  240. libreqda-1.2.0/taguette/templates/project_import.html +122 -0
  241. libreqda-1.2.0/taguette/templates/project_import_codebook.html +34 -0
  242. libreqda-1.2.0/taguette/templates/project_import_codebook_confirm.html +49 -0
  243. libreqda-1.2.0/taguette/templates/project_new.html +31 -0
  244. libreqda-1.2.0/taguette/templates/tos.html +8 -0
  245. libreqda-1.2.0/taguette/templates/trans.js +7 -0
  246. libreqda-1.2.0/taguette/templates/welcome.html +15 -0
  247. libreqda-1.2.0/taguette/utils.py +177 -0
  248. libreqda-1.2.0/taguette/validate.py +141 -0
  249. libreqda-1.2.0/taguette/version_check.py +102 -0
  250. libreqda-1.2.0/taguette/web/__init__.py +252 -0
  251. libreqda-1.2.0/taguette/web/api.py +1835 -0
  252. libreqda-1.2.0/taguette/web/base.py +864 -0
  253. libreqda-1.2.0/taguette/web/export.py +338 -0
  254. libreqda-1.2.0/taguette/web/views.py +1618 -0
@@ -0,0 +1,481 @@
1
+ LibreQDA Changelog
2
+ ==================
3
+
4
+ 1.2.0 (2026-09-10)
5
+ ------------------
6
+ - New features:
7
+ - Reworked "Explore codes" with must/can/exclude zones
8
+ - Codebook image export (PNG, SVG)
9
+ - Downloads page (Windows installer, macOS .dmg, pip, Docker) + outdated-version banner on standalone bundles
10
+ - Push message system (in-app banners driven by a JSON file)
11
+ - Native bug report page (multi-screenshot, project selector, "All projects")
12
+ - UX:
13
+ - Codebook compact layout persisted per project
14
+ - "Hide code count badges" preference in account settings
15
+ - Bugfixes:
16
+ - Excluded tags dropped from overlap display; excluded-overlap highlights removed from Explore results
17
+ - Bold text no longer produces double underlines in extracts
18
+ - F5 restores Explore query summary from URL (including single-tag queries)
19
+ - Move code between zones in Explore instead of losing it
20
+ - Language kwargs duplicate crash on rendered pages
21
+
22
+ 1.1.4 (2026-07-13)
23
+ ------------------
24
+ - Highlights count badge on document treeview (left of document name)
25
+ - Auto-save collaborator changes (add, privileges, remove)
26
+ - Bugfixes:
27
+ - Fix intro.js tutorial after V3 highlight refactor
28
+ - Fix polling events routing highlights to the wrong document
29
+
30
+ 1.1.3 (2026-05-20)
31
+ ------------------
32
+ - Access rules, filter by IDP (entityid)
33
+ - Bugfixes:
34
+ - Fix search in documents
35
+ - Fix navbar and header in documents when scrolling
36
+
37
+ 1.1.2 (2026-04-28)
38
+ ------------------
39
+ - Replace login flow with access rules
40
+
41
+ 1.1.1 (2026-04-15)
42
+ ------------------
43
+ - Optimize highlight rendering performance
44
+ - Update translations
45
+ - Bugfixes:
46
+ - Fix NOT filter exclusion and badge rendering with operators
47
+ - Fix navbar scroll glitch and overflow
48
+ - Fix double underlines on multi-line highlights
49
+ - Fix AND operator to use spatial overlap
50
+ - Fix Dockerfile build and MySQL support for group_array
51
+ - Fix document search hiding uncategorized documents
52
+ - Fix archived project access
53
+ - UI improvements:
54
+ - Overlapping tags clarity (dashed badges, hover to show)
55
+ - Project cards with pagination and search
56
+ - Archive/unarchive projects
57
+ - Compact layout toggle
58
+ - Text preview when clicking on existing codes
59
+ - Show real count in tooltip when badge displays 100+
60
+
61
+ 1.1.0 (2026-01-07)
62
+ ------------------
63
+ - Document collections
64
+ - Language selector on welcome page
65
+ - Usage tips
66
+ - Update translations
67
+ - Update tests
68
+ - SCSS refactoring
69
+ - Allow theming (custom templates and CSS)
70
+ - Allow to run on Unix socket (MR )
71
+ - Bugfixes:
72
+ - Multiple display issues
73
+ - OAuth cookies
74
+ - Document deletion
75
+
76
+ 1.0.2 (2025-07-25)
77
+ ------------------
78
+ - Update CILogon authentication template and make it responsive
79
+ - Update translations
80
+
81
+ 1.0.1 (2025-06-16)
82
+ ------------------
83
+ - OAuth authentication
84
+ - Roles, some users need to be sponsored to create new projects.
85
+ - ADMIN : Can do anything
86
+ - PROJECT_ADMIN : Can create projects and sponsor users
87
+ - TEAM_MEMBER : Can work in existing projects
88
+ - PROJECT_OWNER : Can create projects, cannot sponsor users
89
+ - General UI/UX improvements
90
+ - Code hierarchy
91
+ - Code color
92
+ - Layered color bands
93
+ - Drag & drop codes
94
+ - Filter documents and codes
95
+ - Upload multiple documents
96
+ - Search in documents
97
+ - Complex queries to explore codes with (AND, OR, NOT)
98
+ - General bug fixes
99
+ - Code refactoring
100
+ - Tests optimization
101
+
102
+ 0.9.0 (2024-04-03)
103
+ ------------------
104
+
105
+ - Based on Taguette 1.4.1
106
+ - Add an option to pass the authentication process to [CI Logon](https://www.cilogon.org/)
107
+
108
+ Taguette Changelog
109
+ ==================
110
+
111
+ 1.4.1 (2023-02-04)
112
+ ------------------
113
+
114
+ Bugfixes:
115
+ * Fix highlighting in tables
116
+ * Fix error adding documents in some situations due to a race condition (seems to only happen when using Redis)
117
+
118
+ 1.4.0 (2022-12-16)
119
+ ------------------
120
+
121
+ Bugfixes:
122
+ * Fix some validation on project import, filename mangling on document import
123
+ * Relax filename requirements
124
+ * When importing codebook, ignore case when looking at column names
125
+ * Fix the resource usage when using Redis, and avoid dropping events in specific conditions
126
+ * Fix the database warnings shown at startup
127
+ * Fix language setting sometimes being out of sync between devices
128
+ * Don't allow the creation of blank highlights (empty content, for example selecting a newline character)
129
+
130
+ Enhancements:
131
+ * Add Swedish translation
132
+ * Add Indonesian translation
133
+ * Add a script to validate the current database, useful if you have been using it across Taguette versions, or if you're writing to it programmatically
134
+ * When adding a document, automatically change to it
135
+ * Add `EXTRA_FOOTER` config setting to easily add information about a self-hosted instance
136
+ * Enable SQLite's auto_vacuum mode on newly created databases
137
+ * Update the password hashing method to scrypt, more secure
138
+ * Perform password hashing and verification in background threads, to avoid locking up the application for everyone else
139
+ * Prevent clickjacking attacks by serving the relevant headers, in case they are not already set by your reverse proxy
140
+ * Add a script `register_user.py` to register a user even if registration is disabled
141
+ * Allow more HTML tags in imported documents, like tables
142
+ * Add a 'disabled' flag to users and a script to delete all user data (only keeping the 'login' in the database to prevent re-use)
143
+ * Automatically select the new tag when creating a tag from the add/update highlight modal
144
+
145
+ 1.3.0 (2022-05-02)
146
+ ------------------
147
+
148
+ Bugfixes:
149
+ * Fix JavaScript error when trying to import a SQLite3 file with no projects in it
150
+ * Fix `--database` option when not in server mode
151
+ * Show a more meaningful error if importing an empty SQLite3 file, or a file that is not a SQLite3 database
152
+ * Fix importing a codebook with duplicated tags
153
+ * Fix importing a codebook with empty rows
154
+ * Fix empty lines in log from conversion process
155
+
156
+ Enhancements:
157
+ * Add support for importing subtitle files (.srt or .vtt)
158
+ * Strip leading and trailing whitespace from tag names in imported codebook
159
+ * "Taguette Guide" opens in a new window
160
+ * Add support for serving Taguette in a subdirectory (`BASE_PATH` setting)
161
+ * Add health check endpoint (`/health`)
162
+ * Internationalization improvements: add contexts, translate page titles
163
+ * Add extras to install a database driver: `pip install taguette[postgres]` (or `mysql`)
164
+ * Allow setting SQLAlchemy parameters from the config file, by making `DATABASE` a dictionary
165
+
166
+ 1.2.0 (2022-01-22)
167
+ ------------------
168
+
169
+ Bugfixes:
170
+ * Add some database indexes, improving performance on larger installations
171
+ * Reload page when the server updates, avoiding clients on older versions if they never close the tab
172
+ * Fix error importing SQLite3 file on Windows (and other permission errors on temporary files)
173
+ * Show a helpful message if the imported codebook has rows that are too short, instead of 500 error
174
+ * Fix a 403 error when importing a project if no other form has been shown before (single-user mode, no project created)
175
+
176
+ Enhancements:
177
+ * Focus the name (path) field when creating a tag
178
+ * Add a keyboard shortcut to create a highlight: 'n' key (localizable)
179
+ * Enable portable install in Windows installer (no admin access)
180
+
181
+ 1.1.1 (2021-10-17)
182
+ ------------------
183
+
184
+ Bugfixes:
185
+ * Don't cache documents forever in desktop mode (only server mode)
186
+
187
+ 1.1.0 (2021-10-12)
188
+ ------------------
189
+
190
+ Bugfixes:
191
+ * Avoid error "document name too long" if no name was provided and the filename is used
192
+ * Don't deselect all tags from the highlight modal if it is open while creating a new tag
193
+ * Avoid `TimeoutError` due to the SQLAlchemy connection pool overflowing (mostly affects busy self-hosted non-SQLite deployments)
194
+
195
+ Enhancements:
196
+ * Add support for right-to-left documents
197
+ * Add importing tags from a codebook CSV file
198
+
199
+ 1.0.1 (2021-07-22)
200
+ ------------------
201
+
202
+ This is a pip-only fix: binary installers, Docker, Poetry install are NOT affected.
203
+
204
+ Bugfixes:
205
+ * Fix incompatibility with SQLAlchemy 1.4
206
+
207
+ 1.0.0 (2021-07-17)
208
+ ------------------
209
+
210
+ Bugfixes:
211
+ * Fix highlights disappearing when one of their tags is deleted
212
+ * Fix highlight modal showing "no tags" multiple times after removing the last tag repeatedly
213
+ * Add missing title in exported highlights HTML
214
+
215
+ Enhancements:
216
+ * Allow disabling SQLite3 file import from the configuration file
217
+ * Add option to use Redis to coordinate live collaboration if running Taguette in multiple processes
218
+
219
+ 0.11 (2021-07-06)
220
+ -----------------
221
+
222
+ Bugfixes:
223
+ * Fix timezone issues on some SQL backends (PostgreSQL, not SQLite). Could cause recorded times to be wrong, and in some cases password reset links could be used multiple times
224
+ * Fix the activity detection used to pause/resume polling
225
+ * Fix default-config command outputing logs about umask, which could be piped into the new config file (for example when using Docker with `-t`)
226
+ * Fix migrations on SQLite failing because of foreign key constraints when recreating tables
227
+ * Fix RTF export
228
+ * Fix retrying Calibre conversion with --enable-heuristics again
229
+ * Fix Calibre leaving behind temporary files if it times out
230
+
231
+ Enhancements:
232
+ * Show more details when document export or import fails
233
+ * Show the number of highlights per tag in exported codebooks
234
+ * Performance improvement of getting a document or tag with many highlights
235
+ * Add terms of service, which you can optionally set in your own instance
236
+ * Made document/highlights/codebook exporting functions available under `taguette.export`, for use in scripts and notebooks
237
+ * Improve button placement in the left panel (put "add a document" and "create a tag" at the top)
238
+ * Add an HTML page for 404 errors
239
+ * Improve error message when Calibre is not found
240
+ * Add support for MariaDB (MySQL doesn't work because of error 1093, see https://stackoverflow.com/q/4429319)
241
+ * Add option to import or export a project as a SQLite3 database
242
+ * Allow a user to remove themselves from a project, without having to ask an admin
243
+
244
+ 0.10.1 (2021-02-22)
245
+ -------------------
246
+
247
+ Bugfixes:
248
+ * Limit the number of page buttons
249
+ * SQL query performance improvements
250
+ * Force long document names to wrap (like long tag names)
251
+
252
+ 0.10 (2021-02-17)
253
+ -----------------
254
+
255
+ Bugfixes:
256
+ * Check that tags exist in the project before adding them to highlights
257
+
258
+ Enhancements:
259
+ * SEO: Add page titles, robots.txt
260
+ * Remind user of their login in the password reset email
261
+ * Pause polling for changes when the window has been inactive for 10 minutes
262
+ * Improve the error message shown when document import fails
263
+ * Add pagination to the highlights view, which greatly improve performances for heavily used tags
264
+ * Update to Tornado 6.1, remove workaround for older versions
265
+
266
+ 0.9.2 (2020-08-26)
267
+ ------------------
268
+
269
+ Bugfixes:
270
+ * Fix document conversion on Windows
271
+
272
+ Enhancements:
273
+ * Show spinner while loading document or tag view
274
+ * Show the tag names next to each highlight in document export
275
+
276
+ 0.9.1 (2020-08-24)
277
+ ------------------
278
+
279
+ Bugfixes:
280
+ * Fix printed link not being flushed, causing it to be inaccessible e.g. running on Docker
281
+ * Fix incompatibility with Python 3.8
282
+ * Close DB connection during long polls, avoiding overflow of connection pool when using PostgreSQL
283
+ * Don't allow a password reset link to be used more than once
284
+ * Fix 'new highlight' button on Microsoft Edge
285
+ * If Calibre fails, run it again without heuristics
286
+ * Fix highlights being off in document export in non-ASCII paragraphs
287
+
288
+ Enhancements:
289
+ * Set umask to 077 by default (and add corresponding command-line options)
290
+ * Restore Python 3.5 compatibility
291
+ * Add a timeout to document conversion
292
+ * Add Calibre output limits to the config
293
+ * Fix some important messages being routed through log instead of direct to terminal
294
+
295
+ 0.9 (2019-11-23)
296
+ ----------------
297
+
298
+ Bugfixes:
299
+ * Fix showing highlights for a tag with a slash in it
300
+ * Fix new tags showing NaN highlight count
301
+ * Fix export button being on top of text, if the first line is long
302
+ * Fix tag names containing '#' not working properly
303
+ * Fix "new highlight" button showing at the top of the page when scrolling on Safari
304
+ * Sort highlights in the exported highlights view as well
305
+ * Fix merging tags that have common highlights (previous 500 error)
306
+
307
+ Features:
308
+ * Export codebook to Excel (.xlsx)
309
+ * Show error details in alert messages (in English)
310
+ * Highlight the currently selected tag(s) in the left panel
311
+ * Don't show 403 if user can't change collaborators: show explanation, hide button
312
+ * Add export of highlights to CSV and Excel (.xlsx) formats
313
+ * Support PBKDF2 passwords (Taguette no longer requires 'bcrypt')
314
+
315
+ 0.8 (2019-06-15)
316
+ ----------------
317
+
318
+ Bugfixes:
319
+ * Don't show 500 error on invalid email reset token
320
+ * Explicitly close DB connections, which might help with some warnings
321
+ * Don't show 'merge' button in modal when creating a new tag
322
+ * Fix getting logged out in single-user mode with `--debug`
323
+ * Don't scroll to the top of the document when clicking on a disabled link
324
+ * Fix taguette --database=filename not working when filename does not contain directories
325
+
326
+ Features:
327
+ * Add limits on converted file size
328
+ * Don't have Calibre export image files from PDF, since we don't read them
329
+ * Add a scrollbar to modals, since they can grow big in projects with many tags
330
+ * Use the file name as document name if left blank
331
+ * Show cookie warning before setting any (optional in configuration)
332
+ * Add the REFI-QDA Codebook (.qdc) export format
333
+ * Improve the collaborator management modal
334
+ * Show the number of highlights which each tag in the "highlights" panel
335
+
336
+ 0.7 (2019-05-15)
337
+ ----------------
338
+
339
+ Taguette can now be translated! You can help bring Taguette to your language on [Transifex](http://transifex.com/remram44/taguette/).
340
+
341
+ Bugfixes:
342
+ * Fix exporting highlights for non-ASCII tags
343
+ * Fix account page not accepting empty optional fields
344
+ * Fix document description being validated as its name
345
+ * Fix importing documents with completely non-ASCII filenames
346
+
347
+ Features:
348
+ * Merge tags
349
+ * Added internationalization
350
+ * French translation
351
+ * German translation
352
+ * Spanish translation
353
+ * Show tag names when hovering a highlight
354
+
355
+ 0.6 (2019-04-13)
356
+ ----------------
357
+
358
+ Bugfixes:
359
+ * Make 'display' headings responsive
360
+ * Fix exported highlights being called "path"
361
+ * Fix possible weird characters in exported documents on Windows (depending on locale)
362
+
363
+ Features:
364
+ * Convert logins to lower-case (login and collaborator forms will convert too, so it should only affect display). Users with non-lowercase logins will be logged out on update
365
+ * Moved the `SECRET_KEY` to the config, no longer writing to `~/.cache`
366
+ * Let you know when you have been logged out or removed from a project while working
367
+
368
+ 0.5 (2019-03-23)
369
+ ----------------
370
+
371
+ Bugfixes:
372
+ * Improve reading of OPF output from Calibre, which might fix compatibility with some combinations of Calibre versions and input formats
373
+ * Long tag names no longer stick out of the left pane
374
+ * Sort tags in highlight modal, documents in left pane, highlights and their tags in the highlights view
375
+
376
+ Features:
377
+ * Use a configuration file in server mode, rather than a growing list of command-line options
378
+ * Expose metrics to Prometheus
379
+ * Send errors to Sentry
380
+ * Add 'delete project' button
381
+ * Add account management page, to update email/password
382
+ * Add password recovery feature (if you have an email set)
383
+ * "New highlight" button shows up next to selected text rather than mouse, making it work with touch screens (mobile) and screen readers (hopefully)
384
+ * Convert old .DOC files (Word 97) using WV if available
385
+ * Add collaborator management modal, to add more members to a project
386
+ * Changed default port number from `8000` to `7465`
387
+ * Add spinning icon while requests are in progress, to prevent multiple submission of forms (document add takes ~10s for example)
388
+
389
+ 0.4.4 (2018-11-29)
390
+ ------------------
391
+
392
+ Bugfixes:
393
+ * Fix error creating a highlight when a paragraph is selected to the end
394
+ * Correctly handle Calibre sometimes writing a `.xhtml` file instead of `.html`
395
+ * Also show highlights with no tags when selecting "See all highlights"
396
+
397
+ 0.4.3 (2018-11-17)
398
+ ------------------
399
+
400
+ Bugfixes:
401
+ * Fix JavaScript error on a brand new project (no recorded Command)
402
+ * Fix Commands being sent to the wrong project
403
+
404
+ Features:
405
+ * Add `--xheaders` option for the hosted setup, showing correct IPs in the log
406
+ * Show which document in the list is the current one
407
+
408
+ 0.4.2 (2018-11-15)
409
+ ------------------
410
+
411
+ Bugfixes:
412
+ * Don't show highlights from a different document
413
+ * Handle non-ascii text better
414
+ * Fix real-time updates pausing if two changes happen in the same second
415
+ * Add messages boxes to signal when something goes wrong
416
+ * Sanitize name of uploaded files
417
+
418
+ 0.4.1 (2018-11-12)
419
+ ------------------
420
+
421
+ Bugfixes:
422
+ * Log errors from async handlers to the console instead of hiding them
423
+ * Work around a problem computing highlight positions in documents when unicode is present (won't crash anymore, but positions might still be off, fix to come)
424
+ * Fix not being able to create tags with names that collide with tags in other projects, and error creating a project if another project still uses default tags
425
+ * Fix exporting a document that has 0 highlights
426
+ * Fix document export missing highlights
427
+ * Fix navbar expand button (shown on smaller screen sizes) not working
428
+
429
+ 0.4 (2018-11-11)
430
+ ----------------
431
+
432
+ Bugfixes:
433
+ * Make sure to hide auth token from URL bar
434
+ * Fix tag description not showing up
435
+ * Don't allow two tags to have the same name
436
+
437
+ Features:
438
+ * Add confirmation dialogs before deleting tags or documents
439
+ * Create tag from the highlight window
440
+ * New theme matching website (thanks to Vicky Steeves)
441
+ * Add button to create a tag from the highlight modal
442
+ * Show messages from taguette.fr, such as new version available
443
+ * Add export options, allowing you to get your highlights or highlighted documents as HTML, DOCX, or PDF
444
+ * Add HTML and PDF options for codebook export as well
445
+ * Add an option to show (or export) all highlights, rather than only a specific tag
446
+
447
+ 0.3 (2018-10-29)
448
+ ----------------
449
+
450
+ Bugfixes:
451
+ * Fix having to reload for changes to appear when working on project other than 1.
452
+ * Fix tags not being sorted by name
453
+
454
+ Features:
455
+ * Add 'backlight' mode, fading non-tagged text
456
+ * Add modal dialog to edit and delete documents
457
+ * Add migration system, to automatically upgrade the database to new schema version when required
458
+
459
+ 0.2 (2018-10-21)
460
+ ----------------
461
+
462
+ Bugfixes:
463
+ * Accept list and numbered lists, as generated from Markdown documents
464
+ * Fix tag modal not able to add tags after a tag has been edited
465
+
466
+ Features:
467
+ * Add single-user mode, the default. Multi-user mode now needs `--multiuser`
468
+ * Add login and registration pages
469
+ * Add codebook export to CSV and DOCX files (contains list of tags with their descriptions)
470
+
471
+ 0.1 (2018-10-21)
472
+ ----------------
473
+
474
+ First version, proof of concept. Not very useful, but showcases the app, and can be installed by alpha testers.
475
+
476
+ * Can create projects
477
+ * Can import documents into the database as HTML
478
+ * Uses Calibre to convert supported documents into HTML
479
+ * Can highlight parts of documents, and assign tags
480
+ * Real-time notifications and collaboration
481
+ * "Acceptable" UI with bootstrap
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2023, Plateforme en humanités numériques (Université de Sherbrooke) and contributors
2
+ Copyright (c) 2018, Remi Rampin and Taguette contributors
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its contributors
16
+ may be used to endorse or promote products derived from this software
17
+ without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.1
2
+ Name: libreqda
3
+ Version: 1.2.0
4
+ Summary: Free and open source qualitative research tool
5
+ Home-page: https://www.libreqda.org/
6
+ License: BSD-3-Clause
7
+ Keywords: qualitative,document,text,tagging,tags,highlights,notes
8
+ Author: Remi Rampin
9
+ Author-email: remi@rampin.org
10
+ Requires-Python: >=3.11,<4
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: JavaScript
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
23
+ Classifier: Topic :: Scientific/Engineering :: Visualization
24
+ Classifier: Topic :: Text Processing
25
+ Provides-Extra: mysql
26
+ Provides-Extra: otel
27
+ Provides-Extra: postgres
28
+ Requires-Dist: SQLAlchemy (>=1.4,<1.5)
29
+ Requires-Dist: XlsxWriter (>=1.4,<4)
30
+ Requires-Dist: alembic (>=1.6,<1.9)
31
+ Requires-Dist: beautifulsoup4
32
+ Requires-Dist: bleach (>=3,<6)
33
+ Requires-Dist: chardet (>=4,<6)
34
+ Requires-Dist: cryptography ; extra == "mysql"
35
+ Requires-Dist: html5lib (>=1,<2)
36
+ Requires-Dist: jinja2 (>=3.1,<3.2)
37
+ Requires-Dist: libsass (==0.22.0)
38
+ Requires-Dist: oauth2client (>=4.1.3,<5.0.0)
39
+ Requires-Dist: opentelemetry-api (>=1.5,<1.11)
40
+ Requires-Dist: opentelemetry-distro ; extra == "otel"
41
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.24b0,<0.26) ; extra == "otel"
42
+ Requires-Dist: opentelemetry-instrumentation-tornado (>=0.24b0,<0.26) ; extra == "otel"
43
+ Requires-Dist: prometheus-async
44
+ Requires-Dist: prometheus-client
45
+ Requires-Dist: psycopg2 (>=2.8,<3) ; extra == "postgres"
46
+ Requires-Dist: pymysql (>=1.0,<2) ; extra == "mysql"
47
+ Requires-Dist: redis (>=3,<5)
48
+ Requires-Dist: requests (>=2.31.0,<3.0.0)
49
+ Requires-Dist: sentry-sdk
50
+ Requires-Dist: setuptools (>=65,<81) ; python_version >= "3.11"
51
+ Requires-Dist: subtitle-parser (>=1,<2)
52
+ Requires-Dist: tornado (>=6.1)
53
+ Project-URL: Bug Tracker, https://gitlab.com/bin-cirst/libreqda/libre-qda/-/issues
54
+ Project-URL: Documentation, https://aide.libreqda.org
55
+ Project-URL: Repository, https://gitlab.com/bin-cirst/libreqda/libre-qda
56
+ Description-Content-Type: text/markdown
57
+
58
+
59
+ _We are building on the work of [Taguette](https://www.taguette.org/) — go check them out! You will find close alignments between our code bases and even the installation instructions._
60
+
61
+
62
+ LibreQDA
63
+ ========
64
+
65
+ LibreQDA is developed by the [Plateforme en humanités numériques (PhuN)](https://www.usherbrooke.ca/flsh/recherche/centres-groupes-et-equipes-de-recherche/phun) at Université de Sherbrooke.
66
+
67
+ This qualitative data analysis software (QDA) allows you to:
68
+
69
+ + Import PDFs, Word documents (`.docx`), text files (`.txt`), HTML, EPUB, MOBI, Open Documents (`.odt`), and Rich Text Files (`.rtf`).
70
+ + Highlight words, sentences or paragraphs and tag them with codes you create.
71
+ + Create hierarchical relations between your codes.
72
+ + Retrieve your tagged documents and lists of encoded sentences.
73
+ + Export you material in various formats for diffusion or post-processing with other tools.
74
+
75
+ [Visit our website to consult the documentation.](https://help.libreqda.org/)
76
+
77
+ Motivation and Goal
78
+ -------------------
79
+
80
+ Through its collaborations with research teams and non-profit organizations across various fields, the team at PHuN has come to recognize the crucial need for developing rich, resilient and responsive ecosystem of open-source QDA software. Numerous testimonies highlight the disconnect between the commercial incentives of proprietary software and the core theories of substantive qualitative analysis. Today, users of QDA are subjected to forced obsolescence, costly licenses, black box features and data restrictions that prevent them from fully owning their intellectual product.
81
+
82
+ Our goal is to position LibreQDA as a valuable component within a diverse array of resources available to users seeking to develop a rich understanding of their textual data. We are committed to continuous improvement through community feedback and advocate for open integration with other tools to best meet your needs.
83
+
84
+ If you think LibreQDA could do something better, reach out!
85
+
86
+ Installation
87
+ ------------
88
+
89
+ A secure instance of LibreQDA running on Canadian servers is available at [https://www.libreqda.org/](https://www.libreqda.org/). You can clone the software and run a single-user version on your computer using the instructions below. Installers for Windows and MacOS are pending.
90
+
91
+ Docker
92
+ ------
93
+
94
+ docker pull phunudes/libreqda
95
+ docker run -d -p 7465:7465 -v libreqda-data:/data phunudes/libreqda
96
+
97
+ Browse to [localhost:7465](http://localhost:7465/). Data persists in the `libreqda-data` volume.
98
+
99
+ Development Setup from the Repository
100
+ -------------------------------------
101
+
102
+ You can install from a local clone of this repository, which will allow you to easily change the sources to suit your needs. Taguette provide the base infrastructure for LibreQDA, which is reflected in these instructions:
103
+
104
+ 1. Clone this git repository from the terminal: `git clone https://gitlab.com/bin-cirst/libreqda/libre-qda/`
105
+ 2. Navigate on the command line to the repository you've just cloned locally, using the `cd` command. To get help using `cd`, use [this tutorial](https://swcarpentry.github.io/shell-novice/02-filedir/index.html).
106
+ 3. LibreQDA uses [Poetry](https://python-poetry.org/) for its packaging and dependency management. You will need to [install Poetry](https://python-poetry.org/docs/#installation).
107
+ 4. Install LibreQDA and its dependencies by running `poetry install`. Poetry will create a virtual environment for you by default, activate it by running `poetry shell`.
108
+ - To install dependencies for mysql or postgres, use the following command `poetry install -E postgres`.
109
+ 5. Build translation files using `scripts/update_translations.sh`.
110
+ 6. You can start LibreQDA in development mode using `taguette --debug` (or `taguette --debug server <config_file>`). This will start Tornado in debug mode, which means in particular that it will auto-restart every time you make changes.
111
+ 1. A config file can be created by running `taguette default-config > taguette.conf`
112
+ 7. Navigate to [localhost:7465](http://localhost:7465/) to use LibreQDA!
113
+
114
+ Create custom theme
115
+ -------------------
116
+
117
+ You can entirely configure LibreQDA interface by creating a theme.
118
+
119
+ 1. Run `poetry run make-theme [theme-name]`. That will create 2 folders :
120
+ - `taguette/static/scss/themes/[theme-name]` where the custom css are stored
121
+ - `taguette/templates/alt_templates/[theme-name]` where you can override templates with the same hierarchy as in the `templates` folder
122
+ - `taguette/static/alt_templates/[theme-name]` where you can put the files that you want to access in your custom template
123
+ 2. Add this line in `taguette.conf`: `THEME = "theme-name"`
124
+
125
+ License
126
+ -------
127
+ * Copyright (c) 2023, Plateforme en humanités numériques (Université de Sherbrooke) and contributors
128
+ * Copyright (c) 2018, Remi Rampin and Taguette contributors
129
+
130
+ Licensed under a **BSD 3-clause "New" or "Revised" License**. See the `LICENSE.txt` file for details.
131
+