psat-server-web 0.6.7__tar.gz → 0.6.8__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.
- {psat_server_web-0.6.7/psat_server_web.egg-info → psat_server_web-0.6.8}/PKG-INFO +3 -1
- psat_server_web-0.6.8/psat_server_web/__version__.py +1 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/forms.py +115 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/migrations/0005_userprofile_image_userprofile_image_b64.py +24 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/migrations/0006_alter_userprofile_image.py +20 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/models.py +121 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/urls.py +32 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/utils.py +42 -0
- psat_server_web-0.6.8/psat_server_web/atlas/accounts/views.py +303 -0
- psat_server_web-0.6.8/psat_server_web/atlas/atlas/django-default.log +986 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/settings.py +18 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/urls.py +8 -12
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/views.py +5 -156
- psat_server_web-0.6.8/psat_server_web/atlas/media/profile_pics/Ken_at_ATLAS_HKO2.jpg +0 -0
- psat_server_web-0.6.8/psat_server_web/atlas/media/profile_pics/fbloggs/KenATLASTiny.jpg +0 -0
- psat_server_web-0.6.8/psat_server_web/atlas/media/profile_pics/holygrail_monster_tiny.jpg +0 -0
- psat_server_web-0.6.8/psat_server_web/atlas/media/profile_pics/holygrail_monster_tiny_bt9TavV.jpg +0 -0
- psat_server_web-0.6.8/psat_server_web/atlas/media/profile_pics/ken.smith/holygrail_monster_tiny.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/main_bootstrap.css +10 -1
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/candidate_plotly.html +1 -1
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup_quickview_bs.html +2 -2
- psat_server_web-0.6.8/psat_server_web/atlas/templates/base_bootstrap.html +340 -0
- psat_server_web-0.6.8/psat_server_web/atlas/templates/change_profile_image.html +30 -0
- psat_server_web-0.6.8/psat_server_web/atlas/templates/create_user.html +179 -0
- psat_server_web-0.6.8/psat_server_web/atlas/tests/accounts/test-image.jpg +0 -0
- psat_server_web-0.6.8/psat_server_web/atlas/tests/accounts/test_create_user.py +189 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/commonqueries.py +10 -9
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/lightcurvequeries.py +2 -2
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/views.py +24 -3
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/base_bootstrap.html +3 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/candidate_plotly.html +77 -5
- {psat_server_web-0.6.7 → psat_server_web-0.6.8/psat_server_web.egg-info}/PKG-INFO +3 -1
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web.egg-info/SOURCES.txt +14 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web.egg-info/requires.txt +2 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/setup.py +4 -0
- psat_server_web-0.6.7/psat_server_web/__version__.py +0 -1
- psat_server_web-0.6.7/psat_server_web/atlas/accounts/models.py +0 -66
- psat_server_web-0.6.7/psat_server_web/atlas/accounts/utils.py +0 -14
- psat_server_web-0.6.7/psat_server_web/atlas/atlas/django-default.log +0 -409
- psat_server_web-0.6.7/psat_server_web/atlas/templates/base_bootstrap.html +0 -274
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/LICENSE +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/MANIFEST.in +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/README.md +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/.DS_Store +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/.DS_Store +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/admin.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/apps.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/migrations/0001_initial.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/migrations/0002_groupprofile_api_write_access.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/migrations/0003_globalpermissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/migrations/0004_userprofile.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/migrations/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/permissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/accounts/signals.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/apiutils.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/commonqueries.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/dbviews.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/document.sh +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/formchoices.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/helpers.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/insert_gravity_event.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/lightcurvequeries.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/migrations/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/models.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/sqlpaginator.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/view_celestial.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/wsgi.atlas.conf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/wsgi.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlas/wsgi_apache_example.conf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/apps.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/authentication.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/permissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/serializers.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/throttling.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/urls.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/atlasapi/views.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/cow_backup.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/django-default.log +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/generate_mod_wsgi_apachectl.sh +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/generate_mod_wsgi_apachectl_test.sh +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/manage.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/media/images/README.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/aladin.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/brands.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/celestial.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/fontawesome.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/main.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/css/solid.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/images/atlas_logo.png +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/images/image_not_available.jpeg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/aladin.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/bootstrap_utils.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/celestial.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/d3.geo.projection.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/d3.geo.projection.min.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/d3.geo.zoom.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/d3.min.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/constellations.bounds.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/constellations.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/constellations.lines.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/dsos.bright.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/lg.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/mw.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/planets.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/celestial/data/stars.6.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/colourplot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/excanvas.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery-1.7.2.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.axislabels.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.crosshair.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.errorbars.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.fillbetween.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.image.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.navigate.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.pie.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.resize.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.selection.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.stack.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.symbol.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/flot/jquery.flot.threshold.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/followup_selectall.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/heatmap.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/lightcurve.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/lightcurveplotly.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/mjdcalc.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/plotly/plotly-latest.kws.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/recurrenceplot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/js/recurrenceplotplotly.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-brands-400.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-brands-400.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-brands-400.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-brands-400.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-brands-400.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-regular-400.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-regular-400.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-regular-400.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-regular-400.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-regular-400.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-solid-900.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-solid-900.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-solid-900.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-solid-900.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-solid-900.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-v4compatibility.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/site_media/webfonts/fa-v4compatibility.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/sql/create_web_views.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tcs_detection_lists.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/.DS_Store +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/400.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/403.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/404.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/500.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/atelfasttrackobject.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/atelsdiscovery.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/atelsfast.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/candidate.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/candidate_plotly_test.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/crossmatch_external.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/error.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup2.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup_bypass_django_tables.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup_quickview.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/followup_subset.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/gcn.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/gcn_latex.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/heatmap.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/heatmap_test.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/index.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/index_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/index_bs_celestial.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/index_bs_celestial_experiment.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/iobserve.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/lightcurve.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/lightcurveddc.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/lightcurveforced.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/lightcurvestackedforced.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/permissions_alert.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/pesstorecurrences.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/pesstorecurrencesddc.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/pesstosummary.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/search_results.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/search_results_plotly.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/sne.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/summary.csv +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/userdefinedlists.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/userdefinedlists_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/atlas/visibility.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/base.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/base_bootstrap_login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/bootstrap4_django_tables2_atlas.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/change_password.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/activation_complete.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/activation_email_body.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/activation_email_subject.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/activation_form.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/registration_closed.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/registration_complete.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/django_registration/registration_form.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/invalid_login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/loggedin.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/logout.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/password_change_done.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/privacy_policy.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/templates/register.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/test.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/accounts/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/accounts/test_permissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/atlasapi/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/atlasapi/test_authentication.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/atlasapi/test_failure.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/atlasapi/test_permissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/atlas/tests/atlasapi/test_throttling.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/common/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/common/psat_api_client.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/config/wsgi.conf.template +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/createUsers.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/generate_mod_wsgi_apachectl.sh +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/manage.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/media/images/README.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/admin.py.old +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/catalogueviews.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/dbviews.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/formchoices.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/helpers.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/img_scale.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/models.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/settings.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/urls.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/wsgi.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdb/wsgi_apache_example.conf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/apps.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/permissions.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/query_auth.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/serializers.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/urls.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/psdbapi/views.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/css/aladin.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/css/celestial.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/css/fontawesome.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/css/main.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/css/main_bootstrap.css +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/1-star-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/1-star.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/2-star-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/2-star.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/3-star-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/3-star.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/aladin.gif +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/cfaIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/cfaIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/confirmed-sne-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/confirmed-sne.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/detection_example.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/down.jpeg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/down.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/image_not_available.jpeg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/jhuIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/jhuIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/minus.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/ncuIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/ncuIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/non_detection_example.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/others-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/others.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs-logo-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs-logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs1_logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs1_o3_logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs2_logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs2_o3_logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs_logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs_logo_o4.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs_logo_original.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs_logo_yse.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/panstarrs_logo_yse_stack.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/pittsIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/pittsIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/plus.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/ps1Icon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/ps1IconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/ps1sc.gif +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/qub-logo-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/qub-logo.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/qubIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/qubIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/sdss.gif +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-background.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-bottom-left.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-bottom-right.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-row.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-top-left.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/table-top-right.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/uhifaIcon.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/uhifaIconHover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/up.jpeg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/up.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/variable-stars-hover.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/images/variable-stars.jpg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/aladin.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/celestial.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/d3.geo.projection.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/d3.geo.projection.min.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/d3.geo.zoom.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/d3.min.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/__init__.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/constellations.bounds.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/constellations.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/constellations.lines.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/dsos.bright.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/lg.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/mw.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/planets.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/celestial/data/stars.6.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/colourplot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/excanvas.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery-1.7.2.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.axislabels.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.crosshair.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.errorbars.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.fillbetween.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.image.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.navigate.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.pie.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.resize.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.selection.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.stack.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.symbol.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/flot/jquery.flot.threshold.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/followup_selectall.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/lightcurve.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/lightcurveplotly.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/mjdcalc.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/plotly/plotly-latest.kws.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/recurrenceplot.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/js/recurrenceplotplotly.js +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-brands-400.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-brands-400.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-brands-400.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-brands-400.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-brands-400.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-regular-400.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-regular-400.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-regular-400.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-regular-400.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-regular-400.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-solid-900.eot +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-solid-900.svg +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-solid-900.ttf +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-solid-900.woff +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/site_media/webfonts/fa-solid-900.woff2 +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/sql/create_web_cat_views.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/sql/create_web_user_grants.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/sql/create_web_views.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/sql/create_web_views_fgss.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/400.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/403.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/404.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/500.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/admin/base_site.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/base.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/base_bootstrap_login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/base_new.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/bootstrap4_django_tables2_atlas.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/invalid_login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/loggedin.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/login.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/logout.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/atelsdiscovery.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/candidate.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/candidate_quickview.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/candidateflot.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/candidates.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/colourdata.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/crossmatch_cfa_with_ipp.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/crossmatch_external.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/dss2.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/error.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/fasttrackastronote.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/filter.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup_bs_old.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup_quickview.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup_quickview_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/followup_quickview_bs_old.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/gcn.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/gcn_latex.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/index.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/index_bs_celestial.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/index_public.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/lightcurve.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/lightcurveforced.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/lightcurves.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/obscat.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/obsmediawiki.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/public.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/public_textonly.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/reports.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/search_results.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/search_results_plotly.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/sne.json +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/userdefinedlists.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/ps1/templates/psdb/userdefinedlists_bs.html +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_detections.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_detectionsddc.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_detectionsnnc.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_detections.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_logs.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_moments.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_objects.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_subcell_logs.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_diff_subcells.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_forced_photometry.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_heatmaps.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_metadata.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_metadataddc.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_objects.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/atlas_stacked_forced_photometry.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/convert_backend_storage_to_innodb.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_atlas_flattened_view.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_photpipe_views.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_schema.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_user_grants.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_user_grants_generic.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/create_user_grants_root.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/delete_transients.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/generateATLASSchemaAndCPPClasses.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/get_table_columns_for_avro.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/get_table_columns_for_avro.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/mjdnow.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/refresh_django_views.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/setup_database.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/setup_database_utils.py +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/sherlock_classifications.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/sherlock_crossmatches.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/sherlock_triggers_atlas.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/sherlock_triggers_ps1.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_gaia_dr1.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_gaia_dr2.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_gaia_dr2_cassandra.cql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_kepler_k2.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_kepler_k2_pixels.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_ps1_medium_deep_ref.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_ps1_ubercal_stars.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cat_satellites.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_catalogue_tables.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cfa_detections.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cfa_to_ipp_lookup.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_classification_flags.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_classification_history.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cmf_metadata.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cross_matches.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_cross_matches_external.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_detection_lists.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_detection_lists_atlas.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_followup_photometry.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_followup_telescope_instruments.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_followup_telescopes.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_forced_photometry.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_function_lunation.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_function_mjdlunation.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_gravity_alerts.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_gravity_event_annotations.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_gravity_events.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_guide_star_cat.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_image_groups.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_images.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_ipp_to_cfa_lookup.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_latest_object_stats.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_object_comments.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_object_group_definitions.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_object_group_definitions_atlas.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_object_groups.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_parameter_definitions.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_photpipe_detections.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_postage_stamp_images.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_postage_stamp_requests.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_postage_stamp_status_codes.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_processing_status.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_search_parameters.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_tns_requests.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_tphot_detections.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_transient_objects.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_transient_reobservations.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_vra_rank.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_vra_scores.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_vra_todo.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_zoo_requests.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/tcs_zooniverse_scores.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/types_gaia_dr2_cassandra.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_database_types_to_tns_types_atlas.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_database_types_to_tns_types_panstarrs.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_forced_photometry_20250630.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_gravity_alerts_001.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_gravity_event_annotations_001.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_latest_object_stats_001.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_vra_rank_20240814.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_vra_rank_20250130.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_vra_scores_20240814.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/update_tcs_vra_scores_20250130.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web/schema/vra_triggers_atlas.sql +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web.egg-info/dependency_links.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web.egg-info/not-zip-safe +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/psat_server_web.egg-info/top_level.txt +0 -0
- {psat_server_web-0.6.7 → psat_server_web-0.6.8}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: psat-server-web
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.8
|
|
4
4
|
Summary: Pan-STARRS and ATLAS web interface.
|
|
5
5
|
Home-page: https://github.com/genghisken/psat-server-web
|
|
6
6
|
Author: genghisken
|
|
@@ -28,6 +28,8 @@ Requires-Dist: gkutils>=0.3.10
|
|
|
28
28
|
Requires-Dist: requests
|
|
29
29
|
Requires-Dist: lasair
|
|
30
30
|
Requires-Dist: dustmaps
|
|
31
|
+
Requires-Dist: django-debug-toolbar
|
|
32
|
+
Requires-Dist: pillow
|
|
31
33
|
|
|
32
34
|
# psat-server-web
|
|
33
35
|
Python 3 web interface for the Pan-STARRS and ATLAS surveys.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.6.8'
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Forms for user account management.
|
|
3
|
+
"""
|
|
4
|
+
from django import forms
|
|
5
|
+
from django.contrib.auth.models import User, Group
|
|
6
|
+
from django.core.exceptions import ValidationError
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CreateUserForm(forms.Form):
|
|
10
|
+
"""
|
|
11
|
+
Form for creating new users with profile settings.
|
|
12
|
+
Only accessible by admin users.
|
|
13
|
+
"""
|
|
14
|
+
# User basic information
|
|
15
|
+
username = forms.CharField(
|
|
16
|
+
max_length=150,
|
|
17
|
+
widget=forms.TextInput(attrs={
|
|
18
|
+
'class': 'form-control',
|
|
19
|
+
'placeholder': 'Enter username'
|
|
20
|
+
}),
|
|
21
|
+
help_text='Required. Letters, digits and @/./+/-/_ only.'
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
email = forms.EmailField(
|
|
25
|
+
widget=forms.EmailInput(attrs={
|
|
26
|
+
'class': 'form-control',
|
|
27
|
+
'placeholder': 'Enter email address'
|
|
28
|
+
}),
|
|
29
|
+
help_text='Required. Valid email address.'
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
first_name = forms.CharField(
|
|
33
|
+
max_length=30,
|
|
34
|
+
widget=forms.TextInput(attrs={
|
|
35
|
+
'class': 'form-control',
|
|
36
|
+
'placeholder': 'Enter first name'
|
|
37
|
+
}),
|
|
38
|
+
help_text='Required. First name of the user.'
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
last_name = forms.CharField(
|
|
42
|
+
max_length=150,
|
|
43
|
+
widget=forms.TextInput(attrs={
|
|
44
|
+
'class': 'form-control',
|
|
45
|
+
'placeholder': 'Enter last name'
|
|
46
|
+
}),
|
|
47
|
+
help_text='Required. Last name of the user.'
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
image = forms.ImageField(
|
|
51
|
+
required=False,
|
|
52
|
+
widget=forms.ClearableFileInput(attrs={
|
|
53
|
+
'class': 'form-control-file'
|
|
54
|
+
}),
|
|
55
|
+
help_text='Optional. Upload a profile image (.gif, .png, .jpg).'
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Group selection for token expiration and write access
|
|
59
|
+
group = forms.ModelChoiceField(
|
|
60
|
+
queryset=Group.objects.all(),
|
|
61
|
+
empty_label="Select a group",
|
|
62
|
+
widget=forms.Select(attrs={
|
|
63
|
+
'class': 'form-control'
|
|
64
|
+
}),
|
|
65
|
+
help_text=(
|
|
66
|
+
'Select group to determine API token expiration time and '
|
|
67
|
+
'write access permissions.'
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
has_write_access = forms.BooleanField(
|
|
72
|
+
required=False,
|
|
73
|
+
label='Can edit observations',
|
|
74
|
+
widget=forms.CheckboxInput(),
|
|
75
|
+
help_text='Grant the user permission to edit observations.'
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def __init__(self, *args, **kwargs):
|
|
79
|
+
super().__init__(*args, **kwargs)
|
|
80
|
+
for field_name, field in self.fields.items():
|
|
81
|
+
auto_id = self.auto_id % field_name
|
|
82
|
+
id_for_error = f"{auto_id}_errorlist"
|
|
83
|
+
id_for_help = f"{auto_id}_helptext"
|
|
84
|
+
field.widget.attrs.update(
|
|
85
|
+
{
|
|
86
|
+
"aria-describedby": f"{id_for_error} {id_for_help}",
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def clean_username(self):
|
|
91
|
+
"""Validate that username is unique."""
|
|
92
|
+
username = self.cleaned_data['username']
|
|
93
|
+
if User.objects.filter(username=username).exists():
|
|
94
|
+
raise ValidationError('A user with this username already exists.')
|
|
95
|
+
return username
|
|
96
|
+
|
|
97
|
+
def clean_email(self):
|
|
98
|
+
"""Validate that email is unique."""
|
|
99
|
+
email = self.cleaned_data['email']
|
|
100
|
+
if User.objects.filter(email=email).exists():
|
|
101
|
+
raise ValidationError('A user with this email already exists.')
|
|
102
|
+
return email
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class ChangeProfileImageForm(forms.Form):
|
|
106
|
+
"""
|
|
107
|
+
Form for changing the user's profile image.
|
|
108
|
+
"""
|
|
109
|
+
image = forms.ImageField(
|
|
110
|
+
required=False,
|
|
111
|
+
widget=forms.ClearableFileInput(attrs={
|
|
112
|
+
'class': 'form-control-file'
|
|
113
|
+
}),
|
|
114
|
+
help_text='Optional. Upload a new profile image (.gif, .png, .jpg).'
|
|
115
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-08-08 22:55
|
|
2
|
+
|
|
3
|
+
import django.core.validators
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('accounts', '0004_userprofile'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name='userprofile',
|
|
16
|
+
name='image',
|
|
17
|
+
field=models.ImageField(blank=True, help_text='Optional. Upload a profile image (.gif, .png, .jpg).', null=True, upload_to='profile_pics/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['gif', 'jpeg', 'jpg', 'png'])]),
|
|
18
|
+
),
|
|
19
|
+
migrations.AddField(
|
|
20
|
+
model_name='userprofile',
|
|
21
|
+
name='image_b64',
|
|
22
|
+
field=models.TextField(blank=True, null=True),
|
|
23
|
+
),
|
|
24
|
+
]
|
psat_server_web-0.6.8/psat_server_web/atlas/accounts/migrations/0006_alter_userprofile_image.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-08-27 11:30
|
|
2
|
+
|
|
3
|
+
import accounts.models
|
|
4
|
+
import django.core.validators
|
|
5
|
+
from django.db import migrations, models
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
('accounts', '0005_userprofile_image_userprofile_image_b64'),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.AlterField(
|
|
16
|
+
model_name='userprofile',
|
|
17
|
+
name='image',
|
|
18
|
+
field=models.ImageField(blank=True, help_text='Optional. Upload a profile image (.gif, .png, .jpg).', null=True, upload_to=accounts.models.user_directory_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['gif', 'jpeg', 'jpg', 'png'])]),
|
|
19
|
+
),
|
|
20
|
+
]
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
|
|
2
|
+
from PIL import Image
|
|
3
|
+
from django.utils.timezone import timedelta
|
|
4
|
+
from django.contrib.auth.models import Group
|
|
5
|
+
from django.db import models
|
|
6
|
+
from django.core.validators import FileExtensionValidator
|
|
7
|
+
from django.conf import settings
|
|
8
|
+
import io
|
|
9
|
+
import os
|
|
10
|
+
import re
|
|
11
|
+
|
|
12
|
+
from .utils import bytes2string
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def user_directory_path(instance, filename):
|
|
16
|
+
# file will be uploaded to MEDIA_ROOT/profile_pics/<username>/<filename>
|
|
17
|
+
# Securely extract the base filename and validate it
|
|
18
|
+
base_filename = os.path.basename(filename)
|
|
19
|
+
# Allow only alphanumerics, underscores, hyphens, and dots in filenames
|
|
20
|
+
if not re.fullmatch(r'[\w.\-]+', base_filename):
|
|
21
|
+
raise ValueError("Invalid profile image filename.")
|
|
22
|
+
return f'profile_pics/{instance.user.username}/{base_filename}'
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class UserProfile(models.Model):
|
|
26
|
+
"""UserProfile.
|
|
27
|
+
|
|
28
|
+
Extension of the User model to store additional information, such as token
|
|
29
|
+
expiration time and avatar image.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
if settings.DEBUG:
|
|
33
|
+
staticRoot = settings.STATICFILES_DIRS[0]
|
|
34
|
+
else:
|
|
35
|
+
staticRoot = settings.STATIC_ROOT
|
|
36
|
+
|
|
37
|
+
id = models.AutoField(primary_key=True)
|
|
38
|
+
user = models.OneToOneField(
|
|
39
|
+
'auth.User',
|
|
40
|
+
on_delete=models.CASCADE,
|
|
41
|
+
related_name='profile'
|
|
42
|
+
)
|
|
43
|
+
password_unuseable_fl = models.BooleanField(
|
|
44
|
+
default=False,
|
|
45
|
+
help_text='If true, password requires changing before login'
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
image = models.ImageField(
|
|
49
|
+
upload_to=user_directory_path,
|
|
50
|
+
validators=[FileExtensionValidator(
|
|
51
|
+
allowed_extensions=['gif', 'jpeg', 'jpg', 'png']
|
|
52
|
+
)],
|
|
53
|
+
blank=True,
|
|
54
|
+
null=True,
|
|
55
|
+
help_text='Optional. Upload a profile image (.gif, .png, .jpg).'
|
|
56
|
+
)
|
|
57
|
+
image_b64 = models.TextField(
|
|
58
|
+
blank=True,
|
|
59
|
+
null=True,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
def __str__(self):
|
|
63
|
+
return f'{self.user.username} Profile'
|
|
64
|
+
|
|
65
|
+
def save(self, *args, **kwargs):
|
|
66
|
+
super(UserProfile, self).save(*args, **kwargs)
|
|
67
|
+
if self.image:
|
|
68
|
+
img = Image.open(self.image.path)
|
|
69
|
+
if img.height > 300 or img.width > 300:
|
|
70
|
+
output_size = (300, 300)
|
|
71
|
+
img.thumbnail(output_size)
|
|
72
|
+
img.save(self.image.path)
|
|
73
|
+
imgByteArr = io.BytesIO()
|
|
74
|
+
img.save(imgByteArr, format=img.format)
|
|
75
|
+
self.image_b64 = bytes2string(imgByteArr.getvalue())
|
|
76
|
+
super(UserProfile, self).save(*args, **kwargs)
|
|
77
|
+
|
|
78
|
+
class Meta:
|
|
79
|
+
"""Meta.
|
|
80
|
+
"""
|
|
81
|
+
app_label = 'accounts'
|
|
82
|
+
managed = True
|
|
83
|
+
verbose_name = 'User Profile'
|
|
84
|
+
verbose_name_plural = 'User Profiles'
|
|
85
|
+
db_table = 'auth_user_profile'
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class GroupProfile(models.Model):
|
|
89
|
+
"""GroupProfile.
|
|
90
|
+
|
|
91
|
+
Extension of the Group model to store additional information, such as token
|
|
92
|
+
expiration time.
|
|
93
|
+
"""
|
|
94
|
+
id = models.AutoField(primary_key=True)
|
|
95
|
+
group = models.OneToOneField(
|
|
96
|
+
Group,
|
|
97
|
+
on_delete=models.CASCADE,
|
|
98
|
+
related_name='profile'
|
|
99
|
+
)
|
|
100
|
+
api_write_access = models.BooleanField(
|
|
101
|
+
default=False,
|
|
102
|
+
help_text='Does the group have write access to the API?'
|
|
103
|
+
)
|
|
104
|
+
token_expiration_time = models.DurationField(
|
|
105
|
+
help_text='in days, default 1 day (24*60*60 seconds)',
|
|
106
|
+
default=timedelta(days=1)
|
|
107
|
+
)
|
|
108
|
+
description = models.TextField(
|
|
109
|
+
blank=True,
|
|
110
|
+
help_text='What is the group for?'
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
class Meta:
|
|
114
|
+
"""Meta.
|
|
115
|
+
"""
|
|
116
|
+
app_label = 'accounts'
|
|
117
|
+
managed = True
|
|
118
|
+
verbose_name = 'Group Profile'
|
|
119
|
+
verbose_name_plural = 'Group Profiles'
|
|
120
|
+
db_table = 'auth_group_profile'
|
|
121
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from django.urls import include, path, re_path
|
|
2
|
+
from django.contrib.auth import views as auth_views
|
|
3
|
+
|
|
4
|
+
from accounts import views
|
|
5
|
+
|
|
6
|
+
urlpatterns = [
|
|
7
|
+
re_path(r'^login/', views.loginView, name="login"),
|
|
8
|
+
re_path(r'^register/', views.register_user, name="register"),
|
|
9
|
+
re_path(r'^logout/', views.logoutView, name="logout"),
|
|
10
|
+
re_path(r'^auth/', views.authView, name="auth"),
|
|
11
|
+
re_path(r'^loggedin/', views.loggedin, name="loggedin"),
|
|
12
|
+
re_path(r'^invalid/', views.invalidLogin, name="invalid"),
|
|
13
|
+
re_path(
|
|
14
|
+
r'^change_password/$',
|
|
15
|
+
views.AtlasPasswordChangeView.as_view(),
|
|
16
|
+
name="change_password"
|
|
17
|
+
),
|
|
18
|
+
re_path(
|
|
19
|
+
r'^password_change_done/$',
|
|
20
|
+
auth_views.PasswordChangeDoneView.as_view(
|
|
21
|
+
template_name="password_change_done.html"
|
|
22
|
+
),
|
|
23
|
+
name="password_change_done"
|
|
24
|
+
),
|
|
25
|
+
re_path(r'^create_user/$', views.create_user, name="create_user"),
|
|
26
|
+
re_path(
|
|
27
|
+
r'^change_profile_image/$',
|
|
28
|
+
views.change_profile_image,
|
|
29
|
+
name="change_profile_image"
|
|
30
|
+
),
|
|
31
|
+
path("", include("django_registration.backends.activation.urls")),
|
|
32
|
+
]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import base64
|
|
3
|
+
|
|
4
|
+
logger = logging.getLogger(__name__)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def needs_to_change_password(user):
|
|
8
|
+
"""
|
|
9
|
+
Custom test to check if the user is logged in and has a specific attribute.
|
|
10
|
+
"""
|
|
11
|
+
try:
|
|
12
|
+
logger.debug(
|
|
13
|
+
f"Checking if user {user.username} needs to change password."
|
|
14
|
+
)
|
|
15
|
+
logger.debug(f"User profile: {user.profile}")
|
|
16
|
+
return user.profile.password_unuseable_fl
|
|
17
|
+
except AttributeError:
|
|
18
|
+
return False
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def bytes2string(bytes):
|
|
22
|
+
"""*convert byte to string and return*
|
|
23
|
+
|
|
24
|
+
**Key Arguments:**
|
|
25
|
+
|
|
26
|
+
- `bytes` -- the byte string to convert
|
|
27
|
+
"""
|
|
28
|
+
base64_bytes = base64.b64encode(bytes)
|
|
29
|
+
str = base64_bytes.decode('utf-8')
|
|
30
|
+
return str
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def string2bytes(str):
|
|
34
|
+
"""*convert string to bytes and return*
|
|
35
|
+
|
|
36
|
+
**Key Arguments:**
|
|
37
|
+
|
|
38
|
+
- `str` -- the str string to convert to string
|
|
39
|
+
"""
|
|
40
|
+
base64_bytes = str.encode('utf-8')
|
|
41
|
+
bytes = base64.decodebytes(base64_bytes)
|
|
42
|
+
return bytes
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
from django.shortcuts import render, redirect
|
|
2
|
+
from django.contrib.auth import views as auth_views
|
|
3
|
+
from django.contrib import auth, messages
|
|
4
|
+
from django import forms
|
|
5
|
+
from django.contrib.auth.forms import UserCreationForm, PasswordChangeForm
|
|
6
|
+
from django.contrib.auth.models import Group, Permission
|
|
7
|
+
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
8
|
+
import logging
|
|
9
|
+
|
|
10
|
+
from accounts.models import UserProfile
|
|
11
|
+
from accounts.utils import needs_to_change_password
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class LoginForm(forms.Form):
|
|
17
|
+
"""LoginForm.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
username = forms.CharField(
|
|
21
|
+
required=False,
|
|
22
|
+
widget=forms.TextInput(
|
|
23
|
+
attrs={'size': '50', 'class': 'form-control'}
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
password = forms.CharField(
|
|
27
|
+
required=False,
|
|
28
|
+
widget=forms.PasswordInput(
|
|
29
|
+
attrs={'size': '50', 'class': 'form-control'}
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def loginView(request):
|
|
35
|
+
"""login.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
request:
|
|
39
|
+
"""
|
|
40
|
+
auth.logout(request)
|
|
41
|
+
form = LoginForm()
|
|
42
|
+
return render(request, 'login.html', {'form': form})
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def authView(request):
|
|
46
|
+
"""authView.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
request:
|
|
50
|
+
"""
|
|
51
|
+
# Although we picked up the "next" parameter via GET in our template,
|
|
52
|
+
# we submitted it via POST.
|
|
53
|
+
next = request.POST.get('next', '')
|
|
54
|
+
|
|
55
|
+
username = request.POST.get('username', '')
|
|
56
|
+
password = request.POST.get('password', '')
|
|
57
|
+
user = auth.authenticate(username=username, password=password)
|
|
58
|
+
|
|
59
|
+
if user is not None:
|
|
60
|
+
# Expire the login session after 1 day.
|
|
61
|
+
# 2017-11-28 KWS Changed expiry to 30 days.
|
|
62
|
+
# 1 day expiry too irritating.
|
|
63
|
+
request.session.set_expiry(30 * 86400)
|
|
64
|
+
auth.login(request, user)
|
|
65
|
+
try:
|
|
66
|
+
if user.profile.password_unuseable_fl:
|
|
67
|
+
return redirect('change_password')
|
|
68
|
+
except AttributeError:
|
|
69
|
+
logger.warning(f'User {user} has no profile.')
|
|
70
|
+
|
|
71
|
+
if next == '':
|
|
72
|
+
return redirect('home')
|
|
73
|
+
else:
|
|
74
|
+
return redirect(next)
|
|
75
|
+
|
|
76
|
+
else:
|
|
77
|
+
return redirect('invalid')
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def loggedin(request):
|
|
81
|
+
"""loggedin.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
request:
|
|
85
|
+
"""
|
|
86
|
+
return render(request, 'loggedin.html',
|
|
87
|
+
{'full_name': request.user.username})
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def invalidLogin(request):
|
|
91
|
+
"""invalidLogin.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
request:
|
|
95
|
+
"""
|
|
96
|
+
return render(request, 'invalid_login.html')
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def logoutView(request):
|
|
100
|
+
"""logout.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
request:
|
|
104
|
+
"""
|
|
105
|
+
auth.logout(request)
|
|
106
|
+
return render(request, 'logout.html')
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def register_user(request):
|
|
110
|
+
if request.method == 'POST':
|
|
111
|
+
form = UserCreationForm(request.POST)
|
|
112
|
+
if form.is_valid():
|
|
113
|
+
form.save()
|
|
114
|
+
return redirect('login')
|
|
115
|
+
else:
|
|
116
|
+
form = UserCreationForm()
|
|
117
|
+
return render(request, 'register.html', {'form': form})
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class AtlasPasswordChangeForm(PasswordChangeForm):
|
|
121
|
+
"""AtlasPasswordChangeForm.
|
|
122
|
+
"""
|
|
123
|
+
error_messages = {
|
|
124
|
+
**PasswordChangeForm.error_messages,
|
|
125
|
+
'password_old_same_new': (
|
|
126
|
+
"The new password cannot be the same as the old password."
|
|
127
|
+
),
|
|
128
|
+
'old_password_incorrect': "The old password is not correct.",
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
def clean_new_password1(self):
|
|
132
|
+
"""
|
|
133
|
+
Further checking on old password to ensure it is not the same as the
|
|
134
|
+
new password.
|
|
135
|
+
"""
|
|
136
|
+
new_password1 = self.cleaned_data['new_password1']
|
|
137
|
+
try:
|
|
138
|
+
old_password = self.cleaned_data['old_password']
|
|
139
|
+
except KeyError:
|
|
140
|
+
# This is a new password change form, so we don't have an old
|
|
141
|
+
# password to check against.
|
|
142
|
+
raise forms.ValidationError(
|
|
143
|
+
self.error_messages['old_password_incorrect'],
|
|
144
|
+
code='old_password_incorrect',
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
if old_password == new_password1:
|
|
148
|
+
raise forms.ValidationError(
|
|
149
|
+
self.error_messages['password_old_same_new'],
|
|
150
|
+
code='password_old_same_new',
|
|
151
|
+
)
|
|
152
|
+
return new_password1
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class AtlasPasswordChangeView(auth_views.PasswordChangeView):
|
|
156
|
+
"""AtlasPasswordChangeView.
|
|
157
|
+
"""
|
|
158
|
+
form_class = AtlasPasswordChangeForm
|
|
159
|
+
template_name = 'change_password.html'
|
|
160
|
+
|
|
161
|
+
def form_valid(self, form):
|
|
162
|
+
# Unset the password_unuseable flag in the user profile
|
|
163
|
+
try:
|
|
164
|
+
form.user.profile.password_unuseable_fl = False
|
|
165
|
+
form.user.profile.save()
|
|
166
|
+
except AttributeError:
|
|
167
|
+
logger.warning(f'User {form.user} has no profile.')
|
|
168
|
+
|
|
169
|
+
return super().form_valid(form)
|
|
170
|
+
|
|
171
|
+
def get_context_data(self, **kwargs):
|
|
172
|
+
context_data = super().get_context_data(**kwargs)
|
|
173
|
+
try:
|
|
174
|
+
context_data['password_unuseable_fl'] = (
|
|
175
|
+
self.request.user.profile.password_unuseable_fl
|
|
176
|
+
)
|
|
177
|
+
except AttributeError:
|
|
178
|
+
logger.warning(f'User {self.request.user} has no profile.')
|
|
179
|
+
context_data['password_unuseable_fl'] = False
|
|
180
|
+
return context_data
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
@login_required
|
|
184
|
+
@user_passes_test(lambda u: u.is_staff, login_url='invalid')
|
|
185
|
+
def create_user(request):
|
|
186
|
+
"""
|
|
187
|
+
Create a new user with profile settings.
|
|
188
|
+
Only accessible by admin users.
|
|
189
|
+
"""
|
|
190
|
+
from accounts.forms import CreateUserForm
|
|
191
|
+
from accounts.models import UserProfile, GroupProfile
|
|
192
|
+
from django.contrib.auth.models import User
|
|
193
|
+
from django.contrib import messages
|
|
194
|
+
|
|
195
|
+
if request.method == 'POST':
|
|
196
|
+
form = CreateUserForm(request.POST, request.FILES)
|
|
197
|
+
if form.is_valid():
|
|
198
|
+
try:
|
|
199
|
+
# Create the user
|
|
200
|
+
user = User.objects.create_user(
|
|
201
|
+
username=form.cleaned_data['username'],
|
|
202
|
+
email=form.cleaned_data['email'],
|
|
203
|
+
first_name=form.cleaned_data['first_name'],
|
|
204
|
+
last_name=form.cleaned_data['last_name'],
|
|
205
|
+
password='atlas'
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
user.save()
|
|
209
|
+
|
|
210
|
+
if form.cleaned_data.get('has_write_access'):
|
|
211
|
+
# Grant write access if the checkbox is checked
|
|
212
|
+
permission = Permission.objects.get(
|
|
213
|
+
codename='has_write_access'
|
|
214
|
+
)
|
|
215
|
+
user.user_permissions.add(
|
|
216
|
+
permission
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
# Add user to selected group
|
|
220
|
+
group = form.cleaned_data['group']
|
|
221
|
+
user.groups.add(group)
|
|
222
|
+
|
|
223
|
+
# Create or update user profile
|
|
224
|
+
profile, created = UserProfile.objects.get_or_create(user=user)
|
|
225
|
+
# Temp password must be changed by user
|
|
226
|
+
profile.password_unuseable_fl = True
|
|
227
|
+
profile.save()
|
|
228
|
+
image = form.cleaned_data.get('image')
|
|
229
|
+
if image:
|
|
230
|
+
profile.image = image
|
|
231
|
+
profile.save()
|
|
232
|
+
|
|
233
|
+
messages.success(
|
|
234
|
+
request,
|
|
235
|
+
f'User {user.username} created successfully!'
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
# Clear form for next user creation
|
|
239
|
+
form = CreateUserForm()
|
|
240
|
+
|
|
241
|
+
except Exception as e:
|
|
242
|
+
messages.error(request, f'Error creating user: {str(e)}')
|
|
243
|
+
|
|
244
|
+
else:
|
|
245
|
+
form = CreateUserForm()
|
|
246
|
+
|
|
247
|
+
# Get group information for display
|
|
248
|
+
groups_info = []
|
|
249
|
+
for group in Group.objects.all():
|
|
250
|
+
try:
|
|
251
|
+
group_profile = GroupProfile.objects.get(group=group)
|
|
252
|
+
groups_info.append({
|
|
253
|
+
'group': group,
|
|
254
|
+
'token_expiration': group_profile.token_expiration_time,
|
|
255
|
+
'api_write_access': group_profile.api_write_access,
|
|
256
|
+
'description': group_profile.description
|
|
257
|
+
})
|
|
258
|
+
except GroupProfile.DoesNotExist:
|
|
259
|
+
groups_info.append({
|
|
260
|
+
'group': group,
|
|
261
|
+
'token_expiration': 'Not set',
|
|
262
|
+
'api_write_access': False,
|
|
263
|
+
'description': 'No profile configured'
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
context = {
|
|
267
|
+
'form': form,
|
|
268
|
+
'groups_info': groups_info,
|
|
269
|
+
'title': 'Create New User'
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return render(request, 'create_user.html', context)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
@user_passes_test(
|
|
276
|
+
lambda u: not needs_to_change_password(u),
|
|
277
|
+
login_url='change_password'
|
|
278
|
+
)
|
|
279
|
+
@login_required
|
|
280
|
+
def change_profile_image(request):
|
|
281
|
+
"""Change the user's profile image.
|
|
282
|
+
|
|
283
|
+
Args:
|
|
284
|
+
request: The HTTP request object.
|
|
285
|
+
"""
|
|
286
|
+
from accounts.forms import ChangeProfileImageForm
|
|
287
|
+
|
|
288
|
+
if request.method == 'POST':
|
|
289
|
+
form = ChangeProfileImageForm(request.POST, request.FILES)
|
|
290
|
+
if form.is_valid():
|
|
291
|
+
profile, created = UserProfile.objects.get_or_create(
|
|
292
|
+
user=request.user
|
|
293
|
+
)
|
|
294
|
+
image = form.cleaned_data.get('image')
|
|
295
|
+
if image:
|
|
296
|
+
profile.image = image
|
|
297
|
+
profile.save()
|
|
298
|
+
messages.success(request, 'Profile image updated successfully!')
|
|
299
|
+
return redirect('home')
|
|
300
|
+
else:
|
|
301
|
+
form = ChangeProfileImageForm()
|
|
302
|
+
|
|
303
|
+
return render(request, 'change_profile_image.html', {'form': form})
|