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