tomtoolkit 3.0.0a12__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.0a12/.git/objects/pack/pack-a669af01a8852998ccedc6383451e71dd198fe5e.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.0a12 → tomtoolkit-3.0.1}/PKG-INFO +7 -7
  12. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/plugins.rst +9 -0
  13. {tomtoolkit-3.0.0a12 → 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.0a12 → tomtoolkit-3.0.1}/docs/data_services/create_dataservice.rst +60 -26
  16. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/deployment/encryption.rst +31 -3
  17. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/updating.rst +18 -3
  18. tomtoolkit-3.0.1/docs/managing_data/accessing_data_through_REST_API.rst +161 -0
  19. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/index.rst +1 -0
  20. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/tom_direct_sharing.rst +3 -0
  21. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/observation_module.rst +78 -0
  22. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/poetry.lock +558 -735
  23. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/pyproject.toml +9 -9
  24. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/gaia.py +1 -1
  25. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_base/__init__.py +1 -1
  26. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_base/settings.py +7 -2
  27. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/default_settings.py +6 -2
  28. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/main.css +0 -5
  29. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/api_views.py +114 -28
  30. tomtoolkit-3.0.1/tom_dataproducts/migrations/0017_spectroscopyreduceddatum_wavelength_unit.py +18 -0
  31. tomtoolkit-3.0.1/tom_dataproducts/migrations/0018_remove_astrometryreduceddatum_unique_astrometry_and_more.py +58 -0
  32. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/models.py +30 -5
  33. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/serializers.py +1 -0
  34. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/sharing.py +1 -0
  35. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/dataproduct_list_for_target.html +1 -1
  36. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_api.py +35 -8
  37. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/tests.py +9 -7
  38. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/data_services/alerce.py +14 -10
  39. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/dataservices.py +22 -11
  40. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/forms.py +3 -1
  41. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/views.py +39 -22
  42. tomtoolkit-3.0.1/tom_observations/apps.py +16 -0
  43. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facility.py +100 -66
  44. tomtoolkit-3.0.1/tom_observations/templates/tom_observations/partials/navbar_facilities_list.html +15 -0
  45. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templatetags/observation_extras.py +35 -1
  46. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/tests.py +147 -2
  47. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/utils.py +5 -0
  48. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/settings.tmpl +9 -2
  49. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/base_models.py +12 -0
  50. tomtoolkit-3.0.1/tom_targets/migrations/0031_basetarget_shared_by_basetarget_shared_from.py +23 -0
  51. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/persistent_sharing_serializers.py +5 -1
  52. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/serializers.py +1 -0
  53. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/sharing.py +28 -4
  54. tomtoolkit-3.0.0a12/tom_targets/templates/tom_targets/partials/aladin_finderchart.html → tomtoolkit-3.0.1/tom_targets/static/tom_targets/js/aladin_finderchart.js +65 -72
  55. tomtoolkit-3.0.1/tom_targets/templates/tom_targets/partials/aladin_finderchart.html +48 -0
  56. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap.html +1 -1
  57. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/create_persistent_share.html +7 -4
  58. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_buttons.html +8 -1
  59. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_detail.html +9 -0
  60. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_share.html +3 -3
  61. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templatetags/targets_extras.py +4 -4
  62. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/tests/test_api.py +54 -0
  63. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/views.py +7 -2
  64. tomtoolkit-3.0.0a12/.git/FETCH_HEAD +0 -1
  65. tomtoolkit-3.0.0a12/.git/HEAD +0 -1
  66. tomtoolkit-3.0.0a12/.git/config +0 -12
  67. tomtoolkit-3.0.0a12/.git/index +0 -0
  68. tomtoolkit-3.0.0a12/.git/logs/HEAD +0 -1
  69. tomtoolkit-3.0.0a12/.git/objects/pack/pack-a669af01a8852998ccedc6383451e71dd198fe5e.idx +0 -0
  70. tomtoolkit-3.0.0a12/.git/objects/pack/pack-a669af01a8852998ccedc6383451e71dd198fe5e.rev +0 -0
  71. tomtoolkit-3.0.0a12/.git/refs/tags/3.0.0-alpha12 +0 -1
  72. tomtoolkit-3.0.0a12/.git/shallow +0 -1
  73. tomtoolkit-3.0.0a12/docs/customization/encrypted_model_fields.rst +0 -230
  74. tomtoolkit-3.0.0a12/tom_observations/apps.py +0 -5
  75. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.coveragerc +0 -0
  76. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.flake8 +0 -0
  77. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/description +0 -0
  78. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/applypatch-msg.sample +0 -0
  79. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/commit-msg.sample +0 -0
  80. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/fsmonitor-watchman.sample +0 -0
  81. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/post-update.sample +0 -0
  82. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-applypatch.sample +0 -0
  83. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-commit.sample +0 -0
  84. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-merge-commit.sample +0 -0
  85. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-push.sample +0 -0
  86. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-rebase.sample +0 -0
  87. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/pre-receive.sample +0 -0
  88. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/prepare-commit-msg.sample +0 -0
  89. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/push-to-checkout.sample +0 -0
  90. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/sendemail-validate.sample +0 -0
  91. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/hooks/update.sample +0 -0
  92. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.git/info/exclude +0 -0
  93. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  94. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  95. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/sprint-story.md +0 -0
  96. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/dependabot.yml +0 -0
  97. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/workflows/github-release.yml +0 -0
  98. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/workflows/pypi-release.yml +0 -0
  99. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/workflows/run-canary-tests.yml +0 -0
  100. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.github/workflows/run-tests.yml +0 -0
  101. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.gitignore +0 -0
  102. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/.readthedocs.yml +0 -0
  103. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/CITATION.cff +0 -0
  104. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/CODE_OF_CONDUCT.md +0 -0
  105. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/CONTRIBUTING.md +0 -0
  106. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/LICENSE +0 -0
  107. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/MANIFEST.in +0 -0
  108. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/README-dev.md +0 -0
  109. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/README.md +0 -0
  110. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/Makefile +0 -0
  111. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/base.png +0 -0
  112. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/quote.png +0 -0
  113. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/targets.png +0 -0
  114. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.csv +0 -0
  115. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.png +0 -0
  116. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/architecture/snex2layout.png +0 -0
  117. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/architecture/standardlayout.png +0 -0
  118. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/common_interface.png +0 -0
  119. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/compare-across-forks.png +0 -0
  120. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/example_query.png +0 -0
  121. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/populated_query_list.png +0 -0
  122. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/query_result.png +0 -0
  123. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/success_broker_list.png +0 -0
  124. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/custom.css +0 -0
  125. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_observations/newform.png +0 -0
  126. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_observations/observebutton.png +0 -0
  127. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_template_tags_doc/Templatetags.png +0 -0
  128. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/darkmode.png +0 -0
  129. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/sciencecat.jpg +0 -0
  130. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/toast_example.png +0 -0
  131. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagemod.png +0 -0
  132. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagenew.png +0 -0
  133. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/after.png +0 -0
  134. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/before.png +0 -0
  135. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/advanced_form.png +0 -0
  136. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/demo_Data_Service.png +0 -0
  137. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/query_form_collapsed.png +0 -0
  138. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/fork.png +0 -0
  139. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/branchdeployed.png +0 -0
  140. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubconnected.png +0 -0
  141. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubintegration.png +0 -0
  142. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/herokudeploybranch.png +0 -0
  143. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/hs.jpg +0 -0
  144. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/htmx_tables_doc/sortable_table_with_general_search.png +0 -0
  145. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/jupyterdoc/newnotebook.png +0 -0
  146. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/lco.jpg +0 -0
  147. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/logo-color.png +0 -0
  148. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/logo.png +0 -0
  149. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/managing_data/data_upload_form.png +0 -0
  150. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/empty_form.png +0 -0
  151. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/fields.png +0 -0
  152. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/myfacility.png +0 -0
  153. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_detail_observe_buttons.png +0 -0
  154. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_moon_separation_plot.png +0 -0
  155. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_visibility_tool.png +0 -0
  156. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/addgroup.png +0 -0
  157. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/targetgroups.png +0 -0
  158. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/plotting_data_doc/plot.png +0 -0
  159. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/pull-request.png +0 -0
  160. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift.png +0 -0
  161. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_display.png +0 -0
  162. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_filter.png +0 -0
  163. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_tag.png +0 -0
  164. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/target_sources.png +0 -0
  165. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/_static/zff.png +0 -0
  166. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/management_commands.rst +0 -0
  167. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/modules.rst +0 -0
  168. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_common/exceptions.rst +0 -0
  169. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_common/hooks.rst +0 -0
  170. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_common/index.rst +0 -0
  171. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_common/template_tags.rst +0 -0
  172. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_common/views.rst +0 -0
  173. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/api_views.rst +0 -0
  174. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/data_processing.md +0 -0
  175. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/index.rst +0 -0
  176. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/models.rst +0 -0
  177. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/templatetags.rst +0 -0
  178. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/utils.rst +0 -0
  179. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/views.rst +0 -0
  180. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/data_services.rst +0 -0
  181. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/exceptions.rst +0 -0
  182. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/index.rst +0 -0
  183. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/models.rst +0 -0
  184. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/views.rst +0 -0
  185. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/facilities.rst +0 -0
  186. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/index.rst +0 -0
  187. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/models.rst +0 -0
  188. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/templatetags.rst +0 -0
  189. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/utils.rst +0 -0
  190. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_observations/views.rst +0 -0
  191. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/api_views.rst +0 -0
  192. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/groups.rst +0 -0
  193. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/index.rst +0 -0
  194. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/models.rst +0 -0
  195. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/templatetags.rst +0 -0
  196. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/utils.rst +0 -0
  197. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/api/tom_targets/views.rst +0 -0
  198. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/automation.rst +0 -0
  199. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/backgroundtasks.rst +0 -0
  200. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/custom_code.rst +0 -0
  201. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/index.rst +0 -0
  202. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/querying.rst +0 -0
  203. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/code/scripts.rst +0 -0
  204. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/common/index.rst +0 -0
  205. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/common/permissions.rst +0 -0
  206. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/conf.py +0 -0
  207. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/adding_pages.rst +0 -0
  208. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/customize_template_tags.rst +0 -0
  209. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/customize_templates.rst +0 -0
  210. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/htmx_tables.rst +0 -0
  211. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/index.rst +0 -0
  212. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/latex_generation.rst +0 -0
  213. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/testing_toms.rst +0 -0
  214. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/customization/widgets.rst +0 -0
  215. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/data_services/index.rst +0 -0
  216. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/deployment/amazons3.rst +0 -0
  217. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/deployment/deployment_heroku.rst +0 -0
  218. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/deployment/deployment_tips.rst +0 -0
  219. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/deployment/index.rst +0 -0
  220. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/examples.rst +0 -0
  221. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/index.rst +0 -0
  222. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/about.rst +0 -0
  223. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/acknowledging_tom_toolkit.rst +0 -0
  224. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/contributing.rst +0 -0
  225. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/credits.rst +0 -0
  226. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/faqs.rst +0 -0
  227. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/getting_started.rst +0 -0
  228. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/manual_installation.rst +0 -0
  229. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/programming_resources.rst +0 -0
  230. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/support.rst +0 -0
  231. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/tomarchitecture.rst +0 -0
  232. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/troubleshooting.rst +0 -0
  233. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/introduction/workflow.rst +0 -0
  234. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/make.bat +0 -0
  235. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/continuous_sharing.rst +0 -0
  236. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/customizing_data_processing.rst +0 -0
  237. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/plotting_data.rst +0 -0
  238. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/single_target_data_service.rst +0 -0
  239. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/managing_data/stream_pub_sub.rst +0 -0
  240. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/add_facility_form_admin.png +0 -0
  241. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/customize_ocs_facility.rst +0 -0
  242. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/index.rst +0 -0
  243. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/selecting_targets_for_facility.rst +0 -0
  244. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/strategies.rst +0 -0
  245. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/target_selection_menu_option.png +0 -0
  246. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/observing/target_selection_table_default.png +0 -0
  247. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/targets/index.rst +0 -0
  248. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/targets/target_fields.rst +0 -0
  249. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/targets/target_matcher.rst +0 -0
  250. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/docs/targets/target_table.rst +0 -0
  251. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/manage.py +0 -0
  252. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/test_settings.py +0 -0
  253. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/__init__.py +0 -0
  254. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/admin.py +0 -0
  255. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/alerts.py +0 -0
  256. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/apps.py +0 -0
  257. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/__init__.py +0 -0
  258. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/alerce.py +0 -0
  259. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/antares.py +0 -0
  260. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/fink.py +0 -0
  261. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/lasair.py +0 -0
  262. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/scout.py +0 -0
  263. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/brokers/tns.py +0 -0
  264. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/exceptions.py +0 -0
  265. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/management/__init__.py +0 -0
  266. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/management/commands/__init__.py +0 -0
  267. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/management/commands/runbrokerquery.py +0 -0
  268. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0001_initial.py +0 -0
  269. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0002_auto_20190626_2135.py +0 -0
  270. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0003_auto_20190701_2226.py +0 -0
  271. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0004_auto_20210204_2300.py +0 -0
  272. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0005_alertstreammessage.py +0 -0
  273. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0006_alter_alertstreammessage_exchange_status.py +0 -0
  274. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/0007_alter_alertstreammessage_message_id.py +0 -0
  275. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/migrations/__init__.py +0 -0
  276. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/models.py +0 -0
  277. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_confirm_delete.html +0 -0
  278. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_list.html +0 -0
  279. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/navbar_link.html +0 -0
  280. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/submit_upstream_form.html +0 -0
  281. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_form.html +0 -0
  282. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_result.html +0 -0
  283. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/templatetags/alerts_extras.py +0 -0
  284. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/__init__.py +0 -0
  285. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/__init__.py +0 -0
  286. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_alerce.py +0 -0
  287. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_gaia.py +0 -0
  288. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_lasair.py +0 -0
  289. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/tests/tests.py +0 -0
  290. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/urls.py +0 -0
  291. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_alerts/views.py +0 -0
  292. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_base/wsgi.py +0 -0
  293. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/__init__.py +0 -0
  294. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/admin.py +0 -0
  295. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/apps.py +0 -0
  296. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/0001_initial.py +0 -0
  297. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/0002_calendarevent_target_list.py +0 -0
  298. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/0003_calendarevent_proposal_calendarevent_telescope_and_more.py +0 -0
  299. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/0004_eventtodo.py +0 -0
  300. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/0005_calendarevent_instrument.py +0 -0
  301. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/migrations/__init__.py +0 -0
  302. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/models.py +0 -0
  303. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/calendar_page.html +0 -0
  304. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/calendar.html +0 -0
  305. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/event_form.html +0 -0
  306. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/navbar_item.html +0 -0
  307. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/target_list_block.html +0 -0
  308. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/todos.html +0 -0
  309. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templatetags/__init__.py +0 -0
  310. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/templatetags/calendar_tags.py +0 -0
  311. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/tests.py +0 -0
  312. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/urls.py +0 -0
  313. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/utils.py +0 -0
  314. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_calendar/views.py +0 -0
  315. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/__init__.py +0 -0
  316. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/admin.py +0 -0
  317. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/apps.py +0 -0
  318. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/forms.py +0 -0
  319. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvester.py +0 -0
  320. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/__init__.py +0 -0
  321. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/jplhorizons.py +0 -0
  322. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/mpc.py +0 -0
  323. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/ned.py +0 -0
  324. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/simbad.py +0 -0
  325. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/tns.py +0 -0
  326. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/partials/catalog_query_menu.html +0 -0
  327. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/query_form.html +0 -0
  328. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/__init__.py +0 -0
  329. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/dataservices_extras.py +0 -0
  330. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/__init__.py +0 -0
  331. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/__init__.py +0 -0
  332. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/__init__.py +0 -0
  333. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/test_65803_mpc_orb.json +0 -0
  334. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_jplhorizons.py +0 -0
  335. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_mpc.py +0 -0
  336. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_simbad.py +0 -0
  337. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/tests/tests.py +0 -0
  338. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/urls.py +0 -0
  339. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_catalogs/views.py +0 -0
  340. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/__init__.py +0 -0
  341. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/admin.py +0 -0
  342. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/api_router.py +0 -0
  343. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/api_views.py +0 -0
  344. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/apps.py +0 -0
  345. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/encryption.py +0 -0
  346. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/exceptions.py +0 -0
  347. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/forms.py +0 -0
  348. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/hints.py +0 -0
  349. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/hooks.py +0 -0
  350. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/htmx_table.py +0 -0
  351. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/management/__init__.py +0 -0
  352. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/management/commands/__init__.py +0 -0
  353. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/management/commands/rotate_encryption_key.py +0 -0
  354. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/middleware.py +0 -0
  355. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/migrations/0001_initial.py +0 -0
  356. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/migrations/0002_usersession.py +0 -0
  357. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/migrations/0004_delete_usersession.py +0 -0
  358. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/migrations/__init__.py +0 -0
  359. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/mixins.py +0 -0
  360. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/models.py +0 -0
  361. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/serializers.py +0 -0
  362. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/signals.py +0 -0
  363. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/HELP-US-OUT.txt +0 -0
  364. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.css +0 -0
  365. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.min.css +0 -0
  366. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  367. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  368. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +0 -0
  369. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  370. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  371. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  372. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/animated.less +0 -0
  373. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/bordered-pulled.less +0 -0
  374. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/core.less +0 -0
  375. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/fixed-width.less +0 -0
  376. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/font-awesome.less +0 -0
  377. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/icons.less +0 -0
  378. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/larger.less +0 -0
  379. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/list.less +0 -0
  380. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/mixins.less +0 -0
  381. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/path.less +0 -0
  382. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/rotated-flipped.less +0 -0
  383. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/screen-reader.less +0 -0
  384. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/stacked.less +0 -0
  385. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/variables.less +0 -0
  386. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_animated.scss +0 -0
  387. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_bordered-pulled.scss +0 -0
  388. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_core.scss +0 -0
  389. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_fixed-width.scss +0 -0
  390. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_icons.scss +0 -0
  391. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_larger.scss +0 -0
  392. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_list.scss +0 -0
  393. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_mixins.scss +0 -0
  394. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_path.scss +0 -0
  395. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_rotated-flipped.scss +0 -0
  396. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_screen-reader.scss +0 -0
  397. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_stacked.scss +0 -0
  398. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_variables.scss +0 -0
  399. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/font-awesome.scss +0 -0
  400. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/dark.css +0 -0
  401. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/bluespinner.gif +0 -0
  402. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16.ico +0 -0
  403. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16x16.png +0 -0
  404. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32.ico +0 -0
  405. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32x32.png +0 -0
  406. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon.ico +0 -0
  407. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/icon.png +0 -0
  408. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color-cropped.png +0 -0
  409. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color.png +0 -0
  410. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-text.png +0 -0
  411. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/static/tom_common/js/htmx.min.js +0 -0
  412. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/404.html +0 -0
  413. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_confirm_delete.html +0 -0
  414. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_form.html +0 -0
  415. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/app_user_lists.html +0 -0
  416. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/group_list.html +0 -0
  417. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/user_list.html +0 -0
  418. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_change_password.html +0 -0
  419. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_delete.html +0 -0
  420. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_list.html +0 -0
  421. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/bootstrap5_overrides/pagination.html +0 -0
  422. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/comments/form.html +0 -0
  423. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/comments/list.html +0 -0
  424. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/django_comments/comment_confirm_delete.html +0 -0
  425. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/django_filters/widgets/multiwidget.html +0 -0
  426. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/registration/login.html +0 -0
  427. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/base.html +0 -0
  428. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/bootstrap_htmx.html +0 -0
  429. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/change_user_password.html +0 -0
  430. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/create_user.html +0 -0
  431. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/index.html +0 -0
  432. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/navbar_content.html +0 -0
  433. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/api_token.html +0 -0
  434. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/app_profiles.html +0 -0
  435. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/clearable_encrypted_input.html +0 -0
  436. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/confirm_user_delete.html +0 -0
  437. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/copy_button.html +0 -0
  438. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/htmx_table_partial.html +0 -0
  439. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/include_app_partial.html +0 -0
  440. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/messages.html +0 -0
  441. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_app_addons.html +0 -0
  442. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_login.html +0 -0
  443. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/revealable_password_input.html +0 -0
  444. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/user_data.html +0 -0
  445. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/user_profile.html +0 -0
  446. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templatetags/__init__.py +0 -0
  447. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templatetags/bootstrap5_overrides.py +0 -0
  448. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templatetags/tom_common_extras.py +0 -0
  449. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/templatetags/user_extras.py +0 -0
  450. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/tests.py +0 -0
  451. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/urls.py +0 -0
  452. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_common/views.py +0 -0
  453. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/__init__.py +0 -0
  454. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/admin.py +0 -0
  455. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/apps.py +0 -0
  456. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/data_processor.py +0 -0
  457. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/exceptions.py +0 -0
  458. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/fields.py +0 -0
  459. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/filters.py +0 -0
  460. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/forms.py +0 -0
  461. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/hooks.py +0 -0
  462. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/management/__init__.py +0 -0
  463. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/__init__.py +0 -0
  464. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/downloaddata.py +0 -0
  465. /tomtoolkit-3.0.0a12/tom_dataproducts/management/commands/migrateReducedDatums.py → /tomtoolkit-3.0.1/tom_dataproducts/management/commands/migrate_reduced_datums.py +0 -0
  466. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/updatereduceddata.py +0 -0
  467. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0001_initial.py +0 -0
  468. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0004_auto_20190626_0904.py +0 -0
  469. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0005_auto_20190704_1010.py +0 -0
  470. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0006_auto_20190912_2013.py +0 -0
  471. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0007_manual_20191016_rename_type.py +0 -0
  472. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0008_auto_20191205_1952.py +0 -0
  473. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0009_auto_20210204_2221.py +0 -0
  474. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0010_manual_20210305_fix_spectroscopy.py +0 -0
  475. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message.py +0 -0
  476. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message_squashed_0015_remove_reduceddatum_message.py +0 -0
  477. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0012_alter_reduceddatum_data_product_and_more.py +0 -0
  478. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0013_alter_reduceddatum_message.py +0 -0
  479. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0014_alter_reduceddatum_timestamp.py +0 -0
  480. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0015_remove_reduceddatum_message.py +0 -0
  481. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0016_reduceddatum_instrument_reduceddatum_telescope_and_more.py +0 -0
  482. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/__init__.py +0 -0
  483. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/__init__.py +0 -0
  484. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/atlas_processor.py +0 -0
  485. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/data_serializers.py +0 -0
  486. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/panstarrs_processor.py +0 -0
  487. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/photometry_processor.py +0 -0
  488. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/processors/spectroscopy_processor.py +0 -0
  489. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/__init__.py +0 -0
  490. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/atlas.py +0 -0
  491. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/__init__.py +0 -0
  492. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs.py +0 -0
  493. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs_api.py +0 -0
  494. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/tests.py +0 -0
  495. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/single_target_data_service.py +0 -0
  496. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/img/placeholder.png +0 -0
  497. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/photometry_sample.csv +0 -0
  498. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/spectrum_sample.csv +0 -0
  499. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tasks.py +0 -0
  500. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/add_product_to_group.html +0 -0
  501. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_confirm_delete.html +0 -0
  502. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_list.html +0 -0
  503. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_confirm_delete.html +0 -0
  504. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_detail.html +0 -0
  505. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_form.html +0 -0
  506. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_list.html +0 -0
  507. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_button.html +0 -0
  508. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_scripts.html +0 -0
  509. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_datalist_for_target.html +0 -0
  510. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_for_target.html +0 -0
  511. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/query_single_target_data_service.html +0 -0
  512. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/recent_photometry.html +0 -0
  513. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/reduceddatum_sparkline.html +0 -0
  514. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/saved_dataproduct_list_for_observation.html +0 -0
  515. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/spectroscopy_for_target.html +0 -0
  516. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/unsaved_dataproduct_list_for_observation.html +0 -0
  517. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/upload_dataproduct.html +0 -0
  518. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/single_target_data_service_form.html +0 -0
  519. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/upload_reduced_data.html +0 -0
  520. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/__init__.py +0 -0
  521. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/dataproduct_extras.py +0 -0
  522. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/__init__.py +0 -0
  523. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_atlas.py +0 -0
  524. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_atlas_fp.csv +0 -0
  525. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_lightcurve.csv +0 -0
  526. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.csv +0 -0
  527. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.fits +0 -0
  528. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/urls.py +0 -0
  529. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/utils.py +0 -0
  530. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataproducts/views.py +0 -0
  531. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/__init__.py +0 -0
  532. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/admin.py +0 -0
  533. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/apps.py +0 -0
  534. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/data_services/mpc.py +0 -0
  535. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/data_services/ned.py +0 -0
  536. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/data_services/simbad.py +0 -0
  537. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/data_services/tns.py +0 -0
  538. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/__init__.py +0 -0
  539. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/listqueries.py +0 -0
  540. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/rundataquery.py +0 -0
  541. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/migrations/0001_initial.py +0 -0
  542. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/migrations/__init__.py +0 -0
  543. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/models.py +0 -0
  544. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_advanced_form.html +0 -0
  545. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_results_table.html +0 -0
  546. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_simple_form.html +0 -0
  547. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/dataservicequery_confirm_delete.html +0 -0
  548. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/mpc/partials/mpc_results_table.html +0 -0
  549. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/basic_simple_form.html +0 -0
  550. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/catalog_query_menu.html +0 -0
  551. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/navbar_list.html +0 -0
  552. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/query_results_table.html +0 -0
  553. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/update_data_from_dataservice.html +0 -0
  554. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_form.html +0 -0
  555. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_list.html +0 -0
  556. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_result.html +0 -0
  557. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_query_results_table.html +0 -0
  558. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_simple_form.html +0 -0
  559. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/templatetags/dataservices_extras.py +0 -0
  560. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/__init__.py +0 -0
  561. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/__init__.py +0 -0
  562. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/test_mpc.py +0 -0
  563. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_api.py +0 -0
  564. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/__init__.py +0 -0
  565. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/test_65803_mpc_orb.json +0 -0
  566. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/tests/tests.py +0 -0
  567. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_dataservices/urls.py +0 -0
  568. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/__init__.py +0 -0
  569. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/admin.py +0 -0
  570. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/api_views.py +0 -0
  571. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/cadence.py +0 -0
  572. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/cadences/__init__.py +0 -0
  573. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/cadences/resume_cadence_after_failure.py +0 -0
  574. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/cadences/retry_failed_observations.py +0 -0
  575. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/__init__.py +0 -0
  576. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/blanco.py +0 -0
  577. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/gemini.py +0 -0
  578. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/lco.py +0 -0
  579. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/lco_redirect.py +0 -0
  580. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/lt.py +0 -0
  581. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/manual.py +0 -0
  582. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/ocs.py +0 -0
  583. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/facilities/soar.py +0 -0
  584. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/forms.py +0 -0
  585. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/management/__init__.py +0 -0
  586. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/management/commands/__init__.py +0 -0
  587. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/management/commands/runcadencestrategies.py +0 -0
  588. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/management/commands/updatestatus.py +0 -0
  589. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0001_initial.py +0 -0
  590. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0002_auto_20190306_2343.py +0 -0
  591. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0003_auto_20190503_2318.py +0 -0
  592. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0004_observationgroup.py +0 -0
  593. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0005_auto_20191210_0007.py +0 -0
  594. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0006_observationgroup_cadence_strategy.py +0 -0
  595. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0007_observationstrategy.py +0 -0
  596. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0008_observationgroup_cadence_parameters.py +0 -0
  597. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0009_observationrecord_user.py +0 -0
  598. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0010_manual_create_dynamic_cadence.py +0 -0
  599. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0011_auto_20200917_0306.py +0 -0
  600. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0012_auto_20210205_1819.py +0 -0
  601. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0013_facility.py +0 -0
  602. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0014_alter_facility_orbit.py +0 -0
  603. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0015_remove_facility_mpc_site_code_and_more.py +0 -0
  604. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/0016_alter_facility_options.py +0 -0
  605. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/migrations/__init__.py +0 -0
  606. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/models.py +0 -0
  607. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/observation_template.py +0 -0
  608. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/serializers.py +0 -0
  609. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/static/tom_observations/css/main.css +0 -0
  610. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/existing_observation_confirm.html +0 -0
  611. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/facility_status.html +0 -0
  612. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_form.html +0 -0
  613. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_list.html +0 -0
  614. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_confirm_delete.html +0 -0
  615. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_form.html +0 -0
  616. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_list.html +0 -0
  617. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationrecord_detail.html +0 -0
  618. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_confirm_delete.html +0 -0
  619. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_form.html +0 -0
  620. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_list.html +0 -0
  621. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationupdate_form.html +0 -0
  622. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/existing_observation_form.html +0 -0
  623. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_map.html +0 -0
  624. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_observation_form.html +0 -0
  625. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_status_table.html +0 -0
  626. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_distribution.html +0 -0
  627. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_list.html +0 -0
  628. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_plan.html +0 -0
  629. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_type_tabs.html +0 -0
  630. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_from_record.html +0 -0
  631. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_run.html +0 -0
  632. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observing_buttons.html +0 -0
  633. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_observation_id_form.html +0 -0
  634. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_status_button.html +0 -0
  635. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/templatetags/__init__.py +0 -0
  636. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/__init__.py +0 -0
  637. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/__init__.py +0 -0
  638. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_gemini.py +0 -0
  639. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_lco.py +0 -0
  640. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_ocs.py +0 -0
  641. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_soar.py +0 -0
  642. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/factories.py +0 -0
  643. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/test_api.py +0 -0
  644. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/test_cadence.py +0 -0
  645. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/tests/test_credentials.py +0 -0
  646. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/urls.py +0 -0
  647. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/utils.py +0 -0
  648. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/views.py +0 -0
  649. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_observations/widgets.py +0 -0
  650. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/__init__.py +0 -0
  651. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/apps.py +0 -0
  652. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/management/__init__.py +0 -0
  653. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/management/commands/__init__.py +0 -0
  654. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/management/commands/tom_setup.py +0 -0
  655. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/css.tmpl +0 -0
  656. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/models.tmpl +0 -0
  657. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/urls.tmpl +0 -0
  658. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/__init__.py +0 -0
  659. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/admin.py +0 -0
  660. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/api_views.py +0 -0
  661. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/apps.py +0 -0
  662. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/fields.py +0 -0
  663. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/filters.py +0 -0
  664. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/forms.py +0 -0
  665. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/groups.py +0 -0
  666. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/management/__init__.py +0 -0
  667. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/management/commands/__init__.py +0 -0
  668. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/management/commands/converttargetextras.py +0 -0
  669. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/management/commands/setdefaultextras.py +0 -0
  670. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/merge.py +0 -0
  671. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0001_initial.py +0 -0
  672. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190115_2102.py +0 -0
  673. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190117_2248.py +0 -0
  674. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0003_merge_20190123_1754.py +0 -0
  675. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0004_auto_20190123_2010.py +0 -0
  676. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0005_auto_20190214_1722.py +0 -0
  677. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0006_auto_20190403_1659.py +0 -0
  678. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190423_1455.py +0 -0
  679. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190503_2318.py +0 -0
  680. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190515_0047.py +0 -0
  681. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190515_0914.py +0 -0
  682. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190520_1645.py +0 -0
  683. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0009_auto_20190605_1656.py +0 -0
  684. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_auto_20190715_1657.py +0 -0
  685. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_merge_20190612_1227.py +0 -0
  686. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0011_merge_20190731_1821.py +0 -0
  687. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0012_target_perihdist.py +0 -0
  688. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0013_manual_20190916_multiple_names.py +0 -0
  689. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0014_auto_20190923_1827.py +0 -0
  690. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0015_auto_20190923_2233.py +0 -0
  691. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0016_auto_20191211_1707.py +0 -0
  692. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0017_auto_20200130_2350.py +0 -0
  693. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0018_auto_20200714_1832.py +0 -0
  694. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0019_auto_20210811_0018.py +0 -0
  695. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0020_alter_targetname_created_alter_targetname_modified.py +0 -0
  696. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0021_rename_target_basetarget_alter_basetarget_options.py +0 -0
  697. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0022_persistentshare.py +0 -0
  698. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0023_alter_basetarget_created.py +0 -0
  699. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0024_basetarget_permissions.py +0 -0
  700. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0025_auto_20250206_2017.py +0 -0
  701. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0026_alter_basetarget_permissions.py +0 -0
  702. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0027_alter_basetarget_epoch_of_elements_and_more.py +0 -0
  703. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0028_basetarget_abs_mag_basetarget_slope_and_more.py +0 -0
  704. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0029_alter_basetarget_permissions.py +0 -0
  705. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/0030_alter_basetarget_slope.py +0 -0
  706. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/migrations/__init__.py +0 -0
  707. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/models.py +0 -0
  708. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/permissions.py +0 -0
  709. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/seed.py +0 -0
  710. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/signals/__init__.py +0 -0
  711. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/signals/handlers.py +0 -0
  712. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/css/main.css +0 -0
  713. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/target_import.csv +0 -0
  714. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/tables.py +0 -0
  715. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap_targets_oob.html +0 -0
  716. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tab_divs.html +0 -0
  717. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tabs.html +0 -0
  718. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/module_buttons.html +0 -0
  719. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/moon_distance.html +0 -0
  720. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/observation_table.html +0 -0
  721. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/persistent_share_table.html +0 -0
  722. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recent_targets.html +0 -0
  723. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recently_updated_targets.html +0 -0
  724. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_data.html +0 -0
  725. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_feature.html +0 -0
  726. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_groups.html +0 -0
  727. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_merge_fields.html +0 -0
  728. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_plan.html +0 -0
  729. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table.html +0 -0
  730. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table_partial.html +0 -0
  731. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_unknown_statuses.html +0 -0
  732. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/targetlist_select.html +0 -0
  733. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_confirm_delete.html +0 -0
  734. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_facility_selection.html +0 -0
  735. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_form.html +0 -0
  736. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_group_share.html +0 -0
  737. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_grouping.html +0 -0
  738. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_import.html +0 -0
  739. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_list.html +0 -0
  740. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_manage_persistent_shares.html +0 -0
  741. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_merge.html +0 -0
  742. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_confirm_delete.html +0 -0
  743. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_form.html +0 -0
  744. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/templatetags/__init__.py +0 -0
  745. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/tests/__init__.py +0 -0
  746. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/tests/factories.py +0 -0
  747. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/tests/tests.py +0 -0
  748. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/urls.py +0 -0
  749. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/utils.py +0 -0
  750. {tomtoolkit-3.0.0a12 → tomtoolkit-3.0.1}/tom_targets/validators.py +0 -0
  751. {tomtoolkit-3.0.0a12 → 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.0a12
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`.
@@ -188,6 +188,25 @@ This may also require you to create a ``build_headers`` method, or make use of t
188
188
  ``get_credentials`` methods. Saving the results to ``self.query_results`` could save time in other methods by not requiring
189
189
  you to redo the query.
190
190
 
191
+ Configuration and Credentials
192
+ =============================
193
+
194
+ If your dataservice requires a configuration and/or credentials of any kind, retrieving these is built into the base
195
+ DataService class. If possible, and using TOM-wide credentials, you should consider having TOM admins include the needed
196
+ credentials as a nested dictionary inside the `DATA_SERVICES` attribute of ``settings.py`` named after the dataservice.
197
+ These will be automatically retrieved by ``get_configuration``. If an API token is required, storing a key/value pair in
198
+ the credentials named 'api_key' will allow ``get_credentials`` to automatically retrieve the token.
199
+
200
+ .. code-block:: python
201
+ :caption: settings.py default credentials example
202
+
203
+ DATA_SERVICES = {
204
+ 'MyService': {'user': 'Me', 'api_key': os.getenv('MyService_API_KEY', None)}
205
+ }
206
+
207
+ In cases where more complex configurations or credentials are needed, consider overwriting or extending the
208
+ ``configuration``, ``get_configuration``, and/or ``get_credentials`` methods.
209
+
191
210
  ``DataService.query_targets``
192
211
  ++++++++++++++++++++++++++++++
193
212
 
@@ -264,6 +283,22 @@ into a model object with ``create_foo_from_query()``.
264
283
  Depending on the specifics of your data service, it may be reasonable to call the ``query_foo()`` methods independently,
265
284
  and/or part of ``query_targets``.
266
285
 
286
+ Including Aliases:
287
+ ++++++++++++++++++
288
+ Often when ingesting a new target from a dataservice, there will be multiple names or references for the target that you
289
+ will want to include to avoid confusion and help with disambiguation within a TOM. This can be done in one of two ways:
290
+
291
+ 1. ``target_result``: Including an ``aliases`` key in any target results output by ``query_targets`` with a value that is
292
+ a list of strings will automatically ingest those aliases as ``TargetNames``.
293
+
294
+ 2. ``query_aliases``: Sometimes, getting aliases can be more complex, possibly even requiring its own separate DB query. For
295
+ These instances, you will need to include a ``query_aliases`` method that returns a list of strings, each string being a
296
+ name for the target that is different from the primary name stored in ``Target.name``. See the
297
+ :doc:`dataservices documentation <../api/tom_dataservices/data_services>` for more information.
298
+
299
+ Note: By default a TOM's Match Filters apply to alias creation, so if an alias matches any existing name or alias already in the DB
300
+ it will not be created.
301
+
267
302
  Querying Reduced Datums:
268
303
  ++++++++++++++++++++++++
269
304
  Data from a dataservice that needs to be stored as a ``ReducedDatum`` should be handled a little differently.
@@ -293,9 +328,10 @@ We will start by creating our query:
293
328
  ``DataService.create_reduced_datums_from_query``
294
329
  ================================================
295
330
 
296
- To create the ``ReducedDatum``s we will need a ``create_reduced_datums_from_query()`` method. This should take all of the data
297
- types and convert them into ``ReducedDatum`` objects. Be sure to use ``ReducedDatum.objects.get_or_create()`` to prevent
298
- re-creating existing objects.
331
+ To create the ``ReducedDatum`` we will need a ``create_reduced_datums_from_query()`` method. This should take all of the data
332
+ types and convert them into ``ReducedDatum`` objects. Be sure to use ``XXXXXReducedDatum.objects.get_or_create()`` to prevent
333
+ re-creating existing objects where "XXXXX" represents the specific model you wish to use (such as Photometry, Spectroscopy, or Astrometry.)
334
+ Details for the different types of data models can be found in the :doc:`API documentation <../api/tom_dataproducts/models>`.
299
335
 
300
336
  .. code-block:: python
301
337
  :caption: my_dataservice.MyDataService
@@ -318,19 +354,16 @@ re-creating existing objects.
318
354
  # We might have some specific things we want to include based on type.
319
355
  # For Photometry, for example, we need a magnitude, error, and filter to be displayed in the
320
356
  # photometry plot on the target detail page.
321
- datum_details['magnitude'] = datum['my_mag']
322
- datum_details['error'] = datum['my_magerr']
323
- datum_details['limit'] = datum['my_maglim']
324
- datum_details['filter'] = datum['my_passband']
325
-
326
- reduced_datum, __ = ReducedDatum.objects.get_or_create(
327
- target=target,
328
- timestamp=Time(datum['time'], format='iso', scale='utc').datetime,
329
- data_type=data_type,
330
- source_name=self.name,
331
- value=datum_details
332
- )
333
- reduced_datums.append(reduced_datum)
357
+ reduced_datum, __ = PhotometryReducedDatum.objects.get_or_create(
358
+ target=target,
359
+ timestamp=Time(datum['time'], format='iso', scale='utc').datetime,
360
+ source_name=self.name,
361
+ brightness=datum['my_mag'],
362
+ brightness_error=datum['my_magerr'],
363
+ limit=datum['my_maglim'],
364
+ bandpass=datum['my_passband']
365
+ )
366
+ reduced_datums.append(reduced_datum)
334
367
  return reduced_datums
335
368
 
336
369
 
@@ -357,16 +390,17 @@ exists, in several places where we want to update an existing target based on da
357
390
  :param target: A target object to be queried
358
391
  :return: query_parameters (usually a dict) that can be understood by `query_service()`
359
392
  """
360
- if 'first' in target.name:
361
- form_fields = {'first_field': target.name}
362
- query_parameters = self.build_query_parameters(form_fields)
363
- else:
364
- query_parameters= {
365
- 'ra_field': target.ra,
366
- 'dec_field': target.dec,
367
- 'radius': 0.5
368
- }
369
- return query_parameters
393
+ # 2 examples for conditionally building query parameters
394
+ if 'first' in target.name:
395
+ form_fields = {'first_field': target.name}
396
+ query_parameters = self.build_query_parameters(form_fields)
397
+ else:
398
+ query_parameters= {
399
+ 'ra_field': target.ra,
400
+ 'dec_field': target.dec,
401
+ 'radius': 0.5
402
+ }
403
+ return query_parameters
370
404
 
371
405
 
372
406
  Polishing Your Data Service:
@@ -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