tomtoolkit 3.0.1__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (801) hide show
  1. tomtoolkit-3.1.0/.git/FETCH_HEAD +1 -0
  2. tomtoolkit-3.1.0/.git/HEAD +1 -0
  3. tomtoolkit-3.1.0/.git/config +12 -0
  4. tomtoolkit-3.1.0/.git/index +0 -0
  5. tomtoolkit-3.1.0/.git/logs/HEAD +1 -0
  6. tomtoolkit-3.1.0/.git/objects/pack/pack-27105157cdb35705c445bb0398b7f26f677bc087.idx +0 -0
  7. tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.pack → tomtoolkit-3.1.0/.git/objects/pack/pack-27105157cdb35705c445bb0398b7f26f677bc087.pack +0 -0
  8. tomtoolkit-3.1.0/.git/objects/pack/pack-27105157cdb35705c445bb0398b7f26f677bc087.rev +0 -0
  9. tomtoolkit-3.1.0/.git/refs/tags/3.1.0 +1 -0
  10. tomtoolkit-3.1.0/.git/shallow +1 -0
  11. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/PKG-INFO +2 -1
  12. tomtoolkit-3.1.0/docs/Makefile +40 -0
  13. tomtoolkit-3.1.0/docs/common/authentication.rst +361 -0
  14. tomtoolkit-3.1.0/docs/common/authentication_scenarios.rst +92 -0
  15. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/common/customsettings.rst +136 -12
  16. tomtoolkit-3.1.0/docs/common/email_configuration.rst +189 -0
  17. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/common/index.rst +10 -0
  18. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/conf.py +4 -0
  19. tomtoolkit-3.1.0/docs/introduction/updating.rst +358 -0
  20. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/accessing_data_through_REST_API.rst +9 -2
  21. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/poetry.lock +1330 -803
  22. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/pyproject.toml +2 -1
  23. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_base/__init__.py +1 -1
  24. tomtoolkit-3.1.0/tom_base/formats/en/formats.py +2 -0
  25. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_base/settings.py +7 -10
  26. tomtoolkit-3.1.0/tom_common/accounts/__init__.py +19 -0
  27. tomtoolkit-3.1.0/tom_common/accounts/adapters.py +171 -0
  28. tomtoolkit-3.1.0/tom_common/accounts/api_auth.py +80 -0
  29. tomtoolkit-3.1.0/tom_common/accounts/api_views.py +33 -0
  30. tomtoolkit-3.1.0/tom_common/accounts/email.py +24 -0
  31. tomtoolkit-3.1.0/tom_common/accounts/forms.py +77 -0
  32. tomtoolkit-3.1.0/tom_common/accounts/password_validation.py +58 -0
  33. tomtoolkit-3.1.0/tom_common/accounts/requirements.py +179 -0
  34. tomtoolkit-3.1.0/tom_common/accounts/urlpatterns.py +55 -0
  35. tomtoolkit-3.1.0/tom_common/accounts/views.py +122 -0
  36. tomtoolkit-3.1.0/tom_common/admin.py +36 -0
  37. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/api_router.py +1 -1
  38. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/apps.py +12 -1
  39. tomtoolkit-3.1.0/tom_common/checks.py +76 -0
  40. tomtoolkit-3.1.0/tom_common/default_settings.py +115 -0
  41. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/forms.py +13 -1
  42. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/management/commands/rotate_encryption_key.py +26 -0
  43. tomtoolkit-3.1.0/tom_common/middleware.py +185 -0
  44. tomtoolkit-3.1.0/tom_common/migrations/0005_profile_password_changed_at_profile_phone_number.py +23 -0
  45. tomtoolkit-3.1.0/tom_common/migrations/0006_termsofserviceacceptance.py +29 -0
  46. tomtoolkit-3.1.0/tom_common/models.py +37 -0
  47. tomtoolkit-3.1.0/tom_common/signals.py +140 -0
  48. tomtoolkit-3.1.0/tom_common/templates/README.md +48 -0
  49. tomtoolkit-3.1.0/tom_common/templates/account/account_inactive.html +24 -0
  50. tomtoolkit-3.1.0/tom_common/templates/account/email/registration_approved_message.txt +3 -0
  51. tomtoolkit-3.1.0/tom_common/templates/account/email/registration_approved_subject.txt +1 -0
  52. tomtoolkit-3.1.0/tom_common/templates/account/email/registration_requested_message.txt +3 -0
  53. tomtoolkit-3.1.0/tom_common/templates/account/email/registration_requested_subject.txt +1 -0
  54. tomtoolkit-3.1.0/tom_common/templates/account/login.html +73 -0
  55. tomtoolkit-3.1.0/tom_common/templates/account/signup_closed.html +21 -0
  56. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/alert.html +5 -0
  57. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/button.html +14 -0
  58. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/button_group.html +5 -0
  59. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/field.html +52 -0
  60. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/fields.html +2 -0
  61. tomtoolkit-3.1.0/tom_common/templates/allauth/elements/panel.html +19 -0
  62. tomtoolkit-3.1.0/tom_common/templates/allauth/layouts/base.html +23 -0
  63. tomtoolkit-3.1.0/tom_common/templates/auth/partials/pending_users.html +38 -0
  64. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/partials/user_list.html +8 -2
  65. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/user_list.html +1 -0
  66. tomtoolkit-3.1.0/tom_common/templates/mfa/recovery_codes/index.html +65 -0
  67. tomtoolkit-3.1.0/tom_common/templates/mfa/totp/deactivate_form.html +55 -0
  68. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/base.html +9 -3
  69. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/navbar_content.html +1 -1
  70. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/api_token.html +5 -0
  71. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/navbar_login.html +7 -1
  72. tomtoolkit-3.1.0/tom_common/templates/tom_common/partials/security_card.html +26 -0
  73. tomtoolkit-3.1.0/tom_common/templates/tom_common/partials/terms_of_service_text.html +9 -0
  74. tomtoolkit-3.1.0/tom_common/templates/tom_common/terms_accept.html +15 -0
  75. tomtoolkit-3.1.0/tom_common/templates/tom_common/terms_of_service.html +10 -0
  76. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templatetags/user_extras.py +89 -3
  77. tomtoolkit-3.1.0/tom_common/test_templates/tom_common/partials/terms_of_service_text.html +1 -0
  78. tomtoolkit-3.1.0/tom_common/tests.py +2125 -0
  79. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/urls.py +28 -8
  80. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/views.py +37 -7
  81. tomtoolkit-3.1.0/tom_dataproducts/migrations/0019_alter_astrometryreduceddatum_options_and_more.py +25 -0
  82. tomtoolkit-3.1.0/tom_dataproducts/migrations/0020_remove_astrometryreduceddatum_unique_astrometry_and_more.py +42 -0
  83. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/models.py +10 -11
  84. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/tests.py +112 -0
  85. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/templates/tom_setup/settings.tmpl +66 -15
  86. tomtoolkit-3.1.0/tom_targets/templatetags/__init__.py +0 -0
  87. tomtoolkit-3.1.0/tom_targets/tests/__init__.py +0 -0
  88. tomtoolkit-3.0.1/.git/FETCH_HEAD +0 -1
  89. tomtoolkit-3.0.1/.git/HEAD +0 -1
  90. tomtoolkit-3.0.1/.git/config +0 -12
  91. tomtoolkit-3.0.1/.git/index +0 -0
  92. tomtoolkit-3.0.1/.git/logs/HEAD +0 -1
  93. tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.idx +0 -0
  94. tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.rev +0 -0
  95. tomtoolkit-3.0.1/.git/refs/tags/3.0.1 +0 -1
  96. tomtoolkit-3.0.1/.git/shallow +0 -1
  97. tomtoolkit-3.0.1/docs/Makefile +0 -20
  98. tomtoolkit-3.0.1/docs/introduction/updating.rst +0 -213
  99. tomtoolkit-3.0.1/tom_common/admin.py +0 -23
  100. tomtoolkit-3.0.1/tom_common/default_settings.py +0 -61
  101. tomtoolkit-3.0.1/tom_common/middleware.py +0 -63
  102. tomtoolkit-3.0.1/tom_common/models.py +0 -13
  103. tomtoolkit-3.0.1/tom_common/signals.py +0 -65
  104. tomtoolkit-3.0.1/tom_common/templates/registration/login.html +0 -14
  105. tomtoolkit-3.0.1/tom_common/tests.py +0 -906
  106. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.coveragerc +0 -0
  107. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.flake8 +0 -0
  108. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/description +0 -0
  109. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/applypatch-msg.sample +0 -0
  110. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/commit-msg.sample +0 -0
  111. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/fsmonitor-watchman.sample +0 -0
  112. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/post-update.sample +0 -0
  113. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-applypatch.sample +0 -0
  114. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-commit.sample +0 -0
  115. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-merge-commit.sample +0 -0
  116. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-push.sample +0 -0
  117. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-rebase.sample +0 -0
  118. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/pre-receive.sample +0 -0
  119. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/prepare-commit-msg.sample +0 -0
  120. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/push-to-checkout.sample +0 -0
  121. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/sendemail-validate.sample +0 -0
  122. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/hooks/update.sample +0 -0
  123. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.git/info/exclude +0 -0
  124. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  125. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  126. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/ISSUE_TEMPLATE/sprint-story.md +0 -0
  127. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/dependabot.yml +0 -0
  128. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/workflows/github-release.yml +0 -0
  129. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/workflows/pypi-release.yml +0 -0
  130. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/workflows/run-canary-tests.yml +0 -0
  131. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.github/workflows/run-tests.yml +0 -0
  132. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.gitignore +0 -0
  133. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/.readthedocs.yml +0 -0
  134. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/CITATION.cff +0 -0
  135. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/CODE_OF_CONDUCT.md +0 -0
  136. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/CONTRIBUTING.md +0 -0
  137. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/LICENSE +0 -0
  138. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/MANIFEST.in +0 -0
  139. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/README-dev.md +0 -0
  140. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/README.md +0 -0
  141. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/adding_pages_doc/base.png +0 -0
  142. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/adding_pages_doc/quote.png +0 -0
  143. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/adding_pages_doc/targets.png +0 -0
  144. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/architecture/erd.csv +0 -0
  145. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/architecture/erd.png +0 -0
  146. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/architecture/snex2layout.png +0 -0
  147. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/architecture/standardlayout.png +0 -0
  148. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/common_interface.png +0 -0
  149. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/compare-across-forks.png +0 -0
  150. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/create_broker_doc/example_query.png +0 -0
  151. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/create_broker_doc/populated_query_list.png +0 -0
  152. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/create_broker_doc/query_result.png +0 -0
  153. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/create_broker_doc/success_broker_list.png +0 -0
  154. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/custom.css +0 -0
  155. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_observations/newform.png +0 -0
  156. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_observations/observebutton.png +0 -0
  157. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_template_tags_doc/Templatetags.png +0 -0
  158. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_templates_doc/darkmode.png +0 -0
  159. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_templates_doc/sciencecat.jpg +0 -0
  160. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_templates_doc/toast_example.png +0 -0
  161. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_templates_doc/tomhomepagemod.png +0 -0
  162. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_templates_doc/tomhomepagenew.png +0 -0
  163. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_views_doc/after.png +0 -0
  164. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/customize_views_doc/before.png +0 -0
  165. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/dataservices_doc/advanced_form.png +0 -0
  166. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/dataservices_doc/demo_Data_Service.png +0 -0
  167. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/dataservices_doc/query_form_collapsed.png +0 -0
  168. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/fork.png +0 -0
  169. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/heroku_deploy_doc/branchdeployed.png +0 -0
  170. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/heroku_deploy_doc/githubconnected.png +0 -0
  171. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/heroku_deploy_doc/githubintegration.png +0 -0
  172. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/heroku_deploy_doc/herokudeploybranch.png +0 -0
  173. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/hs.jpg +0 -0
  174. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/htmx_tables_doc/sortable_table_with_general_search.png +0 -0
  175. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/jupyterdoc/newnotebook.png +0 -0
  176. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/lco.jpg +0 -0
  177. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/logo-color.png +0 -0
  178. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/logo.png +0 -0
  179. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/managing_data/data_upload_form.png +0 -0
  180. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/empty_form.png +0 -0
  181. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/fields.png +0 -0
  182. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/myfacility.png +0 -0
  183. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/target_detail_observe_buttons.png +0 -0
  184. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/target_moon_separation_plot.png +0 -0
  185. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/observation_module/target_visibility_tool.png +0 -0
  186. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/permissions_doc/addgroup.png +0 -0
  187. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/permissions_doc/targetgroups.png +0 -0
  188. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/plotting_data_doc/plot.png +0 -0
  189. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/pull-request.png +0 -0
  190. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/target_fields_doc/redshift.png +0 -0
  191. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/target_fields_doc/redshift_display.png +0 -0
  192. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/target_fields_doc/redshift_filter.png +0 -0
  193. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/target_fields_doc/redshift_tag.png +0 -0
  194. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/target_sources.png +0 -0
  195. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/_static/zff.png +0 -0
  196. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/management_commands.rst +0 -0
  197. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/modules.rst +0 -0
  198. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_common/exceptions.rst +0 -0
  199. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_common/hooks.rst +0 -0
  200. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_common/index.rst +0 -0
  201. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_common/template_tags.rst +0 -0
  202. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_common/views.rst +0 -0
  203. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/api_views.rst +0 -0
  204. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/data_processing.md +0 -0
  205. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/index.rst +0 -0
  206. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/models.rst +0 -0
  207. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/templatetags.rst +0 -0
  208. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/utils.rst +0 -0
  209. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataproducts/views.rst +0 -0
  210. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataservices/data_services.rst +0 -0
  211. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataservices/exceptions.rst +0 -0
  212. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataservices/index.rst +0 -0
  213. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataservices/models.rst +0 -0
  214. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_dataservices/views.rst +0 -0
  215. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/facilities.rst +0 -0
  216. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/index.rst +0 -0
  217. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/models.rst +0 -0
  218. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/templatetags.rst +0 -0
  219. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/utils.rst +0 -0
  220. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_observations/views.rst +0 -0
  221. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/api_views.rst +0 -0
  222. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/groups.rst +0 -0
  223. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/index.rst +0 -0
  224. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/models.rst +0 -0
  225. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/templatetags.rst +0 -0
  226. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/utils.rst +0 -0
  227. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/api/tom_targets/views.rst +0 -0
  228. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/automation.rst +0 -0
  229. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/backgroundtasks.rst +0 -0
  230. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/custom_code.rst +0 -0
  231. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/index.rst +0 -0
  232. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/plugins.rst +0 -0
  233. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/querying.rst +0 -0
  234. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/code/scripts.rst +0 -0
  235. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/common/permissions.rst +0 -0
  236. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/adding_pages.rst +0 -0
  237. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/customize_template_tags.rst +0 -0
  238. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/customize_templates.rst +0 -0
  239. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/encrypted_model_fields.rst +0 -0
  240. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/htmx_tables.rst +0 -0
  241. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/index.rst +0 -0
  242. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/latex_generation.rst +0 -0
  243. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/testing_toms.rst +0 -0
  244. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/customization/widgets.rst +0 -0
  245. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/data_services/create_dataservice.rst +0 -0
  246. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/data_services/index.rst +0 -0
  247. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/deployment/amazons3.rst +0 -0
  248. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/deployment/deployment_heroku.rst +0 -0
  249. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/deployment/deployment_tips.rst +0 -0
  250. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/deployment/encryption.rst +0 -0
  251. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/deployment/index.rst +0 -0
  252. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/examples.rst +0 -0
  253. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/index.rst +0 -0
  254. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/about.rst +0 -0
  255. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/acknowledging_tom_toolkit.rst +0 -0
  256. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/contributing.rst +0 -0
  257. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/credits.rst +0 -0
  258. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/faqs.rst +0 -0
  259. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/getting_started.rst +0 -0
  260. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/manual_installation.rst +0 -0
  261. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/programming_resources.rst +0 -0
  262. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/support.rst +0 -0
  263. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/tomarchitecture.rst +0 -0
  264. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/troubleshooting.rst +0 -0
  265. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/introduction/workflow.rst +0 -0
  266. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/make.bat +0 -0
  267. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/continuous_sharing.rst +0 -0
  268. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/customizing_data_processing.rst +0 -0
  269. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/index.rst +0 -0
  270. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/plotting_data.rst +0 -0
  271. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/single_target_data_service.rst +0 -0
  272. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/stream_pub_sub.rst +0 -0
  273. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/managing_data/tom_direct_sharing.rst +0 -0
  274. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/add_facility_form_admin.png +0 -0
  275. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/customize_ocs_facility.rst +0 -0
  276. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/index.rst +0 -0
  277. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/observation_module.rst +0 -0
  278. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/selecting_targets_for_facility.rst +0 -0
  279. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/strategies.rst +0 -0
  280. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/target_selection_menu_option.png +0 -0
  281. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/observing/target_selection_table_default.png +0 -0
  282. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/targets/index.rst +0 -0
  283. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/targets/target_fields.rst +0 -0
  284. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/targets/target_matcher.rst +0 -0
  285. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/docs/targets/target_table.rst +0 -0
  286. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/manage.py +0 -0
  287. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/test_settings.py +0 -0
  288. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/__init__.py +0 -0
  289. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/admin.py +0 -0
  290. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/alerts.py +0 -0
  291. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/apps.py +0 -0
  292. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/__init__.py +0 -0
  293. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/alerce.py +0 -0
  294. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/antares.py +0 -0
  295. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/fink.py +0 -0
  296. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/gaia.py +0 -0
  297. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/lasair.py +0 -0
  298. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/scout.py +0 -0
  299. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/brokers/tns.py +0 -0
  300. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/exceptions.py +0 -0
  301. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/management/__init__.py +0 -0
  302. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/management/commands/__init__.py +0 -0
  303. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/management/commands/runbrokerquery.py +0 -0
  304. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0001_initial.py +0 -0
  305. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0002_auto_20190626_2135.py +0 -0
  306. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0003_auto_20190701_2226.py +0 -0
  307. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0004_auto_20210204_2300.py +0 -0
  308. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0005_alertstreammessage.py +0 -0
  309. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0006_alter_alertstreammessage_exchange_status.py +0 -0
  310. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/0007_alter_alertstreammessage_message_id.py +0 -0
  311. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/migrations/__init__.py +0 -0
  312. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/models.py +0 -0
  313. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/brokerquery_confirm_delete.html +0 -0
  314. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/brokerquery_list.html +0 -0
  315. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/partials/navbar_link.html +0 -0
  316. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/partials/submit_upstream_form.html +0 -0
  317. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/query_form.html +0 -0
  318. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templates/tom_alerts/query_result.html +0 -0
  319. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/templatetags/alerts_extras.py +0 -0
  320. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/__init__.py +0 -0
  321. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/brokers/__init__.py +0 -0
  322. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/brokers/test_alerce.py +0 -0
  323. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/brokers/test_gaia.py +0 -0
  324. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/brokers/test_lasair.py +0 -0
  325. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/tests/tests.py +0 -0
  326. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/urls.py +0 -0
  327. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_alerts/views.py +0 -0
  328. {tomtoolkit-3.0.1/tom_calendar → tomtoolkit-3.1.0/tom_base/formats}/__init__.py +0 -0
  329. {tomtoolkit-3.0.1/tom_calendar/migrations → tomtoolkit-3.1.0/tom_base/formats/en}/__init__.py +0 -0
  330. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_base/wsgi.py +0 -0
  331. {tomtoolkit-3.0.1/tom_calendar/templatetags → tomtoolkit-3.1.0/tom_calendar}/__init__.py +0 -0
  332. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/admin.py +0 -0
  333. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/apps.py +0 -0
  334. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/migrations/0001_initial.py +0 -0
  335. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/migrations/0002_calendarevent_target_list.py +0 -0
  336. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/migrations/0003_calendarevent_proposal_calendarevent_telescope_and_more.py +0 -0
  337. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/migrations/0004_eventtodo.py +0 -0
  338. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/migrations/0005_calendarevent_instrument.py +0 -0
  339. {tomtoolkit-3.0.1/tom_catalogs → tomtoolkit-3.1.0/tom_calendar/migrations}/__init__.py +0 -0
  340. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/models.py +0 -0
  341. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/calendar_page.html +0 -0
  342. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/partials/calendar.html +0 -0
  343. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/partials/event_form.html +0 -0
  344. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/partials/navbar_item.html +0 -0
  345. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/partials/target_list_block.html +0 -0
  346. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templates/tom_calendar/partials/todos.html +0 -0
  347. {tomtoolkit-3.0.1/tom_catalogs/harvesters → tomtoolkit-3.1.0/tom_calendar/templatetags}/__init__.py +0 -0
  348. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/templatetags/calendar_tags.py +0 -0
  349. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/tests.py +0 -0
  350. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/urls.py +0 -0
  351. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/utils.py +0 -0
  352. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_calendar/views.py +0 -0
  353. {tomtoolkit-3.0.1/tom_catalogs/templatetags → tomtoolkit-3.1.0/tom_catalogs}/__init__.py +0 -0
  354. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/admin.py +0 -0
  355. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/apps.py +0 -0
  356. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/forms.py +0 -0
  357. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvester.py +0 -0
  358. {tomtoolkit-3.0.1/tom_catalogs/tests → tomtoolkit-3.1.0/tom_catalogs/harvesters}/__init__.py +0 -0
  359. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvesters/jplhorizons.py +0 -0
  360. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvesters/mpc.py +0 -0
  361. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvesters/ned.py +0 -0
  362. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvesters/simbad.py +0 -0
  363. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/harvesters/tns.py +0 -0
  364. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/templates/tom_catalogs/partials/catalog_query_menu.html +0 -0
  365. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/templates/tom_catalogs/query_form.html +0 -0
  366. {tomtoolkit-3.0.1/tom_catalogs/tests/harvesters → tomtoolkit-3.1.0/tom_catalogs/templatetags}/__init__.py +0 -0
  367. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/templatetags/dataservices_extras.py +0 -0
  368. {tomtoolkit-3.0.1/tom_catalogs/tests/harvesters/data → tomtoolkit-3.1.0/tom_catalogs/tests}/__init__.py +0 -0
  369. {tomtoolkit-3.0.1/tom_common → tomtoolkit-3.1.0/tom_catalogs/tests/harvesters}/__init__.py +0 -0
  370. {tomtoolkit-3.0.1/tom_common/management → tomtoolkit-3.1.0/tom_catalogs/tests/harvesters/data}/__init__.py +0 -0
  371. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/tests/harvesters/data/test_65803_mpc_orb.json +0 -0
  372. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/tests/harvesters/test_jplhorizons.py +0 -0
  373. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/tests/harvesters/test_mpc.py +0 -0
  374. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/tests/harvesters/test_simbad.py +0 -0
  375. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/tests/tests.py +0 -0
  376. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/urls.py +0 -0
  377. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_catalogs/views.py +0 -0
  378. {tomtoolkit-3.0.1/tom_common/management/commands → tomtoolkit-3.1.0/tom_common}/__init__.py +0 -0
  379. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/api_views.py +0 -0
  380. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/encryption.py +0 -0
  381. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/exceptions.py +0 -0
  382. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/hints.py +0 -0
  383. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/hooks.py +0 -0
  384. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/htmx_table.py +0 -0
  385. {tomtoolkit-3.0.1/tom_common/migrations → tomtoolkit-3.1.0/tom_common/management}/__init__.py +0 -0
  386. {tomtoolkit-3.0.1/tom_common/templatetags → tomtoolkit-3.1.0/tom_common/management/commands}/__init__.py +0 -0
  387. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/migrations/0001_initial.py +0 -0
  388. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/migrations/0002_usersession.py +0 -0
  389. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/migrations/0004_delete_usersession.py +0 -0
  390. {tomtoolkit-3.0.1/tom_dataproducts → tomtoolkit-3.1.0/tom_common/migrations}/__init__.py +0 -0
  391. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/mixins.py +0 -0
  392. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/serializers.py +0 -0
  393. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/HELP-US-OUT.txt +0 -0
  394. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/css/font-awesome.css +0 -0
  395. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/css/font-awesome.min.css +0 -0
  396. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  397. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  398. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +0 -0
  399. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  400. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  401. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  402. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/animated.less +0 -0
  403. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/bordered-pulled.less +0 -0
  404. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/core.less +0 -0
  405. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/fixed-width.less +0 -0
  406. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/font-awesome.less +0 -0
  407. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/icons.less +0 -0
  408. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/larger.less +0 -0
  409. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/list.less +0 -0
  410. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/mixins.less +0 -0
  411. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/path.less +0 -0
  412. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/rotated-flipped.less +0 -0
  413. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/screen-reader.less +0 -0
  414. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/stacked.less +0 -0
  415. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/less/variables.less +0 -0
  416. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_animated.scss +0 -0
  417. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_bordered-pulled.scss +0 -0
  418. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_core.scss +0 -0
  419. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_fixed-width.scss +0 -0
  420. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_icons.scss +0 -0
  421. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_larger.scss +0 -0
  422. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_list.scss +0 -0
  423. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_mixins.scss +0 -0
  424. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_path.scss +0 -0
  425. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_rotated-flipped.scss +0 -0
  426. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_screen-reader.scss +0 -0
  427. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_stacked.scss +0 -0
  428. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/_variables.scss +0 -0
  429. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/font-awesome-4.7.0/scss/font-awesome.scss +0 -0
  430. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/css/dark.css +0 -0
  431. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/css/main.css +0 -0
  432. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/bluespinner.gif +0 -0
  433. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/favicon-16.ico +0 -0
  434. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/favicon-16x16.png +0 -0
  435. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/favicon-32.ico +0 -0
  436. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/favicon-32x32.png +0 -0
  437. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/favicon.ico +0 -0
  438. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/icon.png +0 -0
  439. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/logo-color-cropped.png +0 -0
  440. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/logo-color.png +0 -0
  441. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/img/logo-text.png +0 -0
  442. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/static/tom_common/js/htmx.min.js +0 -0
  443. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/404.html +0 -0
  444. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/group_confirm_delete.html +0 -0
  445. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/group_form.html +0 -0
  446. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/partials/app_user_lists.html +0 -0
  447. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/partials/group_list.html +0 -0
  448. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/user_confirm_change_password.html +0 -0
  449. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/auth/user_confirm_delete.html +0 -0
  450. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/bootstrap5_overrides/pagination.html +0 -0
  451. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/comments/form.html +0 -0
  452. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/comments/list.html +0 -0
  453. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/django_comments/comment_confirm_delete.html +0 -0
  454. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/django_filters/widgets/multiwidget.html +0 -0
  455. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/bootstrap_htmx.html +0 -0
  456. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/change_user_password.html +0 -0
  457. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/create_user.html +0 -0
  458. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/index.html +0 -0
  459. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/app_profiles.html +0 -0
  460. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/clearable_encrypted_input.html +0 -0
  461. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/confirm_user_delete.html +0 -0
  462. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/copy_button.html +0 -0
  463. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/htmx_table_partial.html +0 -0
  464. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/include_app_partial.html +0 -0
  465. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/messages.html +0 -0
  466. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/navbar_app_addons.html +0 -0
  467. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/revealable_password_input.html +0 -0
  468. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/partials/user_data.html +0 -0
  469. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templates/tom_common/user_profile.html +0 -0
  470. {tomtoolkit-3.0.1/tom_dataproducts/management → tomtoolkit-3.1.0/tom_common/templatetags}/__init__.py +0 -0
  471. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templatetags/bootstrap5_overrides.py +0 -0
  472. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_common/templatetags/tom_common_extras.py +0 -0
  473. {tomtoolkit-3.0.1/tom_dataproducts/management/commands → tomtoolkit-3.1.0/tom_dataproducts}/__init__.py +0 -0
  474. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/admin.py +0 -0
  475. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/api_views.py +0 -0
  476. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/apps.py +0 -0
  477. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/data_processor.py +0 -0
  478. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/exceptions.py +0 -0
  479. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/fields.py +0 -0
  480. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/filters.py +0 -0
  481. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/forms.py +0 -0
  482. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/hooks.py +0 -0
  483. {tomtoolkit-3.0.1/tom_dataproducts/migrations → tomtoolkit-3.1.0/tom_dataproducts/management}/__init__.py +0 -0
  484. {tomtoolkit-3.0.1/tom_dataproducts/processors → tomtoolkit-3.1.0/tom_dataproducts/management/commands}/__init__.py +0 -0
  485. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/management/commands/downloaddata.py +0 -0
  486. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/management/commands/migrate_reduced_datums.py +0 -0
  487. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/management/commands/updatereduceddata.py +0 -0
  488. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0001_initial.py +0 -0
  489. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0004_auto_20190626_0904.py +0 -0
  490. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0005_auto_20190704_1010.py +0 -0
  491. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0006_auto_20190912_2013.py +0 -0
  492. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0007_manual_20191016_rename_type.py +0 -0
  493. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0008_auto_20191205_1952.py +0 -0
  494. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0009_auto_20210204_2221.py +0 -0
  495. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0010_manual_20210305_fix_spectroscopy.py +0 -0
  496. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0011_reduceddatum_message.py +0 -0
  497. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0011_reduceddatum_message_squashed_0015_remove_reduceddatum_message.py +0 -0
  498. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0012_alter_reduceddatum_data_product_and_more.py +0 -0
  499. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0013_alter_reduceddatum_message.py +0 -0
  500. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0014_alter_reduceddatum_timestamp.py +0 -0
  501. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0015_remove_reduceddatum_message.py +0 -0
  502. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0016_reduceddatum_instrument_reduceddatum_telescope_and_more.py +0 -0
  503. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0017_spectroscopyreduceddatum_wavelength_unit.py +0 -0
  504. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/migrations/0018_remove_astrometryreduceddatum_unique_astrometry_and_more.py +0 -0
  505. {tomtoolkit-3.0.1/tom_dataproducts/single_target_data_service → tomtoolkit-3.1.0/tom_dataproducts/migrations}/__init__.py +0 -0
  506. {tomtoolkit-3.0.1/tom_dataproducts/single_target_data_service/panstarrs_service → tomtoolkit-3.1.0/tom_dataproducts/processors}/__init__.py +0 -0
  507. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/processors/atlas_processor.py +0 -0
  508. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/processors/data_serializers.py +0 -0
  509. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/processors/panstarrs_processor.py +0 -0
  510. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/processors/photometry_processor.py +0 -0
  511. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/processors/spectroscopy_processor.py +0 -0
  512. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/serializers.py +0 -0
  513. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/sharing.py +0 -0
  514. {tomtoolkit-3.0.1/tom_dataproducts/templatetags → tomtoolkit-3.1.0/tom_dataproducts/single_target_data_service}/__init__.py +0 -0
  515. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/single_target_data_service/atlas.py +0 -0
  516. {tomtoolkit-3.0.1/tom_dataproducts/tests → tomtoolkit-3.1.0/tom_dataproducts/single_target_data_service/panstarrs_service}/__init__.py +0 -0
  517. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs.py +0 -0
  518. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs_api.py +0 -0
  519. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/single_target_data_service/panstarrs_service/tests.py +0 -0
  520. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/single_target_data_service/single_target_data_service.py +0 -0
  521. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/static/tom_dataproducts/img/placeholder.png +0 -0
  522. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/static/tom_dataproducts/photometry_sample.csv +0 -0
  523. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/static/tom_dataproducts/spectrum_sample.csv +0 -0
  524. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tasks.py +0 -0
  525. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/add_product_to_group.html +0 -0
  526. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproduct_confirm_delete.html +0 -0
  527. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproduct_list.html +0 -0
  528. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_confirm_delete.html +0 -0
  529. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_detail.html +0 -0
  530. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_form.html +0 -0
  531. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_list.html +0 -0
  532. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/dataproduct_list_for_target.html +0 -0
  533. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/js9_button.html +0 -0
  534. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/js9_scripts.html +0 -0
  535. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_datalist_for_target.html +0 -0
  536. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_for_target.html +0 -0
  537. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/query_single_target_data_service.html +0 -0
  538. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/recent_photometry.html +0 -0
  539. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/reduceddatum_sparkline.html +0 -0
  540. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/saved_dataproduct_list_for_observation.html +0 -0
  541. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/spectroscopy_for_target.html +0 -0
  542. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/unsaved_dataproduct_list_for_observation.html +0 -0
  543. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/partials/upload_dataproduct.html +0 -0
  544. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/single_target_data_service_form.html +0 -0
  545. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templates/tom_dataproducts/upload_reduced_data.html +0 -0
  546. {tomtoolkit-3.0.1/tom_dataservices → tomtoolkit-3.1.0/tom_dataproducts/templatetags}/__init__.py +0 -0
  547. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/templatetags/dataproduct_extras.py +0 -0
  548. {tomtoolkit-3.0.1/tom_dataservices/management/commands → tomtoolkit-3.1.0/tom_dataproducts/tests}/__init__.py +0 -0
  549. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_api.py +0 -0
  550. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_atlas.py +0 -0
  551. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_data/test_atlas_fp.csv +0 -0
  552. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_data/test_lightcurve.csv +0 -0
  553. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_data/test_spectrum.csv +0 -0
  554. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/tests/test_data/test_spectrum.fits +0 -0
  555. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/urls.py +0 -0
  556. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/utils.py +0 -0
  557. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataproducts/views.py +0 -0
  558. {tomtoolkit-3.0.1/tom_dataservices/migrations → tomtoolkit-3.1.0/tom_dataservices}/__init__.py +0 -0
  559. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/admin.py +0 -0
  560. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/apps.py +0 -0
  561. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/data_services/alerce.py +0 -0
  562. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/data_services/mpc.py +0 -0
  563. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/data_services/ned.py +0 -0
  564. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/data_services/simbad.py +0 -0
  565. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/data_services/tns.py +0 -0
  566. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/dataservices.py +0 -0
  567. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/forms.py +0 -0
  568. {tomtoolkit-3.0.1/tom_dataservices/tests → tomtoolkit-3.1.0/tom_dataservices/management/commands}/__init__.py +0 -0
  569. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/management/commands/listqueries.py +0 -0
  570. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/management/commands/rundataquery.py +0 -0
  571. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/migrations/0001_initial.py +0 -0
  572. {tomtoolkit-3.0.1/tom_dataservices/tests/data_services → tomtoolkit-3.1.0/tom_dataservices/migrations}/__init__.py +0 -0
  573. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/models.py +0 -0
  574. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_advanced_form.html +0 -0
  575. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_results_table.html +0 -0
  576. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_simple_form.html +0 -0
  577. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/dataservicequery_confirm_delete.html +0 -0
  578. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/mpc/partials/mpc_results_table.html +0 -0
  579. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/partials/basic_simple_form.html +0 -0
  580. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/partials/catalog_query_menu.html +0 -0
  581. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/partials/navbar_list.html +0 -0
  582. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/partials/query_results_table.html +0 -0
  583. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/partials/update_data_from_dataservice.html +0 -0
  584. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/query_form.html +0 -0
  585. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/query_list.html +0 -0
  586. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/query_result.html +0 -0
  587. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_query_results_table.html +0 -0
  588. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_simple_form.html +0 -0
  589. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/templatetags/dataservices_extras.py +0 -0
  590. {tomtoolkit-3.0.1/tom_dataservices/tests/test_data → tomtoolkit-3.1.0/tom_dataservices/tests}/__init__.py +0 -0
  591. {tomtoolkit-3.0.1/tom_observations → tomtoolkit-3.1.0/tom_dataservices/tests/data_services}/__init__.py +0 -0
  592. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/tests/data_services/test_mpc.py +0 -0
  593. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/tests/test_api.py +0 -0
  594. {tomtoolkit-3.0.1/tom_observations/cadences → tomtoolkit-3.1.0/tom_dataservices/tests/test_data}/__init__.py +0 -0
  595. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/tests/test_data/test_65803_mpc_orb.json +0 -0
  596. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/tests/tests.py +0 -0
  597. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/urls.py +0 -0
  598. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_dataservices/views.py +0 -0
  599. {tomtoolkit-3.0.1/tom_observations/facilities → tomtoolkit-3.1.0/tom_observations}/__init__.py +0 -0
  600. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/admin.py +0 -0
  601. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/api_views.py +0 -0
  602. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/apps.py +0 -0
  603. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/cadence.py +0 -0
  604. {tomtoolkit-3.0.1/tom_observations/management → tomtoolkit-3.1.0/tom_observations/cadences}/__init__.py +0 -0
  605. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/cadences/resume_cadence_after_failure.py +0 -0
  606. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/cadences/retry_failed_observations.py +0 -0
  607. {tomtoolkit-3.0.1/tom_observations/management/commands → tomtoolkit-3.1.0/tom_observations/facilities}/__init__.py +0 -0
  608. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/blanco.py +0 -0
  609. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/gemini.py +0 -0
  610. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/lco.py +0 -0
  611. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/lco_redirect.py +0 -0
  612. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/lt.py +0 -0
  613. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/manual.py +0 -0
  614. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/ocs.py +0 -0
  615. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facilities/soar.py +0 -0
  616. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/facility.py +0 -0
  617. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/forms.py +0 -0
  618. {tomtoolkit-3.0.1/tom_observations/migrations → tomtoolkit-3.1.0/tom_observations/management}/__init__.py +0 -0
  619. {tomtoolkit-3.0.1/tom_observations/templatetags → tomtoolkit-3.1.0/tom_observations/management/commands}/__init__.py +0 -0
  620. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/management/commands/runcadencestrategies.py +0 -0
  621. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/management/commands/updatestatus.py +0 -0
  622. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0001_initial.py +0 -0
  623. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0002_auto_20190306_2343.py +0 -0
  624. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0003_auto_20190503_2318.py +0 -0
  625. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0004_observationgroup.py +0 -0
  626. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0005_auto_20191210_0007.py +0 -0
  627. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0006_observationgroup_cadence_strategy.py +0 -0
  628. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0007_observationstrategy.py +0 -0
  629. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0008_observationgroup_cadence_parameters.py +0 -0
  630. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0009_observationrecord_user.py +0 -0
  631. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0010_manual_create_dynamic_cadence.py +0 -0
  632. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0011_auto_20200917_0306.py +0 -0
  633. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0012_auto_20210205_1819.py +0 -0
  634. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0013_facility.py +0 -0
  635. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0014_alter_facility_orbit.py +0 -0
  636. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0015_remove_facility_mpc_site_code_and_more.py +0 -0
  637. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/migrations/0016_alter_facility_options.py +0 -0
  638. {tomtoolkit-3.0.1/tom_observations/tests → tomtoolkit-3.1.0/tom_observations/migrations}/__init__.py +0 -0
  639. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/models.py +0 -0
  640. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/observation_template.py +0 -0
  641. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/serializers.py +0 -0
  642. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/static/tom_observations/css/main.css +0 -0
  643. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/existing_observation_confirm.html +0 -0
  644. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/facility_status.html +0 -0
  645. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observation_form.html +0 -0
  646. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observation_list.html +0 -0
  647. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationgroup_confirm_delete.html +0 -0
  648. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationgroup_form.html +0 -0
  649. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationgroup_list.html +0 -0
  650. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationrecord_detail.html +0 -0
  651. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationtemplate_confirm_delete.html +0 -0
  652. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationtemplate_form.html +0 -0
  653. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationtemplate_list.html +0 -0
  654. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/observationupdate_form.html +0 -0
  655. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/existing_observation_form.html +0 -0
  656. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/facility_map.html +0 -0
  657. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/facility_observation_form.html +0 -0
  658. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/facility_status_table.html +0 -0
  659. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/navbar_facilities_list.html +0 -0
  660. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observation_distribution.html +0 -0
  661. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observation_list.html +0 -0
  662. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observation_plan.html +0 -0
  663. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observation_type_tabs.html +0 -0
  664. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observationtemplate_from_record.html +0 -0
  665. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observationtemplate_run.html +0 -0
  666. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/observing_buttons.html +0 -0
  667. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/update_observation_id_form.html +0 -0
  668. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templates/tom_observations/partials/update_status_button.html +0 -0
  669. {tomtoolkit-3.0.1/tom_observations/tests/facilities → tomtoolkit-3.1.0/tom_observations/templatetags}/__init__.py +0 -0
  670. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/templatetags/observation_extras.py +0 -0
  671. {tomtoolkit-3.0.1/tom_setup → tomtoolkit-3.1.0/tom_observations/tests}/__init__.py +0 -0
  672. {tomtoolkit-3.0.1/tom_setup/management → tomtoolkit-3.1.0/tom_observations/tests/facilities}/__init__.py +0 -0
  673. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/facilities/test_gemini.py +0 -0
  674. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/facilities/test_lco.py +0 -0
  675. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/facilities/test_ocs.py +0 -0
  676. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/facilities/test_soar.py +0 -0
  677. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/factories.py +0 -0
  678. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/test_api.py +0 -0
  679. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/test_cadence.py +0 -0
  680. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/test_credentials.py +0 -0
  681. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/tests.py +0 -0
  682. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/tests/utils.py +0 -0
  683. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/urls.py +0 -0
  684. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/utils.py +0 -0
  685. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/views.py +0 -0
  686. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_observations/widgets.py +0 -0
  687. {tomtoolkit-3.0.1/tom_setup/management/commands → tomtoolkit-3.1.0/tom_setup}/__init__.py +0 -0
  688. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/apps.py +0 -0
  689. {tomtoolkit-3.0.1/tom_targets → tomtoolkit-3.1.0/tom_setup}/management/__init__.py +0 -0
  690. {tomtoolkit-3.0.1/tom_targets → tomtoolkit-3.1.0/tom_setup}/management/commands/__init__.py +0 -0
  691. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/management/commands/tom_setup.py +0 -0
  692. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/templates/tom_setup/css.tmpl +0 -0
  693. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/templates/tom_setup/models.tmpl +0 -0
  694. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_setup/templates/tom_setup/urls.tmpl +0 -0
  695. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/__init__.py +0 -0
  696. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/admin.py +0 -0
  697. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/api_views.py +0 -0
  698. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/apps.py +0 -0
  699. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/base_models.py +0 -0
  700. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/fields.py +0 -0
  701. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/filters.py +0 -0
  702. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/forms.py +0 -0
  703. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/groups.py +0 -0
  704. {tomtoolkit-3.0.1/tom_targets/migrations → tomtoolkit-3.1.0/tom_targets/management}/__init__.py +0 -0
  705. {tomtoolkit-3.0.1/tom_targets/signals → tomtoolkit-3.1.0/tom_targets/management/commands}/__init__.py +0 -0
  706. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/management/commands/converttargetextras.py +0 -0
  707. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/management/commands/setdefaultextras.py +0 -0
  708. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/merge.py +0 -0
  709. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0001_initial.py +0 -0
  710. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0002_auto_20190115_2102.py +0 -0
  711. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0002_auto_20190117_2248.py +0 -0
  712. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0003_merge_20190123_1754.py +0 -0
  713. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0004_auto_20190123_2010.py +0 -0
  714. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0005_auto_20190214_1722.py +0 -0
  715. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0006_auto_20190403_1659.py +0 -0
  716. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0007_auto_20190423_1455.py +0 -0
  717. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0007_auto_20190503_2318.py +0 -0
  718. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0007_auto_20190515_0047.py +0 -0
  719. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0008_merge_20190515_0914.py +0 -0
  720. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0008_merge_20190520_1645.py +0 -0
  721. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0009_auto_20190605_1656.py +0 -0
  722. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0010_auto_20190715_1657.py +0 -0
  723. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0010_merge_20190612_1227.py +0 -0
  724. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0011_merge_20190731_1821.py +0 -0
  725. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0012_target_perihdist.py +0 -0
  726. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0013_manual_20190916_multiple_names.py +0 -0
  727. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0014_auto_20190923_1827.py +0 -0
  728. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0015_auto_20190923_2233.py +0 -0
  729. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0016_auto_20191211_1707.py +0 -0
  730. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0017_auto_20200130_2350.py +0 -0
  731. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0018_auto_20200714_1832.py +0 -0
  732. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0019_auto_20210811_0018.py +0 -0
  733. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0020_alter_targetname_created_alter_targetname_modified.py +0 -0
  734. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0021_rename_target_basetarget_alter_basetarget_options.py +0 -0
  735. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0022_persistentshare.py +0 -0
  736. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0023_alter_basetarget_created.py +0 -0
  737. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0024_basetarget_permissions.py +0 -0
  738. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0025_auto_20250206_2017.py +0 -0
  739. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0026_alter_basetarget_permissions.py +0 -0
  740. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0027_alter_basetarget_epoch_of_elements_and_more.py +0 -0
  741. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0028_basetarget_abs_mag_basetarget_slope_and_more.py +0 -0
  742. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0029_alter_basetarget_permissions.py +0 -0
  743. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0030_alter_basetarget_slope.py +0 -0
  744. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/migrations/0031_basetarget_shared_by_basetarget_shared_from.py +0 -0
  745. {tomtoolkit-3.0.1/tom_targets/templatetags → tomtoolkit-3.1.0/tom_targets/migrations}/__init__.py +0 -0
  746. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/models.py +0 -0
  747. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/permissions.py +0 -0
  748. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/persistent_sharing_serializers.py +0 -0
  749. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/seed.py +0 -0
  750. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/serializers.py +0 -0
  751. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/sharing.py +0 -0
  752. {tomtoolkit-3.0.1/tom_targets/tests → tomtoolkit-3.1.0/tom_targets/signals}/__init__.py +0 -0
  753. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/signals/handlers.py +0 -0
  754. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/static/tom_targets/css/main.css +0 -0
  755. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/static/tom_targets/js/aladin_finderchart.js +0 -0
  756. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/static/tom_targets/target_import.csv +0 -0
  757. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/tables.py +0 -0
  758. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/aladin_finderchart.html +0 -0
  759. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/aladin_skymap.html +0 -0
  760. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/aladin_skymap_targets_oob.html +0 -0
  761. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/app_tab_divs.html +0 -0
  762. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/app_tabs.html +0 -0
  763. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/create_persistent_share.html +0 -0
  764. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/module_buttons.html +0 -0
  765. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/moon_distance.html +0 -0
  766. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/observation_table.html +0 -0
  767. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/persistent_share_table.html +0 -0
  768. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/recent_targets.html +0 -0
  769. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/recently_updated_targets.html +0 -0
  770. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_buttons.html +0 -0
  771. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_data.html +0 -0
  772. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_feature.html +0 -0
  773. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_groups.html +0 -0
  774. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_merge_fields.html +0 -0
  775. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_plan.html +0 -0
  776. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_table.html +0 -0
  777. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_table_partial.html +0 -0
  778. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/target_unknown_statuses.html +0 -0
  779. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/partials/targetlist_select.html +0 -0
  780. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_confirm_delete.html +0 -0
  781. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_detail.html +0 -0
  782. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_facility_selection.html +0 -0
  783. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_form.html +0 -0
  784. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_group_share.html +0 -0
  785. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_grouping.html +0 -0
  786. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_import.html +0 -0
  787. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_list.html +0 -0
  788. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_manage_persistent_shares.html +0 -0
  789. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_merge.html +0 -0
  790. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/target_share.html +0 -0
  791. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/targetlist_confirm_delete.html +0 -0
  792. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templates/tom_targets/targetlist_form.html +0 -0
  793. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/templatetags/targets_extras.py +0 -0
  794. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/tests/factories.py +0 -0
  795. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/tests/test_api.py +0 -0
  796. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/tests/tests.py +0 -0
  797. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/urls.py +0 -0
  798. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/utils.py +0 -0
  799. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/validators.py +0 -0
  800. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/views.py +0 -0
  801. {tomtoolkit-3.0.1 → tomtoolkit-3.1.0}/tom_targets/viewsets.py +0 -0
@@ -0,0 +1 @@
1
+ e6496469648b1bed1ff52bb70cbdc82f9206c588 'e6496469648b1bed1ff52bb70cbdc82f9206c588' of https://github.com/TOMToolkit/tom_base
@@ -0,0 +1 @@
1
+ e6496469648b1bed1ff52bb70cbdc82f9206c588
@@ -0,0 +1,12 @@
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = true
4
+ bare = false
5
+ logallrefupdates = true
6
+ [remote "origin"]
7
+ url = https://github.com/TOMToolkit/tom_base
8
+ fetch = +refs/heads/*:refs/remotes/origin/*
9
+ [gc]
10
+ auto = 0
11
+ [http "https://github.com/"]
12
+ extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzXzE1MzY4X2V5SmhiR2NpT2lKRlV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoZFdRaU9pSmhkWFJvYm1RaUxDSmpkSGdpT2lKZlUxSTBlbUZpYkZBMGFGYzFSVTVTVG10UldITXhibXA2Y1hneFFuSmpTblF0YkhkUk1uRlliRUp4WkZadVgwcG1ibEprU1ZKUklpd2laWGh3SWpveE56a3dNamc1T0RBeExDSnBZWFFpT2pFM09UQXlPRFl5TURFc0ltbHpjeUk2SW1kcGRHaDFZaUlzSW1wMGFTSTZJbVF6WmpjMVpETmlMV1JoWWpVdE5HUTRPUzA1WXpabExXUXpPR0kxTTJZMk0yTXdaaUlzSW5abGNpSTZNMzAuWm1PcklVTm1qWlNHNkZLU0hIMUZCeldOUzV1MzdyZ0RsN0c0VmJPMVhrR2JMNVNBdHVKWGRxQjJNUXJEUGFGM3V2RldYQ2VwLUxyMjRkRnRwLVQ5RVE=
Binary file
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 e6496469648b1bed1ff52bb70cbdc82f9206c588 runner <runner@runnervmtr4k5.qmfuewowp3wexnqqdqohoyuc0d.yx.internal.cloudapp.net> 1790286206 +0000 checkout: moving from master to refs/tags/3.1.0
@@ -0,0 +1 @@
1
+ e6496469648b1bed1ff52bb70cbdc82f9206c588
@@ -0,0 +1 @@
1
+ e6496469648b1bed1ff52bb70cbdc82f9206c588
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tomtoolkit
3
- Version: 3.0.1
3
+ Version: 3.1.0
4
4
  Summary: TOM Toolkit and base modules
5
5
  License-Expression: GPL-3.0-only
6
6
  License-File: LICENSE
@@ -31,6 +31,7 @@ Requires-Dist: beautifulsoup4 (<5)
31
31
  Requires-Dist: crispy-bootstrap5 (<2027)
32
32
  Requires-Dist: cryptography (<=50.0.0)
33
33
  Requires-Dist: django (>=5.2.17,<6)
34
+ Requires-Dist: django-allauth[mfa] (>=65.19.4,<66)
34
35
  Requires-Dist: django-bootstrap5 (<27)
35
36
  Requires-Dist: django-contrib-comments (>=2.0,<3.0)
36
37
  Requires-Dist: django-crispy-forms (>=2.7,<3.0)
@@ -0,0 +1,40 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = .
9
+ BUILDDIR = _build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ # this rule builds a single file and is used by the watch rule (below).
16
+ html-file:
17
+ @test -n "$(FILE)" || { echo "usage: make html-file FILE=path/to/page.rst"; exit 1; }
18
+ @$(SPHINXBUILD) -b html -d "$(BUILDDIR)/doctrees" "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS) $(O) "$(FILE)"
19
+
20
+ # type 'make watch' to build files as they are saved
21
+ watch:
22
+ @echo "Watching $(SOURCEDIR) for changes to .rst and .md files; Ctrl-C to stop."
23
+ @inotifywait -m -r -q -e close_write,moved_to --format '%w%f' --include '\.(rst|md)$$' \
24
+ "$(SOURCEDIR)" "@$(SOURCEDIR)/$(BUILDDIR)" \
25
+ | while read -r changed; do \
26
+ echo "==> $$changed"; \
27
+ $(MAKE) --no-print-directory html-file FILE="$$changed"; \
28
+ done
29
+
30
+ # Here's how do that (i.e. 'make watch') from the CLI not using make:
31
+ #
32
+ # inotifywait -m -r -q -e close_write,moved_to --format '%w%f' --include '\.(rst|md)$' . @./_build \
33
+ # | while read -r changed; do make html-file FILE="$changed"; done
34
+
35
+ .PHONY: help html-file watch Makefile
36
+
37
+ # Catch-all target: route all unknown targets to Sphinx using the new
38
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
39
+ %: Makefile
40
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -0,0 +1,361 @@
1
+ Accounts and Authentication
2
+ ===========================
3
+
4
+ .. Note::
5
+
6
+ This page describes the accounts and authentication features introduced in TOM Toolkit 3.1. If you are
7
+ upgrading an existing TOM, see :doc:`Updating your TOM <../introduction/updating>`.
8
+
9
+ TOM Toolkit builds its user accounts on Django's ``django.contrib.auth`` and on
10
+ `django-allauth <https://docs.allauth.org/en/latest/>`_, the de-facto standard Django package for login,
11
+ registration, password management and multi-factor authentication. Out of the box, your TOM behaves the way
12
+ users expect from any modern web application:
13
+
14
+ - users log in with a username and password and may enable **two-factor authentication** (an authenticator app
15
+ plus recovery codes) from their profile page;
16
+ - administrators create accounts, or you can enable **self-registration** (open, or requiring administrator
17
+ approval);
18
+ - users change their own password; when an email backend is configured, you can also offer
19
+ **password reset by email**;
20
+ - every user has a personal **API token** for scripted access.
21
+
22
+ Anything more strict than those defaults is switched on by configuration settings: requiring two-factor
23
+ authentication, password composition rules and expiry, a terms-of-service agreement, mandatory profile fields,
24
+ and API-token expiry. Each control is general; how you combine them is up to your project's policy. Example
25
+ combinations are collected in :doc:`Common accounts scenarios <authentication_scenarios>`.
26
+
27
+
28
+ Creating accounts and self-registration
29
+ ---------------------------------------
30
+
31
+ By default only superusers create accounts (*Users* → *Add user*). To let people register
32
+ themselves, set ``TOM_REGISTRATION_STRATEGY`` in ``settings.py``:
33
+
34
+ ``None`` (default)
35
+ No self-registration. ``/accounts/signup/`` shows a "registration is closed" page inviting the visitor to
36
+ contact the TOM's administrators for an account.
37
+
38
+ ``'open'``
39
+ Visitors fill in the sign-up form and are logged in immediately. New users are added to the ``Public`` group.
40
+
41
+ ``'approval_required'``
42
+ Visitors fill in the sign-up form; the account is created **inactive** and added to the ``Public`` group. A
43
+ superuser approves it from the *Pending users* table on the *Users* page (``/users/``). Until then the user sees
44
+ an "account pending approval" page when they try to log in. If an email backend is configured, the addresses in
45
+ ``settings.MANAGERS`` are notified of each request and the user is notified when approved (templates
46
+ ``account/email/registration_requested_*.txt`` and ``account/email/registration_approved_*.txt``; sender
47
+ ``DEFAULT_FROM_EMAIL``).
48
+
49
+ A working email backend is effectively a prerequisite for a smooth ``'approval_required'`` flow. Without one
50
+ the flow still works, but nobody is notified of anything: the *Pending users* table makes this explicit and
51
+ the approver is instructed to inform the user directly. Additionally, ``manage.py check`` warns
52
+ of this (no email) situation (``tom_common.W002``). See :doc:`Email configuration <email_configuration>`.
53
+
54
+ The sign-up form prompts for username, email, password, first and last name, organization/affiliation and
55
+ phone number; only fields listed in ``TOM_REQUIRED_USER_FIELDS`` are required, any others are optional.
56
+ When a terms-of-service version is configured the form also requires the
57
+ *I accept the terms of service* checkbox (see :ref:`auth-terms`).
58
+
59
+ A *Register* button appears in the navbar and a link on the login page whenever registration is open.
60
+
61
+ .. Note::
62
+
63
+ In TOM Toolkit 3.1, ``TOM_REGISTRATION_STRATEGY`` replaces the ``tom_registration`` plugin, which is
64
+ deprecated. See :doc:`Updating your TOM <../introduction/updating>` for the mapping from ``tom_registration``'s
65
+ settings, URL names and templates to their replacements.
66
+
67
+ Customizing registration
68
+ ~~~~~~~~~~~~~~~~~~~~~~~~
69
+
70
+ Every piece of registration behavior follows the same pattern: tom_base ships a default implementation (a form,
71
+ an adapter method, a template), and a setting names the implementation to use. To change a behavior, subclass
72
+ the default in your TOM's ``custom_code`` app (or drop a template into your TOM's ``templates/`` directory) and
73
+ point the setting at your version in ``settings.py``.
74
+
75
+ - **Extra sign-up fields**: subclass ``tom_common.accounts.forms.TomSignupForm`` in your ``custom_code`` app,
76
+ add fields, and store them in ``signup(self, request, user)``; point django-allauth at it with
77
+ ``ACCOUNT_SIGNUP_FORM_CLASS = 'custom_code.forms.MySignupForm'``.
78
+ - **Sign-up Behavior** (who may sign up, which group new users join, notification emails, redirects): subclass
79
+ ``tom_common.accounts.adapters.TomAccountAdapter`` and set, for example,
80
+ ``ACCOUNT_ADAPTER = 'custom_code.adapters.MyAccountAdapter'``.
81
+ See `Adapter <https://docs.allauth.org/en/latest/account/adapter.html>`_ for the available hooks.
82
+ - **Templates**: ``account/signup.html``, ``account/signup_closed.html``, ``account/account_inactive.html`` and the
83
+ email templates above can be overridden in your TOM's ``templates/`` directory. (This is the ``templates/``
84
+ directory at the top level of your TOM, sibling to your ``manage.py`` module).
85
+
86
+
87
+ Two-factor authentication
88
+ -------------------------
89
+
90
+ Two-factor authentication (2FA, also called multi-factor authentication or MFA) uses a **time-based one-time
91
+ password** (TOTP) from an authenticator app. Microsoft Authenticator, Google Authenticator, Authy, 1Password,
92
+ Bitwarden and similar all work. A set of **recovery codes** is supplied for when an authenticator app is unavailable.
93
+
94
+ 2FA From the User's Perspective
95
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
96
+
97
+ 1. Open your profile (click on your name in the navbar → *Profile*) and click *Enable two-factor authentication*
98
+ on the *Security* card (or go to ``/accounts/2fa/``).
99
+ 2. Scan the QR code with your authenticator app (or type the key shown below it), then enter the 6-digit code the
100
+ authenticator app displays.
101
+ 3. Save the recovery codes. Each code can be used one time in place of an app code. By default, a new set of
102
+ recovery codes is available from the *Security* card of your profile page.
103
+
104
+ From then on, login asks for a code after the password. The *Security* card shows whether 2FA is enabled and links
105
+ to the two-factor management page, where you can view, download, or regenerate your recovery codes, or disable the
106
+ app. Sensitive actions (changing 2FA settings, regenerating an API token when required) ask you to confirm your
107
+ password or a code again if your last login was more than a few minutes ago.
108
+
109
+ If you lose both the app and the recovery codes, an administrator can reset your authenticator in the Django admin
110
+ page (*Multi-factor authentication* → *Authenticators*) and you then can enroll again.
111
+
112
+ From the TOM developer's Perspective
113
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114
+
115
+ 2FA is always available to every user and is optional by default. To require it, set::
116
+
117
+ TOM_MFA_REQUIRED = 'all' # or 'superusers' to require it only for privileged users
118
+
119
+ After login, users who have not yet enabled 2FA are taken to the enrollment page and cannot use the rest of
120
+ the TOM until 2FA enabled. When ``TOM_MFA_REQUIRED = 'all'``, ``'all'`` means every user including superusers
121
+ (and to social/SSO logins if you configure them); the default, ``None``, means 2FA is optional.
122
+ When ``TOM_MFA_REQUIRED`` is set, users cannot disable their authenticator app (but an administrator can still
123
+ reset it).
124
+
125
+ Other django-allauth MFA settings (``MFA_SUPPORTED_TYPES``, ``MFA_TOTP_TOLERANCE``, ``MFA_RECOVERY_CODE_COUNT`` …)
126
+ can be set in ``settings.py``; see `MFA configuration <https://docs.allauth.org/en/latest/mfa/configuration.html>`_.
127
+ TOM Toolkit enables TOTP and recovery codes; passkeys/WebAuthn are not enabled (contact us if you need this).
128
+
129
+
130
+ Passwords
131
+ ---------
132
+
133
+ Users can change their password on their profile edit page (``/users/<id>/update/``) or at
134
+ ``/accounts/password/change/``. Superusers can set another user's password from the *Users* page; a password set
135
+ this way must be changed by the user at their next login when password expiry is enabled.
136
+
137
+ Password constraints
138
+ ~~~~~~~~~~~~~~~~~~~~
139
+
140
+ By default, password constraits are Django's ``AUTH_PASSWORD_VALIDATORS``.
141
+ TOM Toolkit adds two validators you can include:
142
+
143
+ ``tom_common.accounts.password_validation.CharacterClassValidator``
144
+ Requires at least one upper-case letter, one lower-case letter, one digit and one special character.
145
+
146
+ ``tom_common.accounts.password_validation.NotSameAsCurrentPasswordValidator``
147
+ Rejects a "new" password identical to the current one (useful together with expiry).
148
+
149
+ For example, a policy of 12+ characters with all four character classes, different from the user's name and email::
150
+
151
+ AUTH_PASSWORD_VALIDATORS = [
152
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
153
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
154
+ 'OPTIONS': {'min_length': 12}
155
+ },
156
+ {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
157
+ {'NAME': 'tom_common.accounts.password_validation.CharacterClassValidator'},
158
+ {'NAME': 'tom_common.accounts.password_validation.NotSameAsCurrentPasswordValidator'},
159
+ ]
160
+
161
+ You can write your own validator class in ``custom_code`` and list it the same way (see
162
+ `Django password validation <https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation>`_).
163
+
164
+ .. Note::
165
+
166
+ Current guidance (NIST SP 800-63B) favours long passphrases and multi-factor authentication over password composition
167
+ rules and periodic expiry. TOM Toolkit provides the capabilities to implement your specific hosting policy requirements.
168
+
169
+ Password expiry
170
+ ~~~~~~~~~~~~~~~
171
+
172
+ ::
173
+
174
+ TOM_PASSWORD_EXPIRY_DAYS = 60 # default None (never expires)
175
+
176
+ When set, a user whose password is older than this is redirected to the change-password page after login (and on
177
+ any later request) until they change it. The age is counted from the last change; a password set by an
178
+ administrator counts as expired. When you first enable expiry, passwords last changed before the upgrade are
179
+ treated as old, so most existing users are asked to change their password once.
180
+
181
+ Password reset by email
182
+ ~~~~~~~~~~~~~~~~~~~~~~~
183
+
184
+ ::
185
+
186
+ TOM_PASSWORD_RESET_ENABLED = True # default False
187
+
188
+ Adds a *Forgot your password?* link to the login page and enables django-allauth's reset-by-email flow. This
189
+ requires a working email configuration (see :doc:`Email configuration <email_configuration>`). When it is off the reset pages
190
+ are not served at all, so a TOM without email cannot leak "unknown account" mails or error on them.
191
+
192
+
193
+ .. _auth-terms:
194
+
195
+ Terms of service
196
+ ----------------
197
+
198
+ ::
199
+
200
+ TOM_TERMS_OF_SERVICE_VERSION = '2026-09-01' # default None (no terms)
201
+
202
+ When set, every user must accept the current terms before using the TOM: new users tick a checkbox on the sign-up
203
+ form; existing users (and users created by an administrator) are shown the terms right after logging in and must
204
+ accept them. Acceptances are recorded with the version, time and IP address. To update your terms,
205
+ **change the version string** and users will be prompted to accept the updated terms.
206
+
207
+ Write your terms in the template ``tom_common/partials/terms_of_service_text.html`` in your TOM's ``templates/``
208
+ directory (plain HTML). They are shown at the ``/terms/`` page and on the acceptance page.
209
+
210
+
211
+ .. _auth-profile-fields:
212
+
213
+ Profile fields
214
+ --------------
215
+
216
+ In addition to Django's first name, last name and email, TOM Toolkit adds *organization / affiliation* and *phone number*
217
+ fields to a user's profile. To make any of these mandatory, add them to ``TOM_REQUIRED_USER_FIELDS``::
218
+
219
+ TOM_REQUIRED_USER_FIELDS = ['first_name', 'last_name', 'email'] # default []
220
+
221
+ Required fields are enforced on the sign-up form and the user edit form, and a logged-in user whose profile is
222
+ missing a required field is redirected to their profile edit page until it is complete.
223
+
224
+ Projects that need more profile fields add their own model in ``custom_code`` and show it on the profile page with
225
+ the ``profile_details()`` integration point (see :doc:`Customizing templates <../customization/customize_templates>`).
226
+
227
+
228
+ API access
229
+ ----------
230
+
231
+ Every user has a personal API token, shown on their profile and regenerable from their profile edit page; see
232
+ :doc:`Accessing data through the REST API <../managing_data/accessing_data_through_REST_API>`. Two settings
233
+ can customize API access::
234
+
235
+ TOM_API_TOKEN_EXPIRY_DAYS = 60 # default None: tokens do not expire
236
+ TOM_API_TOKEN_REQUIRES_MFA = True # default False
237
+
238
+ - With an expiry, requests with a token older than the limit are rejected (HTTP 401 with an explanatory message);
239
+ the user regenerates the token on their edit page, which shows when it was created and when it expires.
240
+ - With ``TOM_API_TOKEN_REQUIRES_MFA``: the password-only ``/api/token-auth/`` endpoint is disabled (because this
241
+ would by-pass the second factor).
242
+
243
+ Both are enforced by ``tom_common.accounts.api_auth.TomTokenAuthentication``, which replaces the plain REST framework
244
+ ``TokenAuthentication`` in ``REST_FRAMEWORK``::
245
+
246
+ REST_FRAMEWORK = {
247
+ 'DEFAULT_AUTHENTICATION_CLASSES': [
248
+ 'tom_common.accounts.api_auth.TomTokenAuthentication', # Authorization: Token <key>
249
+ 'rest_framework.authentication.SessionAuthentication', # logged-in browsers
250
+ # 'rest_framework.authentication.BasicAuthentication', # username/password per request; omit this when
251
+ # you require two-factor authentication
252
+ ],
253
+ ...
254
+ }
255
+
256
+ Browser sessions (``SessionAuthentication``) are protected by the normal login, including 2FA.
257
+
258
+ .. Note::
259
+
260
+ TOM-to-TOM data sharing (``DATA_SHARING``) currently authenticates with the destination's username and
261
+ password (HTTP Basic). A destination that turns off ``BasicAuthentication`` must give its partners tokens
262
+ instead; support for ``API_TOKEN`` in ``DATA_SHARING`` is planned.
263
+
264
+
265
+ Access strategy and open URLs
266
+ -----------------------------
267
+
268
+ With ``AUTH_STRATEGY = 'LOCKED'`` the login, sign-up, second-factor, pending-approval and (when enabled) password
269
+ reset pages are open automatically. They are to ``OPEN_URLS`` to enable the authorization process. As before,
270
+ ``/api/`` paths that scripts reach with a token must be listed in ``OPEN_URLS``.
271
+
272
+
273
+ Customizing the authentication pages and behaviour
274
+ --------------------------------------------------
275
+
276
+ Everything below is done in your TOM (``settings.py``, ``templates/``, ``custom_code``); nothing in tom_base
277
+ needs to change.
278
+
279
+ Templates
280
+ The account pages are django-allauth templates rendered inside your TOM's ``tom_common/base.html``. To restyle
281
+ all of them at once, override ``allauth/layouts/base.html`` and the small element templates under
282
+ ``allauth/elements/`` (TOM Toolkit ships Bootstrap 5 versions of ``fields``, ``field``, ``button``,
283
+ ``button_group`` and ``panel``). To change one page, override its template (``account/login.html``,
284
+ ``account/signup.html``, ``mfa/index.html`` …). Template names are listed in the
285
+ `django-allauth template documentation <https://docs.allauth.org/en/latest/common/templates.html>`_.
286
+ Forms
287
+ ``ACCOUNT_FORMS = {'login': 'custom_code.forms.MyLoginForm'}`` (and ``signup``, ``change_password`` …)
288
+ replace individual forms; ``MFA_FORMS`` does the same for the 2FA forms. See
289
+ `Forms <https://docs.allauth.org/en/latest/account/forms.html>`_.
290
+ Adapters
291
+ ``ACCOUNT_ADAPTER`` (default ``tom_common.accounts.adapters.TomAccountAdapter``) controls registration, redirects,
292
+ email sending and the inactive-account response; ``MFA_ADAPTER`` (default ``tom_common.accounts.adapters.TomMFAAdapter``)
293
+ controls the issuer name, secret encryption and whether users may remove their authenticator. Subclass the
294
+ TOM Toolkit adapter and override the hook you need.
295
+ Password validators
296
+ ``AUTH_PASSWORD_VALIDATORS`` (see above).
297
+ Post-login requirements
298
+ ``TOM_ACCOUNT_REQUIREMENTS`` is the ordered list of checks run for every logged-in request::
299
+
300
+ TOM_ACCOUNT_REQUIREMENTS = [
301
+ 'tom_common.accounts.requirements.terms_of_service_accepted',
302
+ 'tom_common.accounts.requirements.mfa_enrolled',
303
+ 'tom_common.accounts.requirements.password_not_expired',
304
+ 'tom_common.accounts.requirements.required_fields_present',
305
+ ]
306
+
307
+ Each built-in check is a function whose companion ``TOM_*`` setting is its parameter: unconfigured means the
308
+ check does nothing. Every *configured* requirement also appears as a column on the *Users* page, so
309
+ administrators can see it's status at a glace.
310
+
311
+ To add your own: Define a function taking the request and
312
+ returning ``None`` (meaning the requirement is met) or, if the requirement is not met, the URL name of the
313
+ page that the user should be directed to in order to meet the requirement.
314
+ Alternatively, to also get a *Users*-page column, create a subclass
315
+ ``tom_common.accounts.requirements.AccountRequirement``. Define ``label``, ``is_configured()`` and
316
+ ``is_met(user)``. To pass configuration values, define it its own ``settings.py`` value
317
+ following the same inactive-unless-configured pattern. The pages you return are exempt from the
318
+ check automatically (presumably, they need to be accessed to meet the requirement), as are logout,
319
+ the account pages and static files. Requests from scripts using a token are not subject to these checks
320
+ (see API access above).
321
+ Social / single sign-on
322
+ django-allauth's ``socialaccount`` app (ORCID, GitHub, Google, OpenID Connect providers …) can be added to a
323
+ TOM alongside the TOM Toolkit integration; social logins go through the same second-factor and post-login
324
+ checks. TOM Toolkit does not configure any provider for you; see
325
+ `Social account <https://docs.allauth.org/en/latest/socialaccount/index.html>`_.
326
+
327
+
328
+ .. _auth-deployment-notes:
329
+
330
+ Deployment notes
331
+ ----------------
332
+
333
+ - **Cache**: login rate limits and one-time-code replay protection are stored in Django's ``CACHES``. The default
334
+ file cache in a temporary directory is per machine; if your TOM runs several processes on different hosts (or
335
+ containers), use a shared cache (database cache, Redis, Memcached).
336
+ - **Reverse proxies**: django-allauth does not trust ``X-Forwarded-For`` unless you set
337
+ ``ALLAUTH_TRUSTED_PROXY_COUNT`` to the number of proxies in front of your TOM; otherwise all users share the
338
+ proxy's IP for rate limiting and in terms-of-service records.
339
+ - **Sessions**: consider ``SESSION_COOKIE_AGE``, ``SESSION_SAVE_EVERY_REQUEST`` (idle timeout),
340
+ ``SESSION_EXPIRE_AT_BROWSER_CLOSE``, ``SESSION_COOKIE_SECURE``/``CSRF_COOKIE_SECURE`` and
341
+ ``ACCOUNT_SESSION_REMEMBER = False`` (hide "Remember me") for stricter environments. See
342
+ :doc:`Deployment tips <../deployment/deployment_tips>`.
343
+ - **Email**: self-registration notifications, password reset and any django-allauth email feature need a working
344
+ ``EMAIL_BACKEND``; sender addresses come from ``DEFAULT_FROM_EMAIL`` and ``SERVER_EMAIL``; subjects are prefixed
345
+ with your ``TOM_NAME``. ``manage.py check`` warns (``tom_common.W002``) when approval-required registration or
346
+ password reset is enabled without an email backend; if email cannot be sent, the user or the approver
347
+ is instead informed of this in the UI.
348
+ - **Security log**: login success/failure, logout, password changes, two-factor enrolment/removal, API-token
349
+ regeneration and terms acceptance are logged to the ``tom_common.security`` logger at ``INFO``. Route it to a
350
+ file or your log collector in ``LOGGING``.
351
+ - **Site**: django-allauth uses ``django.contrib.sites``; keep ``SITE_ID`` in your settings (it is there by default).
352
+
353
+
354
+ Settings reference
355
+ ------------------
356
+
357
+ All settings introduced on this page are documented in :doc:`Custom settings <customsettings>`:
358
+ ``TOM_REGISTRATION_STRATEGY``, ``TOM_MFA_REQUIRED``, ``TOM_PASSWORD_EXPIRY_DAYS``, ``TOM_PASSWORD_RESET_ENABLED``,
359
+ ``TOM_TERMS_OF_SERVICE_VERSION``, ``TOM_REQUIRED_USER_FIELDS``, ``TOM_API_TOKEN_EXPIRY_DAYS``,
360
+ ``TOM_API_TOKEN_REQUIRES_MFA``, ``TOM_ACCOUNT_REQUIREMENTS``. django-allauth's own settings (``ACCOUNT_*``,
361
+ ``MFA_*``) are documented at `docs.allauth.org <https://docs.allauth.org/en/latest/>`_.
@@ -0,0 +1,92 @@
1
+ Common Accounts Scenarios
2
+ =========================
3
+
4
+ Three worked configurations combining the controls from :doc:`Accounts and Authentication
5
+ <authentication>`. Each shows the complete ``settings.py`` recipe and what your users
6
+ experience. Settings not shown keep their defaults; settings are documented in
7
+ :doc:`Custom settings <customsettings>`.
8
+
9
+ A public TOM with optional two-factor authentication
10
+ ----------------------------------------------------
11
+
12
+ This is the out-of-the-box configuration. For a TOM whose pages are public
13
+ (the default ``READ_ONLY`` strategy) and whose collaborators get accounts from an
14
+ administrator:
15
+
16
+ .. code-block:: python
17
+
18
+ # settings.py: no changes. (This is the default behavior).
19
+
20
+ What you get: anonymous visitors browse but cannot change anything; administrators create
21
+ accounts from the *Users* page; every user *may* enable two-factor authentication from the
22
+ *Security* card on their profile page. The *Users* page shows who has MFA enabled. To require
23
+ MFA on privileged accounts while leaving it optional otherwise::
24
+
25
+ TOM_MFA_REQUIRED = 'superusers' # MFA required for privileged users; optional otherwise.
26
+
27
+ A locked TOM with self-registration
28
+ -----------------------------------
29
+
30
+ For a TOM serving a collaboration whose data is private, but whose number of users is large
31
+ enough that administrators should not create every account by hand. Users register themselves
32
+ and an administrator approves each one.
33
+
34
+ .. code-block:: python
35
+
36
+ AUTH_STRATEGY = 'LOCKED'
37
+ TOM_REGISTRATION_STRATEGY = 'approval_required'
38
+ TOM_PASSWORD_RESET_ENABLED = True
39
+ TOM_REQUIRED_USER_FIELDS = ['first_name', 'last_name', 'email', 'affiliation']
40
+
41
+ # the notifications this flow sends need working email:
42
+ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
43
+ EMAIL_HOST = os.environ['EMAIL_HOST'] # and EMAIL_PORT, EMAIL_USE_TLS, credentials
44
+ DEFAULT_FROM_EMAIL = SERVER_EMAIL = os.environ['DEFAULT_FROM_EMAIL']
45
+ MANAGERS = [('TOM administrators', os.environ['TOM_ADMIN_EMAIL'])]
46
+
47
+ What you get: every TOM page requires login (except for pages required for registration).
48
+ A *Register* button is placed in the navbar; applicants fill
49
+ in the required fields, wait on the "pending approval" page, and ``MANAGERS`` are emailed;
50
+ an administrator approves the registration request from the *Pending users* table and the
51
+ new user is emailed a login link. Without working email, the flow still works, but you
52
+ must tell applicants yourself. ``manage.py check`` warns of this (no email) situation.
53
+
54
+ A strict hosting policy
55
+ -----------------------
56
+
57
+ For a TOM with mandatory two-factor authentication, password composition and expiry rules,
58
+ terms-of-service acceptance, and API-token controls.
59
+
60
+ .. code-block:: python
61
+
62
+ TOM_MFA_REQUIRED = 'all'
63
+ TOM_PASSWORD_EXPIRY_DAYS = 60
64
+ TOM_TERMS_OF_SERVICE_VERSION = '2026-09-01' # bump the string to require re-acceptance
65
+ TOM_REQUIRED_USER_FIELDS = ['first_name', 'last_name', 'email', 'affiliation', 'phone_number']
66
+ TOM_API_TOKEN_EXPIRY_DAYS = 60
67
+ TOM_API_TOKEN_REQUIRES_MFA = True
68
+
69
+ AUTH_PASSWORD_VALIDATORS = [
70
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
71
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': {'min_length': 12}},
72
+ {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
73
+ {'NAME': 'tom_common.accounts.password_validation.CharacterClassValidator'},
74
+ {'NAME': 'tom_common.accounts.password_validation.NotSameAsCurrentPasswordValidator'},
75
+ ]
76
+
77
+ REST_FRAMEWORK = {
78
+ 'DEFAULT_AUTHENTICATION_CLASSES': [
79
+ 'tom_common.accounts.api_auth.TomTokenAuthentication', # API token requires MFA enabled
80
+ 'rest_framework.authentication.SessionAuthentication',
81
+ # no BasicAuthentication: per-request passwords would bypass the second factor
82
+ ],
83
+ 'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated'],
84
+ }
85
+
86
+ Write your terms of service in ``templates/tom_common/partials/terms_of_service_text.html``.
87
+ (This is the ``templates`` directory at the top level of your TOM, sibling to your
88
+ ``manage.py`` module).
89
+
90
+ What you get: after logging in, every user is walked through accepting the terms,
91
+ enrolling an authenticator app, replacing an expired (or administrator-set) password, and
92
+ completing missing profile fields.