tomtoolkit 3.0.0a13__tar.gz → 3.0.1__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 (751) hide show
  1. tomtoolkit-3.0.1/.git/FETCH_HEAD +1 -0
  2. tomtoolkit-3.0.1/.git/HEAD +1 -0
  3. tomtoolkit-3.0.1/.git/config +12 -0
  4. tomtoolkit-3.0.1/.git/index +0 -0
  5. tomtoolkit-3.0.1/.git/logs/HEAD +1 -0
  6. tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.idx +0 -0
  7. tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.pack → tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.pack +0 -0
  8. tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.rev +0 -0
  9. tomtoolkit-3.0.1/.git/refs/tags/3.0.1 +1 -0
  10. tomtoolkit-3.0.1/.git/shallow +1 -0
  11. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/PKG-INFO +7 -7
  12. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/plugins.rst +9 -0
  13. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/customsettings.rst +3 -0
  14. tomtoolkit-3.0.1/docs/customization/encrypted_model_fields.rst +138 -0
  15. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/encryption.rst +31 -3
  16. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/updating.rst +18 -3
  17. tomtoolkit-3.0.1/docs/managing_data/accessing_data_through_REST_API.rst +161 -0
  18. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/index.rst +1 -0
  19. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/tom_direct_sharing.rst +3 -0
  20. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/observation_module.rst +78 -0
  21. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/poetry.lock +558 -735
  22. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/pyproject.toml +9 -9
  23. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/gaia.py +1 -1
  24. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/__init__.py +1 -1
  25. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/settings.py +7 -2
  26. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/default_settings.py +6 -2
  27. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/main.css +0 -5
  28. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/api_views.py +114 -28
  29. tomtoolkit-3.0.1/tom_dataproducts/migrations/0018_remove_astrometryreduceddatum_unique_astrometry_and_more.py +58 -0
  30. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/models.py +25 -4
  31. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/dataproduct_list_for_target.html +1 -1
  32. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_api.py +31 -6
  33. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/tests.py +3 -4
  34. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/alerce.py +14 -10
  35. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/dataservices.py +10 -7
  36. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/forms.py +3 -1
  37. tomtoolkit-3.0.1/tom_observations/apps.py +16 -0
  38. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facility.py +100 -66
  39. tomtoolkit-3.0.1/tom_observations/templates/tom_observations/partials/navbar_facilities_list.html +15 -0
  40. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templatetags/observation_extras.py +35 -1
  41. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/tests.py +147 -2
  42. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/utils.py +5 -0
  43. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/settings.tmpl +9 -2
  44. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/base_models.py +12 -0
  45. tomtoolkit-3.0.1/tom_targets/migrations/0031_basetarget_shared_by_basetarget_shared_from.py +23 -0
  46. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/persistent_sharing_serializers.py +5 -1
  47. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/serializers.py +1 -0
  48. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/sharing.py +28 -4
  49. tomtoolkit-3.0.0a13/tom_targets/templates/tom_targets/partials/aladin_finderchart.html → tomtoolkit-3.0.1/tom_targets/static/tom_targets/js/aladin_finderchart.js +65 -72
  50. tomtoolkit-3.0.1/tom_targets/templates/tom_targets/partials/aladin_finderchart.html +48 -0
  51. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap.html +1 -1
  52. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/create_persistent_share.html +7 -4
  53. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_buttons.html +8 -1
  54. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_detail.html +9 -0
  55. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_share.html +3 -3
  56. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templatetags/targets_extras.py +4 -4
  57. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/test_api.py +54 -0
  58. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/views.py +7 -2
  59. tomtoolkit-3.0.0a13/.git/FETCH_HEAD +0 -1
  60. tomtoolkit-3.0.0a13/.git/HEAD +0 -1
  61. tomtoolkit-3.0.0a13/.git/config +0 -12
  62. tomtoolkit-3.0.0a13/.git/index +0 -0
  63. tomtoolkit-3.0.0a13/.git/logs/HEAD +0 -1
  64. tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.idx +0 -0
  65. tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.rev +0 -0
  66. tomtoolkit-3.0.0a13/.git/refs/tags/3.0.0-alpha13 +0 -1
  67. tomtoolkit-3.0.0a13/.git/shallow +0 -1
  68. tomtoolkit-3.0.0a13/docs/customization/encrypted_model_fields.rst +0 -230
  69. tomtoolkit-3.0.0a13/tom_observations/apps.py +0 -5
  70. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.coveragerc +0 -0
  71. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.flake8 +0 -0
  72. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/description +0 -0
  73. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/applypatch-msg.sample +0 -0
  74. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/commit-msg.sample +0 -0
  75. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/fsmonitor-watchman.sample +0 -0
  76. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/post-update.sample +0 -0
  77. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-applypatch.sample +0 -0
  78. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-commit.sample +0 -0
  79. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-merge-commit.sample +0 -0
  80. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-push.sample +0 -0
  81. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-rebase.sample +0 -0
  82. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-receive.sample +0 -0
  83. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/prepare-commit-msg.sample +0 -0
  84. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/push-to-checkout.sample +0 -0
  85. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/sendemail-validate.sample +0 -0
  86. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/update.sample +0 -0
  87. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/info/exclude +0 -0
  88. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  89. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  90. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/sprint-story.md +0 -0
  91. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/dependabot.yml +0 -0
  92. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/github-release.yml +0 -0
  93. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/pypi-release.yml +0 -0
  94. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/run-canary-tests.yml +0 -0
  95. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/run-tests.yml +0 -0
  96. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.gitignore +0 -0
  97. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.readthedocs.yml +0 -0
  98. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CITATION.cff +0 -0
  99. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CODE_OF_CONDUCT.md +0 -0
  100. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CONTRIBUTING.md +0 -0
  101. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/LICENSE +0 -0
  102. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/MANIFEST.in +0 -0
  103. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/README-dev.md +0 -0
  104. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/README.md +0 -0
  105. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/Makefile +0 -0
  106. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/base.png +0 -0
  107. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/quote.png +0 -0
  108. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/targets.png +0 -0
  109. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.csv +0 -0
  110. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.png +0 -0
  111. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/snex2layout.png +0 -0
  112. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/standardlayout.png +0 -0
  113. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/common_interface.png +0 -0
  114. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/compare-across-forks.png +0 -0
  115. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/example_query.png +0 -0
  116. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/populated_query_list.png +0 -0
  117. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/query_result.png +0 -0
  118. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/success_broker_list.png +0 -0
  119. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/custom.css +0 -0
  120. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_observations/newform.png +0 -0
  121. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_observations/observebutton.png +0 -0
  122. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_template_tags_doc/Templatetags.png +0 -0
  123. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/darkmode.png +0 -0
  124. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/sciencecat.jpg +0 -0
  125. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/toast_example.png +0 -0
  126. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagemod.png +0 -0
  127. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagenew.png +0 -0
  128. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/after.png +0 -0
  129. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/before.png +0 -0
  130. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/advanced_form.png +0 -0
  131. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/demo_Data_Service.png +0 -0
  132. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/query_form_collapsed.png +0 -0
  133. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/fork.png +0 -0
  134. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/branchdeployed.png +0 -0
  135. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubconnected.png +0 -0
  136. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubintegration.png +0 -0
  137. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/herokudeploybranch.png +0 -0
  138. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/hs.jpg +0 -0
  139. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/htmx_tables_doc/sortable_table_with_general_search.png +0 -0
  140. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/jupyterdoc/newnotebook.png +0 -0
  141. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/lco.jpg +0 -0
  142. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/logo-color.png +0 -0
  143. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/logo.png +0 -0
  144. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/managing_data/data_upload_form.png +0 -0
  145. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/empty_form.png +0 -0
  146. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/fields.png +0 -0
  147. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/myfacility.png +0 -0
  148. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_detail_observe_buttons.png +0 -0
  149. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_moon_separation_plot.png +0 -0
  150. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_visibility_tool.png +0 -0
  151. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/addgroup.png +0 -0
  152. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/targetgroups.png +0 -0
  153. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/plotting_data_doc/plot.png +0 -0
  154. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/pull-request.png +0 -0
  155. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift.png +0 -0
  156. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_display.png +0 -0
  157. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_filter.png +0 -0
  158. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_tag.png +0 -0
  159. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_sources.png +0 -0
  160. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/zff.png +0 -0
  161. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/management_commands.rst +0 -0
  162. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/modules.rst +0 -0
  163. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/exceptions.rst +0 -0
  164. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/hooks.rst +0 -0
  165. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/index.rst +0 -0
  166. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/template_tags.rst +0 -0
  167. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/views.rst +0 -0
  168. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/api_views.rst +0 -0
  169. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/data_processing.md +0 -0
  170. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/index.rst +0 -0
  171. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/models.rst +0 -0
  172. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/templatetags.rst +0 -0
  173. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/utils.rst +0 -0
  174. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/views.rst +0 -0
  175. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/data_services.rst +0 -0
  176. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/exceptions.rst +0 -0
  177. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/index.rst +0 -0
  178. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/models.rst +0 -0
  179. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/views.rst +0 -0
  180. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/facilities.rst +0 -0
  181. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/index.rst +0 -0
  182. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/models.rst +0 -0
  183. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/templatetags.rst +0 -0
  184. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/utils.rst +0 -0
  185. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/views.rst +0 -0
  186. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/api_views.rst +0 -0
  187. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/groups.rst +0 -0
  188. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/index.rst +0 -0
  189. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/models.rst +0 -0
  190. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/templatetags.rst +0 -0
  191. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/utils.rst +0 -0
  192. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/views.rst +0 -0
  193. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/automation.rst +0 -0
  194. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/backgroundtasks.rst +0 -0
  195. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/custom_code.rst +0 -0
  196. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/index.rst +0 -0
  197. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/querying.rst +0 -0
  198. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/scripts.rst +0 -0
  199. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/index.rst +0 -0
  200. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/permissions.rst +0 -0
  201. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/conf.py +0 -0
  202. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/adding_pages.rst +0 -0
  203. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/customize_template_tags.rst +0 -0
  204. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/customize_templates.rst +0 -0
  205. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/htmx_tables.rst +0 -0
  206. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/index.rst +0 -0
  207. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/latex_generation.rst +0 -0
  208. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/testing_toms.rst +0 -0
  209. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/widgets.rst +0 -0
  210. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/data_services/create_dataservice.rst +0 -0
  211. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/data_services/index.rst +0 -0
  212. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/amazons3.rst +0 -0
  213. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/deployment_heroku.rst +0 -0
  214. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/deployment_tips.rst +0 -0
  215. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/index.rst +0 -0
  216. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/examples.rst +0 -0
  217. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/index.rst +0 -0
  218. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/about.rst +0 -0
  219. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/acknowledging_tom_toolkit.rst +0 -0
  220. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/contributing.rst +0 -0
  221. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/credits.rst +0 -0
  222. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/faqs.rst +0 -0
  223. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/getting_started.rst +0 -0
  224. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/manual_installation.rst +0 -0
  225. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/programming_resources.rst +0 -0
  226. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/support.rst +0 -0
  227. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/tomarchitecture.rst +0 -0
  228. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/troubleshooting.rst +0 -0
  229. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/workflow.rst +0 -0
  230. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/make.bat +0 -0
  231. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/continuous_sharing.rst +0 -0
  232. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/customizing_data_processing.rst +0 -0
  233. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/plotting_data.rst +0 -0
  234. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/single_target_data_service.rst +0 -0
  235. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/stream_pub_sub.rst +0 -0
  236. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/add_facility_form_admin.png +0 -0
  237. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/customize_ocs_facility.rst +0 -0
  238. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/index.rst +0 -0
  239. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/selecting_targets_for_facility.rst +0 -0
  240. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/strategies.rst +0 -0
  241. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/target_selection_menu_option.png +0 -0
  242. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/target_selection_table_default.png +0 -0
  243. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/index.rst +0 -0
  244. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_fields.rst +0 -0
  245. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_matcher.rst +0 -0
  246. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_table.rst +0 -0
  247. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/manage.py +0 -0
  248. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/test_settings.py +0 -0
  249. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/__init__.py +0 -0
  250. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/admin.py +0 -0
  251. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/alerts.py +0 -0
  252. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/apps.py +0 -0
  253. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/__init__.py +0 -0
  254. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/alerce.py +0 -0
  255. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/antares.py +0 -0
  256. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/fink.py +0 -0
  257. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/lasair.py +0 -0
  258. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/scout.py +0 -0
  259. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/tns.py +0 -0
  260. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/exceptions.py +0 -0
  261. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/__init__.py +0 -0
  262. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/commands/__init__.py +0 -0
  263. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/commands/runbrokerquery.py +0 -0
  264. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0001_initial.py +0 -0
  265. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0002_auto_20190626_2135.py +0 -0
  266. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0003_auto_20190701_2226.py +0 -0
  267. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0004_auto_20210204_2300.py +0 -0
  268. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0005_alertstreammessage.py +0 -0
  269. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0006_alter_alertstreammessage_exchange_status.py +0 -0
  270. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0007_alter_alertstreammessage_message_id.py +0 -0
  271. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/__init__.py +0 -0
  272. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/models.py +0 -0
  273. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_confirm_delete.html +0 -0
  274. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_list.html +0 -0
  275. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/navbar_link.html +0 -0
  276. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/submit_upstream_form.html +0 -0
  277. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_form.html +0 -0
  278. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_result.html +0 -0
  279. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templatetags/alerts_extras.py +0 -0
  280. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/__init__.py +0 -0
  281. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/__init__.py +0 -0
  282. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_alerce.py +0 -0
  283. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_gaia.py +0 -0
  284. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_lasair.py +0 -0
  285. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/tests.py +0 -0
  286. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/urls.py +0 -0
  287. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/views.py +0 -0
  288. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/wsgi.py +0 -0
  289. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/__init__.py +0 -0
  290. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/admin.py +0 -0
  291. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/apps.py +0 -0
  292. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0001_initial.py +0 -0
  293. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0002_calendarevent_target_list.py +0 -0
  294. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0003_calendarevent_proposal_calendarevent_telescope_and_more.py +0 -0
  295. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0004_eventtodo.py +0 -0
  296. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0005_calendarevent_instrument.py +0 -0
  297. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/__init__.py +0 -0
  298. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/models.py +0 -0
  299. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/calendar_page.html +0 -0
  300. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/calendar.html +0 -0
  301. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/event_form.html +0 -0
  302. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/navbar_item.html +0 -0
  303. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/target_list_block.html +0 -0
  304. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/todos.html +0 -0
  305. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templatetags/__init__.py +0 -0
  306. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templatetags/calendar_tags.py +0 -0
  307. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/tests.py +0 -0
  308. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/urls.py +0 -0
  309. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/utils.py +0 -0
  310. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/views.py +0 -0
  311. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/__init__.py +0 -0
  312. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/admin.py +0 -0
  313. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/apps.py +0 -0
  314. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/forms.py +0 -0
  315. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvester.py +0 -0
  316. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/__init__.py +0 -0
  317. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/jplhorizons.py +0 -0
  318. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/mpc.py +0 -0
  319. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/ned.py +0 -0
  320. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/simbad.py +0 -0
  321. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/tns.py +0 -0
  322. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/partials/catalog_query_menu.html +0 -0
  323. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/query_form.html +0 -0
  324. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/__init__.py +0 -0
  325. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/dataservices_extras.py +0 -0
  326. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/__init__.py +0 -0
  327. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/__init__.py +0 -0
  328. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/__init__.py +0 -0
  329. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/test_65803_mpc_orb.json +0 -0
  330. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_jplhorizons.py +0 -0
  331. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_mpc.py +0 -0
  332. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_simbad.py +0 -0
  333. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/tests.py +0 -0
  334. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/urls.py +0 -0
  335. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/views.py +0 -0
  336. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/__init__.py +0 -0
  337. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/admin.py +0 -0
  338. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/api_router.py +0 -0
  339. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/api_views.py +0 -0
  340. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/apps.py +0 -0
  341. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/encryption.py +0 -0
  342. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/exceptions.py +0 -0
  343. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/forms.py +0 -0
  344. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/hints.py +0 -0
  345. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/hooks.py +0 -0
  346. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/htmx_table.py +0 -0
  347. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/__init__.py +0 -0
  348. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/commands/__init__.py +0 -0
  349. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/commands/rotate_encryption_key.py +0 -0
  350. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/middleware.py +0 -0
  351. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0001_initial.py +0 -0
  352. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0002_usersession.py +0 -0
  353. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0004_delete_usersession.py +0 -0
  354. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/__init__.py +0 -0
  355. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/mixins.py +0 -0
  356. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/models.py +0 -0
  357. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/serializers.py +0 -0
  358. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/signals.py +0 -0
  359. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/HELP-US-OUT.txt +0 -0
  360. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.css +0 -0
  361. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.min.css +0 -0
  362. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  363. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  364. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +0 -0
  365. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  366. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  367. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  368. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/animated.less +0 -0
  369. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/bordered-pulled.less +0 -0
  370. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/core.less +0 -0
  371. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/fixed-width.less +0 -0
  372. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/font-awesome.less +0 -0
  373. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/icons.less +0 -0
  374. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/larger.less +0 -0
  375. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/list.less +0 -0
  376. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/mixins.less +0 -0
  377. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/path.less +0 -0
  378. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/rotated-flipped.less +0 -0
  379. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/screen-reader.less +0 -0
  380. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/stacked.less +0 -0
  381. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/variables.less +0 -0
  382. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_animated.scss +0 -0
  383. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_bordered-pulled.scss +0 -0
  384. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_core.scss +0 -0
  385. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_fixed-width.scss +0 -0
  386. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_icons.scss +0 -0
  387. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_larger.scss +0 -0
  388. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_list.scss +0 -0
  389. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_mixins.scss +0 -0
  390. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_path.scss +0 -0
  391. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_rotated-flipped.scss +0 -0
  392. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_screen-reader.scss +0 -0
  393. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_stacked.scss +0 -0
  394. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_variables.scss +0 -0
  395. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/font-awesome.scss +0 -0
  396. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/dark.css +0 -0
  397. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/bluespinner.gif +0 -0
  398. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16.ico +0 -0
  399. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16x16.png +0 -0
  400. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32.ico +0 -0
  401. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32x32.png +0 -0
  402. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon.ico +0 -0
  403. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/icon.png +0 -0
  404. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color-cropped.png +0 -0
  405. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color.png +0 -0
  406. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-text.png +0 -0
  407. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/js/htmx.min.js +0 -0
  408. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/404.html +0 -0
  409. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_confirm_delete.html +0 -0
  410. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_form.html +0 -0
  411. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/app_user_lists.html +0 -0
  412. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/group_list.html +0 -0
  413. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/user_list.html +0 -0
  414. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_change_password.html +0 -0
  415. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_delete.html +0 -0
  416. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_list.html +0 -0
  417. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/bootstrap5_overrides/pagination.html +0 -0
  418. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/comments/form.html +0 -0
  419. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/comments/list.html +0 -0
  420. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/django_comments/comment_confirm_delete.html +0 -0
  421. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/django_filters/widgets/multiwidget.html +0 -0
  422. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/registration/login.html +0 -0
  423. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/base.html +0 -0
  424. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/bootstrap_htmx.html +0 -0
  425. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/change_user_password.html +0 -0
  426. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/create_user.html +0 -0
  427. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/index.html +0 -0
  428. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/navbar_content.html +0 -0
  429. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/api_token.html +0 -0
  430. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/app_profiles.html +0 -0
  431. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/clearable_encrypted_input.html +0 -0
  432. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/confirm_user_delete.html +0 -0
  433. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/copy_button.html +0 -0
  434. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/htmx_table_partial.html +0 -0
  435. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/include_app_partial.html +0 -0
  436. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/messages.html +0 -0
  437. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_app_addons.html +0 -0
  438. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_login.html +0 -0
  439. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/revealable_password_input.html +0 -0
  440. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/user_data.html +0 -0
  441. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/user_profile.html +0 -0
  442. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/__init__.py +0 -0
  443. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/bootstrap5_overrides.py +0 -0
  444. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/tom_common_extras.py +0 -0
  445. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/user_extras.py +0 -0
  446. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/tests.py +0 -0
  447. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/urls.py +0 -0
  448. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/views.py +0 -0
  449. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/__init__.py +0 -0
  450. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/admin.py +0 -0
  451. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/apps.py +0 -0
  452. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/data_processor.py +0 -0
  453. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/exceptions.py +0 -0
  454. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/fields.py +0 -0
  455. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/filters.py +0 -0
  456. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/forms.py +0 -0
  457. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/hooks.py +0 -0
  458. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/__init__.py +0 -0
  459. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/__init__.py +0 -0
  460. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/downloaddata.py +0 -0
  461. /tomtoolkit-3.0.0a13/tom_dataproducts/management/commands/migrateReducedDatums.py → /tomtoolkit-3.0.1/tom_dataproducts/management/commands/migrate_reduced_datums.py +0 -0
  462. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/updatereduceddata.py +0 -0
  463. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0001_initial.py +0 -0
  464. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0004_auto_20190626_0904.py +0 -0
  465. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0005_auto_20190704_1010.py +0 -0
  466. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0006_auto_20190912_2013.py +0 -0
  467. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0007_manual_20191016_rename_type.py +0 -0
  468. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0008_auto_20191205_1952.py +0 -0
  469. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0009_auto_20210204_2221.py +0 -0
  470. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0010_manual_20210305_fix_spectroscopy.py +0 -0
  471. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message.py +0 -0
  472. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message_squashed_0015_remove_reduceddatum_message.py +0 -0
  473. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0012_alter_reduceddatum_data_product_and_more.py +0 -0
  474. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0013_alter_reduceddatum_message.py +0 -0
  475. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0014_alter_reduceddatum_timestamp.py +0 -0
  476. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0015_remove_reduceddatum_message.py +0 -0
  477. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0016_reduceddatum_instrument_reduceddatum_telescope_and_more.py +0 -0
  478. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0017_spectroscopyreduceddatum_wavelength_unit.py +0 -0
  479. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/__init__.py +0 -0
  480. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/__init__.py +0 -0
  481. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/atlas_processor.py +0 -0
  482. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/data_serializers.py +0 -0
  483. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/panstarrs_processor.py +0 -0
  484. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/photometry_processor.py +0 -0
  485. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/spectroscopy_processor.py +0 -0
  486. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/serializers.py +0 -0
  487. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/sharing.py +0 -0
  488. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/__init__.py +0 -0
  489. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/atlas.py +0 -0
  490. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/__init__.py +0 -0
  491. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs.py +0 -0
  492. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs_api.py +0 -0
  493. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/tests.py +0 -0
  494. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/single_target_data_service.py +0 -0
  495. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/img/placeholder.png +0 -0
  496. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/photometry_sample.csv +0 -0
  497. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/spectrum_sample.csv +0 -0
  498. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tasks.py +0 -0
  499. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/add_product_to_group.html +0 -0
  500. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_confirm_delete.html +0 -0
  501. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_list.html +0 -0
  502. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_confirm_delete.html +0 -0
  503. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_detail.html +0 -0
  504. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_form.html +0 -0
  505. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_list.html +0 -0
  506. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_button.html +0 -0
  507. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_scripts.html +0 -0
  508. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_datalist_for_target.html +0 -0
  509. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_for_target.html +0 -0
  510. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/query_single_target_data_service.html +0 -0
  511. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/recent_photometry.html +0 -0
  512. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/reduceddatum_sparkline.html +0 -0
  513. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/saved_dataproduct_list_for_observation.html +0 -0
  514. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/spectroscopy_for_target.html +0 -0
  515. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/unsaved_dataproduct_list_for_observation.html +0 -0
  516. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/upload_dataproduct.html +0 -0
  517. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/single_target_data_service_form.html +0 -0
  518. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/upload_reduced_data.html +0 -0
  519. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/__init__.py +0 -0
  520. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/dataproduct_extras.py +0 -0
  521. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/__init__.py +0 -0
  522. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_atlas.py +0 -0
  523. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_atlas_fp.csv +0 -0
  524. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_lightcurve.csv +0 -0
  525. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.csv +0 -0
  526. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.fits +0 -0
  527. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/urls.py +0 -0
  528. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/utils.py +0 -0
  529. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/views.py +0 -0
  530. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/__init__.py +0 -0
  531. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/admin.py +0 -0
  532. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/apps.py +0 -0
  533. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/mpc.py +0 -0
  534. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/ned.py +0 -0
  535. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/simbad.py +0 -0
  536. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/tns.py +0 -0
  537. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/__init__.py +0 -0
  538. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/listqueries.py +0 -0
  539. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/rundataquery.py +0 -0
  540. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/migrations/0001_initial.py +0 -0
  541. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/migrations/__init__.py +0 -0
  542. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/models.py +0 -0
  543. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_advanced_form.html +0 -0
  544. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_results_table.html +0 -0
  545. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_simple_form.html +0 -0
  546. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/dataservicequery_confirm_delete.html +0 -0
  547. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/mpc/partials/mpc_results_table.html +0 -0
  548. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/basic_simple_form.html +0 -0
  549. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/catalog_query_menu.html +0 -0
  550. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/navbar_list.html +0 -0
  551. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/query_results_table.html +0 -0
  552. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/update_data_from_dataservice.html +0 -0
  553. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_form.html +0 -0
  554. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_list.html +0 -0
  555. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_result.html +0 -0
  556. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_query_results_table.html +0 -0
  557. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_simple_form.html +0 -0
  558. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templatetags/dataservices_extras.py +0 -0
  559. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/__init__.py +0 -0
  560. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/__init__.py +0 -0
  561. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/test_mpc.py +0 -0
  562. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_api.py +0 -0
  563. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/__init__.py +0 -0
  564. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/test_65803_mpc_orb.json +0 -0
  565. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/tests.py +0 -0
  566. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/urls.py +0 -0
  567. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/views.py +0 -0
  568. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/__init__.py +0 -0
  569. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/admin.py +0 -0
  570. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/api_views.py +0 -0
  571. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadence.py +0 -0
  572. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/__init__.py +0 -0
  573. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/resume_cadence_after_failure.py +0 -0
  574. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/retry_failed_observations.py +0 -0
  575. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/__init__.py +0 -0
  576. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/blanco.py +0 -0
  577. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/gemini.py +0 -0
  578. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lco.py +0 -0
  579. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lco_redirect.py +0 -0
  580. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lt.py +0 -0
  581. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/manual.py +0 -0
  582. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/ocs.py +0 -0
  583. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/soar.py +0 -0
  584. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/forms.py +0 -0
  585. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/__init__.py +0 -0
  586. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/__init__.py +0 -0
  587. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/runcadencestrategies.py +0 -0
  588. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/updatestatus.py +0 -0
  589. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0001_initial.py +0 -0
  590. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0002_auto_20190306_2343.py +0 -0
  591. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0003_auto_20190503_2318.py +0 -0
  592. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0004_observationgroup.py +0 -0
  593. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0005_auto_20191210_0007.py +0 -0
  594. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0006_observationgroup_cadence_strategy.py +0 -0
  595. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0007_observationstrategy.py +0 -0
  596. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0008_observationgroup_cadence_parameters.py +0 -0
  597. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0009_observationrecord_user.py +0 -0
  598. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0010_manual_create_dynamic_cadence.py +0 -0
  599. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0011_auto_20200917_0306.py +0 -0
  600. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0012_auto_20210205_1819.py +0 -0
  601. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0013_facility.py +0 -0
  602. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0014_alter_facility_orbit.py +0 -0
  603. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0015_remove_facility_mpc_site_code_and_more.py +0 -0
  604. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0016_alter_facility_options.py +0 -0
  605. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/__init__.py +0 -0
  606. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/models.py +0 -0
  607. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/observation_template.py +0 -0
  608. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/serializers.py +0 -0
  609. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/static/tom_observations/css/main.css +0 -0
  610. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/existing_observation_confirm.html +0 -0
  611. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/facility_status.html +0 -0
  612. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_form.html +0 -0
  613. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_list.html +0 -0
  614. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_confirm_delete.html +0 -0
  615. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_form.html +0 -0
  616. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_list.html +0 -0
  617. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationrecord_detail.html +0 -0
  618. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_confirm_delete.html +0 -0
  619. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_form.html +0 -0
  620. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_list.html +0 -0
  621. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationupdate_form.html +0 -0
  622. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/existing_observation_form.html +0 -0
  623. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_map.html +0 -0
  624. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_observation_form.html +0 -0
  625. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_status_table.html +0 -0
  626. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_distribution.html +0 -0
  627. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_list.html +0 -0
  628. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_plan.html +0 -0
  629. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_type_tabs.html +0 -0
  630. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_from_record.html +0 -0
  631. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_run.html +0 -0
  632. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observing_buttons.html +0 -0
  633. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_observation_id_form.html +0 -0
  634. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_status_button.html +0 -0
  635. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templatetags/__init__.py +0 -0
  636. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/__init__.py +0 -0
  637. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/__init__.py +0 -0
  638. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_gemini.py +0 -0
  639. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_lco.py +0 -0
  640. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_ocs.py +0 -0
  641. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_soar.py +0 -0
  642. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/factories.py +0 -0
  643. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_api.py +0 -0
  644. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_cadence.py +0 -0
  645. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_credentials.py +0 -0
  646. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/urls.py +0 -0
  647. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/utils.py +0 -0
  648. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/views.py +0 -0
  649. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/widgets.py +0 -0
  650. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/__init__.py +0 -0
  651. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/apps.py +0 -0
  652. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/__init__.py +0 -0
  653. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/commands/__init__.py +0 -0
  654. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/commands/tom_setup.py +0 -0
  655. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/css.tmpl +0 -0
  656. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/models.tmpl +0 -0
  657. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/urls.tmpl +0 -0
  658. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/__init__.py +0 -0
  659. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/admin.py +0 -0
  660. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/api_views.py +0 -0
  661. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/apps.py +0 -0
  662. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/fields.py +0 -0
  663. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/filters.py +0 -0
  664. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/forms.py +0 -0
  665. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/groups.py +0 -0
  666. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/__init__.py +0 -0
  667. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/__init__.py +0 -0
  668. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/converttargetextras.py +0 -0
  669. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/setdefaultextras.py +0 -0
  670. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/merge.py +0 -0
  671. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0001_initial.py +0 -0
  672. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190115_2102.py +0 -0
  673. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190117_2248.py +0 -0
  674. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0003_merge_20190123_1754.py +0 -0
  675. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0004_auto_20190123_2010.py +0 -0
  676. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0005_auto_20190214_1722.py +0 -0
  677. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0006_auto_20190403_1659.py +0 -0
  678. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190423_1455.py +0 -0
  679. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190503_2318.py +0 -0
  680. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190515_0047.py +0 -0
  681. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190515_0914.py +0 -0
  682. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190520_1645.py +0 -0
  683. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0009_auto_20190605_1656.py +0 -0
  684. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_auto_20190715_1657.py +0 -0
  685. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_merge_20190612_1227.py +0 -0
  686. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0011_merge_20190731_1821.py +0 -0
  687. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0012_target_perihdist.py +0 -0
  688. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0013_manual_20190916_multiple_names.py +0 -0
  689. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0014_auto_20190923_1827.py +0 -0
  690. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0015_auto_20190923_2233.py +0 -0
  691. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0016_auto_20191211_1707.py +0 -0
  692. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0017_auto_20200130_2350.py +0 -0
  693. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0018_auto_20200714_1832.py +0 -0
  694. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0019_auto_20210811_0018.py +0 -0
  695. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0020_alter_targetname_created_alter_targetname_modified.py +0 -0
  696. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0021_rename_target_basetarget_alter_basetarget_options.py +0 -0
  697. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0022_persistentshare.py +0 -0
  698. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0023_alter_basetarget_created.py +0 -0
  699. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0024_basetarget_permissions.py +0 -0
  700. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0025_auto_20250206_2017.py +0 -0
  701. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0026_alter_basetarget_permissions.py +0 -0
  702. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0027_alter_basetarget_epoch_of_elements_and_more.py +0 -0
  703. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0028_basetarget_abs_mag_basetarget_slope_and_more.py +0 -0
  704. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0029_alter_basetarget_permissions.py +0 -0
  705. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0030_alter_basetarget_slope.py +0 -0
  706. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/__init__.py +0 -0
  707. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/models.py +0 -0
  708. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/permissions.py +0 -0
  709. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/seed.py +0 -0
  710. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/signals/__init__.py +0 -0
  711. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/signals/handlers.py +0 -0
  712. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/css/main.css +0 -0
  713. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/target_import.csv +0 -0
  714. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tables.py +0 -0
  715. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap_targets_oob.html +0 -0
  716. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tab_divs.html +0 -0
  717. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tabs.html +0 -0
  718. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/module_buttons.html +0 -0
  719. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/moon_distance.html +0 -0
  720. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/observation_table.html +0 -0
  721. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/persistent_share_table.html +0 -0
  722. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recent_targets.html +0 -0
  723. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recently_updated_targets.html +0 -0
  724. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_data.html +0 -0
  725. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_feature.html +0 -0
  726. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_groups.html +0 -0
  727. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_merge_fields.html +0 -0
  728. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_plan.html +0 -0
  729. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table.html +0 -0
  730. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table_partial.html +0 -0
  731. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_unknown_statuses.html +0 -0
  732. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/targetlist_select.html +0 -0
  733. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_confirm_delete.html +0 -0
  734. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_facility_selection.html +0 -0
  735. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_form.html +0 -0
  736. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_group_share.html +0 -0
  737. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_grouping.html +0 -0
  738. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_import.html +0 -0
  739. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_list.html +0 -0
  740. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_manage_persistent_shares.html +0 -0
  741. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_merge.html +0 -0
  742. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_confirm_delete.html +0 -0
  743. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_form.html +0 -0
  744. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templatetags/__init__.py +0 -0
  745. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/__init__.py +0 -0
  746. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/factories.py +0 -0
  747. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/tests.py +0 -0
  748. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/urls.py +0 -0
  749. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/utils.py +0 -0
  750. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/validators.py +0 -0
  751. {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/viewsets.py +0 -0
@@ -0,0 +1 @@
1
+ d8ccf933fe2e40c5e92eeb9ee11251009f25331b 'd8ccf933fe2e40c5e92eeb9ee11251009f25331b' of https://github.com/TOMToolkit/tom_base
@@ -0,0 +1 @@
1
+ d8ccf933fe2e40c5e92eeb9ee11251009f25331b
@@ -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 eC1hY2Nlc3MtdG9rZW46Z2hzXzE1MzY4X2V5SmhiR2NpT2lKRlV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoZFdRaU9pSmhkWFJvYm1RaUxDSmpkSGdpT2lKTVpGZHRlbVZVYTJKcGFFWlNOVE0yVERVeFVUY3hVRjkzU1V4R1RrSXpZbHB2VEVKMU5YSktjbUZsTWt0MVdrNWpWeTAyUjBobklpd2laWGh3SWpveE56ZzNOams0TURFMkxDSnBZWFFpT2pFM09EYzJPVFEwTVRZc0ltbHpjeUk2SW1kcGRHaDFZaUlzSW1wMGFTSTZJalZpTnpoalpHUXdMV05oWW1ZdE5HTTNNUzFoTTJWakxUWmxNRGRtWmpVMVpXRTVPQ0lzSW5abGNpSTZNMzAuTkNBaFM4Um5FcHdrMVRINnk0bkhZZWY4Ynp5SW1iQ0puVEl1WGJrVUtMSURuVXdCeTUwQTN6YUVlUDFkWmo1V1I2WU50TzRqaHpWNFpFNk9BakozUEE=
Binary file
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 d8ccf933fe2e40c5e92eeb9ee11251009f25331b runner <runner@runnervm76f27.c41v2zfaraieda3n4uxiuojluc.phxx.internal.cloudapp.net> 1787694421 +0000 checkout: moving from master to refs/tags/3.0.1
@@ -0,0 +1 @@
1
+ d8ccf933fe2e40c5e92eeb9ee11251009f25331b
@@ -0,0 +1 @@
1
+ d8ccf933fe2e40c5e92eeb9ee11251009f25331b
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tomtoolkit
3
- Version: 3.0.0a13
3
+ Version: 3.0.1
4
4
  Summary: TOM Toolkit and base modules
5
5
  License-Expression: GPL-3.0-only
6
6
  License-File: LICENSE
@@ -22,26 +22,26 @@ Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.12
23
23
  Classifier: Topic :: Scientific/Engineering :: Astronomy
24
24
  Classifier: Topic :: Scientific/Engineering :: Physics
25
- Requires-Dist: alerce (>=2.0,<3.0)
25
+ Requires-Dist: alerce (>=2.3.1,<3.0)
26
26
  Requires-Dist: astroplan (>=0.8,<0.11)
27
27
  Requires-Dist: astropy (>=5.3.3,<6) ; python_version < "3.10"
28
28
  Requires-Dist: astropy (>=5.3.3,<8) ; python_version >= "3.10"
29
29
  Requires-Dist: astroquery (<1)
30
30
  Requires-Dist: beautifulsoup4 (<5)
31
31
  Requires-Dist: crispy-bootstrap5 (<2027)
32
- Requires-Dist: cryptography (<=48.0.1)
33
- Requires-Dist: django (>=5,<6)
32
+ Requires-Dist: cryptography (<=50.0.0)
33
+ Requires-Dist: django (>=5.2.17,<6)
34
34
  Requires-Dist: django-bootstrap5 (<27)
35
35
  Requires-Dist: django-contrib-comments (>=2.0,<3.0)
36
- Requires-Dist: django-crispy-forms (>=2.0,<3.0)
36
+ Requires-Dist: django-crispy-forms (>=2.7,<3.0)
37
37
  Requires-Dist: django-extensions (>=3.0.0,<4.0.0)
38
38
  Requires-Dist: django-filter (>=23,<25)
39
39
  Requires-Dist: django-gravatar2 (>=1.0.0,<2.0.0)
40
40
  Requires-Dist: django-guardian (>=2.0.0,<3.0.0)
41
- Requires-Dist: django-htmx (>=1.0.0,<2.0.0)
41
+ Requires-Dist: django-htmx (>=1.29.0,<2.0.0)
42
42
  Requires-Dist: django-tables2 (>=3.0,<4)
43
43
  Requires-Dist: django-tasks (>=0.6.1,<0.7.0)
44
- Requires-Dist: djangorestframework (>=3.15,<4)
44
+ Requires-Dist: djangorestframework (>=3.18.0,<4)
45
45
  Requires-Dist: fits2image (>=0.4,<0.5)
46
46
  Requires-Dist: importlib-resources (>=6.4.5,<6.5.0)
47
47
  Requires-Dist: markdown (<4)
@@ -10,6 +10,15 @@ functions, we support a range of optional plugin modules for the Toolkit.
10
10
  These range from adding the ability to interface with additional
11
11
  observatories and catalogs, to providing additional plotting or data analytics functionality.
12
12
 
13
+ tom_across
14
+ ----------
15
+
16
+ `tom_across <https://github.com/TOMToolkit/tom_across>`_
17
+
18
+ This plugin integrates the Astrophysics Cross-Observatory Science Support (`ACROSS <https://science.data.nasa.gov/data-sites/across>_`)
19
+ tools into the TOM Toolkit. Users can view observation records and target visibility directly from the target page using ACROSS's
20
+ aggregated NASA mission observation and observatory status information.
21
+
13
22
  tom_hermes
14
23
  ----------
15
24
 
@@ -181,6 +181,9 @@ A list of observation facility classes to make available to your TOM. If
181
181
  you have written or downloaded a custom observation facility you would
182
182
  add the class to this list to make your TOM load it.
183
183
 
184
+ INSTALLED_APPS that implement the ``observation_facilities()`` AppConfig integration
185
+ point do not need to be listed here.
186
+
184
187
  `TOM_LATEX_PROCESSORS <#tom-latex-processors>`__
185
188
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
186
189
 
@@ -0,0 +1,138 @@
1
+ Encrypted Model Fields
2
+ ======================
3
+
4
+ If your ``custom_code`` or reusable app needs to store a secret (e.g. an API key
5
+ or password for an external service) — TOM Toolkit provides
6
+ :class:`~tom_common.encryption.EncryptedModelField`, a model field that
7
+ encrypts its value as it is stored in the database.
8
+
9
+ .. note::
10
+
11
+ Encryption protects the secret from passive database exposure. It does
12
+ **not** protect it from anyone who can read your TOM's ``settings.SECRET_KEY``
13
+ (such as a server administrator). See :doc:`/deployment/encryption` for the
14
+ encryption documentation relevant to TOM administrators.
15
+
16
+ This page describes how to add an encrypted field to a user-profile model,
17
+ how to display it, and how to edit it. Working examples live in
18
+ `tom_hermes <https://github.com/TOMToolkit/tom_hermes>`__,
19
+ `tom_eso <https://github.com/TOMToolkit/tom_eso>`__, and
20
+ `tom_demoapp <https://github.com/TOMToolkit/tom_demoapp>`__.
21
+
22
+ Adding an EncryptedModelField
23
+ -------------------------------
24
+
25
+ Declare an :class:`~tom_common.encryption.EncryptedModelField` on your model:
26
+
27
+ .. code-block:: python
28
+ :caption: models.py
29
+
30
+ from django.conf import settings
31
+ from django.db import models
32
+
33
+ from tom_common.encryption import EncryptedModelField
34
+
35
+
36
+ class MyAppProfile(models.Model):
37
+ user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
38
+ api_key = EncryptedModelField(null=True, blank=True)
39
+
40
+ Read and write it like any other field; the value is encrypted on save and
41
+ decrypted on load:
42
+
43
+ .. code-block:: python
44
+
45
+ profile.api_key = 'something-secret' # encrypted on save
46
+ profile.save()
47
+
48
+ profile.api_key # -> 'something-secret' (decrypted on load)
49
+
50
+ Assigning ``None`` or ``''`` clears the stored value (the column becomes
51
+ ``NULL``); reading an unset value returns ``None``.
52
+
53
+ Displaying the value of an encrypted field
54
+ -------------------------------------------
55
+
56
+ To show the value with a click-to-reveal control, use ``tom_common``'s
57
+ ``revealable_password_input.html`` partial. Pass it the **plaintext**, which
58
+ comes from direct attribute access (``profile.api_key``):
59
+
60
+ .. code-block:: python
61
+ :caption: e.g. an inclusion tag or a view's get_context_data
62
+
63
+ context = {'api_key': profile.api_key} # plaintext becomes part of the template context
64
+
65
+ .. code-block:: html+django
66
+ :caption: my_template.html
67
+
68
+ {% if api_key %}
69
+ {% include 'tom_common/partials/revealable_password_input.html' with value=api_key %}
70
+ {% else %}
71
+ (not set)
72
+ {% endif %}
73
+
74
+ .. note::
75
+
76
+ Pass the plaintext only to templates the current user is allowed to see: the
77
+ partial embeds the plaintext value in the page HTML. Revealing it merely toggles
78
+ its visibility. Do **not** source the value from ``model_to_dict``, a DRF
79
+ serializer, or ``dumpdata`` — those return a ``REDACTED`` placeholder for
80
+ encrypted fields, never the secret. (If a profile card auto-iterates fields
81
+ with ``model_to_dict``, exclude the encrypted one and add ``profile.api_key``
82
+ back explicitly.)
83
+
84
+ Editing the value in an UpdateView
85
+ -----------------------------------
86
+
87
+ List the field on a ``ModelForm``-based view. It renders as a masked input
88
+ paired with a **Clear** checkbox:
89
+
90
+ .. code-block:: python
91
+
92
+ class MyProfileUpdateView(UpdateView):
93
+ model = MyAppProfile
94
+ fields = ['api_key']
95
+
96
+ On submitting the update form, an ``EncryptedModelField`` has the following behavior:
97
+
98
+ - a new, typed-in value replaces the stored one;
99
+ - a **blank** input keeps the stored value — so editing other fields on the
100
+ same form never wipes the secret;
101
+ - Checking the **Clear** checkbox with a blank input removes the current value (column becomes ``NULL``);
102
+ - a typed-in value together with **Clear** keeps the typed value (Clear is ignored).
103
+
104
+ The form never renders the stored value, so it can't leak through the edit
105
+ page. The placeholder text displayed in the input box signals the current state
106
+ — ``(A stored value is hidden) — type to replace`` versus ``(not set) — type to add``.
107
+
108
+ How it works (implementation details)
109
+ -------------------------------------
110
+
111
+ Each value is encrypted with a Fernet cipher derived from
112
+ ``settings.SECRET_KEY`` (via a key derivation function, :ref:`HKDF <kdf-implementation-details>`).
113
+ Decryption also tries any ``settings.SECRET_KEY_FALLBACKS``, facilitating key rotation —
114
+ see :doc:`/deployment/encryption` for the procedure and the ``rotate_encryption_key`` command.
115
+
116
+ If a stored value cannot be decrypted under any active key, reading it raises
117
+ ``cryptography.fernet.InvalidToken`` — usually because a key was dropped from
118
+ the rotation set before its data was re-encrypted.
119
+
120
+ Limitations
121
+ -----------
122
+
123
+ - **No filtering.** Fernet ciphertext is non-deterministic, so equality lookups
124
+ can never match; ``MyAppProfile.objects.filter(api_key=...)`` raises
125
+ ``FieldError``. For a searchable secret, store a companion HMAC hash column
126
+ and query that.
127
+
128
+ API reference
129
+ -------------
130
+
131
+ :class:`~tom_common.encryption.EncryptedModelField` (`source <https://github.com/TOMToolkit/tom_base/blob/dev/tom_common/encryption.py>`__)
132
+ A ``models.BinaryField`` subclass that encrypts on save and decrypts on
133
+ load. See the class docstring for the full method-level contract.
134
+
135
+ :class:`~tom_common.encryption.EncryptedFormField` (`source <https://github.com/TOMToolkit/tom_base/blob/dev/tom_common/encryption.py>`__)
136
+ The form-side companion (masked input plus the blank-preserves-existing
137
+ behavior). ``ModelForm`` picks it up automatically via
138
+ :meth:`EncryptedModelField.formfield`.
@@ -10,7 +10,7 @@ create an encrypted database field, your documentation is here:
10
10
  ------
11
11
 
12
12
  TOM Toolkit encrypts sensitive user data (API keys, observatory
13
- credentials, anything declared with :class:`EncryptedProperty`) using a
13
+ credentials, anything declared with :class:`EncryptedModelField`) using a
14
14
  single Fernet cipher derived from Django's ``settings.SECRET_KEY``.
15
15
  That means when an encrypted field is written to or read from the database,
16
16
  a cipher is created. The cipher can encrypt unencrypted plaintext (in) and decrypt
@@ -89,7 +89,7 @@ The end-to-end procedure:
89
89
 
90
90
  python manage.py rotate_encryption_key
91
91
 
92
- The command walks every :class:`EncryptedProperty` field across
92
+ The command walks every :class:`EncryptedModelField` field across
93
93
  ``INSTALLED_APPS``, decrypts each value (transparently using either
94
94
  the primary or a fallback), and re-encrypts under the primary. After
95
95
  this, no value in the database requires the fallback to decrypt.
@@ -116,7 +116,7 @@ What if ``SECRET_KEY`` is lost?
116
116
 
117
117
  If you lose ``SECRET_KEY`` and have no backup:
118
118
 
119
- - Every :class:`EncryptedProperty` value (saved API keys, observatory
119
+ - Every :class:`EncryptedModelField` value (saved API keys, observatory
120
120
  credentials) becomes unrecoverable. The ciphertext is still in the
121
121
  database; the key needed to decrypt it is gone.
122
122
  - All Django signing-dependent states also break: outstanding password-reset
@@ -126,6 +126,34 @@ If you lose ``SECRET_KEY`` and have no backup:
126
126
  Treat ``SECRET_KEY`` backup with the same seriousness as your database
127
127
  backup.
128
128
 
129
+ Backing up and moving encrypted data
130
+ ------------------------------------
131
+
132
+ Because every encrypted value is tied to the ``SECRET_KEY`` that produced it,
133
+ backing up and moving that data takes a little more care than ordinary rows.
134
+
135
+ **Django fixtures do not carry encrypted values.** Django's ``dumpdata`` /
136
+ ``loaddata`` (its built-in way to export database rows to a file and load them
137
+ back) cannot round-trip an encrypted field. By design, ``dumpdata`` writes the
138
+ placeholder ``'******** (encrypted, not shown)'`` in place of each encrypted
139
+ value — so secrets never end up in fixture files or version control — and
140
+ ``loaddata`` refuses to import that placeholder rather than store it as if it
141
+ were the secret. (Plugin authors writing tests should likewise set encrypted
142
+ values in code, not load them from a fixture.)
143
+
144
+ To move encrypted data to another environment, use one of:
145
+
146
+ - **A database-level copy** (e.g. ``pg_dump``). The stored ciphertext copies
147
+ over verbatim, but it only decrypts if the destination TOM uses the **same**
148
+ ``SECRET_KEY`` — or carries the source key in its ``SECRET_KEY_FALLBACKS`` —
149
+ since the Fernet key is derived from ``SECRET_KEY``.
150
+ - **An application-level re-encrypt.** Run a one-off script that reads each
151
+ plaintext in the source (ordinary attribute access) and re-saves it in the
152
+ destination, which re-encrypts it under the destination's ``SECRET_KEY``. Use
153
+ this when the two environments have different keys.
154
+
155
+ .. _kdf-implementation-details:
156
+
129
157
  Key Derivation Function Implementation Details
130
158
  ----------------------------------------------
131
159
  The derivation uses `HKDF <https://en.wikipedia.org/wiki/HKDF>`_
@@ -79,13 +79,28 @@ See the :ref:`Architecture Docs <ReducedDatum_label>` for a description, or
79
79
  :doc:`DataProducts API <../api/tom_dataproducts/models>` for a full code breakdown.
80
80
 
81
81
  We want to update all of your existing data to this new scheme where possible. This could take some time for large databases.
82
+ Towards this end, we provide a `management command
83
+ <https://github.com/TOMToolkit/tom_base/blob/dev/tom_dataproducts/management/commands/migrate_reduced_datums.py>`_
84
+ that will make "reasonable" assumptions about data values stored in ``ReducedDatum.value``. This command will search for
85
+ commonly used brightness fields, filter fields, spectroscopy data, etc. and translate them into the new ``ReducedDatum``
86
+ infrastructure. Anything unrecognized will remain in the catch-all ``value`` field. If you have highly customized fields
87
+ stored for your datums, you should consider copying and editing the management command to suit your needs.
88
+
82
89
 
83
90
  .. Warning::
84
91
  This is a substantial DB change. Consider backing up your database before running this management command.
85
92
 
86
93
  ::
87
94
 
88
- ./manage.py migrateReducedDatums
95
+ ./manage.py migrate_reduced_datums
96
+
97
+ .. Note::
98
+ Data validation during this migration is partially dependent on your database infrastructure.
99
+ You can test this migration by performing a dry run:
100
+
101
+ ::
102
+
103
+ ./manage.py migrate_reduced_datums --dry-run
89
104
 
90
105
 
91
106
  4.) Update ``settings.py``
@@ -107,12 +122,12 @@ with future changes. If you wish to use these settings, please make the followin
107
122
  ...
108
123
 
109
124
  # Replace your existing INSTALLED_APPS with the following:
110
- INSTALLED_APPS = TOMTOOKIT_INSTALLED_APPS + [
125
+ INSTALLED_APPS = TOMTOOLKIT_INSTALLED_APPS + [
111
126
  'custom_code', # Include any apps you have installed for your TOM that are not in default_settings
112
127
  ]
113
128
 
114
129
  # Replace your existing MIDDLEWARE with the following:
115
- MIDDLEWARE = TOMTOOKIT_MIDDLEWARE + [
130
+ MIDDLEWARE = TOMTOOLKIT_MIDDLEWARE + [
116
131
  {{ custom_middleware }} # Include any middleware you have installed for your TOM that are not in default_settings
117
132
  ]
118
133
 
@@ -0,0 +1,161 @@
1
+ Accessing data through the REST API
2
+ ---------------------------------------
3
+
4
+ `Django REST Framework (DRF) <https://www.django-rest-framework.org/>`_ is built into TOM Toolkit.
5
+ This allows you to access the data in your TOM's database through a REST API.
6
+
7
+ .. note::
8
+ If the ``DEFAULT_AUTHENTICATION_CLASSES`` key is not present in your
9
+ ``settings.REST_FRAMEWORK`` configuration dictionary, then you get
10
+ ``SessionAuthentication``, and ``BasicAuthentication`` because that's the DRF default.
11
+ To add ``TokenAuthentication``, your ``DEFAULT_AUTHENTICATION_CLASSES`` should look like this:
12
+
13
+ .. code:: python
14
+
15
+ REST_FRAMEWORK = {
16
+ 'DEFAULT_AUTHENTICATION_CLASSES': [
17
+ 'rest_framework.authentication.TokenAuthentication',
18
+ 'rest_framework.authentication.SessionAuthentication',
19
+ 'rest_framework.authentication.BasicAuthentication',
20
+ ],
21
+ # ... your existing REST_FRAMEWORK settings ...
22
+ }
23
+
24
+ - ``BasicAuthentication`` is used when you send username/password credentials in the ``AuthorizationHeader`` of an HTTP request.
25
+ - ``SessionAuthentication`` uses a cookie and CSRF protection to access the API from your TOM in a browser while logged in.
26
+ - ``TokenAuthentication`` uses your ``API Token`` available from the User Info of your User Profile of your TOM.
27
+
28
+ To see ``SessionAuthentication`` in action, while logged into your TOM, point your browser to the ``/api/`` endpoint.
29
+ This is the DRF API root. We'll show ``BasicAuthentication`` and ``TokenAuthentication`` in use below.
30
+
31
+
32
+ Quick start: querying targets with curl
33
+ #########################################
34
+
35
+ The examples below query the targets endpoint on a TOM running locally at
36
+ ``http://127.0.0.1:8888`` with a user ``tom_user_1``. Adjust the host, port and
37
+ username to match your deployment.
38
+
39
+ Basic Authentication
40
+ *************************************************
41
+
42
+ .. code:: bash
43
+
44
+ curl -u tom_user_1 http://127.0.0.1:8888/api/targets/
45
+
46
+ You'll be prompted for ``tom_user_1``'s password.
47
+ You should receive a JSON blob with target data. Don't forget that trailing ``/``.
48
+
49
+ This is ``BasicAuthentication``: ``curl`` sends the username and password in the
50
+ ``AuthenticationHeader`` of the HTTP request.
51
+
52
+ Token Authentication
53
+ *************************************************
54
+
55
+ Every user has a personal API token, shown as **API Token** on their
56
+ **User Profile** page. A token suits scripts and cron jobs because it
57
+ needs no interactive prompt. Secure your API token as you would a password.
58
+
59
+ Rather than pass in a username and be prompted for a password, we'll authenticate
60
+ by sending the token in an ``Authorization`` header:
61
+
62
+ To keep the API token out of your command history and scripts, export it as an
63
+ environment variable once and reference it in the header:
64
+
65
+ .. code:: bash
66
+
67
+ export TOM_API_TOKEN="API-token-copied-from-User-Profile"
68
+ curl -H "Authorization: Token $TOM_API_TOKEN" http://127.0.0.1:8888/api/targets/
69
+
70
+
71
+ Next Step: querying targets in code
72
+ #########################################
73
+
74
+ The same requests work from Python with the
75
+ `requests <https://requests.readthedocs.io/>`_ library.
76
+
77
+ Basic Authentication
78
+ *************************************************
79
+
80
+ Pass your username and password as the ``auth`` tuple:
81
+
82
+ .. code:: python
83
+
84
+ import requests
85
+
86
+ response = requests.get(
87
+ 'http://127.0.0.1:8888/api/targets/',
88
+ auth=('tom_user_1', 'your-password'),
89
+ )
90
+ targets = response.json()
91
+
92
+ ``targets`` now holds the same JSON you got back from ``curl``.
93
+
94
+ Token Authentication
95
+ *************************************************
96
+
97
+ Send your API token in an ``Authorization`` header instead. The API token
98
+ substitutes for the `BasicAuthentication` username and password.
99
+
100
+ .. code:: python
101
+
102
+ import requests
103
+
104
+ headers = {'Authorization': 'Token API-token-copied-from-User-Profile'}
105
+ response = requests.get('http://127.0.0.1:8888/api/targets/', headers=headers)
106
+ print('status:', response.status_code)
107
+ print('targets: ', response.json())
108
+
109
+ Don't hard-code real credentials: read the password or token from an environment
110
+ variable (e.g. ``os.environ['TOM_API_TOKEN']``) as in the ``curl`` example above.
111
+
112
+ Obtaining your API Token programmatically
113
+ #########################################
114
+
115
+ Above, we've seen how to access your TOM's data using ``curl`` and ``Python``,
116
+ via ``BasicAuthentication`` (username, password) and ``TokenAuthentication`` (API Token).
117
+
118
+ Your API Token is available from the User Info card of your User Profile. (You may rotate
119
+ your API Token from the User Profile update page (available from the pencil (edit) icon of
120
+ the User Info card). Rotating your API token is analogous to, but separate from, changing
121
+ your password).
122
+
123
+ Here we show how to obtain your API Token programmatically. Django REST Framework
124
+ provides the mechanism for this and it is available at a the ``api/token-auth`` endpoint.
125
+
126
+ Using curl
127
+ ******************************************
128
+
129
+ Using the same assumptions as above with respect to ``host``, ``port``, ``username``,
130
+ and ``password``:
131
+
132
+ .. code:: bash
133
+
134
+ curl --request POST http://127.0.0.1:8888/api/token-auth/ \
135
+ --header "Content-Type: application/json" \
136
+ --data '{"username": "tom_user_1", "password": "your-password"}'
137
+
138
+ Things to note here:
139
+ - This is a ``POST`` request.
140
+ - The ``Content-Type`` specified in the request header lets DRF know to expect a JSON payload.
141
+ - The ``BasicAuthentication`` credentials are passed as the JSON payload of the request.
142
+
143
+ The ouput you see will be JSON to stdout of the form ``{"token":"3bc76a8b6400182d617e9a1ce75dfa92d87412a0"}``.
144
+
145
+ Using Python
146
+ ******************************************
147
+ Here is the equivalent request made from Python code:
148
+
149
+ .. code:: python
150
+
151
+ import requests
152
+
153
+ response = requests.post(
154
+ 'http://127.0.0.1:8888/api/token-auth/',
155
+ json={'username': 'tom_user_1', 'password': 'your-password'},
156
+ )
157
+ print('status:', response.status_code)
158
+ print('json: ', response.json()) # {"token":"3bc76a8b6400182d617e9a1ce75dfa92d87412a0"}
159
+
160
+
161
+ Further details can be found in the `DRF Authentication API Guide <https://www.django-rest-framework.org/api-guide/authentication/>`_.
@@ -11,6 +11,7 @@ Managing Data
11
11
  Continuous data sharing <continuous_sharing>
12
12
  Streaming data <stream_pub_sub>
13
13
  Single-target data service <single_target_data_service>
14
+ Accessing data through the REST API <accessing_data_through_REST_API>
14
15
  Visualizing data <plotting_data>
15
16
 
16
17
  The TOM's Data Models
@@ -61,6 +61,9 @@ When your TOM receives a new ``Target`` from another TOM it will be saved to you
61
61
  or alias doesn't match that of a target that already exists in the database, a new target will be created and added to a
62
62
  new ``TargetList`` called "Imported from <TOM Name>".
63
63
 
64
+ Targets shared from a TOM with a custom ``Target`` model that has unique model fields will fill out any identically
65
+ named fields in your ``Target`` model and the remaining fields will be ingested as ``TargetExtras``.
66
+
64
67
  Target Lists:
65
68
  -------------
66
69
  When your TOM receives a new ``TargetList`` from another TOM it will be saved to your TOM's database. If the targets in
@@ -105,6 +105,32 @@ like this:
105
105
  This means our new observation facility module has been successfully
106
106
  loaded.
107
107
 
108
+ Adding a facility from an app
109
+ -----------------------------
110
+
111
+ A facility implemented as a Django reusable app can advertise itself
112
+ to a TOM without requiring an admin to include it in ``settings.TOM_FACILITY_CLASSES``,
113
+ which simplifies its installation.
114
+ To do this, implement the ``observation_facilities()`` integration point
115
+ on the app's ``AppConfig`` subclass:
116
+
117
+ .. code:: python
118
+
119
+ class MyAppConfig(AppConfig):
120
+ name = 'myapp'
121
+
122
+ def observation_facilities(self):
123
+ return [{'class': f'{self.name}.myfacility.MyObservationFacility'}]
124
+
125
+ More details can be found on the ``tom_demoapp`` repository `wiki <https://github.com/TOMToolkit/tom_demoapp/wiki/Integration-Points#observation-facilities>`_.
126
+
127
+ Facilities from both ``settings.TOM_FACILITY_CLASSES`` and the apps implementing
128
+ the integration point have the same behavior with respect to target detail page buttons
129
+ and Facilties navbar menu items.
130
+ So, if your facility implements the ``observation_facilities()`` integration point,
131
+ adding the app to ``INSTALLED_APPS`` is all that is required for installation.
132
+ See ``tom_demoapp`` for a demonstration of the basics and ``tom_cfht`` for a fully worked example.
133
+
108
134
  BaseRoboticObservationFacility and BaseRoboticObservationForm
109
135
  -------------------------------------------------------------
110
136
 
@@ -126,6 +152,58 @@ use. The ``BaseRoboticObservationForm`` class, just like the previous
126
152
  super class, contains logic and layout that all observation facility
127
153
  form classes should contain.
128
154
 
155
+ Linking to a facility detail page
156
+ ---------------------------------
157
+ TOMToolkit typically interacts with observation facilities to submit requests to observe
158
+ a specific target. Observation request forms are typically accessed via buttons on the Observe
159
+ tab of the target detail page for the target being observed. When a TOM needs to interact with
160
+ an observation facility for reasons that are not target specific, a "facility detail" page can
161
+ be specified. For example, the Canada France Hawaii telescope (CFHT) facility detail page allows
162
+ a TOM to sync target data with the CFHT P2 tool. This precludes having to visit every target's
163
+ detail page to sync its data. The faciliity class attribute ``detail_url_name``
164
+ supplies the URL of its facility detail page.
165
+
166
+ A facility may set ``detail_url_name`` to the namespaced Django URL name of a page
167
+ that presents general, non-target-specific funcionality. Facilities that set it
168
+ appear in the navbar **Facilities** dropdown, linked to that page:
169
+
170
+ .. code:: python
171
+
172
+ class MyObservationFacility(BaseRoboticObservationFacility):
173
+ name = 'MyFacility'
174
+ detail_url_name = 'myapp:facility-detail'
175
+
176
+ ``detail_url_name`` is optional and is omitted from the minimal example above. A facility
177
+ that leaves it unset is still fully registered -- it has an observe button and observation
178
+ forms -- but gets no menu item in the Facilities navbar dropdown. If no facility sets it,
179
+ the dropdown is not displayed.
180
+ See ``tom_demoapp`` for a demonstration of the basics, including deriving the namespace from the
181
+ AppConfig's ``name`` and ``tom_cfht`` for a fully worked example.
182
+
183
+ For ``detail_url_name`` to resolve, the app's URLs must be mounted in the TOM under that
184
+ namespace. A reusable app mounts its own ``urls.py`` through the ``include_url_paths()``
185
+ AppConfig integration point -- ``tom_common`` collects these paths from every installed
186
+ app, so no TOM ``urls.py`` edits are required:
187
+
188
+ .. code:: python
189
+
190
+ class MyAppConfig(AppConfig):
191
+ name = 'myapp'
192
+ route_prefix = 'myapp' # prefixes every route in myapp's urls.py: HOST/myapp/...
193
+
194
+ def include_url_paths(self):
195
+ return [
196
+ path(f'{self.route_prefix}/', include(f'{self.name}.urls')),
197
+ ]
198
+
199
+ (``route_prefix`` is a TOM plugin convention, not a Django AppConfig attribute.) The
200
+ included ``urls.py`` supplies the namespace by declaring ``app_name`` -- by convention
201
+ derived from the AppConfig (``app_name = MyAppConfig.name``) so the namespace and the
202
+ package name can never disagree -- and must contain a ``path()`` whose ``name=`` is the
203
+ second half of ``detail_url_name``. If ``app_name`` is missing, the app's URL names are
204
+ un-namespaced and ``detail_url_name`` will not reverse; the menu item is skipped with a
205
+ logged warning.
206
+
129
207
  Implementing observation submission
130
208
  -----------------------------------
131
209