django-microsys 2.1.2__tar.gz → 2.1.4__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 (278) hide show
  1. {django_microsys-2.1.2 → django_microsys-2.1.4}/LICENSE +0 -0
  2. {django_microsys-2.1.2 → django_microsys-2.1.4}/MANIFEST.in +0 -0
  3. {django_microsys-2.1.2 → django_microsys-2.1.4}/PKG-INFO +165 -165
  4. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/PKG-INFO +165 -165
  5. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/SOURCES.txt +1 -1
  6. django_microsys-2.1.4/microsys/VERSION +1 -0
  7. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/forms.py +70 -37
  8. django_microsys-2.1.4/microsys/scaffold_templates/project/.secrets/.env.tmpl +12 -0
  9. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/wizard/js/main.js +16 -4
  10. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/options.css +30 -12
  11. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/system_setup.css +50 -4
  12. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/options.js +12 -4
  13. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/tutorial/js/main.js +1 -1
  14. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/base.html +2 -2
  15. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/options.html +11 -11
  16. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/system_setup.html +1 -1
  17. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/__init__.py +0 -3
  18. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/users.py +2 -134
  19. {django_microsys-2.1.2 → django_microsys-2.1.4}/pyproject.toml +0 -0
  20. {django_microsys-2.1.2 → django_microsys-2.1.4}/setup.cfg +4 -4
  21. django_microsys-2.1.2/microsys/VERSION +0 -1
  22. django_microsys-2.1.2/microsys/templates/microsys/users/user_form.html +0 -37
  23. {django_microsys-2.1.2 → django_microsys-2.1.4}/README.md +0 -0
  24. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/dependency_links.txt +0 -0
  25. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/entry_points.txt +0 -0
  26. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/requires.txt +0 -0
  27. {django_microsys-2.1.2 → django_microsys-2.1.4}/django_microsys.egg-info/top_level.txt +0 -0
  28. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/__init__.py +0 -0
  29. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/__main__.py +0 -0
  30. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/admin.py +0 -0
  31. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/api.py +0 -0
  32. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/apps.py +0 -0
  33. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/cli.py +0 -0
  34. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/constants.py +0 -0
  35. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/context_processors.py +0 -0
  36. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/discovery.py +0 -0
  37. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/fetcher.py +0 -0
  38. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/filters.py +0 -0
  39. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/formats/__init__.py +0 -0
  40. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/formats/ar/__init__.py +0 -0
  41. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/formats/ar/formats.py +0 -0
  42. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/formats/en/__init__.py +0 -0
  43. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/formats/en/formats.py +0 -0
  44. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/guards.py +0 -0
  45. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/management/commands/__init__.py +0 -0
  46. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/management/commands/microsys_check.py +0 -0
  47. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/management/commands/microsys_setup.py +0 -0
  48. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/management/commands/migrator.py +0 -0
  49. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/management/commands/seed_activity_log.py +0 -0
  50. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/managers.py +0 -0
  51. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/md2docx_v4.py +0 -0
  52. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/middleware.py +0 -0
  53. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/migrations/0001_initial.py +0 -0
  54. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/migrations/0002_public_registration.py +0 -0
  55. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/migrations/__init__.py +0 -0
  56. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/models.py +0 -0
  57. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/patches.py +0 -0
  58. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/registration.py +0 -0
  59. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold.py +0 -0
  60. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/README.md.tmpl +0 -0
  61. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/__init__.py.tmpl +0 -0
  62. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/apps.py.tmpl +0 -0
  63. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/filters.py.tmpl +0 -0
  64. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/forms.py.tmpl +0 -0
  65. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/migrations/__init__.py.tmpl +0 -0
  66. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/models.py.tmpl +0 -0
  67. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/tables.py.tmpl +0 -0
  68. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/templates/example_record_confirm_delete.html.tmpl +0 -0
  69. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/templates/example_record_detail.html.tmpl +0 -0
  70. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/templates/example_record_form.html.tmpl +0 -0
  71. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/templates/example_record_list.html.tmpl +0 -0
  72. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/tests/__init__.py.tmpl +0 -0
  73. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/tests/test_app.py.tmpl +0 -0
  74. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/translations.py.tmpl +0 -0
  75. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/urls.py.tmpl +0 -0
  76. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/app/views.py.tmpl +0 -0
  77. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/.nginx/nginx.conf.tmpl +0 -0
  78. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/Dockerfile.tmpl +0 -0
  79. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/README.md.tmpl +0 -0
  80. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/compose.dev.yml.tmpl +0 -0
  81. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/compose.yml.tmpl +0 -0
  82. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/dockerignore.tmpl +0 -0
  83. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/docs/README.md.tmpl +0 -0
  84. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/entrypoint.sh.tmpl +0 -0
  85. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/gitattributes.tmpl +0 -0
  86. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/gitignore.tmpl +0 -0
  87. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/gunicorn.py.tmpl +0 -0
  88. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/manage.py.tmpl +0 -0
  89. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/__init__.py.tmpl +0 -0
  90. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/asgi.py.tmpl +0 -0
  91. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/celery.py.tmpl +0 -0
  92. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/settings.py.tmpl +0 -0
  93. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/urls.py.tmpl +0 -0
  94. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/package/wsgi.py.tmpl +0 -0
  95. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/req.txt.tmpl +0 -0
  96. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/start.ps1.tmpl +0 -0
  97. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/start.sh.tmpl +0 -0
  98. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/tests/__init__.py.tmpl +0 -0
  99. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/tests/test_scaffold.py.tmpl +0 -0
  100. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/scaffold_templates/project/tools/smtp_relay.py.tmpl +0 -0
  101. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/signals.py +0 -0
  102. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap-icons.css +0 -0
  103. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap-icons.woff +0 -0
  104. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap-icons.woff2 +0 -0
  105. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.bundle.min.js +0 -0
  106. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.bundle.min.js.map +0 -0
  107. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.min.css +0 -0
  108. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.min.css.map +0 -0
  109. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.rtl.min.css +0 -0
  110. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/bootstrap/bootstrap.rtl.min.css.map +0 -0
  111. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/chart.js/chart.umd.min.js +0 -0
  112. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/favicon.ico +0 -0
  113. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/flatpickr/flatpickr.min.css +0 -0
  114. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/flatpickr/flatpickr.min.js +0 -0
  115. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/flatpickr/locale/ar.d.ts +0 -0
  116. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/flatpickr/locale/ar.js +0 -0
  117. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/img/base_logo.webp +0 -0
  118. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/img/default_profile.webp +0 -0
  119. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/img/login_logo.webp +0 -0
  120. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/accessibility/css/main.css +0 -0
  121. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/accessibility/js/main.js +0 -0
  122. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/activitylog/js/main.js +0 -0
  123. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/forms/css/file_field.css +0 -0
  124. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/forms/css/form_actions.css +0 -0
  125. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/forms/css/form_fields.css +0 -0
  126. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/forms/js/file_field.js +0 -0
  127. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/forms/js/filter_form.js +0 -0
  128. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/autofill/js/main.js +0 -0
  129. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/context_menu/css/main.css +0 -0
  130. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/context_menu/js/main.js +0 -0
  131. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/context_menu/js/section_manager.js +0 -0
  132. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/dynamic_modal/js/main.js +0 -0
  133. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/prevent_double_submit.js +0 -0
  134. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/scan_link/js/main.js +0 -0
  135. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/helpers/scan_link/js/scan_button.js +0 -0
  136. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/language/css/main.css +0 -0
  137. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/language/fonts/TwemojiCountryFlags.woff2 +0 -0
  138. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/language/js/main.js +0 -0
  139. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/language/js/translations.js +0 -0
  140. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/buttons.css +0 -0
  141. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/charts.css +0 -0
  142. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/doc_detail.css +0 -0
  143. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/dropdowns.css +0 -0
  144. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/gen_pdf.css +0 -0
  145. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/gen_report.css +0 -0
  146. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/index_cards.css +0 -0
  147. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/main.css +0 -0
  148. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/navtabs.css +0 -0
  149. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/pagination.css +0 -0
  150. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/selectors.css +0 -0
  151. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/tables.css +0 -0
  152. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/template_cleanup.css +0 -0
  153. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/css/titlebar.css +0 -0
  154. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Amiri-Bold.woff2 +0 -0
  155. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Amiri-BoldItalic.woff2 +0 -0
  156. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Amiri-Italic.woff2 +0 -0
  157. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Amiri-Regular.woff2 +0 -0
  158. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Shabwa-Bold.woff2 +0 -0
  159. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Shabwa-Medium.woff2 +0 -0
  160. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/fonts/Shabwa.woff2 +0 -0
  161. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/anime.min.js +0 -0
  162. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/base_head.js +0 -0
  163. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/base_runtime.js +0 -0
  164. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/dashboard.js +0 -0
  165. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/selectors.js +0 -0
  166. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/system_setup.js +0 -0
  167. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/main/js/tables.js +0 -0
  168. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sections/js/manage_sections.js +0 -0
  169. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/css/main.css +0 -0
  170. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/css/reorder.css +0 -0
  171. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/css/theme_picker.css +0 -0
  172. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/js/main.js +0 -0
  173. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/js/preload.js +0 -0
  174. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/js/reorder.js +0 -0
  175. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/sidebar/js/theme_picker.js +0 -0
  176. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/blue.css +0 -0
  177. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/dark.css +0 -0
  178. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/gold.css +0 -0
  179. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/gothic.css +0 -0
  180. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/green.css +0 -0
  181. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/light.css +0 -0
  182. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/main.css +0 -0
  183. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/mono.css +0 -0
  184. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/neon.css +0 -0
  185. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/red.css +0 -0
  186. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/css/retro.css +0 -0
  187. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/themes/js/main.js +0 -0
  188. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/tutorial/css/main.css +0 -0
  189. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/tutorial/js/driver.js +0 -0
  190. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/css/login.css +0 -0
  191. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/css/permissions.css +0 -0
  192. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/css/profile.css +0 -0
  193. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/css/user_hub.css +0 -0
  194. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/login.js +0 -0
  195. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/manage_users.js +0 -0
  196. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/permissions.js +0 -0
  197. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/profile_2fa.js +0 -0
  198. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/twofa_verify.js +0 -0
  199. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/users/js/user_hub.js +0 -0
  200. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/microsys/widgets/js/profile_image_widget.js +0 -0
  201. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/vanillajs-datepicker/ar.js +0 -0
  202. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/vanillajs-datepicker/datepicker-bs5.min.css +0 -0
  203. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/static/vanillajs-datepicker/datepicker.min.js +0 -0
  204. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/tables.py +0 -0
  205. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/bootstrap5/layout/field_file.html +0 -0
  206. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/2fa/verify.html +0 -0
  207. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/activitylog/activity_log.html +0 -0
  208. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/activitylog/activity_log_detail_modal.html +0 -0
  209. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/form_base.html +0 -0
  210. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/assets_head.html +0 -0
  211. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/assets_scripts.html +0 -0
  212. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/checkbox_field.html +0 -0
  213. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/crispy_file_field.html +0 -0
  214. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/file_field.html +0 -0
  215. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/file_input.html +0 -0
  216. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/filter_assets_head.html +0 -0
  217. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/forms/filter_assets_scripts.html +0 -0
  218. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/dynamic_modal.html +0 -0
  219. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/dynamic_modal_combined.html +0 -0
  220. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/dynamic_modal_detail.html +0 -0
  221. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/dynamic_modal_form.html +0 -0
  222. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/dynamic_modal_list.html +0 -0
  223. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/global_list.html +0 -0
  224. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/micro_context_menu.html +0 -0
  225. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/helpers/scan_link.html +0 -0
  226. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/dashboard.html +0 -0
  227. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/language_catalog_editor.html +0 -0
  228. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/language_previews.html +0 -0
  229. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/sidebar_builder.html +0 -0
  230. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/sidebar_density_previews.html +0 -0
  231. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/sidebar_items.html +0 -0
  232. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/system_names_editor.html +0 -0
  233. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/table_density_previews.html +0 -0
  234. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/theme_previews.html +0 -0
  235. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/theme_settings_matrix.html +0 -0
  236. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/titlebar.html +0 -0
  237. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/translation_matrix_editor.html +0 -0
  238. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/includes/tutorial.html +0 -0
  239. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/list_base.html +0 -0
  240. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/registration/pending.html +0 -0
  241. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/scopes/scope_actions.html +0 -0
  242. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/scopes/scope_form.html +0 -0
  243. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/scopes/scope_manager.html +0 -0
  244. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sections/manage_sections.html +0 -0
  245. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sections/subsection_select.html +0 -0
  246. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sidebar/auto.html +0 -0
  247. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sidebar/extra_groups.html +0 -0
  248. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sidebar/main.html +0 -0
  249. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/sidebar/tree.html +0 -0
  250. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/tables/table.html +0 -0
  251. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/users/grouped_permissions.html +0 -0
  252. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/users/manage_users.html +0 -0
  253. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/users/profile.html +0 -0
  254. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/users/user_detail_modal.html +0 -0
  255. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/users/user_hub.html +0 -0
  256. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/microsys/widgets/profile_image_widget.html +0 -0
  257. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/registration/email/verify_registration.txt +0 -0
  258. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/registration/login.html +0 -0
  259. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/registration/register.html +0 -0
  260. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/registration/register_sent.html +0 -0
  261. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templates/registration/register_verify.html +0 -0
  262. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templatetags/__init__.py +0 -0
  263. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templatetags/microsys_tags.py +0 -0
  264. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templatetags/microsys_translation.py +0 -0
  265. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/templatetags/sidebar_tags.py +0 -0
  266. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/themes.py +0 -0
  267. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/translations.py +0 -0
  268. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/urls.py +0 -0
  269. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/utils.py +0 -0
  270. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/activitylog.py +0 -0
  271. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/general.py +0 -0
  272. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/profile.py +0 -0
  273. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/registration.py +0 -0
  274. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/scopes.py +0 -0
  275. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/sections.py +0 -0
  276. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/sidebar.py +0 -0
  277. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/views/twofa.py +0 -0
  278. {django_microsys-2.1.2 → django_microsys-2.1.4}/microsys/widgets.py +0 -0
File without changes
@@ -1,165 +1,165 @@
1
- Metadata-Version: 2.1
2
- Name: django_microsys
3
- Version: 2.1.2
4
- Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
5
- Author-email: DeBeski <debeski1@gmail.com>
6
- License: NON-COMMERCIAL
7
- Project-URL: Homepage, https://github.com/debeski/django-microsys
8
- Keywords: django,microsys,permissions,authentication
9
- Classifier: Framework :: Django
10
- Classifier: Framework :: Django :: 5
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
- Classifier: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
15
- Classifier: Programming Language :: Python :: 3.14
16
- Classifier: License :: Other/Proprietary License
17
- Classifier: Operating System :: OS Independent
18
- Requires-Python: >=3.11
19
- Description-Content-Type: text/markdown
20
- License-File: LICENSE
21
- Requires-Dist: Django>=5.1
22
- Requires-Dist: django-crispy-forms>=2.4
23
- Requires-Dist: django-tables2>=2.7
24
- Requires-Dist: django-filter>=24.3
25
- Requires-Dist: crispy-bootstrap5>=2025.6
26
- Requires-Dist: psutil>=7.0.0
27
- Requires-Dist: pyotp>=2.9
28
- Requires-Dist: qrcode>=8.2
29
- Requires-Dist: pillow>=11.0
30
- Requires-Dist: babel>=2.1
31
- Requires-Dist: cryptography>=42.0
32
- Provides-Extra: sso
33
- Requires-Dist: django-microsys-sso>=0.1.0; extra == "sso"
34
-
35
- # Django microSYS - System Integration Service
36
-
37
- [![PyPI version](https://badge.fury.io/py/django-microsys.svg)](https://pypi.org/project/django-microsys/)
38
-
39
- <p align="center">
40
- <img src="https://raw.githubusercontent.com/debeski/django-microsys/main/microsys/static/img/login_logo.webp" alt="microSys Logo" width="450"/>
41
- </p>
42
-
43
- microSYS is a multilingual Django app that gives a project-level system layer for user management, branding, translations, scopes, navigation, activity logging, guided onboarding, data export, and dynamic CRUD tooling. It is not just a themed admin shell: it is a fairly large internal-systems toolkit that bundles runtime configuration, user operations, auditability, UI infrastructure, and zero-boilerplate management patterns into one package. The package keeps the landing README short, You can view the long-form operating and integration guidance at [`docs/`](docs/README.md).
44
-
45
- ## What microSYS gives you
46
-
47
- - A first-launch setup wizard at `/sys/setup/` for identity, explicit language catalog management, translation-matrix overrides, access/security toggles, UI-first Microsys email delivery, themes, default table density, global home URL, and sidebar structure, including full sidebar disable, runtime sidebar-toolbar, and user-reordering controls.
48
- - A runtime system UI for users and superusers, including Options, user management, profiles, 2FA, activity logs, scopes, and system settings.
49
- - A disabled-by-default public registration playground for email-first local signup with mandatory email verification, Microsys email readiness checks, public-account provenance badges, throttles, and optional approval.
50
- - A database-backed `SystemSettings` singleton layered over `MICROSYS_CONFIG`, so projects can seed defaults in code and refine them in the UI later.
51
- - A framework-owned `django_tables2` platform that auto-adopts stock tables, ships built-in pagination and per-page controls, exposes a public `MicrosysTable` base class, and supports per-table `microsys_table`, `microsys_density`, `microsys_per_page`, and `microsys_actions` overrides.
52
- - A `ScopedModel` base with audit fields, soft-delete behavior, actor tracking, filtered managers, and automatic scope handling.
53
- - Zero-boilerplate sections and dynamic modal CRUD flows for auxiliary models, plus a reusable context-menu/event model for richer interactions.
54
- - A built-in audit trail with signal-based logging, merged User/Profile updates, diff capture, masked sensitive fields, and download/export log entries.
55
- - Universal data helpers such as `fetch_file`, `fetch_excel`, sticky-form autofill, tutorial overlays, and persistent UI preferences.
56
-
57
- ## Requirements
58
- `note: all the requirements will be installed automatically when you install django-microsys.`
59
-
60
- - Python 3.11+
61
- - Django 5.1+
62
- - `django-crispy-forms`
63
- - `crispy-bootstrap5`
64
- - `django-tables2`
65
- - `django-filter`
66
- - `pillow` "for image handling"
67
- - `babel` "for translations"
68
- - `psutil` "for system monitoring"
69
- - `pyotp` "for TOTP 2FA"
70
- - `qrcode` "for TOTP 2FA QR codes"
71
- - `cryptography` "for encrypted TOTP and SMTP secret storage"
72
-
73
- ## Installation
74
-
75
- ```bash
76
- pip install django-microsys
77
- # OR
78
- pip install git+https://github.com/debeski/django-microsys.git
79
- ```
80
-
81
- ## Scaffold a New Project or App
82
-
83
- ```bash
84
- python -m microsys startproject myproject
85
- cd myproject
86
- python -m microsys startapp billing --register
87
- ```
88
-
89
- `python -m microsys startproject` creates a new Django project already wired for MicroSys. `python -m microsys startapp` creates a MicroSys-native app skeleton with models, forms, filters, tables, translations, templates, tests, and optional project registration.
90
-
91
- Generated projects also include a baseline Docker stack with `compose.yml`, `compose.dev.yml`, a `config/celery.py` worker entrypoint, and a `/health/` endpoint via `django-health-check`.
92
- They also generate `.secrets/.env` with the bootstrap secrets used by the standard decrypter/startup flow.
93
- The scaffolded settings baseline now also includes `django-cors-headers` and `django-csp` with their apps, middleware, and starter CORS/CSP policy settings.
94
-
95
- ## Minimal Quick Start
96
-
97
- 1. Add the MicroSys helper at the end of your project `settings.py`.
98
-
99
- ```python
100
- from microsys.utils import microsys_settings
101
-
102
- microsys_settings(globals())
103
- ```
104
-
105
- That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.ActivityLogMiddleware` in the supported order, adds the Microsys context processor, sets the Crispy Bootstrap 5 defaults, adds a Bootstrap-friendly `MESSAGE_TAGS` error mapping, and seeds the standard MicroSys runtime defaults for language, timezone, i18n/tz flags, `FORMAT_MODULE_PATH`, and charset unless your project already defines them.
106
-
107
- __Proceed to [Getting Started](docs/getting-started.md) if you prefer to wire everything manually.__
108
-
109
- Public registration is documented separately at [Public Registration Playground](docs/registration.md). It is disabled by default and is not part of the optional SSO packages.
110
-
111
-
112
- 2. Mount `microsys.urls` at project root so the bundled auth and system routes stay at `/accounts/...` and `/sys/...`.
113
-
114
- ```python
115
- from django.urls import include, path
116
-
117
- urlpatterns = [
118
- path("", include("microsys.urls")),
119
- ]
120
- ```
121
-
122
- With that root include in place, microsys provides `/accounts/...` and `/sys/...`. If your project does not define its own `/` view, microsys falls back from an unresolved `/` request into its login/setup flow instead of leaving a 404. On a fresh and unconfigured install, Microsys also guards ordinary anonymous requests so a public root page cannot bypass first-time setup; once setup is complete, your existing root view continues to behave normally.
123
-
124
- 3. Run the setup command.
125
-
126
- ```bash
127
- python manage.py microsys_setup
128
- ```
129
-
130
- 4. Sign in as a superuser and complete the first-launch wizard at `/sys/setup/`. On a fresh install, an anonymous request may be sent through `/sys/setup/` and then to login before the wizard can be completed. After setup, the main runtime UI lives under `user_hub`.
131
-
132
- For a fuller setup path, prefix-mount guidance, and first-launch expectations, use the [Getting Started guide](docs/getting-started.md).
133
-
134
-
135
- ## Key Capabilities
136
-
137
- - Onboarding and runtime configuration:
138
- first-launch setup wizard, Options view, runtime System Settings modal, source-tabbed translation overrides, setup import/export, language/theme defaults, and a global Home destination.
139
- - User and security operations:
140
- interactive user wizard, grouped translated permissions, four-tier staff authorization (superuser, Global Staff, Central Staff, Scoped Staff), permission-based sidebar visibility, profile management, multiple 2FA flows, backup codes, and runtime preference persistence.
141
- - Generic CRUD infrastructure:
142
- dynamic sections, AJAX-driven modal CRUD, automatic form/table/filter discovery, context-menu actions, and reusable event dispatch.
143
- - Navigation and UI infrastructure:
144
- resolver-driven sidebar builder with permission-based visibility, runtime tree rendering, optional user-level reordering, configurable sidebar toolbar visibility, a shared theme registry, tutorial overlays, theme-aware system surfaces, and template injection hooks.
145
- - Data movement and productivity helpers:
146
- universal file download, Excel export, smart autofill, sticky-form cloning, and generic list/filter helpers.
147
- - Audit and governance:
148
- signal-based activity logging, diff capture, masked sensitive fields, deduplicated entries, download/export logging, and scoped visibility.
149
- - Optional SSO:
150
- `django-microsys-sso` and `django-microsys-sso-client` live as separate optional packages for OIDC provider/client deployments without changing core Microsys runtime behavior.
151
- - Framework-level automation:
152
- translation patches, scoped-model auto-injection, actor tracking, soft-delete, and config layering across defaults, project settings, and runtime UI.
153
-
154
- ## Documentation
155
-
156
- - [Documentation Hub](docs/README.md)
157
- - [Getting Started](docs/getting-started.md)
158
- - [Admin Guide](docs/admin-guide.md)
159
- - [Developer Guide](docs/developer-guide.md)
160
- - [Customization Guide](docs/customization-guide.md)
161
- - [Reference](docs/reference.md)
162
- - [MSRP-1 Security Standard](docs/security-msrp-1.md)
163
- - [Optional SSO Packages](docs/sso.md)
164
- - [Features](docs/FEATURES.md) — complete feature inventory
165
- - [Changelog](CHANGELOG.md)
1
+ Metadata-Version: 2.1
2
+ Name: django_microsys
3
+ Version: 2.1.4
4
+ Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
5
+ Author-email: DeBeski <debeski1@gmail.com>
6
+ License: NON-COMMERCIAL
7
+ Project-URL: Homepage, https://github.com/debeski/django-microsys
8
+ Keywords: django,microsys,permissions,authentication
9
+ Classifier: Framework :: Django
10
+ Classifier: Framework :: Django :: 5
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: License :: Other/Proprietary License
17
+ Classifier: Operating System :: OS Independent
18
+ Requires-Python: >=3.11
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: Django>=5.1
22
+ Requires-Dist: django-crispy-forms>=2.4
23
+ Requires-Dist: django-tables2>=2.7
24
+ Requires-Dist: django-filter>=24.3
25
+ Requires-Dist: crispy-bootstrap5>=2025.6
26
+ Requires-Dist: psutil>=7.0.0
27
+ Requires-Dist: pyotp>=2.9
28
+ Requires-Dist: qrcode>=8.2
29
+ Requires-Dist: pillow>=11.0
30
+ Requires-Dist: babel>=2.1
31
+ Requires-Dist: cryptography>=42.0
32
+ Provides-Extra: sso
33
+ Requires-Dist: django-microsys-sso>=0.1.0; extra == "sso"
34
+
35
+ # Django microSYS - System Integration Service
36
+
37
+ [![PyPI version](https://badge.fury.io/py/django-microsys.svg)](https://pypi.org/project/django-microsys/)
38
+
39
+ <p align="center">
40
+ <img src="https://raw.githubusercontent.com/debeski/django-microsys/main/microsys/static/img/login_logo.webp" alt="microSys Logo" width="450"/>
41
+ </p>
42
+
43
+ microSYS is a multilingual Django app that gives a project-level system layer for user management, branding, translations, scopes, navigation, activity logging, guided onboarding, data export, and dynamic CRUD tooling. It is not just a themed admin shell: it is a fairly large internal-systems toolkit that bundles runtime configuration, user operations, auditability, UI infrastructure, and zero-boilerplate management patterns into one package. The package keeps the landing README short, You can view the long-form operating and integration guidance at [`docs/`](docs/README.md).
44
+
45
+ ## What microSYS gives you
46
+
47
+ - A first-launch setup wizard at `/sys/setup/` for identity, explicit language catalog management, translation-matrix overrides, access/security toggles, UI-first Microsys email delivery, themes, default table density, global home URL, and sidebar structure, including full sidebar disable, runtime sidebar-toolbar, and user-reordering controls.
48
+ - A runtime system UI for users and superusers, including Options, user management, profiles, 2FA, activity logs, scopes, and system settings.
49
+ - A disabled-by-default public registration playground for email-first local signup with mandatory email verification, Microsys email readiness checks, public-account provenance badges, throttles, and optional approval.
50
+ - A database-backed `SystemSettings` singleton layered over `MICROSYS_CONFIG`, so projects can seed defaults in code and refine them in the UI later.
51
+ - A framework-owned `django_tables2` platform that auto-adopts stock tables, ships built-in pagination and per-page controls, exposes a public `MicrosysTable` base class, and supports per-table `microsys_table`, `microsys_density`, `microsys_per_page`, and `microsys_actions` overrides.
52
+ - A `ScopedModel` base with audit fields, soft-delete behavior, actor tracking, filtered managers, and automatic scope handling.
53
+ - Zero-boilerplate sections and dynamic modal CRUD flows for auxiliary models, plus a reusable context-menu/event model for richer interactions.
54
+ - A built-in audit trail with signal-based logging, merged User/Profile updates, diff capture, masked sensitive fields, and download/export log entries.
55
+ - Universal data helpers such as `fetch_file`, `fetch_excel`, sticky-form autofill, tutorial overlays, and persistent UI preferences.
56
+
57
+ ## Requirements
58
+ `note: all the requirements will be installed automatically when you install django-microsys.`
59
+
60
+ - Python 3.11+
61
+ - Django 5.1+
62
+ - `django-crispy-forms`
63
+ - `crispy-bootstrap5`
64
+ - `django-tables2`
65
+ - `django-filter`
66
+ - `pillow` "for image handling"
67
+ - `babel` "for translations"
68
+ - `psutil` "for system monitoring"
69
+ - `pyotp` "for TOTP 2FA"
70
+ - `qrcode` "for TOTP 2FA QR codes"
71
+ - `cryptography` "for encrypted TOTP and SMTP secret storage"
72
+
73
+ ## Installation
74
+
75
+ ```bash
76
+ pip install django-microsys
77
+ # OR
78
+ pip install git+https://github.com/debeski/django-microsys.git
79
+ ```
80
+
81
+ ## Scaffold a New Project or App
82
+
83
+ ```bash
84
+ python -m microsys startproject myproject
85
+ cd myproject
86
+ python -m microsys startapp billing --register
87
+ ```
88
+
89
+ `python -m microsys startproject` creates a new Django project already wired for MicroSys. `python -m microsys startapp` creates a MicroSys-native app skeleton with models, forms, filters, tables, translations, templates, tests, and optional project registration.
90
+
91
+ Generated projects also include a baseline Docker stack with `compose.yml`, `compose.dev.yml`, a `config/celery.py` worker entrypoint, and a `/health/` endpoint via `django-health-check`.
92
+ They also generate `.secrets/.env` with the bootstrap secrets used by the standard decrypter/startup flow.
93
+ The scaffolded settings baseline now also includes `django-cors-headers` and `django-csp` with their apps, middleware, and starter CORS/CSP policy settings.
94
+
95
+ ## Minimal Quick Start
96
+
97
+ 1. Add the MicroSys helper at the end of your project `settings.py`.
98
+
99
+ ```python
100
+ from microsys.utils import microsys_settings
101
+
102
+ microsys_settings(globals())
103
+ ```
104
+
105
+ That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.ActivityLogMiddleware` in the supported order, adds the Microsys context processor, sets the Crispy Bootstrap 5 defaults, adds a Bootstrap-friendly `MESSAGE_TAGS` error mapping, and seeds the standard MicroSys runtime defaults for language, timezone, i18n/tz flags, `FORMAT_MODULE_PATH`, and charset unless your project already defines them.
106
+
107
+ __Proceed to [Getting Started](docs/getting-started.md) if you prefer to wire everything manually.__
108
+
109
+ Public registration is documented separately at [Public Registration Playground](docs/registration.md). It is disabled by default and is not part of the optional SSO packages.
110
+
111
+
112
+ 2. Mount `microsys.urls` at project root so the bundled auth and system routes stay at `/accounts/...` and `/sys/...`.
113
+
114
+ ```python
115
+ from django.urls import include, path
116
+
117
+ urlpatterns = [
118
+ path("", include("microsys.urls")),
119
+ ]
120
+ ```
121
+
122
+ With that root include in place, microsys provides `/accounts/...` and `/sys/...`. If your project does not define its own `/` view, microsys falls back from an unresolved `/` request into its login/setup flow instead of leaving a 404. On a fresh and unconfigured install, Microsys also guards ordinary anonymous requests so a public root page cannot bypass first-time setup; once setup is complete, your existing root view continues to behave normally.
123
+
124
+ 3. Run the setup command.
125
+
126
+ ```bash
127
+ python manage.py microsys_setup
128
+ ```
129
+
130
+ 4. Sign in as a superuser and complete the first-launch wizard at `/sys/setup/`. On a fresh install, an anonymous request may be sent through `/sys/setup/` and then to login before the wizard can be completed. After setup, the main runtime UI lives under `user_hub`.
131
+
132
+ For a fuller setup path, prefix-mount guidance, and first-launch expectations, use the [Getting Started guide](docs/getting-started.md).
133
+
134
+
135
+ ## Key Capabilities
136
+
137
+ - Onboarding and runtime configuration:
138
+ first-launch setup wizard, Options view, runtime System Settings modal, source-tabbed translation overrides, setup import/export, language/theme defaults, and a global Home destination.
139
+ - User and security operations:
140
+ interactive user wizard, grouped translated permissions, four-tier staff authorization (superuser, Global Staff, Central Staff, Scoped Staff), permission-based sidebar visibility, profile management, multiple 2FA flows, backup codes, and runtime preference persistence.
141
+ - Generic CRUD infrastructure:
142
+ dynamic sections, AJAX-driven modal CRUD, automatic form/table/filter discovery, context-menu actions, and reusable event dispatch.
143
+ - Navigation and UI infrastructure:
144
+ resolver-driven sidebar builder with permission-based visibility, runtime tree rendering, optional user-level reordering, configurable sidebar toolbar visibility, a shared theme registry, tutorial overlays, theme-aware system surfaces, and template injection hooks.
145
+ - Data movement and productivity helpers:
146
+ universal file download, Excel export, smart autofill, sticky-form cloning, and generic list/filter helpers.
147
+ - Audit and governance:
148
+ signal-based activity logging, diff capture, masked sensitive fields, deduplicated entries, download/export logging, and scoped visibility.
149
+ - Optional SSO:
150
+ `django-microsys-sso` and `django-microsys-sso-client` live as separate optional packages for OIDC provider/client deployments without changing core Microsys runtime behavior.
151
+ - Framework-level automation:
152
+ translation patches, scoped-model auto-injection, actor tracking, soft-delete, and config layering across defaults, project settings, and runtime UI.
153
+
154
+ ## Documentation
155
+
156
+ - [Documentation Hub](docs/README.md)
157
+ - [Getting Started](docs/getting-started.md)
158
+ - [Admin Guide](docs/admin-guide.md)
159
+ - [Developer Guide](docs/developer-guide.md)
160
+ - [Customization Guide](docs/customization-guide.md)
161
+ - [Reference](docs/reference.md)
162
+ - [MSRP-1 Security Standard](docs/security-msrp-1.md)
163
+ - [Optional SSO Packages](docs/sso.md)
164
+ - [Features](docs/FEATURES.md) — complete feature inventory
165
+ - [Changelog](CHANGELOG.md)