fnschool 20251027.82134.859__tar.gz → 20251101.82236.812__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.

Potentially problematic release.


This version of fnschool might be problematic. Click here for more details.

Files changed (155) hide show
  1. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/PKG-INFO +1 -1
  2. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/__init__.py +1 -1
  3. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/list.html +5 -2
  4. fnschool-20251101.82236.812/src/fnschoo1/fnhome/admin.py +3 -0
  5. fnschool-20251101.82236.812/src/fnschoo1/fnhome/apps.py +6 -0
  6. fnschool-20251101.82236.812/src/fnschoo1/fnhome/models.py +3 -0
  7. fnschool-20251101.82236.812/src/fnschoo1/fnhome/templates/fnhome/home.html +7 -0
  8. fnschool-20251101.82236.812/src/fnschoo1/fnhome/urls.py +13 -0
  9. fnschool-20251101.82236.812/src/fnschoo1/fnhome/views.py +50 -0
  10. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/views.py +6 -4
  11. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/settings.py +1 -1
  12. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/urls.py +2 -1
  13. fnschool-20251101.82236.812/src/fnschoo1/fnschool/views.py +9 -0
  14. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/manage.py +10 -0
  15. fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile.py +67 -0
  16. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/apps.py +2 -4
  17. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0007_alter_profile_created_at.py +1 -1
  18. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/models.py +0 -16
  19. fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/tests.py +3 -0
  20. fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/settings.py +181 -0
  21. fnschool-20251101.82236.812/src/fnschoo1/patches/__init__.py +4 -0
  22. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/fnschool.js +11 -2
  23. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/includes/_header.html +5 -3
  24. fnschool-20251101.82236.812/src/fnschoo1/templates/includes/_navigation.html +0 -0
  25. fnschool-20251101.82236.812/src/fnschoo1/templates/registration/logged_out.html +0 -0
  26. fnschool-20251101.82236.812/src/fnschoo1/templates/registration/login.html +0 -0
  27. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/PKG-INFO +1 -1
  28. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/SOURCES.txt +35 -23
  29. fnschool-20251101.82236.812/src/fnschool.egg-info/dependency_links.txt.py +1 -0
  30. fnschool-20251027.82134.859/src/fnschoo1/fnschool/views.py +0 -9
  31. fnschool-20251027.82134.859/src/fnschoo1/profiles/__init__.py +0 -7
  32. fnschool-20251027.82134.859/src/fnschoo1/profiles/migrations/0008_alter_profile_groups_alter_profile_user_permissions.py +0 -38
  33. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/LICENSE +0 -0
  34. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/README.md +0 -0
  35. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/pyproject.toml +0 -0
  36. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/setup.cfg +0 -0
  37. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/__init__.py +0 -0
  38. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/admin.py +0 -0
  39. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/apps.py +0 -0
  40. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/forms.py +0 -0
  41. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0001_initial.py +0 -0
  42. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0002_ingredient_is_disabled.py +0 -0
  43. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0003_consumption_is_disabled_alter_ingredient_is_disabled.py +0 -0
  44. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0004_alter_ingredient_name_category_and_more.py +0 -0
  45. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0005_alter_category_created_at_alter_category_name_and_more.py +0 -0
  46. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0006_category_is_disabled_alter_category_user_and_more.py +0 -0
  47. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0007_alter_consumption_amount_used_and_more.py +0 -0
  48. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0008_category_abbreviation_mealtype.py +0 -0
  49. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0009_alter_category_abbreviation_and_more.py +0 -0
  50. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0010_alter_consumption_options_alter_ingredient_options_and_more.py +0 -0
  51. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0011_category_pin_to_consumptions_top.py +0 -0
  52. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0012_alter_ingredient_storage_date.py +0 -0
  53. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0013_alter_consumption_options_alter_ingredient_options_and_more.py +0 -0
  54. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0014_category_priority.py +0 -0
  55. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0015_alter_category_options_alter_category_priority.py +0 -0
  56. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0016_consumption_unique_ingredient_date_of_using.py +0 -0
  57. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0017_ingredient_updated_at_alter_category_created_at_and_more.py +0 -0
  58. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0018_alter_ingredient_updated_at.py +0 -0
  59. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0019_category_updated_at_ingredient_created_at_and_more.py +0 -0
  60. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/0020_alter_ingredient_created_at.py +0 -0
  61. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/migrations/__init__.py +0 -0
  62. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/models.py +0 -0
  63. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/category/create.html +0 -0
  64. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/category/delete.html +0 -0
  65. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/category/list.html +0 -0
  66. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/category/update.html +0 -0
  67. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/close.html +0 -0
  68. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/consumption/_create.html +0 -0
  69. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/consumption/create.html +0 -0
  70. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/close.html +0 -0
  71. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/create.html +0 -0
  72. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/create_one.html +0 -0
  73. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/delete.html +0 -0
  74. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/ingredient/update.html +0 -0
  75. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/meal_type/create.html +0 -0
  76. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/meal_type/delete.html +0 -0
  77. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/meal_type/list.html +0 -0
  78. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/templates/canteen/meal_type/update.html +0 -0
  79. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/tests.py +0 -0
  80. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/urls.py +0 -0
  81. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/views.py +0 -0
  82. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/workbook/__init__.py +0 -0
  83. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/canteen/workbook/generate.py +0 -0
  84. {fnschool-20251027.82134.859/src/fnschoo1/fnprofile → fnschool-20251101.82236.812/src/fnschoo1/fnhome}/__init__.py +0 -0
  85. {fnschool-20251027.82134.859/src/fnschoo1/fnprofile → fnschool-20251101.82236.812/src/fnschoo1/fnhome}/migrations/__init__.py +0 -0
  86. {fnschool-20251027.82134.859/src/fnschoo1/fnprofile → fnschool-20251101.82236.812/src/fnschoo1/fnhome}/tests.py +0 -0
  87. {fnschool-20251027.82134.859/src/fnschoo1/profiles/migrations → fnschool-20251101.82236.812/src/fnschoo1/fnprofile}/__init__.py +0 -0
  88. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/admin.py +0 -0
  89. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/apps.py +0 -0
  90. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/forms.py +0 -0
  91. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/migrations/0001_initial.py +0 -0
  92. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/migrations/0002_auto_20251026_2235.py +0 -0
  93. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/migrations/0003_alter_fnuser_options_alter_fnuser_groups_and_more.py +0 -0
  94. /fnschool-20251027.82134.859/src/fnschoo1/templates/base/_content.html → /fnschool-20251101.82236.812/src/fnschoo1/fnprofile/migrations/__init__.py +0 -0
  95. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/models.py +0 -0
  96. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/signals.py +0 -0
  97. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/templates/fnprofile/create.html +0 -0
  98. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/templates/fnprofile/detail.html +0 -0
  99. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/templates/fnprofile/edit.html +0 -0
  100. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/templates/fnprofile/log_in.html +0 -0
  101. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/templates/fnprofile/log_out.html +0 -0
  102. {fnschool-20251027.82134.859/src/fnschoo1/profiles → fnschool-20251101.82236.812/src/fnschoo1/fnprofile}/tests.py +0 -0
  103. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnprofile/urls.py +0 -0
  104. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/__init__.py +0 -0
  105. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/_settings.py +0 -0
  106. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/asgi.py +0 -0
  107. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/templatetags/__init__.py +0 -0
  108. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/templatetags/fnschool_tags.py +0 -0
  109. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/fnschool/wsgi.py +0 -0
  110. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/locale/en/LC_MESSAGES/django.mo +0 -0
  111. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  112. /fnschool-20251027.82134.859/src/fnschool.egg-info/dependency_links.txt → /fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/__init__.py +0 -0
  113. /fnschool-20251027.82134.859/src/fnschoo1/templates/includes/_navigation.html → /fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/__init__.py +0 -0
  114. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/admin.py +0 -0
  115. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/forms.py +0 -0
  116. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0001_initial.py +0 -0
  117. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0002_alter_profile_bio.py +0 -0
  118. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py +0 -0
  119. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0004_profile_gender.py +0 -0
  120. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0005_alter_profile_gender.py +0 -0
  121. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/migrations/0006_profile_created_at_profile_updated_at.py +0 -0
  122. /fnschool-20251027.82134.859/src/fnschoo1/templates/registration/logged_out.html → /fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/__init__.py +0 -0
  123. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/signals.py +0 -0
  124. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/templates/profiles/create.html +0 -0
  125. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/templates/profiles/detail.html +0 -0
  126. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/templates/profiles/edit.html +0 -0
  127. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/templates/profiles/log_in.html +0 -0
  128. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/templates/profiles/log_out.html +0 -0
  129. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/urls.py +0 -0
  130. {fnschool-20251027.82134.859/src/fnschoo1 → fnschool-20251101.82236.812/src/fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data}/profiles/views.py +0 -0
  131. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/css/bootstrap.min.css +0 -0
  132. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/css/fnschool.css +0 -0
  133. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/images/favicon.ico +0 -0
  134. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/bootstrap.bundle.min.js +0 -0
  135. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/bootstrap.min.js +0 -0
  136. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/jquery.min.js +0 -0
  137. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/jquery.slim.min.js +0 -0
  138. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/static/js/popper.min.js +0 -0
  139. /fnschool-20251027.82134.859/src/fnschoo1/templates/registration/login.html → /fnschool-20251101.82236.812/src/fnschoo1/templates/base/_content.html +0 -0
  140. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/base/_css.html +0 -0
  141. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/base/_js.html +0 -0
  142. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/base/content.html +0 -0
  143. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/base/document.html +0 -0
  144. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/close.html +0 -0
  145. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/home.html +0 -0
  146. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/includes/_footer.html +0 -0
  147. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschoo1/templates/includes/_paginator.html +0 -0
  148. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/SOURCES.txt.py +0 -0
  149. /fnschool-20251027.82134.859/src/fnschool.egg-info/dependency_links.txt.py → /fnschool-20251101.82236.812/src/fnschool.egg-info/dependency_links.txt +0 -0
  150. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/entry_points.txt +0 -0
  151. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/entry_points.txt.py +0 -0
  152. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/requires.txt +0 -0
  153. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/requires.txt.py +0 -0
  154. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/top_level.txt +0 -0
  155. {fnschool-20251027.82134.859 → fnschool-20251101.82236.812}/src/fnschool.egg-info/top_level.txt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fnschool
3
- Version: 20251027.82134.859
3
+ Version: 20251101.82236.812
4
4
  Summary: Just some school related scripts, without any ambition.
5
5
  Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
6
  Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>
@@ -6,4 +6,4 @@ import random
6
6
  import sys
7
7
  from pathlib import Path
8
8
 
9
- __version__ = "20251027.82134.859"
9
+ __version__ = "20251101.82236.812"
@@ -36,7 +36,7 @@
36
36
  </div>
37
37
  <hr />
38
38
  <div class="container">
39
- <div class="table-responsive-lg table-container">
39
+ <div class="table-responsive table-responsive-lg table-container">
40
40
  <table class="table table-bordered table-ingredient table-striped table-hover table-condensed">
41
41
  <thead>
42
42
  <tr>
@@ -65,15 +65,17 @@
65
65
  <div class="form-check"
66
66
  title="{% trans 'It helps you check the ingredients.' %}">
67
67
  <input type="checkbox"
68
+ style="cursor: pointer"
68
69
  class="form-check-input"
69
70
  id="ingredient_free_nark_{{ ingredient.id }}" />
70
71
  <label class="form-check-label"
72
+ style="cursor: pointer"
71
73
  for="ingredient_free_nark_{{ ingredient.id }}">
72
74
  {{ forloop.counter }}
73
75
  </label>
74
76
  </div>
75
77
  </th>
76
- <td>{{ ingredient.storage_date }}</td>
78
+ <td>{{ ingredient.storage_date|date:"Y.m.d" }}</td>
77
79
  <td>{{ ingredient.name }}</td>
78
80
  <td>{{ ingredient.meal_type }}</td>
79
81
  <td>{{ ingredient.category }}</td>
@@ -169,6 +171,7 @@
169
171
  <style>
170
172
  .table-container {
171
173
  overflow: auto;
174
+
172
175
  }
173
176
 
174
177
  .table-container thead th {
@@ -0,0 +1,3 @@
1
+ from django.contrib import admin
2
+
3
+ # Register your models here.
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class FnhomeConfig(AppConfig):
5
+ default_auto_field = "django.db.models.BigAutoField"
6
+ name = "fnhome"
@@ -0,0 +1,3 @@
1
+ from django.db import models
2
+
3
+ # Create your models here.
@@ -0,0 +1,7 @@
1
+ {% extends "base/document.html" %}
2
+ {% load tz %}
3
+ {% load crispy_forms_tags %}
4
+ {% block title %}
5
+ {% trans "FNSCHOOL Home" %}
6
+ {% endblock %}
7
+ {% block content %}{% endblock %}
@@ -0,0 +1,13 @@
1
+ from django.contrib import admin
2
+ from django.urls import include, path
3
+
4
+ from . import views
5
+
6
+ app_name = "fnhome"
7
+
8
+ urlpatterns = [
9
+ path("#", views.home, name="home"),
10
+ path("", views.home, name="home"),
11
+ ]
12
+
13
+ # The end.
@@ -0,0 +1,50 @@
1
+ import io
2
+ import re
3
+ from datetime import date, datetime
4
+ from decimal import (
5
+ ROUND_DOWN,
6
+ ROUND_FLOOR,
7
+ ROUND_HALF_UP,
8
+ Decimal,
9
+ getcontext,
10
+ localcontext,
11
+ )
12
+ from pathlib import Path
13
+
14
+ import numpy as np
15
+ import pandas as pd
16
+ from dateutil import parser as date_parser
17
+ from dateutil.relativedelta import relativedelta
18
+ from django.conf import settings
19
+ from django.contrib.auth.decorators import login_required
20
+ from django.contrib.auth.mixins import LoginRequiredMixin
21
+ from django.contrib.staticfiles.storage import staticfiles_storage
22
+ from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
23
+ from django.db.models import (
24
+ DecimalField,
25
+ ExpressionWrapper,
26
+ F,
27
+ IntegerField,
28
+ Q,
29
+ Sum,
30
+ Value,
31
+ )
32
+ from django.db.models.functions import Coalesce
33
+ from django.http import HttpResponse
34
+ from django.shortcuts import get_object_or_404, redirect, render
35
+ from django.urls import reverse_lazy
36
+ from django.utils.encoding import escape_uri_path
37
+ from django.views.decorators.http import require_POST
38
+ from django.views.generic import (
39
+ CreateView,
40
+ DeleteView,
41
+ DetailView,
42
+ ListView,
43
+ UpdateView,
44
+ )
45
+
46
+ # Create your views here.
47
+
48
+
49
+ def home(request):
50
+ return render(request, "fnhome/home.html")
@@ -22,7 +22,7 @@ def fnprofile_new(request):
22
22
  user.username = form.cleaned_data["username"]
23
23
  user.save()
24
24
  login(request, user)
25
- return redirect("home")
25
+ return redirect("fnhome:home")
26
26
  else:
27
27
  form = FnuserForm()
28
28
 
@@ -38,7 +38,9 @@ def fnprofile_log_in(request):
38
38
  user = authenticate(request, username=username, password=password)
39
39
  if user is not None:
40
40
  login(request, user)
41
- next_url = request.POST.get("next") or reverse_lazy("home")
41
+ next_url = request.POST.get("next") or reverse_lazy(
42
+ "fnhome:home"
43
+ )
42
44
  return redirect(next_url)
43
45
  else:
44
46
  form = FnuserLoginForm()
@@ -47,7 +49,7 @@ def fnprofile_log_in(request):
47
49
 
48
50
  def fnprofile_log_out(request):
49
51
  logout(request)
50
- return redirect("home")
52
+ return redirect("fnhome:home")
51
53
 
52
54
 
53
55
  @login_required
@@ -60,7 +62,7 @@ def fnprofile_edit(request):
60
62
  messages.success(
61
63
  request, _("Your information has been updated successfully!")
62
64
  )
63
- return redirect("home")
65
+ return redirect("fnhome:home")
64
66
  else:
65
67
  form = FnuserForm(instance=request.user)
66
68
  return render(request, "fnprofile/edit.html", {"form": form})
@@ -19,7 +19,6 @@ from django.utils.translation import gettext_lazy as _
19
19
  # Build paths inside the project like this: BASE_DIR / 'subdir'.
20
20
  BASE_DIR = Path(__file__).resolve().parent.parent
21
21
 
22
-
23
22
  # Quick-start development settings - unsuitable for production
24
23
  # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
25
24
 
@@ -51,6 +50,7 @@ INSTALLED_APPS = [
51
50
  "fnprofile",
52
51
  # "profiles",
53
52
  "canteen",
53
+ "fnhome",
54
54
  ]
55
55
 
56
56
  CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
@@ -25,7 +25,8 @@ from django.views.static import serve
25
25
  from . import views
26
26
 
27
27
  urlpatterns = [
28
- path("", views.home_view, name="home"),
28
+ path("", include("fnhome.urls", namespace="fnhome")),
29
+ path("home/", include("fnhome.urls", namespace="fnhome0")),
29
30
  path("admin/", admin.site.urls),
30
31
  path("i18n/", include("django.conf.urls.i18n")),
31
32
  path("fnprofile/", include("fnprofile.urls")),
@@ -0,0 +1,9 @@
1
+ from django.http import HttpResponse
2
+ from django.shortcuts import get_object_or_404, redirect, render
3
+
4
+
5
+ def home_view(request):
6
+ return redirect("fnhome:home")
7
+
8
+
9
+ # The end.
@@ -38,6 +38,16 @@ def main():
38
38
  os.chdir(FNSCHOOL_PATH)
39
39
  sys.argv[0] = "manage.py"
40
40
 
41
+ if "202511012053_copy_profiles_to_fnprofile" in sys.argv:
42
+ patche_path = (
43
+ FNSCHOOL_PATH
44
+ / "patches"
45
+ / "202511012053_copy_profiles_to_fnprofile.py"
46
+ )
47
+ patche_path = patche_path.as_posix()
48
+ os.system(f"python3 {patche_path} run")
49
+ return
50
+
41
51
  if len(sys.argv) < 2:
42
52
  local_port = "8230"
43
53
  local_url = "http://127.0.0.1:" + local_port
@@ -0,0 +1,67 @@
1
+ import os
2
+ import shutil
3
+ import sqlite3
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ file_path = Path(__file__)
8
+ data_path = Path(file_path.with_suffix("").as_posix() + "_data")
9
+ data_name = data_path.stem
10
+
11
+ settings_temp_path = data_path / "settings.py"
12
+ profiles_path = data_path / "profiles"
13
+
14
+ patches_path = file_path.parent
15
+ fnscho1_path = patches_path.parent
16
+ src_path = fnscho1_path.parent
17
+ db_path = fnscho1_path / "db.sqlite3"
18
+
19
+ patch_name = file_path.stem
20
+ settings_temp_name = f"patches.{data_name}.settings"
21
+
22
+ conn = sqlite3.connect(db_path.as_posix())
23
+ cursor = conn.cursor()
24
+ cursor.execute(
25
+ "SELECT name FROM sqlite_master WHERE type='table' AND name=?",
26
+ ("fnprofile_fnuser",),
27
+ )
28
+ fnprofile_fnuser_exists = cursor.fetchone() is not None
29
+
30
+
31
+ def run():
32
+ if fnprofile_fnuser_exists:
33
+ print((f"Patch {0} had been applied successfully!").format(patch_name))
34
+ return
35
+
36
+ os.system(
37
+ ("python manage.py migrate --settings {0}").format(settings_temp_name)
38
+ )
39
+ os.system(
40
+ ("python manage.py makemigrations --settings {0}").format(
41
+ settings_temp_name
42
+ )
43
+ )
44
+ print((f"Patch {0} applied successfully!").format(patch_name))
45
+
46
+
47
+ def rollback():
48
+ print((f"Patch {0} rolled back!").format(patch_name))
49
+
50
+
51
+ def main():
52
+ if len(sys.argv) < 2:
53
+ print("Usage: python script.py <function_name>")
54
+ sys.exit(1)
55
+
56
+ func_name = sys.argv[1]
57
+
58
+ function_dict = {"run": run, "rollback": rollback}
59
+
60
+ if func_name in function_dict:
61
+ function_dict[func_name]()
62
+ else:
63
+ print(f"Error: Function '{func_name}' not found.")
64
+
65
+
66
+ if __name__ == "__main__":
67
+ main()
@@ -3,10 +3,8 @@ from django.apps import AppConfig
3
3
 
4
4
  class ProfilesConfig(AppConfig):
5
5
  default_auto_field = "django.db.models.BigAutoField"
6
- name = "profiles"
7
-
8
- def ready(self):
9
- import profiles.signals
6
+ # name = "profiles"
7
+ name = "patches.202511012053_copy_profiles_to_fnprofile_data.profiles"
10
8
 
11
9
 
12
10
  # The end.
@@ -1,4 +1,4 @@
1
- # Generated by Django 4.2.25 on 2025-10-26 14:16
1
+ # Generated by Django 4.2.25 on 2025-11-01 14:26
2
2
 
3
3
  from django.db import migrations, models
4
4
 
@@ -21,22 +21,6 @@ class Gender(models.TextChoices):
21
21
 
22
22
 
23
23
  class Profile(AbstractUser, PermissionsMixin):
24
- groups = models.ManyToManyField(
25
- "auth.Group",
26
- verbose_name="groups",
27
- blank=True,
28
- help_text=_("The groups this user belongs to."),
29
- related_name="profile_groups",
30
- related_query_name="profile",
31
- )
32
- user_permissions = models.ManyToManyField(
33
- "auth.Permission",
34
- verbose_name="user permissions",
35
- blank=True,
36
- help_text=_("Specific permissions for this user."),
37
- related_name="profile_permissions",
38
- related_query_name="profile",
39
- )
40
24
  phone = models.CharField(
41
25
  max_length=15, blank=True, null=True, verbose_name=_("Phone Number")
42
26
  )
@@ -0,0 +1,3 @@
1
+ from django.test import TestCase
2
+
3
+ # Create your tests here.
@@ -0,0 +1,181 @@
1
+ """
2
+ Django settings for fnschool project.
3
+
4
+ Generated by 'django-admin startproject' using Django 4.2.24.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.2/topics/settings/
8
+
9
+ For the full list of settings and their values, see
10
+ https://docs.djangoproject.com/en/4.2/ref/settings/
11
+ """
12
+
13
+ import os
14
+ from pathlib import Path
15
+
16
+ from django.urls import reverse_lazy
17
+ from django.utils.translation import gettext_lazy as _
18
+
19
+ # Build paths inside the project like this: BASE_DIR / 'subdir'.
20
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent
21
+ print(BASE_DIR)
22
+
23
+ # Quick-start development settings - unsuitable for production
24
+ # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
25
+
26
+ # SECURITY WARNING: keep the secret key used in production secret!
27
+ SECRET_KEY = (
28
+ "django-insecure-vt(#owf#cbx)yo$9m^=%&-heu&txuc23&a5b=a=u@=274)2!9w"
29
+ )
30
+
31
+ # SECURITY WARNING: don't run with debug turned on in production!
32
+ DEBUG = True
33
+
34
+ ALLOWED_HOSTS = []
35
+
36
+
37
+ # Application definition
38
+
39
+ INSTALLED_APPS = [
40
+ "django.contrib.admin",
41
+ "django.contrib.auth",
42
+ "django.contrib.contenttypes",
43
+ "django.contrib.sessions",
44
+ "django.contrib.messages",
45
+ "django.contrib.staticfiles",
46
+ # site apps.
47
+ "crispy_forms",
48
+ "crispy_bootstrap5", # For Bootstrap 5
49
+ # fnschool apps.
50
+ "fnschool",
51
+ "fnprofile",
52
+ "patches.202511012053_copy_profiles_to_fnprofile_data.profiles",
53
+ "canteen",
54
+ "fnhome",
55
+ ]
56
+
57
+ CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
58
+ CRISPY_TEMPLATE_PACK = "bootstrap5"
59
+
60
+ MIDDLEWARE = [
61
+ "django.middleware.security.SecurityMiddleware",
62
+ "django.contrib.sessions.middleware.SessionMiddleware",
63
+ "django.middleware.locale.LocaleMiddleware",
64
+ "django.middleware.common.CommonMiddleware",
65
+ "django.middleware.csrf.CsrfViewMiddleware",
66
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
67
+ "django.contrib.messages.middleware.MessageMiddleware",
68
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
69
+ ]
70
+
71
+ ROOT_URLCONF = "fnschool.urls"
72
+
73
+ TEMPLATES = [
74
+ {
75
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
76
+ "DIRS": [
77
+ os.path.join(BASE_DIR, "templates"),
78
+ ],
79
+ "APP_DIRS": True,
80
+ "OPTIONS": {
81
+ "context_processors": [
82
+ "django.template.context_processors.debug",
83
+ "django.template.context_processors.request",
84
+ "django.contrib.auth.context_processors.auth",
85
+ "django.contrib.messages.context_processors.messages",
86
+ "django.template.context_processors.i18n",
87
+ ],
88
+ "builtins": [
89
+ "django.templatetags.i18n",
90
+ ],
91
+ },
92
+ },
93
+ ]
94
+
95
+ WSGI_APPLICATION = "fnschool.wsgi.application"
96
+
97
+
98
+ # Database
99
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
100
+
101
+ DATABASES = {
102
+ "default": {
103
+ "ENGINE": "django.db.backends.sqlite3",
104
+ "NAME": BASE_DIR / "db.sqlite3",
105
+ }
106
+ }
107
+
108
+
109
+ # Password validation
110
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
111
+ ## AUTH_USER_MODEL = "fnprofile.Fnuser"
112
+ AUTH_USER_MODEL = "profiles.Profile"
113
+ AUTH_PASSWORD_VALIDATORS = [
114
+ {
115
+ "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
116
+ },
117
+ {
118
+ "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
119
+ },
120
+ {
121
+ "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
122
+ },
123
+ {
124
+ "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
125
+ },
126
+ ]
127
+
128
+
129
+ # Internationalization
130
+ # https://docs.djangoproject.com/en/4.2/topics/i18n/
131
+
132
+ USE_TZ = True
133
+ TIME_ZONE = "Asia/Shanghai"
134
+
135
+ USE_I18N = True
136
+ USE_L10N = True
137
+
138
+ LANGUAGE_CODE = "zh-hans"
139
+
140
+ LANGUAGES = [
141
+ ("en", _("English")),
142
+ ("es", _("Spanish")),
143
+ ("fr", _("French")),
144
+ ("zh-hans", _("Simplified Chinese")),
145
+ ]
146
+ LOCALE_PATHS = [
147
+ os.path.join(BASE_DIR, "locale"),
148
+ ]
149
+
150
+ USE_TZ = True
151
+
152
+
153
+ # Static files (CSS, JavaScript, Images)
154
+ # https://docs.djangoproject.com/en/4.2/howto/static-files/
155
+
156
+ STATIC_URL = "/static/"
157
+ STATICFILES_DIRS = [
158
+ os.path.join(BASE_DIR, "static")
159
+ ] # Optional: for additional static directories
160
+ STATIC_ROOT = os.path.join(BASE_DIR, "static_collected")
161
+
162
+ # Default primary key field type
163
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
164
+
165
+ DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
166
+
167
+ MEDIA_URL = "/media/"
168
+ MEDIA_ROOT = os.path.join(BASE_DIR, "media")
169
+
170
+ LOGIN_URL = reverse_lazy("fnprofile:log_in")
171
+
172
+ _settings_path = Path(__file__).parent / "_settings.py"
173
+ if _settings_path.exists():
174
+ print(
175
+ ('Custom configuration "{_settings_path}" has been used.').format(
176
+ _settings_path=_settings_path.as_posix()
177
+ )
178
+ )
179
+ from ._settings import *
180
+
181
+ # The end.
@@ -0,0 +1,4 @@
1
+ import os
2
+ import sqlite3
3
+ import sys
4
+ from pathlib import Path
@@ -95,8 +95,17 @@ function open_small_window(url) {
95
95
  const width = Math.round(screen.width * size_times)
96
96
  const height = Math.round(screen.height * size_times)
97
97
  const left = Math.round((screen.width - width) / 2)
98
- const top = Math.round((screen.height - height) / 2)
99
- const windowFeatures = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`
98
+ const _top = Math.round((screen.height - height) / 2)
99
+
100
+ const left0 = Math.round((screen.width - height) / 2)
101
+ const _top0 = Math.round((screen.height - width) / 2)
102
+
103
+ var _width_ = width
104
+ var _height_ = height
105
+ var _left_ = left
106
+ var _top_ = _top
107
+
108
+ const windowFeatures = `width=${_width_},height=${_height_},left=${_left_},top=${_top_},resizable=yes,scrollbars=yes`
100
109
  window.open(url, '_blank', windowFeatures)
101
110
  }
102
111
 
@@ -2,7 +2,7 @@
2
2
  {% load i18n %}
3
3
  <nav class="navbar navbar-expand-lg navbar-dark bg-dark text-white fixed-top">
4
4
  <div class="container">
5
- <a class="navbar-brand" href="{% url 'home' %}">
5
+ <a class="navbar-brand" href="{% url 'fnhome:home' %}">
6
6
  <img src="{% static '/images/favicon.ico' %}"
7
7
  alt="Logo"
8
8
  width="30"
@@ -21,7 +21,9 @@
21
21
  <div class="collapse navbar-collapse" id="navbarSupportedContent">
22
22
  <ul class="navbar-nav me-auto mb-2 mb-lg-0">
23
23
  <li class="nav-item">
24
- <a class="nav-link active" aria-current="page" href="{% url 'home' %}">{% trans "Home" %}</a>
24
+ <a class="nav-link active"
25
+ aria-current="page"
26
+ href="{% url 'fnhome:home' %}">{% trans "Home" %}</a>
25
27
  </li>
26
28
  <li class="nav-item">
27
29
  <a class="nav-link" href="{% url 'canteen:list_ingredients' %}">{% trans "Canteen" %}</a>
@@ -92,7 +94,7 @@
92
94
  {% if messages %}
93
95
  <div class="messages">
94
96
  {% for message in messages %}
95
- <div class="alert alert-{{ message.tags }} p-2">
97
+ <div class="alert alert-{{ message.tags }} p-2 m-0">
96
98
  {{ message }}
97
99
  <span class="btn-close mx-2" title="{% trans "Hide messages." %}"></span>
98
100
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fnschool
3
- Version: 20251027.82134.859
3
+ Version: 20251101.82236.812
4
4
  Summary: Just some school related scripts, without any ambition.
5
5
  Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
6
  Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>