django-whiteneuron 0.2.48__tar.gz → 0.2.48.2__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 (182) hide show
  1. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/PKG-INFO +13 -3
  2. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/README.md +10 -1
  3. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/django_whiteneuron.egg-info/PKG-INFO +13 -3
  4. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/django_whiteneuron.egg-info/requires.txt +2 -1
  5. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/pyproject.toml +3 -2
  6. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/modeladmin.py +18 -12
  7. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/LICENSE +0 -0
  8. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/django_whiteneuron.egg-info/SOURCES.txt +0 -0
  9. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/django_whiteneuron.egg-info/dependency_links.txt +0 -0
  10. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/django_whiteneuron.egg-info/top_level.txt +0 -0
  11. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/setup.cfg +0 -0
  12. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/__init__.py +0 -0
  13. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/__init__.py +0 -0
  14. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/admin.py +0 -0
  15. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/apps.py +0 -0
  16. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/asgi.py +0 -0
  17. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/ckeditor.py +0 -0
  18. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/filters.py +0 -0
  19. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/forms.py +0 -0
  20. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/management/__init__.py +0 -0
  21. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/management/commands/__init__.py +0 -0
  22. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/management/commands/init_admin.py +0 -0
  23. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/management/commands/init_groupuser.py +0 -0
  24. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/management/commands/init_guest.py +0 -0
  25. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/middleware.py +0 -0
  26. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0001_initial.py +0 -0
  27. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0002_imagemodel_userprofile_user_avatar_user_biography_and_more.py +0 -0
  28. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0003_notification_obj_link.py +0 -0
  29. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0004_delete_notification.py +0 -0
  30. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0005_user_show_softdelete.py +0 -0
  31. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0006_user_is_bot.py +0 -0
  32. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0007_app.py +0 -0
  33. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0008_app_created_at_app_created_by_app_deleted_at_and_more.py +0 -0
  34. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0009_alter_app_table.py +0 -0
  35. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0010_app_category.py +0 -0
  36. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0011_alter_app_options.py +0 -0
  37. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0012_app_permission.py +0 -0
  38. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0013_app_thumbnail_url.py +0 -0
  39. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0014_alter_app_created_at_alter_app_updated_at_and_more.py +0 -0
  40. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0015_ipblacklist.py +0 -0
  41. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0016_uablacklist.py +0 -0
  42. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/0017_alter_uablacklist_pattern.py +0 -0
  43. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/migrations/__init__.py +0 -0
  44. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/models.py +0 -0
  45. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/resources.py +0 -0
  46. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/settings.py +0 -0
  47. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/sites.py +0 -0
  48. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/tasks.py +0 -0
  49. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/templatetags/__init__.py +0 -0
  50. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/templatetags/unfold_list_custom.py +0 -0
  51. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/templatetags/wn_filters.py +0 -0
  52. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/tests.py +0 -0
  53. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/thread_local.py +0 -0
  54. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/urls.py +0 -0
  55. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/utils.py +0 -0
  56. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/views.py +0 -0
  57. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/base/widgets.py +0 -0
  58. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/__init__.py +0 -0
  59. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/__init__.py +0 -0
  60. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/admin.py +0 -0
  61. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/constants.py +0 -0
  62. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/mixins.py +0 -0
  63. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/tasks.py +0 -0
  64. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_import_export/utils.py +0 -0
  65. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_modeltranslation/__init__.py +0 -0
  66. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_modeltranslation/admin.py +0 -0
  67. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/contrib/wn_modeltranslation/utils.py +0 -0
  68. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/__init__.py +0 -0
  69. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/admin.py +0 -0
  70. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/apps.py +0 -0
  71. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/migrations/__init__.py +0 -0
  72. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/models.py +0 -0
  73. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/tests.py +0 -0
  74. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/dashboard/views.py +0 -0
  75. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/__init__.py +0 -0
  76. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/admin.py +0 -0
  77. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/apps.py +0 -0
  78. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0001_initial.py +0 -0
  79. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0002_feedbackdata_created_by_feedbackdata_deleted_at_and_more.py +0 -0
  80. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0003_feedbackdata_note.py +0 -0
  81. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0004_alter_feedbackdata_object_id.py +0 -0
  82. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0005_feedbackdata_field.py +0 -0
  83. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/0006_alter_feedbackdata_created_at_and_more.py +0 -0
  84. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/migrations/__init__.py +0 -0
  85. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/models.py +0 -0
  86. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/tests.py +0 -0
  87. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/urls.py +0 -0
  88. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/utils.py +0 -0
  89. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/feedbacks/views.py +0 -0
  90. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/__init__.py +0 -0
  91. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/admin.py +0 -0
  92. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/apps.py +0 -0
  93. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/migrations/0001_initial.py +0 -0
  94. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/migrations/0002_alter_excelfile_options_alter_pdffile_options_and_more.py +0 -0
  95. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/migrations/0003_alter_excelfile_created_at_and_more.py +0 -0
  96. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/migrations/__init__.py +0 -0
  97. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/models.py +0 -0
  98. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/tests.py +0 -0
  99. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/utils.py +0 -0
  100. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/file_management/views.py +0 -0
  101. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/locale/vi/LC_MESSAGES/django.mo +0 -0
  102. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/locale/vi/LC_MESSAGES/django.po +0 -0
  103. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/manage.py +0 -0
  104. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/__init__.py +0 -0
  105. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/admin.py +0 -0
  106. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/apps.py +0 -0
  107. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/consumers.py +0 -0
  108. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/management/__init__.py +0 -0
  109. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/management/commands/__init__.py +0 -0
  110. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/management/commands/call_demo_noti.py +0 -0
  111. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0001_initial.py +0 -0
  112. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0002_alter_notificationconfig_event_type.py +0 -0
  113. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0003_notification.py +0 -0
  114. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0004_alter_notification_flag.py +0 -0
  115. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0005_notification_keywords.py +0 -0
  116. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0006_remove_notification_keywords.py +0 -0
  117. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0007_notification_changed_data.py +0 -0
  118. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0008_alter_notification_changed_data.py +0 -0
  119. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0009_notification_action_by_alter_notification_user.py +0 -0
  120. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0010_alter_notification_user.py +0 -0
  121. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0011_alter_notification_user.py +0 -0
  122. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/0012_alter_notification_action_and_more.py +0 -0
  123. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/migrations/__init__.py +0 -0
  124. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/models.py +0 -0
  125. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/routing.py +0 -0
  126. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/tests.py +0 -0
  127. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/utils.py +0 -0
  128. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/notification/views.py +0 -0
  129. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/css/btn-styles.css +0 -0
  130. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/css/ckeditor5.css +0 -0
  131. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/css/loading.css +0 -0
  132. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/css/styles.css +0 -0
  133. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/forms/css/html-editor.css +0 -0
  134. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/forms/js/format.html.js +0 -0
  135. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/forms/js/trix.config.js +0 -0
  136. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/delete.svg +0 -0
  137. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/edit.svg +0 -0
  138. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/icon-viewlink.svg +0 -0
  139. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/loading.gif +0 -0
  140. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/login-bg.jpg +0 -0
  141. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/login_bg.jpg +0 -0
  142. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/images/logo/WhiteNeuron.png +0 -0
  143. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/js/chart.min.js +0 -0
  144. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/js/d3.v7.min.js +0 -0
  145. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/js/loading.js +0 -0
  146. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/static/base/js/whiteneuron.js +0 -0
  147. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/__init__.py +0 -0
  148. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/admin.py +0 -0
  149. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/apps.py +0 -0
  150. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/migrations/__init__.py +0 -0
  151. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/models.py +0 -0
  152. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/tests.py +0 -0
  153. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/synchronization/views.py +0 -0
  154. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/400.html +0 -0
  155. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/403.html +0 -0
  156. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/404.html +0 -0
  157. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/429.html +0 -0
  158. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/500.html +0 -0
  159. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/auth/user/add_form.html +0 -0
  160. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/base/app_change_list.html +0 -0
  161. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/base/image_change_form.html +0 -0
  162. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/base/userprofile_change_form.html +0 -0
  163. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/base.html +0 -0
  164. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/change_list.html +0 -0
  165. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/feedbacks/feedback_change_form.html +0 -0
  166. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/grid_view_results.html +0 -0
  167. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/header.html +0 -0
  168. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/index.html +0 -0
  169. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/login.html +0 -0
  170. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/login_after.html +0 -0
  171. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/search_form.html +0 -0
  172. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/submit_line.html +0 -0
  173. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/wn_change_form.html +0 -0
  174. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/admin/wn_history_panel.html +0 -0
  175. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/base/forms/helpers/toolbar.html +0 -0
  176. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/base/forms/wysiwyg.html +0 -0
  177. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/base.html +0 -0
  178. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/unfold/helpers/account_links.html +0 -0
  179. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/unfold/helpers/app_list_badge.html +0 -0
  180. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/unfold/helpers/field_password.html +0 -0
  181. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/unfold/helpers/navigation_user.html +0 -0
  182. {django_whiteneuron-0.2.48 → django_whiteneuron-0.2.48.2}/whiteneuron/templates/unfold/helpers/pagination.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-whiteneuron
3
- Version: 0.2.48
3
+ Version: 0.2.48.2
4
4
  Summary: A modern Django Admin extension with enhanced UI/UX, dashboard, feedback, file management, rate limiting, IP blacklisting, and advanced admin integrations built on django-unfold.
5
5
  Author-email: White Neuron <anhnt@whiteneuron.ai>
6
6
  License: MIT License
@@ -44,7 +44,7 @@ Requires-Python: >=3.11
44
44
  Description-Content-Type: text/markdown
45
45
  License-File: LICENSE
46
46
  Requires-Dist: django-debug-toolbar>=5.0.1
47
- Requires-Dist: django>=5.2.12
47
+ Requires-Dist: django>=5.2.13
48
48
  Requires-Dist: django-celery-beat>=2.7.0
49
49
  Requires-Dist: django-guardian>=2.4.0
50
50
  Requires-Dist: django-imagekit>=5.0.0
@@ -75,6 +75,7 @@ Requires-Dist: django-cors-headers>=4.3.0
75
75
  Requires-Dist: django-unfold>=0.85.0
76
76
  Requires-Dist: djangoql>=0.18.1
77
77
  Requires-Dist: cryptography>=46.0.5
78
+ Requires-Dist: pyopenssl==26.0.0
78
79
  Provides-Extra: dev
79
80
  Requires-Dist: pytest; extra == "dev"
80
81
  Requires-Dist: black; extra == "dev"
@@ -106,7 +107,16 @@ A modern Django Admin extension focused on UI/UX, dashboard, feedback, file mana
106
107
 
107
108
  ## Changelog
108
109
 
109
- ### v0.2.48 (2026-04-06) — latest
110
+ ### v0.2.48.2 (2026-04-10) — latest
111
+ **Security: Nâng cấp django 5.2.13 và thêm pyOpenSSL 26.0.0**
112
+ - **Security**: `django` lower bound nâng từ `>=5.2.12` lên `>=5.2.13` — bản vá bảo mật mới nhất của Django.
113
+ - **Security**: `pyopenssl==26.0.0` thêm vào explicit dependencies — đảm bảo phiên bản mới nhất của pyOpenSSL được sử dụng, vá các lỗ hổng tiềm ẩn trong TLS/SSL handling.
114
+
115
+ ### v0.2.48.1 (2026-04-06)
116
+ **Fix: Duplicate history entries in change history panel**
117
+ - **Fixed**: History panel showed duplicate entries when multiple superusers exist — each save event creates one `Notification` per superuser. Fix: query is now filtered by `request.user` (if superuser) or the first superuser, guaranteeing exactly one row per event with no dedup overhead.
118
+
119
+ ### v0.2.48 (2026-04-06)
110
120
  **Feature: Change history panel — modal UI, M2M diff, permission gate**
111
121
  - **Added**: Change history panel shown on every change-form — floating "History" button (bottom-right, `fixed position`) opens a scrollable modal listing the 50 most recent `Notification` records for the object.
112
122
  - **Added**: Each history entry displays: action badge (Create/Update/Delete/Restore), actor avatar + username, timestamp, and an **old → new diff** for every changed field using `changed_data` from the `Notification` model.
@@ -22,7 +22,16 @@ A modern Django Admin extension focused on UI/UX, dashboard, feedback, file mana
22
22
 
23
23
  ## Changelog
24
24
 
25
- ### v0.2.48 (2026-04-06) — latest
25
+ ### v0.2.48.2 (2026-04-10) — latest
26
+ **Security: Nâng cấp django 5.2.13 và thêm pyOpenSSL 26.0.0**
27
+ - **Security**: `django` lower bound nâng từ `>=5.2.12` lên `>=5.2.13` — bản vá bảo mật mới nhất của Django.
28
+ - **Security**: `pyopenssl==26.0.0` thêm vào explicit dependencies — đảm bảo phiên bản mới nhất của pyOpenSSL được sử dụng, vá các lỗ hổng tiềm ẩn trong TLS/SSL handling.
29
+
30
+ ### v0.2.48.1 (2026-04-06)
31
+ **Fix: Duplicate history entries in change history panel**
32
+ - **Fixed**: History panel showed duplicate entries when multiple superusers exist — each save event creates one `Notification` per superuser. Fix: query is now filtered by `request.user` (if superuser) or the first superuser, guaranteeing exactly one row per event with no dedup overhead.
33
+
34
+ ### v0.2.48 (2026-04-06)
26
35
  **Feature: Change history panel — modal UI, M2M diff, permission gate**
27
36
  - **Added**: Change history panel shown on every change-form — floating "History" button (bottom-right, `fixed position`) opens a scrollable modal listing the 50 most recent `Notification` records for the object.
28
37
  - **Added**: Each history entry displays: action badge (Create/Update/Delete/Restore), actor avatar + username, timestamp, and an **old → new diff** for every changed field using `changed_data` from the `Notification` model.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-whiteneuron
3
- Version: 0.2.48
3
+ Version: 0.2.48.2
4
4
  Summary: A modern Django Admin extension with enhanced UI/UX, dashboard, feedback, file management, rate limiting, IP blacklisting, and advanced admin integrations built on django-unfold.
5
5
  Author-email: White Neuron <anhnt@whiteneuron.ai>
6
6
  License: MIT License
@@ -44,7 +44,7 @@ Requires-Python: >=3.11
44
44
  Description-Content-Type: text/markdown
45
45
  License-File: LICENSE
46
46
  Requires-Dist: django-debug-toolbar>=5.0.1
47
- Requires-Dist: django>=5.2.12
47
+ Requires-Dist: django>=5.2.13
48
48
  Requires-Dist: django-celery-beat>=2.7.0
49
49
  Requires-Dist: django-guardian>=2.4.0
50
50
  Requires-Dist: django-imagekit>=5.0.0
@@ -75,6 +75,7 @@ Requires-Dist: django-cors-headers>=4.3.0
75
75
  Requires-Dist: django-unfold>=0.85.0
76
76
  Requires-Dist: djangoql>=0.18.1
77
77
  Requires-Dist: cryptography>=46.0.5
78
+ Requires-Dist: pyopenssl==26.0.0
78
79
  Provides-Extra: dev
79
80
  Requires-Dist: pytest; extra == "dev"
80
81
  Requires-Dist: black; extra == "dev"
@@ -106,7 +107,16 @@ A modern Django Admin extension focused on UI/UX, dashboard, feedback, file mana
106
107
 
107
108
  ## Changelog
108
109
 
109
- ### v0.2.48 (2026-04-06) — latest
110
+ ### v0.2.48.2 (2026-04-10) — latest
111
+ **Security: Nâng cấp django 5.2.13 và thêm pyOpenSSL 26.0.0**
112
+ - **Security**: `django` lower bound nâng từ `>=5.2.12` lên `>=5.2.13` — bản vá bảo mật mới nhất của Django.
113
+ - **Security**: `pyopenssl==26.0.0` thêm vào explicit dependencies — đảm bảo phiên bản mới nhất của pyOpenSSL được sử dụng, vá các lỗ hổng tiềm ẩn trong TLS/SSL handling.
114
+
115
+ ### v0.2.48.1 (2026-04-06)
116
+ **Fix: Duplicate history entries in change history panel**
117
+ - **Fixed**: History panel showed duplicate entries when multiple superusers exist — each save event creates one `Notification` per superuser. Fix: query is now filtered by `request.user` (if superuser) or the first superuser, guaranteeing exactly one row per event with no dedup overhead.
118
+
119
+ ### v0.2.48 (2026-04-06)
110
120
  **Feature: Change history panel — modal UI, M2M diff, permission gate**
111
121
  - **Added**: Change history panel shown on every change-form — floating "History" button (bottom-right, `fixed position`) opens a scrollable modal listing the 50 most recent `Notification` records for the object.
112
122
  - **Added**: Each history entry displays: action badge (Create/Update/Delete/Restore), actor avatar + username, timestamp, and an **old → new diff** for every changed field using `changed_data` from the `Notification` model.
@@ -1,5 +1,5 @@
1
1
  django-debug-toolbar>=5.0.1
2
- django>=5.2.12
2
+ django>=5.2.13
3
3
  django-celery-beat>=2.7.0
4
4
  django-guardian>=2.4.0
5
5
  django-imagekit>=5.0.0
@@ -30,6 +30,7 @@ django-cors-headers>=4.3.0
30
30
  django-unfold>=0.85.0
31
31
  djangoql>=0.18.1
32
32
  cryptography>=46.0.5
33
+ pyopenssl==26.0.0
33
34
 
34
35
  [dev]
35
36
  pytest
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "django-whiteneuron"
3
- version = "0.2.48"
3
+ version = "0.2.48.2"
4
4
  description = "A modern Django Admin extension with enhanced UI/UX, dashboard, feedback, file management, rate limiting, IP blacklisting, and advanced admin integrations built on django-unfold."
5
5
  authors = [
6
6
  {name = "White Neuron", email = "anhnt@whiteneuron.ai"}
@@ -10,7 +10,7 @@ readme = "README.md"
10
10
  keywords = ["django", "plugin", "admin", "dashboard", "whiteneuron"]
11
11
  dependencies = [
12
12
  "django-debug-toolbar>=5.0.1",
13
- "django>=5.2.12",
13
+ "django>=5.2.13",
14
14
  "django-celery-beat>=2.7.0",
15
15
  "django-guardian>=2.4.0",
16
16
  "django-imagekit>=5.0.0",
@@ -41,6 +41,7 @@ dependencies = [
41
41
  "django-unfold>=0.85.0",
42
42
  "djangoql>=0.18.1",
43
43
  "cryptography>=46.0.5",
44
+ "pyopenssl==26.0.0",
44
45
  ]
45
46
  requires-python = ">=3.11"
46
47
 
@@ -473,18 +473,24 @@ class ModelAdmin(UnfoldAdmin):
473
473
  'admin:%s_%s_change' % (self.model._meta.app_label, self.model._meta.model_name),
474
474
  args=[object_id],
475
475
  )
476
- notifications = (
477
- Notification.objects
478
- .filter(obj_link=obj_link)
479
- .select_related('action_by')
480
- .order_by('-created_at')[:50]
481
- )
482
- # Parse changed_data string → list of dicts for each notification
483
- for notif in notifications:
484
- try:
485
- notif.parsed_changed_data = ast.literal_eval(notif.changed_data) if notif.changed_data else []
486
- except Exception:
487
- notif.parsed_changed_data = []
476
+ # Query notifications for one superuser — each event is recorded once per superuser,
477
+ # so filtering by one superuser gives exactly one entry per event.
478
+ # Prefer request.user if superuser to avoid extra DB query.
479
+ ref_user = request.user if request.user.is_superuser else User.objects.filter(is_superuser=True).first()
480
+ notifications = []
481
+ if ref_user:
482
+ qs = (
483
+ Notification.objects
484
+ .filter(obj_link=obj_link, user=ref_user)
485
+ .select_related('action_by')
486
+ .order_by('-created_at')[:50]
487
+ )
488
+ for notif in qs:
489
+ try:
490
+ notif.parsed_changed_data = ast.literal_eval(notif.changed_data) if notif.changed_data else []
491
+ except Exception:
492
+ notif.parsed_changed_data = []
493
+ notifications.append(notif)
488
494
  extra_context['history_notifications'] = notifications
489
495
  except Exception:
490
496
  extra_context['history_notifications'] = []