tomtoolkit 3.0.0a13__tar.gz → 3.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tomtoolkit-3.0.1/.git/FETCH_HEAD +1 -0
- tomtoolkit-3.0.1/.git/HEAD +1 -0
- tomtoolkit-3.0.1/.git/config +12 -0
- tomtoolkit-3.0.1/.git/index +0 -0
- tomtoolkit-3.0.1/.git/logs/HEAD +1 -0
- tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.idx +0 -0
- tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.pack → tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.pack +0 -0
- tomtoolkit-3.0.1/.git/objects/pack/pack-b7d3a0b956f12dff843bf3681d01e0c2fe0a83bb.rev +0 -0
- tomtoolkit-3.0.1/.git/refs/tags/3.0.1 +1 -0
- tomtoolkit-3.0.1/.git/shallow +1 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/PKG-INFO +7 -7
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/plugins.rst +9 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/customsettings.rst +3 -0
- tomtoolkit-3.0.1/docs/customization/encrypted_model_fields.rst +138 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/encryption.rst +31 -3
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/updating.rst +18 -3
- tomtoolkit-3.0.1/docs/managing_data/accessing_data_through_REST_API.rst +161 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/index.rst +1 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/tom_direct_sharing.rst +3 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/observation_module.rst +78 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/poetry.lock +558 -735
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/pyproject.toml +9 -9
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/gaia.py +1 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/__init__.py +1 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/settings.py +7 -2
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/default_settings.py +6 -2
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/main.css +0 -5
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/api_views.py +114 -28
- tomtoolkit-3.0.1/tom_dataproducts/migrations/0018_remove_astrometryreduceddatum_unique_astrometry_and_more.py +58 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/models.py +25 -4
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/dataproduct_list_for_target.html +1 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_api.py +31 -6
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/tests.py +3 -4
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/alerce.py +14 -10
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/dataservices.py +10 -7
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/forms.py +3 -1
- tomtoolkit-3.0.1/tom_observations/apps.py +16 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facility.py +100 -66
- tomtoolkit-3.0.1/tom_observations/templates/tom_observations/partials/navbar_facilities_list.html +15 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templatetags/observation_extras.py +35 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/tests.py +147 -2
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/utils.py +5 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/settings.tmpl +9 -2
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/base_models.py +12 -0
- tomtoolkit-3.0.1/tom_targets/migrations/0031_basetarget_shared_by_basetarget_shared_from.py +23 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/persistent_sharing_serializers.py +5 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/serializers.py +1 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/sharing.py +28 -4
- tomtoolkit-3.0.0a13/tom_targets/templates/tom_targets/partials/aladin_finderchart.html → tomtoolkit-3.0.1/tom_targets/static/tom_targets/js/aladin_finderchart.js +65 -72
- tomtoolkit-3.0.1/tom_targets/templates/tom_targets/partials/aladin_finderchart.html +48 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap.html +1 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/create_persistent_share.html +7 -4
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_buttons.html +8 -1
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_detail.html +9 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_share.html +3 -3
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templatetags/targets_extras.py +4 -4
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/test_api.py +54 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/views.py +7 -2
- tomtoolkit-3.0.0a13/.git/FETCH_HEAD +0 -1
- tomtoolkit-3.0.0a13/.git/HEAD +0 -1
- tomtoolkit-3.0.0a13/.git/config +0 -12
- tomtoolkit-3.0.0a13/.git/index +0 -0
- tomtoolkit-3.0.0a13/.git/logs/HEAD +0 -1
- tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.idx +0 -0
- tomtoolkit-3.0.0a13/.git/objects/pack/pack-56b4553455450a12c60e477edcb3183eabdf4218.rev +0 -0
- tomtoolkit-3.0.0a13/.git/refs/tags/3.0.0-alpha13 +0 -1
- tomtoolkit-3.0.0a13/.git/shallow +0 -1
- tomtoolkit-3.0.0a13/docs/customization/encrypted_model_fields.rst +0 -230
- tomtoolkit-3.0.0a13/tom_observations/apps.py +0 -5
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.coveragerc +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.flake8 +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/description +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/applypatch-msg.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/commit-msg.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/fsmonitor-watchman.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/post-update.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-applypatch.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-commit.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-merge-commit.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-push.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-rebase.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/pre-receive.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/prepare-commit-msg.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/push-to-checkout.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/sendemail-validate.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/hooks/update.sample +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.git/info/exclude +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/ISSUE_TEMPLATE/sprint-story.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/dependabot.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/github-release.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/pypi-release.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/run-canary-tests.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.github/workflows/run-tests.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.gitignore +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/.readthedocs.yml +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CITATION.cff +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CODE_OF_CONDUCT.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/CONTRIBUTING.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/LICENSE +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/MANIFEST.in +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/README-dev.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/README.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/Makefile +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/base.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/quote.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/adding_pages_doc/targets.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/erd.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/snex2layout.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/architecture/standardlayout.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/common_interface.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/compare-across-forks.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/example_query.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/populated_query_list.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/query_result.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/create_broker_doc/success_broker_list.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/custom.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_observations/newform.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_observations/observebutton.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_template_tags_doc/Templatetags.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/darkmode.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/sciencecat.jpg +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/toast_example.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagemod.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_templates_doc/tomhomepagenew.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/after.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/customize_views_doc/before.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/advanced_form.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/demo_Data_Service.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/dataservices_doc/query_form_collapsed.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/fork.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/branchdeployed.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubconnected.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/githubintegration.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/heroku_deploy_doc/herokudeploybranch.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/hs.jpg +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/htmx_tables_doc/sortable_table_with_general_search.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/jupyterdoc/newnotebook.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/lco.jpg +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/logo-color.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/logo.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/managing_data/data_upload_form.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/empty_form.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/fields.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/myfacility.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_detail_observe_buttons.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_moon_separation_plot.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/observation_module/target_visibility_tool.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/addgroup.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/permissions_doc/targetgroups.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/plotting_data_doc/plot.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/pull-request.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_display.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_filter.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_fields_doc/redshift_tag.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/target_sources.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/_static/zff.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/management_commands.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/modules.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/exceptions.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/hooks.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/template_tags.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_common/views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/api_views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/data_processing.md +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/models.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/templatetags.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/utils.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataproducts/views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/data_services.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/exceptions.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/models.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_dataservices/views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/facilities.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/models.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/templatetags.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/utils.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_observations/views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/api_views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/groups.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/models.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/templatetags.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/utils.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/api/tom_targets/views.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/automation.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/backgroundtasks.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/custom_code.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/querying.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/code/scripts.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/common/permissions.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/conf.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/adding_pages.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/customize_template_tags.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/customize_templates.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/htmx_tables.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/latex_generation.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/testing_toms.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/customization/widgets.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/data_services/create_dataservice.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/data_services/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/amazons3.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/deployment_heroku.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/deployment_tips.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/deployment/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/examples.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/about.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/acknowledging_tom_toolkit.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/contributing.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/credits.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/faqs.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/getting_started.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/manual_installation.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/programming_resources.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/support.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/tomarchitecture.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/troubleshooting.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/introduction/workflow.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/make.bat +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/continuous_sharing.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/customizing_data_processing.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/plotting_data.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/single_target_data_service.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/managing_data/stream_pub_sub.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/add_facility_form_admin.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/customize_ocs_facility.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/selecting_targets_for_facility.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/strategies.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/target_selection_menu_option.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/observing/target_selection_table_default.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/index.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_fields.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_matcher.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/docs/targets/target_table.rst +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/manage.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/test_settings.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/alerts.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/alerce.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/antares.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/fink.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/lasair.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/scout.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/brokers/tns.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/exceptions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/management/commands/runbrokerquery.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0002_auto_20190626_2135.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0003_auto_20190701_2226.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0004_auto_20210204_2300.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0005_alertstreammessage.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0006_alter_alertstreammessage_exchange_status.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/0007_alter_alertstreammessage_message_id.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/brokerquery_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/navbar_link.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/partials/submit_upstream_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templates/tom_alerts/query_result.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/templatetags/alerts_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_alerce.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_gaia.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/brokers/test_lasair.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/tests/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_alerts/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_base/wsgi.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0002_calendarevent_target_list.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0003_calendarevent_proposal_calendarevent_telescope_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0004_eventtodo.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/0005_calendarevent_instrument.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/calendar_page.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/calendar.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/event_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/navbar_item.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/target_list_block.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templates/tom_calendar/partials/todos.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/templatetags/calendar_tags.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/utils.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_calendar/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/forms.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvester.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/jplhorizons.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/mpc.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/ned.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/simbad.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/harvesters/tns.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/partials/catalog_query_menu.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templates/tom_catalogs/query_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/templatetags/dataservices_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/data/test_65803_mpc_orb.json +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_jplhorizons.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_mpc.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/harvesters/test_simbad.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/tests/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_catalogs/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/api_router.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/api_views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/encryption.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/exceptions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/forms.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/hints.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/hooks.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/htmx_table.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/management/commands/rotate_encryption_key.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/middleware.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0002_usersession.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/0004_delete_usersession.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/mixins.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/serializers.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/signals.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/HELP-US-OUT.txt +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/css/font-awesome.min.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/animated.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/bordered-pulled.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/core.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/fixed-width.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/font-awesome.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/icons.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/larger.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/list.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/mixins.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/path.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/rotated-flipped.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/screen-reader.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/stacked.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/less/variables.less +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_animated.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_bordered-pulled.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_core.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_fixed-width.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_icons.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_larger.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_list.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_mixins.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_path.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_rotated-flipped.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_screen-reader.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_stacked.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/_variables.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/font-awesome-4.7.0/scss/font-awesome.scss +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/css/dark.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/bluespinner.gif +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16.ico +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-16x16.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32.ico +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon-32x32.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/favicon.ico +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/icon.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color-cropped.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-color.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/img/logo-text.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/static/tom_common/js/htmx.min.js +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/404.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/group_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/app_user_lists.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/group_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/partials/user_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_change_password.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/auth/user_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/bootstrap5_overrides/pagination.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/comments/form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/comments/list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/django_comments/comment_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/django_filters/widgets/multiwidget.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/registration/login.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/base.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/bootstrap_htmx.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/change_user_password.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/create_user.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/index.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/navbar_content.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/api_token.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/app_profiles.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/clearable_encrypted_input.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/confirm_user_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/copy_button.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/htmx_table_partial.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/include_app_partial.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/messages.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_app_addons.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/navbar_login.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/revealable_password_input.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/partials/user_data.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templates/tom_common/user_profile.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/bootstrap5_overrides.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/tom_common_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/templatetags/user_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_common/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/data_processor.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/exceptions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/fields.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/filters.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/forms.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/hooks.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/downloaddata.py +0 -0
- /tomtoolkit-3.0.0a13/tom_dataproducts/management/commands/migrateReducedDatums.py → /tomtoolkit-3.0.1/tom_dataproducts/management/commands/migrate_reduced_datums.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/management/commands/updatereduceddata.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0004_auto_20190626_0904.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0005_auto_20190704_1010.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0006_auto_20190912_2013.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0007_manual_20191016_rename_type.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0008_auto_20191205_1952.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0009_auto_20210204_2221.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0010_manual_20210305_fix_spectroscopy.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0011_reduceddatum_message_squashed_0015_remove_reduceddatum_message.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0012_alter_reduceddatum_data_product_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0013_alter_reduceddatum_message.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0014_alter_reduceddatum_timestamp.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0015_remove_reduceddatum_message.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0016_reduceddatum_instrument_reduceddatum_telescope_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/0017_spectroscopyreduceddatum_wavelength_unit.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/atlas_processor.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/data_serializers.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/panstarrs_processor.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/photometry_processor.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/processors/spectroscopy_processor.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/serializers.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/sharing.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/atlas.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/panstarrs_api.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/panstarrs_service/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/single_target_data_service/single_target_data_service.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/img/placeholder.png +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/photometry_sample.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/static/tom_dataproducts/spectrum_sample.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tasks.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/add_product_to_group.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproduct_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_detail.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/dataproductgroup_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_button.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/js9_scripts.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_datalist_for_target.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/photometry_for_target.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/query_single_target_data_service.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/recent_photometry.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/reduceddatum_sparkline.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/saved_dataproduct_list_for_observation.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/spectroscopy_for_target.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/unsaved_dataproduct_list_for_observation.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/partials/upload_dataproduct.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/single_target_data_service_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templates/tom_dataproducts/upload_reduced_data.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/templatetags/dataproduct_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_atlas.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_atlas_fp.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_lightcurve.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/tests/test_data/test_spectrum.fits +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/utils.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataproducts/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/mpc.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/ned.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/simbad.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/data_services/tns.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/listqueries.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/management/commands/rundataquery.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_advanced_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_results_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/alerce/partials/alerce_simple_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/dataservicequery_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/mpc/partials/mpc_results_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/basic_simple_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/catalog_query_menu.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/navbar_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/query_results_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/partials/update_data_from_dataservice.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/query_result.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_query_results_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templates/tom_dataservices/tns/partials/tns_simple_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/templatetags/dataservices_extras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/data_services/test_mpc.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_api.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/test_data/test_65803_mpc_orb.json +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/tests/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_dataservices/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/api_views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadence.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/resume_cadence_after_failure.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/cadences/retry_failed_observations.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/blanco.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/gemini.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lco.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lco_redirect.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/lt.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/manual.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/ocs.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/facilities/soar.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/forms.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/runcadencestrategies.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/management/commands/updatestatus.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0002_auto_20190306_2343.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0003_auto_20190503_2318.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0004_observationgroup.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0005_auto_20191210_0007.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0006_observationgroup_cadence_strategy.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0007_observationstrategy.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0008_observationgroup_cadence_parameters.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0009_observationrecord_user.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0010_manual_create_dynamic_cadence.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0011_auto_20200917_0306.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0012_auto_20210205_1819.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0013_facility.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0014_alter_facility_orbit.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0015_remove_facility_mpc_site_code_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/0016_alter_facility_options.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/observation_template.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/serializers.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/static/tom_observations/css/main.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/existing_observation_confirm.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/facility_status.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observation_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationgroup_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationrecord_detail.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationtemplate_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/observationupdate_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/existing_observation_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_map.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_observation_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/facility_status_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_distribution.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_plan.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observation_type_tabs.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_from_record.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observationtemplate_run.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/observing_buttons.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_observation_id_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templates/tom_observations/partials/update_status_button.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_gemini.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_lco.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_ocs.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/facilities/test_soar.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/factories.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_api.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_cadence.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/tests/test_credentials.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/utils.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_observations/widgets.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/management/commands/tom_setup.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/css.tmpl +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/models.tmpl +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_setup/templates/tom_setup/urls.tmpl +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/admin.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/api_views.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/apps.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/fields.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/filters.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/forms.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/groups.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/converttargetextras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/management/commands/setdefaultextras.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/merge.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0001_initial.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190115_2102.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0002_auto_20190117_2248.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0003_merge_20190123_1754.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0004_auto_20190123_2010.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0005_auto_20190214_1722.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0006_auto_20190403_1659.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190423_1455.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190503_2318.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0007_auto_20190515_0047.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190515_0914.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0008_merge_20190520_1645.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0009_auto_20190605_1656.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_auto_20190715_1657.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0010_merge_20190612_1227.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0011_merge_20190731_1821.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0012_target_perihdist.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0013_manual_20190916_multiple_names.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0014_auto_20190923_1827.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0015_auto_20190923_2233.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0016_auto_20191211_1707.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0017_auto_20200130_2350.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0018_auto_20200714_1832.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0019_auto_20210811_0018.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0020_alter_targetname_created_alter_targetname_modified.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0021_rename_target_basetarget_alter_basetarget_options.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0022_persistentshare.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0023_alter_basetarget_created.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0024_basetarget_permissions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0025_auto_20250206_2017.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0026_alter_basetarget_permissions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0027_alter_basetarget_epoch_of_elements_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0028_basetarget_abs_mag_basetarget_slope_and_more.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0029_alter_basetarget_permissions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/0030_alter_basetarget_slope.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/migrations/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/models.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/permissions.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/seed.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/signals/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/signals/handlers.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/css/main.css +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/static/tom_targets/target_import.csv +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tables.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/aladin_skymap_targets_oob.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tab_divs.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/app_tabs.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/module_buttons.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/moon_distance.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/observation_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/persistent_share_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recent_targets.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/recently_updated_targets.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_data.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_feature.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_groups.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_merge_fields.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_plan.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_table_partial.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/target_unknown_statuses.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/partials/targetlist_select.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_facility_selection.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_group_share.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_grouping.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_import.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_list.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_manage_persistent_shares.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/target_merge.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_confirm_delete.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templates/tom_targets/targetlist_form.html +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/templatetags/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/__init__.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/factories.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/tests/tests.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/urls.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/utils.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/validators.py +0 -0
- {tomtoolkit-3.0.0a13 → tomtoolkit-3.0.1}/tom_targets/viewsets.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d8ccf933fe2e40c5e92eeb9ee11251009f25331b 'd8ccf933fe2e40c5e92eeb9ee11251009f25331b' of https://github.com/TOMToolkit/tom_base
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d8ccf933fe2e40c5e92eeb9ee11251009f25331b
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[core]
|
|
2
|
+
repositoryformatversion = 0
|
|
3
|
+
filemode = true
|
|
4
|
+
bare = false
|
|
5
|
+
logallrefupdates = true
|
|
6
|
+
[remote "origin"]
|
|
7
|
+
url = https://github.com/TOMToolkit/tom_base
|
|
8
|
+
fetch = +refs/heads/*:refs/remotes/origin/*
|
|
9
|
+
[gc]
|
|
10
|
+
auto = 0
|
|
11
|
+
[http "https://github.com/"]
|
|
12
|
+
extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzXzE1MzY4X2V5SmhiR2NpT2lKRlV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoZFdRaU9pSmhkWFJvYm1RaUxDSmpkSGdpT2lKTVpGZHRlbVZVYTJKcGFFWlNOVE0yVERVeFVUY3hVRjkzU1V4R1RrSXpZbHB2VEVKMU5YSktjbUZsTWt0MVdrNWpWeTAyUjBobklpd2laWGh3SWpveE56ZzNOams0TURFMkxDSnBZWFFpT2pFM09EYzJPVFEwTVRZc0ltbHpjeUk2SW1kcGRHaDFZaUlzSW1wMGFTSTZJalZpTnpoalpHUXdMV05oWW1ZdE5HTTNNUzFoTTJWakxUWmxNRGRtWmpVMVpXRTVPQ0lzSW5abGNpSTZNMzAuTkNBaFM4Um5FcHdrMVRINnk0bkhZZWY4Ynp5SW1iQ0puVEl1WGJrVUtMSURuVXdCeTUwQTN6YUVlUDFkWmo1V1I2WU50TzRqaHpWNFpFNk9BakozUEE=
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 d8ccf933fe2e40c5e92eeb9ee11251009f25331b runner <runner@runnervm76f27.c41v2zfaraieda3n4uxiuojluc.phxx.internal.cloudapp.net> 1787694421 +0000 checkout: moving from master to refs/tags/3.0.1
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|
|
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.
|
|
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 (<=
|
|
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.
|
|
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.
|
|
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.
|
|
44
|
+
Requires-Dist: djangorestframework (>=3.18.0,<4)
|
|
45
45
|
Requires-Dist: fits2image (>=0.4,<0.5)
|
|
46
46
|
Requires-Dist: importlib-resources (>=6.4.5,<6.5.0)
|
|
47
47
|
Requires-Dist: markdown (<4)
|
|
@@ -10,6 +10,15 @@ functions, we support a range of optional plugin modules for the Toolkit.
|
|
|
10
10
|
These range from adding the ability to interface with additional
|
|
11
11
|
observatories and catalogs, to providing additional plotting or data analytics functionality.
|
|
12
12
|
|
|
13
|
+
tom_across
|
|
14
|
+
----------
|
|
15
|
+
|
|
16
|
+
`tom_across <https://github.com/TOMToolkit/tom_across>`_
|
|
17
|
+
|
|
18
|
+
This plugin integrates the Astrophysics Cross-Observatory Science Support (`ACROSS <https://science.data.nasa.gov/data-sites/across>_`)
|
|
19
|
+
tools into the TOM Toolkit. Users can view observation records and target visibility directly from the target page using ACROSS's
|
|
20
|
+
aggregated NASA mission observation and observatory status information.
|
|
21
|
+
|
|
13
22
|
tom_hermes
|
|
14
23
|
----------
|
|
15
24
|
|
|
@@ -181,6 +181,9 @@ A list of observation facility classes to make available to your TOM. If
|
|
|
181
181
|
you have written or downloaded a custom observation facility you would
|
|
182
182
|
add the class to this list to make your TOM load it.
|
|
183
183
|
|
|
184
|
+
INSTALLED_APPS that implement the ``observation_facilities()`` AppConfig integration
|
|
185
|
+
point do not need to be listed here.
|
|
186
|
+
|
|
184
187
|
`TOM_LATEX_PROCESSORS <#tom-latex-processors>`__
|
|
185
188
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
186
189
|
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Encrypted Model Fields
|
|
2
|
+
======================
|
|
3
|
+
|
|
4
|
+
If your ``custom_code`` or reusable app needs to store a secret (e.g. an API key
|
|
5
|
+
or password for an external service) — TOM Toolkit provides
|
|
6
|
+
:class:`~tom_common.encryption.EncryptedModelField`, a model field that
|
|
7
|
+
encrypts its value as it is stored in the database.
|
|
8
|
+
|
|
9
|
+
.. note::
|
|
10
|
+
|
|
11
|
+
Encryption protects the secret from passive database exposure. It does
|
|
12
|
+
**not** protect it from anyone who can read your TOM's ``settings.SECRET_KEY``
|
|
13
|
+
(such as a server administrator). See :doc:`/deployment/encryption` for the
|
|
14
|
+
encryption documentation relevant to TOM administrators.
|
|
15
|
+
|
|
16
|
+
This page describes how to add an encrypted field to a user-profile model,
|
|
17
|
+
how to display it, and how to edit it. Working examples live in
|
|
18
|
+
`tom_hermes <https://github.com/TOMToolkit/tom_hermes>`__,
|
|
19
|
+
`tom_eso <https://github.com/TOMToolkit/tom_eso>`__, and
|
|
20
|
+
`tom_demoapp <https://github.com/TOMToolkit/tom_demoapp>`__.
|
|
21
|
+
|
|
22
|
+
Adding an EncryptedModelField
|
|
23
|
+
-------------------------------
|
|
24
|
+
|
|
25
|
+
Declare an :class:`~tom_common.encryption.EncryptedModelField` on your model:
|
|
26
|
+
|
|
27
|
+
.. code-block:: python
|
|
28
|
+
:caption: models.py
|
|
29
|
+
|
|
30
|
+
from django.conf import settings
|
|
31
|
+
from django.db import models
|
|
32
|
+
|
|
33
|
+
from tom_common.encryption import EncryptedModelField
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class MyAppProfile(models.Model):
|
|
37
|
+
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
38
|
+
api_key = EncryptedModelField(null=True, blank=True)
|
|
39
|
+
|
|
40
|
+
Read and write it like any other field; the value is encrypted on save and
|
|
41
|
+
decrypted on load:
|
|
42
|
+
|
|
43
|
+
.. code-block:: python
|
|
44
|
+
|
|
45
|
+
profile.api_key = 'something-secret' # encrypted on save
|
|
46
|
+
profile.save()
|
|
47
|
+
|
|
48
|
+
profile.api_key # -> 'something-secret' (decrypted on load)
|
|
49
|
+
|
|
50
|
+
Assigning ``None`` or ``''`` clears the stored value (the column becomes
|
|
51
|
+
``NULL``); reading an unset value returns ``None``.
|
|
52
|
+
|
|
53
|
+
Displaying the value of an encrypted field
|
|
54
|
+
-------------------------------------------
|
|
55
|
+
|
|
56
|
+
To show the value with a click-to-reveal control, use ``tom_common``'s
|
|
57
|
+
``revealable_password_input.html`` partial. Pass it the **plaintext**, which
|
|
58
|
+
comes from direct attribute access (``profile.api_key``):
|
|
59
|
+
|
|
60
|
+
.. code-block:: python
|
|
61
|
+
:caption: e.g. an inclusion tag or a view's get_context_data
|
|
62
|
+
|
|
63
|
+
context = {'api_key': profile.api_key} # plaintext becomes part of the template context
|
|
64
|
+
|
|
65
|
+
.. code-block:: html+django
|
|
66
|
+
:caption: my_template.html
|
|
67
|
+
|
|
68
|
+
{% if api_key %}
|
|
69
|
+
{% include 'tom_common/partials/revealable_password_input.html' with value=api_key %}
|
|
70
|
+
{% else %}
|
|
71
|
+
(not set)
|
|
72
|
+
{% endif %}
|
|
73
|
+
|
|
74
|
+
.. note::
|
|
75
|
+
|
|
76
|
+
Pass the plaintext only to templates the current user is allowed to see: the
|
|
77
|
+
partial embeds the plaintext value in the page HTML. Revealing it merely toggles
|
|
78
|
+
its visibility. Do **not** source the value from ``model_to_dict``, a DRF
|
|
79
|
+
serializer, or ``dumpdata`` — those return a ``REDACTED`` placeholder for
|
|
80
|
+
encrypted fields, never the secret. (If a profile card auto-iterates fields
|
|
81
|
+
with ``model_to_dict``, exclude the encrypted one and add ``profile.api_key``
|
|
82
|
+
back explicitly.)
|
|
83
|
+
|
|
84
|
+
Editing the value in an UpdateView
|
|
85
|
+
-----------------------------------
|
|
86
|
+
|
|
87
|
+
List the field on a ``ModelForm``-based view. It renders as a masked input
|
|
88
|
+
paired with a **Clear** checkbox:
|
|
89
|
+
|
|
90
|
+
.. code-block:: python
|
|
91
|
+
|
|
92
|
+
class MyProfileUpdateView(UpdateView):
|
|
93
|
+
model = MyAppProfile
|
|
94
|
+
fields = ['api_key']
|
|
95
|
+
|
|
96
|
+
On submitting the update form, an ``EncryptedModelField`` has the following behavior:
|
|
97
|
+
|
|
98
|
+
- a new, typed-in value replaces the stored one;
|
|
99
|
+
- a **blank** input keeps the stored value — so editing other fields on the
|
|
100
|
+
same form never wipes the secret;
|
|
101
|
+
- Checking the **Clear** checkbox with a blank input removes the current value (column becomes ``NULL``);
|
|
102
|
+
- a typed-in value together with **Clear** keeps the typed value (Clear is ignored).
|
|
103
|
+
|
|
104
|
+
The form never renders the stored value, so it can't leak through the edit
|
|
105
|
+
page. The placeholder text displayed in the input box signals the current state
|
|
106
|
+
— ``(A stored value is hidden) — type to replace`` versus ``(not set) — type to add``.
|
|
107
|
+
|
|
108
|
+
How it works (implementation details)
|
|
109
|
+
-------------------------------------
|
|
110
|
+
|
|
111
|
+
Each value is encrypted with a Fernet cipher derived from
|
|
112
|
+
``settings.SECRET_KEY`` (via a key derivation function, :ref:`HKDF <kdf-implementation-details>`).
|
|
113
|
+
Decryption also tries any ``settings.SECRET_KEY_FALLBACKS``, facilitating key rotation —
|
|
114
|
+
see :doc:`/deployment/encryption` for the procedure and the ``rotate_encryption_key`` command.
|
|
115
|
+
|
|
116
|
+
If a stored value cannot be decrypted under any active key, reading it raises
|
|
117
|
+
``cryptography.fernet.InvalidToken`` — usually because a key was dropped from
|
|
118
|
+
the rotation set before its data was re-encrypted.
|
|
119
|
+
|
|
120
|
+
Limitations
|
|
121
|
+
-----------
|
|
122
|
+
|
|
123
|
+
- **No filtering.** Fernet ciphertext is non-deterministic, so equality lookups
|
|
124
|
+
can never match; ``MyAppProfile.objects.filter(api_key=...)`` raises
|
|
125
|
+
``FieldError``. For a searchable secret, store a companion HMAC hash column
|
|
126
|
+
and query that.
|
|
127
|
+
|
|
128
|
+
API reference
|
|
129
|
+
-------------
|
|
130
|
+
|
|
131
|
+
:class:`~tom_common.encryption.EncryptedModelField` (`source <https://github.com/TOMToolkit/tom_base/blob/dev/tom_common/encryption.py>`__)
|
|
132
|
+
A ``models.BinaryField`` subclass that encrypts on save and decrypts on
|
|
133
|
+
load. See the class docstring for the full method-level contract.
|
|
134
|
+
|
|
135
|
+
:class:`~tom_common.encryption.EncryptedFormField` (`source <https://github.com/TOMToolkit/tom_base/blob/dev/tom_common/encryption.py>`__)
|
|
136
|
+
The form-side companion (masked input plus the blank-preserves-existing
|
|
137
|
+
behavior). ``ModelForm`` picks it up automatically via
|
|
138
|
+
:meth:`EncryptedModelField.formfield`.
|
|
@@ -10,7 +10,7 @@ create an encrypted database field, your documentation is here:
|
|
|
10
10
|
------
|
|
11
11
|
|
|
12
12
|
TOM Toolkit encrypts sensitive user data (API keys, observatory
|
|
13
|
-
credentials, anything declared with :class:`
|
|
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:`
|
|
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:`
|
|
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
|
|
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 =
|
|
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 =
|
|
130
|
+
MIDDLEWARE = TOMTOOLKIT_MIDDLEWARE + [
|
|
116
131
|
{{ custom_middleware }} # Include any middleware you have installed for your TOM that are not in default_settings
|
|
117
132
|
]
|
|
118
133
|
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
Accessing data through the REST API
|
|
2
|
+
---------------------------------------
|
|
3
|
+
|
|
4
|
+
`Django REST Framework (DRF) <https://www.django-rest-framework.org/>`_ is built into TOM Toolkit.
|
|
5
|
+
This allows you to access the data in your TOM's database through a REST API.
|
|
6
|
+
|
|
7
|
+
.. note::
|
|
8
|
+
If the ``DEFAULT_AUTHENTICATION_CLASSES`` key is not present in your
|
|
9
|
+
``settings.REST_FRAMEWORK`` configuration dictionary, then you get
|
|
10
|
+
``SessionAuthentication``, and ``BasicAuthentication`` because that's the DRF default.
|
|
11
|
+
To add ``TokenAuthentication``, your ``DEFAULT_AUTHENTICATION_CLASSES`` should look like this:
|
|
12
|
+
|
|
13
|
+
.. code:: python
|
|
14
|
+
|
|
15
|
+
REST_FRAMEWORK = {
|
|
16
|
+
'DEFAULT_AUTHENTICATION_CLASSES': [
|
|
17
|
+
'rest_framework.authentication.TokenAuthentication',
|
|
18
|
+
'rest_framework.authentication.SessionAuthentication',
|
|
19
|
+
'rest_framework.authentication.BasicAuthentication',
|
|
20
|
+
],
|
|
21
|
+
# ... your existing REST_FRAMEWORK settings ...
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
- ``BasicAuthentication`` is used when you send username/password credentials in the ``AuthorizationHeader`` of an HTTP request.
|
|
25
|
+
- ``SessionAuthentication`` uses a cookie and CSRF protection to access the API from your TOM in a browser while logged in.
|
|
26
|
+
- ``TokenAuthentication`` uses your ``API Token`` available from the User Info of your User Profile of your TOM.
|
|
27
|
+
|
|
28
|
+
To see ``SessionAuthentication`` in action, while logged into your TOM, point your browser to the ``/api/`` endpoint.
|
|
29
|
+
This is the DRF API root. We'll show ``BasicAuthentication`` and ``TokenAuthentication`` in use below.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Quick start: querying targets with curl
|
|
33
|
+
#########################################
|
|
34
|
+
|
|
35
|
+
The examples below query the targets endpoint on a TOM running locally at
|
|
36
|
+
``http://127.0.0.1:8888`` with a user ``tom_user_1``. Adjust the host, port and
|
|
37
|
+
username to match your deployment.
|
|
38
|
+
|
|
39
|
+
Basic Authentication
|
|
40
|
+
*************************************************
|
|
41
|
+
|
|
42
|
+
.. code:: bash
|
|
43
|
+
|
|
44
|
+
curl -u tom_user_1 http://127.0.0.1:8888/api/targets/
|
|
45
|
+
|
|
46
|
+
You'll be prompted for ``tom_user_1``'s password.
|
|
47
|
+
You should receive a JSON blob with target data. Don't forget that trailing ``/``.
|
|
48
|
+
|
|
49
|
+
This is ``BasicAuthentication``: ``curl`` sends the username and password in the
|
|
50
|
+
``AuthenticationHeader`` of the HTTP request.
|
|
51
|
+
|
|
52
|
+
Token Authentication
|
|
53
|
+
*************************************************
|
|
54
|
+
|
|
55
|
+
Every user has a personal API token, shown as **API Token** on their
|
|
56
|
+
**User Profile** page. A token suits scripts and cron jobs because it
|
|
57
|
+
needs no interactive prompt. Secure your API token as you would a password.
|
|
58
|
+
|
|
59
|
+
Rather than pass in a username and be prompted for a password, we'll authenticate
|
|
60
|
+
by sending the token in an ``Authorization`` header:
|
|
61
|
+
|
|
62
|
+
To keep the API token out of your command history and scripts, export it as an
|
|
63
|
+
environment variable once and reference it in the header:
|
|
64
|
+
|
|
65
|
+
.. code:: bash
|
|
66
|
+
|
|
67
|
+
export TOM_API_TOKEN="API-token-copied-from-User-Profile"
|
|
68
|
+
curl -H "Authorization: Token $TOM_API_TOKEN" http://127.0.0.1:8888/api/targets/
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
Next Step: querying targets in code
|
|
72
|
+
#########################################
|
|
73
|
+
|
|
74
|
+
The same requests work from Python with the
|
|
75
|
+
`requests <https://requests.readthedocs.io/>`_ library.
|
|
76
|
+
|
|
77
|
+
Basic Authentication
|
|
78
|
+
*************************************************
|
|
79
|
+
|
|
80
|
+
Pass your username and password as the ``auth`` tuple:
|
|
81
|
+
|
|
82
|
+
.. code:: python
|
|
83
|
+
|
|
84
|
+
import requests
|
|
85
|
+
|
|
86
|
+
response = requests.get(
|
|
87
|
+
'http://127.0.0.1:8888/api/targets/',
|
|
88
|
+
auth=('tom_user_1', 'your-password'),
|
|
89
|
+
)
|
|
90
|
+
targets = response.json()
|
|
91
|
+
|
|
92
|
+
``targets`` now holds the same JSON you got back from ``curl``.
|
|
93
|
+
|
|
94
|
+
Token Authentication
|
|
95
|
+
*************************************************
|
|
96
|
+
|
|
97
|
+
Send your API token in an ``Authorization`` header instead. The API token
|
|
98
|
+
substitutes for the `BasicAuthentication` username and password.
|
|
99
|
+
|
|
100
|
+
.. code:: python
|
|
101
|
+
|
|
102
|
+
import requests
|
|
103
|
+
|
|
104
|
+
headers = {'Authorization': 'Token API-token-copied-from-User-Profile'}
|
|
105
|
+
response = requests.get('http://127.0.0.1:8888/api/targets/', headers=headers)
|
|
106
|
+
print('status:', response.status_code)
|
|
107
|
+
print('targets: ', response.json())
|
|
108
|
+
|
|
109
|
+
Don't hard-code real credentials: read the password or token from an environment
|
|
110
|
+
variable (e.g. ``os.environ['TOM_API_TOKEN']``) as in the ``curl`` example above.
|
|
111
|
+
|
|
112
|
+
Obtaining your API Token programmatically
|
|
113
|
+
#########################################
|
|
114
|
+
|
|
115
|
+
Above, we've seen how to access your TOM's data using ``curl`` and ``Python``,
|
|
116
|
+
via ``BasicAuthentication`` (username, password) and ``TokenAuthentication`` (API Token).
|
|
117
|
+
|
|
118
|
+
Your API Token is available from the User Info card of your User Profile. (You may rotate
|
|
119
|
+
your API Token from the User Profile update page (available from the pencil (edit) icon of
|
|
120
|
+
the User Info card). Rotating your API token is analogous to, but separate from, changing
|
|
121
|
+
your password).
|
|
122
|
+
|
|
123
|
+
Here we show how to obtain your API Token programmatically. Django REST Framework
|
|
124
|
+
provides the mechanism for this and it is available at a the ``api/token-auth`` endpoint.
|
|
125
|
+
|
|
126
|
+
Using curl
|
|
127
|
+
******************************************
|
|
128
|
+
|
|
129
|
+
Using the same assumptions as above with respect to ``host``, ``port``, ``username``,
|
|
130
|
+
and ``password``:
|
|
131
|
+
|
|
132
|
+
.. code:: bash
|
|
133
|
+
|
|
134
|
+
curl --request POST http://127.0.0.1:8888/api/token-auth/ \
|
|
135
|
+
--header "Content-Type: application/json" \
|
|
136
|
+
--data '{"username": "tom_user_1", "password": "your-password"}'
|
|
137
|
+
|
|
138
|
+
Things to note here:
|
|
139
|
+
- This is a ``POST`` request.
|
|
140
|
+
- The ``Content-Type`` specified in the request header lets DRF know to expect a JSON payload.
|
|
141
|
+
- The ``BasicAuthentication`` credentials are passed as the JSON payload of the request.
|
|
142
|
+
|
|
143
|
+
The ouput you see will be JSON to stdout of the form ``{"token":"3bc76a8b6400182d617e9a1ce75dfa92d87412a0"}``.
|
|
144
|
+
|
|
145
|
+
Using Python
|
|
146
|
+
******************************************
|
|
147
|
+
Here is the equivalent request made from Python code:
|
|
148
|
+
|
|
149
|
+
.. code:: python
|
|
150
|
+
|
|
151
|
+
import requests
|
|
152
|
+
|
|
153
|
+
response = requests.post(
|
|
154
|
+
'http://127.0.0.1:8888/api/token-auth/',
|
|
155
|
+
json={'username': 'tom_user_1', 'password': 'your-password'},
|
|
156
|
+
)
|
|
157
|
+
print('status:', response.status_code)
|
|
158
|
+
print('json: ', response.json()) # {"token":"3bc76a8b6400182d617e9a1ce75dfa92d87412a0"}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
Further details can be found in the `DRF Authentication API Guide <https://www.django-rest-framework.org/api-guide/authentication/>`_.
|
|
@@ -11,6 +11,7 @@ Managing Data
|
|
|
11
11
|
Continuous data sharing <continuous_sharing>
|
|
12
12
|
Streaming data <stream_pub_sub>
|
|
13
13
|
Single-target data service <single_target_data_service>
|
|
14
|
+
Accessing data through the REST API <accessing_data_through_REST_API>
|
|
14
15
|
Visualizing data <plotting_data>
|
|
15
16
|
|
|
16
17
|
The TOM's Data Models
|
|
@@ -61,6 +61,9 @@ When your TOM receives a new ``Target`` from another TOM it will be saved to you
|
|
|
61
61
|
or alias doesn't match that of a target that already exists in the database, a new target will be created and added to a
|
|
62
62
|
new ``TargetList`` called "Imported from <TOM Name>".
|
|
63
63
|
|
|
64
|
+
Targets shared from a TOM with a custom ``Target`` model that has unique model fields will fill out any identically
|
|
65
|
+
named fields in your ``Target`` model and the remaining fields will be ingested as ``TargetExtras``.
|
|
66
|
+
|
|
64
67
|
Target Lists:
|
|
65
68
|
-------------
|
|
66
69
|
When your TOM receives a new ``TargetList`` from another TOM it will be saved to your TOM's database. If the targets in
|
|
@@ -105,6 +105,32 @@ like this:
|
|
|
105
105
|
This means our new observation facility module has been successfully
|
|
106
106
|
loaded.
|
|
107
107
|
|
|
108
|
+
Adding a facility from an app
|
|
109
|
+
-----------------------------
|
|
110
|
+
|
|
111
|
+
A facility implemented as a Django reusable app can advertise itself
|
|
112
|
+
to a TOM without requiring an admin to include it in ``settings.TOM_FACILITY_CLASSES``,
|
|
113
|
+
which simplifies its installation.
|
|
114
|
+
To do this, implement the ``observation_facilities()`` integration point
|
|
115
|
+
on the app's ``AppConfig`` subclass:
|
|
116
|
+
|
|
117
|
+
.. code:: python
|
|
118
|
+
|
|
119
|
+
class MyAppConfig(AppConfig):
|
|
120
|
+
name = 'myapp'
|
|
121
|
+
|
|
122
|
+
def observation_facilities(self):
|
|
123
|
+
return [{'class': f'{self.name}.myfacility.MyObservationFacility'}]
|
|
124
|
+
|
|
125
|
+
More details can be found on the ``tom_demoapp`` repository `wiki <https://github.com/TOMToolkit/tom_demoapp/wiki/Integration-Points#observation-facilities>`_.
|
|
126
|
+
|
|
127
|
+
Facilities from both ``settings.TOM_FACILITY_CLASSES`` and the apps implementing
|
|
128
|
+
the integration point have the same behavior with respect to target detail page buttons
|
|
129
|
+
and Facilties navbar menu items.
|
|
130
|
+
So, if your facility implements the ``observation_facilities()`` integration point,
|
|
131
|
+
adding the app to ``INSTALLED_APPS`` is all that is required for installation.
|
|
132
|
+
See ``tom_demoapp`` for a demonstration of the basics and ``tom_cfht`` for a fully worked example.
|
|
133
|
+
|
|
108
134
|
BaseRoboticObservationFacility and BaseRoboticObservationForm
|
|
109
135
|
-------------------------------------------------------------
|
|
110
136
|
|
|
@@ -126,6 +152,58 @@ use. The ``BaseRoboticObservationForm`` class, just like the previous
|
|
|
126
152
|
super class, contains logic and layout that all observation facility
|
|
127
153
|
form classes should contain.
|
|
128
154
|
|
|
155
|
+
Linking to a facility detail page
|
|
156
|
+
---------------------------------
|
|
157
|
+
TOMToolkit typically interacts with observation facilities to submit requests to observe
|
|
158
|
+
a specific target. Observation request forms are typically accessed via buttons on the Observe
|
|
159
|
+
tab of the target detail page for the target being observed. When a TOM needs to interact with
|
|
160
|
+
an observation facility for reasons that are not target specific, a "facility detail" page can
|
|
161
|
+
be specified. For example, the Canada France Hawaii telescope (CFHT) facility detail page allows
|
|
162
|
+
a TOM to sync target data with the CFHT P2 tool. This precludes having to visit every target's
|
|
163
|
+
detail page to sync its data. The faciliity class attribute ``detail_url_name``
|
|
164
|
+
supplies the URL of its facility detail page.
|
|
165
|
+
|
|
166
|
+
A facility may set ``detail_url_name`` to the namespaced Django URL name of a page
|
|
167
|
+
that presents general, non-target-specific funcionality. Facilities that set it
|
|
168
|
+
appear in the navbar **Facilities** dropdown, linked to that page:
|
|
169
|
+
|
|
170
|
+
.. code:: python
|
|
171
|
+
|
|
172
|
+
class MyObservationFacility(BaseRoboticObservationFacility):
|
|
173
|
+
name = 'MyFacility'
|
|
174
|
+
detail_url_name = 'myapp:facility-detail'
|
|
175
|
+
|
|
176
|
+
``detail_url_name`` is optional and is omitted from the minimal example above. A facility
|
|
177
|
+
that leaves it unset is still fully registered -- it has an observe button and observation
|
|
178
|
+
forms -- but gets no menu item in the Facilities navbar dropdown. If no facility sets it,
|
|
179
|
+
the dropdown is not displayed.
|
|
180
|
+
See ``tom_demoapp`` for a demonstration of the basics, including deriving the namespace from the
|
|
181
|
+
AppConfig's ``name`` and ``tom_cfht`` for a fully worked example.
|
|
182
|
+
|
|
183
|
+
For ``detail_url_name`` to resolve, the app's URLs must be mounted in the TOM under that
|
|
184
|
+
namespace. A reusable app mounts its own ``urls.py`` through the ``include_url_paths()``
|
|
185
|
+
AppConfig integration point -- ``tom_common`` collects these paths from every installed
|
|
186
|
+
app, so no TOM ``urls.py`` edits are required:
|
|
187
|
+
|
|
188
|
+
.. code:: python
|
|
189
|
+
|
|
190
|
+
class MyAppConfig(AppConfig):
|
|
191
|
+
name = 'myapp'
|
|
192
|
+
route_prefix = 'myapp' # prefixes every route in myapp's urls.py: HOST/myapp/...
|
|
193
|
+
|
|
194
|
+
def include_url_paths(self):
|
|
195
|
+
return [
|
|
196
|
+
path(f'{self.route_prefix}/', include(f'{self.name}.urls')),
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
(``route_prefix`` is a TOM plugin convention, not a Django AppConfig attribute.) The
|
|
200
|
+
included ``urls.py`` supplies the namespace by declaring ``app_name`` -- by convention
|
|
201
|
+
derived from the AppConfig (``app_name = MyAppConfig.name``) so the namespace and the
|
|
202
|
+
package name can never disagree -- and must contain a ``path()`` whose ``name=`` is the
|
|
203
|
+
second half of ``detail_url_name``. If ``app_name`` is missing, the app's URL names are
|
|
204
|
+
un-namespaced and ``detail_url_name`` will not reverse; the menu item is skipped with a
|
|
205
|
+
logged warning.
|
|
206
|
+
|
|
129
207
|
Implementing observation submission
|
|
130
208
|
-----------------------------------
|
|
131
209
|
|