igs-slm 0.1.0b0__py3-none-any.whl
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.
- igs_slm-0.1.0b0.dist-info/LICENSE +21 -0
- igs_slm-0.1.0b0.dist-info/METADATA +151 -0
- igs_slm-0.1.0b0.dist-info/RECORD +447 -0
- igs_slm-0.1.0b0.dist-info/WHEEL +4 -0
- igs_slm-0.1.0b0.dist-info/entry_points.txt +3 -0
- igs_tools/__init__.py +0 -0
- igs_tools/connection.py +88 -0
- igs_tools/defines/__init__.py +8 -0
- igs_tools/defines/constellation.py +21 -0
- igs_tools/defines/data_center.py +75 -0
- igs_tools/defines/rinex.py +49 -0
- igs_tools/directory.py +247 -0
- igs_tools/utils.py +66 -0
- slm/__init__.py +21 -0
- slm/admin.py +674 -0
- slm/api/edit/__init__.py +0 -0
- slm/api/edit/serializers.py +316 -0
- slm/api/edit/views.py +1632 -0
- slm/api/fields.py +89 -0
- slm/api/filter.py +504 -0
- slm/api/pagination.py +55 -0
- slm/api/permissions.py +65 -0
- slm/api/public/__init__.py +0 -0
- slm/api/public/serializers.py +249 -0
- slm/api/public/views.py +606 -0
- slm/api/serializers.py +132 -0
- slm/api/views.py +148 -0
- slm/apps.py +323 -0
- slm/authentication.py +198 -0
- slm/bin/__init__.py +0 -0
- slm/bin/startproject.py +262 -0
- slm/bin/templates/{{ project_dir }}/pyproject.toml +35 -0
- slm/bin/templates/{{ project_dir }}/sites/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/base.py +15 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/__init__.py +56 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/local.py +4 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/wsgi.py +16 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/manage.py +34 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/__init__.py +61 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/wsgi.py +16 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/urls.py +7 -0
- slm/bin/templates/{{ project_dir }}/sites/{{ site }}/validation.py +11 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/admin.py +5 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/apps.py +14 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/import_archive.py +64 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/migrations/__init__.py +0 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/models.py +6 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/templates/slm/base.html +8 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/urls.py +10 -0
- slm/bin/templates/{{ project_dir }}/{{ extension_app }}/views.py +5 -0
- slm/defines/AlertLevel.py +24 -0
- slm/defines/AntennaCalibration.py +25 -0
- slm/defines/AntennaFeatures.py +27 -0
- slm/defines/AntennaReferencePoint.py +22 -0
- slm/defines/Aspiration.py +13 -0
- slm/defines/CardinalDirection.py +19 -0
- slm/defines/CollocationStatus.py +12 -0
- slm/defines/EquipmentState.py +22 -0
- slm/defines/FlagSeverity.py +14 -0
- slm/defines/FractureSpacing.py +15 -0
- slm/defines/FrequencyStandardType.py +15 -0
- slm/defines/GeodesyMLVersion.py +48 -0
- slm/defines/ISOCountry.py +1194 -0
- slm/defines/Instrumentation.py +19 -0
- slm/defines/LogEntryType.py +30 -0
- slm/defines/SLMFileType.py +18 -0
- slm/defines/SiteFileUploadStatus.py +61 -0
- slm/defines/SiteLogFormat.py +49 -0
- slm/defines/SiteLogStatus.py +78 -0
- slm/defines/TectonicPlates.py +28 -0
- slm/defines/__init__.py +46 -0
- slm/forms.py +1126 -0
- slm/jinja2/slm/sitelog/ascii_9char.log +346 -0
- slm/jinja2/slm/sitelog/legacy.log +346 -0
- slm/jinja2/slm/sitelog/xsd/0.4/collocationInformation.xml +12 -0
- slm/jinja2/slm/sitelog/xsd/0.4/condition.xml +12 -0
- slm/jinja2/slm/sitelog/xsd/0.4/contact.xml +52 -0
- slm/jinja2/slm/sitelog/xsd/0.4/formInformation.xml +5 -0
- slm/jinja2/slm/sitelog/xsd/0.4/frequencyStandard.xml +12 -0
- slm/jinja2/slm/sitelog/xsd/0.4/gnssAntenna.xml +16 -0
- slm/jinja2/slm/sitelog/xsd/0.4/gnssReceiver.xml +11 -0
- slm/jinja2/slm/sitelog/xsd/0.4/humiditySensor.xml +13 -0
- slm/jinja2/slm/sitelog/xsd/0.4/localEpisodicEffect.xml +10 -0
- slm/jinja2/slm/sitelog/xsd/0.4/moreInformation.xml +22 -0
- slm/jinja2/slm/sitelog/xsd/0.4/multipathSource.xml +10 -0
- slm/jinja2/slm/sitelog/xsd/0.4/otherInstrumentation.xml +5 -0
- slm/jinja2/slm/sitelog/xsd/0.4/pressureSensor.xml +12 -0
- slm/jinja2/slm/sitelog/xsd/0.4/radioInterference.xml +11 -0
- slm/jinja2/slm/sitelog/xsd/0.4/sensor.xml +16 -0
- slm/jinja2/slm/sitelog/xsd/0.4/signalObstruction.xml +10 -0
- slm/jinja2/slm/sitelog/xsd/0.4/siteIdentification.xml +22 -0
- slm/jinja2/slm/sitelog/xsd/0.4/siteLocation.xml +21 -0
- slm/jinja2/slm/sitelog/xsd/0.4/surveyedLocalTie.xml +20 -0
- slm/jinja2/slm/sitelog/xsd/0.4/temperatureSensor.xml +13 -0
- slm/jinja2/slm/sitelog/xsd/0.4/waterVaporSensor.xml +11 -0
- slm/jinja2/slm/sitelog/xsd/0.5/document.xml +10 -0
- slm/jinja2/slm/sitelog/xsd/geodesyml_0.4.xml +99 -0
- slm/jinja2/slm/sitelog/xsd/geodesyml_0.5.xml +112 -0
- slm/management/__init__.py +0 -0
- slm/management/commands/__init__.py +53 -0
- slm/management/commands/build_index.py +96 -0
- slm/management/commands/generate_sinex.py +675 -0
- slm/management/commands/head_from_index.py +541 -0
- slm/management/commands/import_archive.py +908 -0
- slm/management/commands/import_equipment.py +351 -0
- slm/management/commands/set_site.py +56 -0
- slm/management/commands/sitelog.py +144 -0
- slm/management/commands/synchronize.py +60 -0
- slm/management/commands/update_data_availability.py +167 -0
- slm/management/commands/validate_db.py +186 -0
- slm/management/commands/validate_gml.py +73 -0
- slm/map/__init__.py +1 -0
- slm/map/admin.py +5 -0
- slm/map/api/__init__.py +0 -0
- slm/map/api/edit/__init__.py +0 -0
- slm/map/api/edit/serializers.py +28 -0
- slm/map/api/edit/views.py +46 -0
- slm/map/api/public/__init__.py +0 -0
- slm/map/api/public/serializers.py +29 -0
- slm/map/api/public/views.py +64 -0
- slm/map/apps.py +7 -0
- slm/map/defines.py +53 -0
- slm/map/migrations/0001_initial.py +115 -0
- slm/map/migrations/__init__.py +0 -0
- slm/map/models.py +63 -0
- slm/map/static/slm/css/map.css +86 -0
- slm/map/static/slm/js/map.js +159 -0
- slm/map/templates/slm/map.html +374 -0
- slm/map/templates/slm/station/base.html +11 -0
- slm/map/templates/slm/station/edit.html +10 -0
- slm/map/templates/slm/top_nav.html +17 -0
- slm/map/templatetags/__init__.py +0 -0
- slm/map/templatetags/slm_map.py +18 -0
- slm/map/urls.py +25 -0
- slm/map/views.py +36 -0
- slm/middleware.py +29 -0
- slm/migrations/0001_alter_siteantenna_marker_enu_alter_sitelocation_llh_and_more.py +47 -0
- slm/migrations/0001_initial.py +4826 -0
- slm/migrations/0002_alter_dataavailability_site.py +22 -0
- slm/migrations/0003_remove_logentry_slm_logentr_site_lo_7a2af7_idx_and_more.py +80 -0
- slm/migrations/0004_alter_logentry_timestamp_and_more.py +25 -0
- slm/migrations/0005_alter_logentry_options_alter_logentry_section_and_more.py +46 -0
- slm/migrations/0006_alter_logentry_options_alter_logentry_index_together.py +24 -0
- slm/migrations/0007_alter_dataavailability_rate.py +23 -0
- slm/migrations/0008_alter_archiveindex_options_and_more.py +64 -0
- slm/migrations/0009_alter_archiveindex_end.py +21 -0
- slm/migrations/0010_alter_dataavailability_rinex_version_and_more.py +844 -0
- slm/migrations/0011_alter_siteidentification_fracture_spacing.py +33 -0
- slm/migrations/0012_alter_logentry_type.py +36 -0
- slm/migrations/0013_unpublishedfilesalert.py +48 -0
- slm/migrations/0014_sitelogpublished.py +48 -0
- slm/migrations/0015_alter_siteantenna_options_and_more.py +181 -0
- slm/migrations/0016_alter_antenna_description_alter_radome_description_and_more.py +42 -0
- slm/migrations/0017_alter_logentry_unique_together_and_more.py +54 -0
- slm/migrations/0018_afix_deleted.py +34 -0
- slm/migrations/0018_alter_siteantenna_options_and_more.py +244 -0
- slm/migrations/0019_remove_siteantenna_marker_enu_siteantenna_marker_une_and_more.py +101 -0
- slm/migrations/0020_alter_manufacturer_options.py +16 -0
- slm/migrations/0021_alter_siteform_report_type.py +23 -0
- slm/migrations/0022_rename_antcal_antenna_radome_slm_antcal_antenna_20827a_idx_and_more.py +297 -0
- slm/migrations/0023_archivedsitelog_gml_version_and_more.py +55 -0
- slm/migrations/0024_alter_agency_name_alter_agency_shortname.py +24 -0
- slm/migrations/0025_alter_archivedsitelog_log_format_and_more.py +61 -0
- slm/migrations/0026_alter_archivedsitelog_log_format_and_more.py +61 -0
- slm/migrations/0027_importalert_file_contents_importalert_findings_and_more.py +41 -0
- slm/migrations/0028_antenna_replaced_manufacturer_url_radome_replaced_and_more.py +46 -0
- slm/migrations/0029_manufacturer_full_name.py +17 -0
- slm/migrations/0030_alter_antenna_state_alter_radome_state_and_more.py +43 -0
- slm/migrations/__init__.py +0 -0
- slm/migrations/load_satellitesystems.py +27 -0
- slm/models/__init__.py +118 -0
- slm/models/about.py +14 -0
- slm/models/alerts.py +1204 -0
- slm/models/data.py +58 -0
- slm/models/equipment.py +229 -0
- slm/models/help.py +14 -0
- slm/models/index.py +428 -0
- slm/models/sitelog.py +4279 -0
- slm/models/system.py +723 -0
- slm/models/user.py +304 -0
- slm/parsing/__init__.py +786 -0
- slm/parsing/legacy/__init__.py +4 -0
- slm/parsing/legacy/binding.py +817 -0
- slm/parsing/legacy/parser.py +377 -0
- slm/parsing/xsd/__init__.py +34 -0
- slm/parsing/xsd/binding.py +86 -0
- slm/parsing/xsd/geodesyml/0.4/commonTypes.xsd +133 -0
- slm/parsing/xsd/geodesyml/0.4/contact.xsd +29 -0
- slm/parsing/xsd/geodesyml/0.4/dataStreams.xsd +129 -0
- slm/parsing/xsd/geodesyml/0.4/document.xsd +64 -0
- slm/parsing/xsd/geodesyml/0.4/equipment.xsd +427 -0
- slm/parsing/xsd/geodesyml/0.4/fieldMeasurement.xsd +170 -0
- slm/parsing/xsd/geodesyml/0.4/geodesyML.xsd +71 -0
- slm/parsing/xsd/geodesyml/0.4/geodeticEquipment.xsd +343 -0
- slm/parsing/xsd/geodesyml/0.4/geodeticMonument.xsd +147 -0
- slm/parsing/xsd/geodesyml/0.4/lineage.xsd +614 -0
- slm/parsing/xsd/geodesyml/0.4/localInterferences.xsd +131 -0
- slm/parsing/xsd/geodesyml/0.4/measurement.xsd +473 -0
- slm/parsing/xsd/geodesyml/0.4/monumentInfo.xsd +251 -0
- slm/parsing/xsd/geodesyml/0.4/observationSystem.xsd +429 -0
- slm/parsing/xsd/geodesyml/0.4/project.xsd +38 -0
- slm/parsing/xsd/geodesyml/0.4/quality.xsd +176 -0
- slm/parsing/xsd/geodesyml/0.4/referenceFrame.xsd +194 -0
- slm/parsing/xsd/geodesyml/0.4/siteLog.xsd +71 -0
- slm/parsing/xsd/geodesyml/0.5/commonTypes.xsd +133 -0
- slm/parsing/xsd/geodesyml/0.5/contact.xsd +29 -0
- slm/parsing/xsd/geodesyml/0.5/dataStreams.xsd +129 -0
- slm/parsing/xsd/geodesyml/0.5/document.xsd +64 -0
- slm/parsing/xsd/geodesyml/0.5/equipment.xsd +427 -0
- slm/parsing/xsd/geodesyml/0.5/fieldMeasurement.xsd +170 -0
- slm/parsing/xsd/geodesyml/0.5/geodesyML.xsd +71 -0
- slm/parsing/xsd/geodesyml/0.5/geodeticEquipment.xsd +343 -0
- slm/parsing/xsd/geodesyml/0.5/geodeticMonument.xsd +147 -0
- slm/parsing/xsd/geodesyml/0.5/lineage.xsd +614 -0
- slm/parsing/xsd/geodesyml/0.5/localInterferences.xsd +131 -0
- slm/parsing/xsd/geodesyml/0.5/measurement.xsd +473 -0
- slm/parsing/xsd/geodesyml/0.5/monumentInfo.xsd +306 -0
- slm/parsing/xsd/geodesyml/0.5/observationSystem.xsd +429 -0
- slm/parsing/xsd/geodesyml/0.5/project.xsd +38 -0
- slm/parsing/xsd/geodesyml/0.5/quality.xsd +176 -0
- slm/parsing/xsd/geodesyml/0.5/referenceFrame.xsd +194 -0
- slm/parsing/xsd/geodesyml/0.5/siteLog.xsd +73 -0
- slm/parsing/xsd/parser.py +116 -0
- slm/parsing/xsd/resolver.py +28 -0
- slm/receivers/__init__.py +11 -0
- slm/receivers/alerts.py +87 -0
- slm/receivers/cleanup.py +41 -0
- slm/receivers/event_loggers.py +175 -0
- slm/receivers/index.py +67 -0
- slm/settings/__init__.py +55 -0
- slm/settings/auth.py +15 -0
- slm/settings/ckeditor.py +14 -0
- slm/settings/debug.py +47 -0
- slm/settings/internationalization.py +12 -0
- slm/settings/logging.py +113 -0
- slm/settings/platform/__init__.py +0 -0
- slm/settings/platform/darwin.py +10 -0
- slm/settings/rest.py +21 -0
- slm/settings/root.py +152 -0
- slm/settings/routines.py +43 -0
- slm/settings/secrets.py +37 -0
- slm/settings/security.py +5 -0
- slm/settings/slm.py +188 -0
- slm/settings/static_templates.py +53 -0
- slm/settings/templates.py +29 -0
- slm/settings/uploads.py +8 -0
- slm/settings/urls.py +126 -0
- slm/settings/validation.py +196 -0
- slm/signals.py +250 -0
- slm/singleton.py +49 -0
- slm/static/rest_framework/css/bootstrap-tweaks.css +204 -0
- slm/static/rest_framework/css/bootstrap.min.css +7 -0
- slm/static/rest_framework/css/bootstrap.min.css.map +1 -0
- slm/static/rest_framework/css/default.css +82 -0
- slm/static/rest_framework/css/prettify.css +30 -0
- slm/static/rest_framework/docs/css/base.css +344 -0
- slm/static/rest_framework/docs/css/highlight.css +125 -0
- slm/static/rest_framework/docs/css/jquery.json-view.min.css +11 -0
- slm/static/rest_framework/docs/img/favicon.ico +0 -0
- slm/static/rest_framework/docs/img/grid.png +0 -0
- slm/static/rest_framework/docs/js/api.js +321 -0
- slm/static/rest_framework/docs/js/highlight.pack.js +2 -0
- slm/static/rest_framework/docs/js/jquery.json-view.min.js +7 -0
- slm/static/rest_framework/img/grid.png +0 -0
- slm/static/rest_framework/js/ajax-form.js +127 -0
- slm/static/rest_framework/js/bootstrap.bundle.min.js +7 -0
- slm/static/rest_framework/js/bootstrap.bundle.min.js.map +1 -0
- slm/static/rest_framework/js/bootstrap.min.js.map +1 -0
- slm/static/rest_framework/js/coreapi-0.1.1.js +2043 -0
- slm/static/rest_framework/js/csrf.js +52 -0
- slm/static/rest_framework/js/default.js +47 -0
- slm/static/rest_framework/js/jquery-3.5.1.min.js +2 -0
- slm/static/rest_framework/js/prettify-min.js +28 -0
- slm/static/slm/css/admin.css +3 -0
- slm/static/slm/css/defines.css +82 -0
- slm/static/slm/css/forms.css +1 -0
- slm/static/slm/css/style.css +1004 -0
- slm/static/slm/img/email-branding.png +0 -0
- slm/static/slm/img/favicon.ico +0 -0
- slm/static/slm/img/login-bg.jpg +0 -0
- slm/static/slm/img/slm-logo.svg +4 -0
- slm/static/slm/js/autocomplete.js +341 -0
- slm/static/slm/js/enums.js +322 -0
- slm/static/slm/js/fileIcons.js +30 -0
- slm/static/slm/js/form.js +404 -0
- slm/static/slm/js/formWidget.js +23 -0
- slm/static/slm/js/persistable.js +33 -0
- slm/static/slm/js/slm.js +1028 -0
- slm/static/slm/js/time24.js +212 -0
- slm/static_templates/slm/css/defines.css +26 -0
- slm/static_templates/slm/js/enums.js +28 -0
- slm/static_templates/slm/js/fileIcons.js +16 -0
- slm/static_templates/slm/js/urls.js +5 -0
- slm/templates/account/base.html +20 -0
- slm/templates/account/email/base.html +43 -0
- slm/templates/account/email/base_message.txt +7 -0
- slm/templates/account/email/email_confirmation_message.html +16 -0
- slm/templates/account/email/email_confirmation_message.txt +7 -0
- slm/templates/account/email/email_confirmation_signup_message.html +1 -0
- slm/templates/account/email/email_confirmation_signup_message.txt +1 -0
- slm/templates/account/email/email_confirmation_signup_subject.txt +1 -0
- slm/templates/account/email/email_confirmation_subject.txt +4 -0
- slm/templates/account/email/password_reset_key_message.html +28 -0
- slm/templates/account/email/password_reset_key_message.txt +9 -0
- slm/templates/account/email/password_reset_key_subject.txt +4 -0
- slm/templates/account/email/unknown_account_message.html +25 -0
- slm/templates/account/email/unknown_account_message.txt +12 -0
- slm/templates/account/email/unknown_account_subject.txt +4 -0
- slm/templates/account/login.html +67 -0
- slm/templates/account/logout.html +38 -0
- slm/templates/account/password_change.html +48 -0
- slm/templates/account/password_reset.html +51 -0
- slm/templates/account/password_reset_done.html +20 -0
- slm/templates/account/password_reset_from_key.html +52 -0
- slm/templates/account/password_reset_from_key_done.html +17 -0
- slm/templates/admin/base.html +7 -0
- slm/templates/messages.html +8 -0
- slm/templates/rest_framework/README +16 -0
- slm/templates/rest_framework/admin/detail.html +10 -0
- slm/templates/rest_framework/admin/dict_value.html +11 -0
- slm/templates/rest_framework/admin/list.html +32 -0
- slm/templates/rest_framework/admin/list_value.html +11 -0
- slm/templates/rest_framework/admin/simple_list_value.html +2 -0
- slm/templates/rest_framework/admin.html +282 -0
- slm/templates/rest_framework/api.html +3 -0
- slm/templates/rest_framework/base.html +334 -0
- slm/templates/rest_framework/docs/auth/basic.html +42 -0
- slm/templates/rest_framework/docs/auth/session.html +40 -0
- slm/templates/rest_framework/docs/auth/token.html +41 -0
- slm/templates/rest_framework/docs/document.html +37 -0
- slm/templates/rest_framework/docs/error.html +71 -0
- slm/templates/rest_framework/docs/index.html +55 -0
- slm/templates/rest_framework/docs/interact.html +57 -0
- slm/templates/rest_framework/docs/langs/javascript-intro.html +5 -0
- slm/templates/rest_framework/docs/langs/javascript.html +15 -0
- slm/templates/rest_framework/docs/langs/python-intro.html +3 -0
- slm/templates/rest_framework/docs/langs/python.html +13 -0
- slm/templates/rest_framework/docs/langs/shell-intro.html +3 -0
- slm/templates/rest_framework/docs/langs/shell.html +6 -0
- slm/templates/rest_framework/docs/link.html +113 -0
- slm/templates/rest_framework/docs/sidebar.html +78 -0
- slm/templates/rest_framework/filters/base.html +16 -0
- slm/templates/rest_framework/filters/ordering.html +17 -0
- slm/templates/rest_framework/filters/search.html +13 -0
- slm/templates/rest_framework/horizontal/checkbox.html +23 -0
- slm/templates/rest_framework/horizontal/checkbox_multiple.html +32 -0
- slm/templates/rest_framework/horizontal/dict_field.html +11 -0
- slm/templates/rest_framework/horizontal/fieldset.html +16 -0
- slm/templates/rest_framework/horizontal/form.html +6 -0
- slm/templates/rest_framework/horizontal/input.html +21 -0
- slm/templates/rest_framework/horizontal/list_field.html +11 -0
- slm/templates/rest_framework/horizontal/list_fieldset.html +13 -0
- slm/templates/rest_framework/horizontal/radio.html +42 -0
- slm/templates/rest_framework/horizontal/select.html +36 -0
- slm/templates/rest_framework/horizontal/select_multiple.html +38 -0
- slm/templates/rest_framework/horizontal/textarea.html +21 -0
- slm/templates/rest_framework/inline/checkbox.html +8 -0
- slm/templates/rest_framework/inline/checkbox_multiple.html +14 -0
- slm/templates/rest_framework/inline/dict_field.html +9 -0
- slm/templates/rest_framework/inline/fieldset.html +6 -0
- slm/templates/rest_framework/inline/form.html +8 -0
- slm/templates/rest_framework/inline/input.html +9 -0
- slm/templates/rest_framework/inline/list_field.html +9 -0
- slm/templates/rest_framework/inline/list_fieldset.html +3 -0
- slm/templates/rest_framework/inline/radio.html +25 -0
- slm/templates/rest_framework/inline/select.html +24 -0
- slm/templates/rest_framework/inline/select_multiple.html +25 -0
- slm/templates/rest_framework/inline/textarea.html +9 -0
- slm/templates/rest_framework/login.html +3 -0
- slm/templates/rest_framework/login_base.html +65 -0
- slm/templates/rest_framework/pagination/numbers.html +47 -0
- slm/templates/rest_framework/pagination/previous_and_next.html +21 -0
- slm/templates/rest_framework/raw_data_form.html +11 -0
- slm/templates/rest_framework/schema.js +3 -0
- slm/templates/rest_framework/vertical/checkbox.html +16 -0
- slm/templates/rest_framework/vertical/checkbox_multiple.html +30 -0
- slm/templates/rest_framework/vertical/dict_field.html +7 -0
- slm/templates/rest_framework/vertical/fieldset.html +13 -0
- slm/templates/rest_framework/vertical/form.html +6 -0
- slm/templates/rest_framework/vertical/input.html +17 -0
- slm/templates/rest_framework/vertical/list_field.html +7 -0
- slm/templates/rest_framework/vertical/list_fieldset.html +7 -0
- slm/templates/rest_framework/vertical/radio.html +40 -0
- slm/templates/rest_framework/vertical/select.html +34 -0
- slm/templates/rest_framework/vertical/select_multiple.html +31 -0
- slm/templates/rest_framework/vertical/textarea.html +17 -0
- slm/templates/slm/about.html +21 -0
- slm/templates/slm/alerts/alert.html +15 -0
- slm/templates/slm/alerts/geodesymlinvalid.html +8 -0
- slm/templates/slm/alerts/importalert.html +10 -0
- slm/templates/slm/alerts.html +18 -0
- slm/templates/slm/auth_menu.html +41 -0
- slm/templates/slm/base.html +195 -0
- slm/templates/slm/emails/alert_issued.html +31 -0
- slm/templates/slm/emails/alert_issued.txt +9 -0
- slm/templates/slm/emails/base.html +6 -0
- slm/templates/slm/emails/changes_rejected.txt +7 -0
- slm/templates/slm/emails/review_requested.txt +7 -0
- slm/templates/slm/forms/widgets/auto_complete.html +21 -0
- slm/templates/slm/forms/widgets/auto_complete_multiple.html +18 -0
- slm/templates/slm/forms/widgets/checkbox_multiple.html +6 -0
- slm/templates/slm/forms/widgets/inline_multi.html +1 -0
- slm/templates/slm/forms/widgets/splitdatetime.html +14 -0
- slm/templates/slm/forms/widgets/time24.html +37 -0
- slm/templates/slm/help.html +54 -0
- slm/templates/slm/messages.html +13 -0
- slm/templates/slm/new_site.html +88 -0
- slm/templates/slm/profile.html +57 -0
- slm/templates/slm/register.html +40 -0
- slm/templates/slm/reports/file_log.html +43 -0
- slm/templates/slm/reports/head_log.html +23 -0
- slm/templates/slm/reports/head_report.html +55 -0
- slm/templates/slm/reports/index_log.html +23 -0
- slm/templates/slm/reports/index_report.html +71 -0
- slm/templates/slm/station/alert.html +8 -0
- slm/templates/slm/station/alerts.html +19 -0
- slm/templates/slm/station/base.html +104 -0
- slm/templates/slm/station/download.html +87 -0
- slm/templates/slm/station/edit.html +283 -0
- slm/templates/slm/station/form.html +110 -0
- slm/templates/slm/station/log.html +18 -0
- slm/templates/slm/station/review.html +461 -0
- slm/templates/slm/station/upload.html +295 -0
- slm/templates/slm/station/uploads/attachment.html +20 -0
- slm/templates/slm/station/uploads/geodesyml.html +1 -0
- slm/templates/slm/station/uploads/image.html +27 -0
- slm/templates/slm/station/uploads/json.html +0 -0
- slm/templates/slm/station/uploads/legacy.html +77 -0
- slm/templates/slm/top_nav.html +14 -0
- slm/templates/slm/user_activity.html +16 -0
- slm/templates/slm/widgets/alert_scroll.html +135 -0
- slm/templates/slm/widgets/filelist.html +258 -0
- slm/templates/slm/widgets/legend.html +12 -0
- slm/templates/slm/widgets/log_scroll.html +88 -0
- slm/templates/slm/widgets/stationlist.html +233 -0
- slm/templatetags/__init__.py +0 -0
- slm/templatetags/jinja2.py +9 -0
- slm/templatetags/slm.py +459 -0
- slm/urls.py +148 -0
- slm/utils.py +299 -0
- slm/validators.py +297 -0
- slm/views.py +654 -0
- slm/widgets.py +134 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""
|
|
2
|
+
WSGI config for SLM production deployment.
|
|
3
|
+
|
|
4
|
+
It exposes the WSGI callable as a module-level variable named ``application``.
|
|
5
|
+
|
|
6
|
+
For more information on this file, see
|
|
7
|
+
https://docs.djangoproject.com/en/stable/howto/deployment/wsgi/
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from django.core.wsgi import get_wsgi_application
|
|
13
|
+
|
|
14
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', "sites.{{ site }}.production")
|
|
15
|
+
|
|
16
|
+
application = get_wsgi_application()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{% if not use_igs_validation %}
|
|
2
|
+
# You selected to not use the IGS sitelog field validators by default, you may
|
|
3
|
+
# define your own validation configuration here. See slm.settings.validation
|
|
4
|
+
# module (https://github.com/International-GNSS-Service/SLM/blob/master/slm/settings/validation.py)
|
|
5
|
+
# for what the default settings are and documentation here (TODO) for the SLM's pluggable
|
|
6
|
+
# validation system.
|
|
7
|
+
SLM_REQUIRED_SECTIONS_TO_PUBLISH = []
|
|
8
|
+
SLM_DATA_VALIDATORS = {}
|
|
9
|
+
|
|
10
|
+
# You may delete this file to always use IGS's default validation routines
|
|
11
|
+
{% endif %}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Django has administrative management commands that are run in the boostrapped Django environment.
|
|
3
|
+
That means - with a live connection to the database and all of the Django internals loaded so
|
|
4
|
+
you may interface with the data via the ORM just as you do in request handling code.
|
|
5
|
+
|
|
6
|
+
The SLM provides a number of commands out of the box that do various common administrative tasks.
|
|
7
|
+
This command imports a sitelog file index from a given directory or tar file. It will be run
|
|
8
|
+
usually once at the beginning of your SLM deployment to import your current data. After that
|
|
9
|
+
data updates will be done by users through the web UI.
|
|
10
|
+
|
|
11
|
+
In Django, management commands can be overridden by apps futher up the app stack from the command's
|
|
12
|
+
original definition. We do that here with import_archive. We inherit from the SLM command and
|
|
13
|
+
stub out the process_filename hook. The default behavior will most likely suffice for your
|
|
14
|
+
deployment, but if your legacy data filenames differ from what is expected from the base
|
|
15
|
+
import_archive command you can handle that here. You may also delete this file if the default
|
|
16
|
+
implementation works for you. We provide this here as an example of extending an SLM defined
|
|
17
|
+
management command.
|
|
18
|
+
|
|
19
|
+
Management commands: https://docs.djangoproject.com/en/stable/howto/custom-management-commands/
|
|
20
|
+
|
|
21
|
+
We use django-typer to add extra goodies like typer hint CLI definitions and shell tab completion
|
|
22
|
+
support: https://django-typer.readthedocs.io/en/latest/
|
|
23
|
+
|
|
24
|
+
# todo slm management commands link
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
import typing as t
|
|
28
|
+
from slm.management.commands.import_archive import (
|
|
29
|
+
Command as ImportArchive,
|
|
30
|
+
FileMeta
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Command(ImportArchive):
|
|
36
|
+
|
|
37
|
+
def process_filename(
|
|
38
|
+
self, filename: str, site_name: str = "", mtime: t.Optional[int] = None
|
|
39
|
+
) -> t.Optional[FileMeta]:
|
|
40
|
+
"""
|
|
41
|
+
The base class calls this hook to process a filename. This method should return
|
|
42
|
+
a FileMeta object or None if this file is not a log file and/or uninterpretable
|
|
43
|
+
as a log file.
|
|
44
|
+
|
|
45
|
+
.. note::
|
|
46
|
+
We provide a hook here as an example of
|
|
47
|
+
|
|
48
|
+
:param filename: The name of the file, including the extension.
|
|
49
|
+
:param site_name: A string that might possibly be the site name and could
|
|
50
|
+
be used if no site name is determinable from the filename.
|
|
51
|
+
:return FileMeta or None if the filename was not interpretable
|
|
52
|
+
"""
|
|
53
|
+
meta = super().process_filename(filename, site_name, mtime)
|
|
54
|
+
# todo - handle your special case!
|
|
55
|
+
# if meta is None:
|
|
56
|
+
# return FileMeta(
|
|
57
|
+
# filename=filename,
|
|
58
|
+
# name=site_name,
|
|
59
|
+
# mtime=mtime,
|
|
60
|
+
# format=?,
|
|
61
|
+
# file_date=?,
|
|
62
|
+
# no_day=?,
|
|
63
|
+
# )
|
|
64
|
+
return meta
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{% extends "slm/base.html" %}
|
|
2
|
+
{% load static %}
|
|
3
|
+
|
|
4
|
+
{% block branding %}
|
|
5
|
+
<div class="d-flex align-items-center w-50">
|
|
6
|
+
<a href="{% url "slm:home" %}" class="navbar-brand"><img id="logo" class="me-4" src="{% static 'slm/img/slm-logo.svg' %}" alt="SLM"> Site Log Manager 2.0</a>
|
|
7
|
+
</div>
|
|
8
|
+
{% endblock branding %}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import IntegerChoices
|
|
3
|
+
from enum_properties import s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AlertLevel(IntegerChoices):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
NOTICE = 1, _("NOTICE")
|
|
10
|
+
WARNING = 2, _("WARNING")
|
|
11
|
+
ERROR = 3, _("ERROR")
|
|
12
|
+
|
|
13
|
+
def __str__(self):
|
|
14
|
+
return str(self.label)
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def css(self):
|
|
18
|
+
return f"slm-alert-{self.name.lower()}"
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def color(self):
|
|
22
|
+
from django.conf import settings
|
|
23
|
+
|
|
24
|
+
return getattr(settings, "SLM_ALERT_COLORS", {}).get(self, None)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from django_enum import IntegerChoices
|
|
2
|
+
from enum_properties import s
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AntennaCalibrationMethod(IntegerChoices):
|
|
6
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
7
|
+
|
|
8
|
+
CONVERTED = 0, "CONVERTED"
|
|
9
|
+
ROBOT = 1, "ROBOT"
|
|
10
|
+
FIELD = 2, "FIELD"
|
|
11
|
+
CHAMBER = 3, "CHAMBER"
|
|
12
|
+
COPIED = 4, "COPIED"
|
|
13
|
+
|
|
14
|
+
# todo real?
|
|
15
|
+
# ONE = 1, 'ONE',
|
|
16
|
+
# TWO = 2, 'TWO'
|
|
17
|
+
# FOUR = 4, 'FOUR'
|
|
18
|
+
# ESA = 5, 'ESA'
|
|
19
|
+
# SIX = 6, 'SIX'
|
|
20
|
+
# JAXA = 7, 'JAXA'
|
|
21
|
+
# ISRO = 8, 'ISRO'
|
|
22
|
+
# CSNO_TARC = 9, 'CSNO/TARC'
|
|
23
|
+
|
|
24
|
+
def __str__(self):
|
|
25
|
+
return str(self.label)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import IntegerChoices
|
|
3
|
+
from enum_properties import s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AntennaFeatures(IntegerChoices):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
MMI = 1, _("(MMI) Man-Machine Interface")
|
|
10
|
+
NOM = 2, _("(NOM) North Orientation Mark")
|
|
11
|
+
RXC = 3, _("(RXC) Receiver Connector")
|
|
12
|
+
BAT = 4, _("(BAT) Battery Compartment Door Release")
|
|
13
|
+
BTD = 5, _("(BTD) Bottom of Tear Drop Shape")
|
|
14
|
+
CMP = 6, _("(CMP) Mounted Compass")
|
|
15
|
+
DIS = 7, _("(DIS) Display/Digital Readout")
|
|
16
|
+
DRY = 8, _("(DRY) Cap or Cover for Drying Agent")
|
|
17
|
+
PCS = 9, _("(PCS) PC Card Slot")
|
|
18
|
+
TMT = 10, _("(TMT) Tape Measure Tab or Notch for Slant Height Pole")
|
|
19
|
+
CAC = 11, _("(CAC) Nonspecific Cable Connector")
|
|
20
|
+
CTC = 12, _("(CTC) External Controller Connector")
|
|
21
|
+
DAC = 13, _("(DAC) Data Cable Connector")
|
|
22
|
+
PWC = 14, _("(PWC) Power Port")
|
|
23
|
+
RTC = 15, _("(RTC) RTK Connector")
|
|
24
|
+
UNK = 16, _("(UNK) Unknown")
|
|
25
|
+
|
|
26
|
+
def __str__(self):
|
|
27
|
+
return self.name
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import IntegerChoices
|
|
3
|
+
from enum_properties import p, s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AntennaReferencePoint(IntegerChoices, p("title")):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
# value label title
|
|
10
|
+
BAM = 1, _("BAM (Bottom of Antenna Mount)"), _("Bottom of Antenna Mount")
|
|
11
|
+
BCR = 2, _("BCR (Bottom of Chokering)"), _("Bottom of Chokering")
|
|
12
|
+
BDG = 3, _("BDG (Bottom of Dome Ground Plane)"), _("Bottom of Dome Ground Plane")
|
|
13
|
+
BGP = 4, _("BGP (Bottom of Ground Plane)"), _("Bottom of Ground Plane")
|
|
14
|
+
BPA = 5, _("BPA (Bottom of Preamplifier)"), _("Bottom of Preamplifier")
|
|
15
|
+
TCR = 6, _("TCR (Top of Chokering)"), _("Top of Chokering")
|
|
16
|
+
TDG = 7, _("TDG (Top of Dome Ground Plane)"), _("Top of Dome Ground Plane")
|
|
17
|
+
TGP = 8, _("TGP (Top of Ground Plane)"), _("Top of Ground Plane")
|
|
18
|
+
TOP = 9, _("TOP (Top of Pole)"), _("Top of Pole")
|
|
19
|
+
TPA = 10, _("TPA (Top of Preamplifier)"), _("Top of Preamplifier")
|
|
20
|
+
|
|
21
|
+
def __str__(self):
|
|
22
|
+
return self.name
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from django_enum import TextChoices
|
|
2
|
+
from enum_properties import s
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Aspiration(TextChoices):
|
|
6
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
7
|
+
|
|
8
|
+
UNASPIRATED = "U", "UNASPIRATED"
|
|
9
|
+
NATURAL = "N", "NATURAL"
|
|
10
|
+
FAN = "F", "FAN"
|
|
11
|
+
|
|
12
|
+
def __str__(self):
|
|
13
|
+
return str(self.label)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import TextChoices
|
|
3
|
+
from enum_properties import s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CardinalDirection(TextChoices):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
NORTH = "N", _("North")
|
|
10
|
+
SOUTH = "S", _("South")
|
|
11
|
+
EAST = "E", _("East")
|
|
12
|
+
WEST = "W", _("West")
|
|
13
|
+
NORTH_WEST = "NW", _("North West")
|
|
14
|
+
NORTH_EAST = "NE", _("North East")
|
|
15
|
+
SOUTH_WEST = "SW", _("South West")
|
|
16
|
+
SOUTH_EAST = "SE", _("South East")
|
|
17
|
+
|
|
18
|
+
def __str__(self):
|
|
19
|
+
return str(self.label)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from django_enum import TextChoices
|
|
2
|
+
from enum_properties import s
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class CollocationStatus(TextChoices):
|
|
6
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
7
|
+
|
|
8
|
+
PERMANENT = "P", "PERMANENT"
|
|
9
|
+
HOURLY = "M", "MOBILE"
|
|
10
|
+
|
|
11
|
+
def __str__(self):
|
|
12
|
+
return str(self.label)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import IntegerChoices
|
|
3
|
+
from enum_properties import p, s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class EquipmentState(IntegerChoices, p("help_text")):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
ACTIVE = 100, _("In Use"), _("This coding is in active use.")
|
|
10
|
+
LEGACY = (
|
|
11
|
+
101,
|
|
12
|
+
_("Retired"),
|
|
13
|
+
_("This equipment coding has changed."),
|
|
14
|
+
)
|
|
15
|
+
UNVERIFIED = (
|
|
16
|
+
102,
|
|
17
|
+
_("Unverified"),
|
|
18
|
+
_("This equipment coding has not been verified."),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
def __str__(self):
|
|
22
|
+
return str(self.label)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django_enum import IntegerChoices
|
|
3
|
+
from enum_properties import s
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FlagSeverity(IntegerChoices):
|
|
7
|
+
_symmetric_builtins_ = [s("name", case_fold=True)]
|
|
8
|
+
|
|
9
|
+
BLOCK_SAVE = 1, _("Block Save")
|
|
10
|
+
BLOCK_PUBLISH = 2, _("Block Publish")
|
|
11
|
+
NOTIFY = 3, _("Notify")
|
|
12
|
+
|
|
13
|
+
def __str__(self):
|
|
14
|
+
return str(self.label)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from django_enum import TextChoices
|
|
2
|
+
from enum_properties import s
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FractureSpacing(TextChoices):
|
|
6
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
7
|
+
|
|
8
|
+
ZERO = "0", "0 cm"
|
|
9
|
+
LESS_THAN_10_CM = "1", "1-10 cm"
|
|
10
|
+
MORE_THAN_11_LESS_THAN_50_CM = "11", "11-50 cm"
|
|
11
|
+
MORE_THAN_51_LESS_THAN_200_CM = "51", "51-200 cm"
|
|
12
|
+
OVER_200_CM = "200", "over 200 cm"
|
|
13
|
+
|
|
14
|
+
def __str__(self):
|
|
15
|
+
return str(self.label)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from django_enum import TextChoices
|
|
2
|
+
from enum_properties import s
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FrequencyStandardType(TextChoices, s("geodesy_ml", case_fold=True)):
|
|
6
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
7
|
+
|
|
8
|
+
INTERNAL = "I", "INTERNAL", "INTERNAL"
|
|
9
|
+
EXTERNAL_H_MASER = "H", "EXTERNAL H-MASER", "H-MASER"
|
|
10
|
+
EXTERNAL_CESIUM = "C", "EXTERNAL CESIUM", "CESIUM"
|
|
11
|
+
EXTERNAL_RUBIDIUM = "R", "EXTERNAL RUBIDIUM", "RUBIDIUM"
|
|
12
|
+
EXTERNAL_QUARTZ = "Q", "EXTERNAL QUARTZ", "QUARTZ"
|
|
13
|
+
|
|
14
|
+
def __str__(self):
|
|
15
|
+
return str(self.label)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from django.utils.functional import cached_property
|
|
4
|
+
from django_enum import IntegerChoices
|
|
5
|
+
from enum_properties import s
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class GeodesyMLVersion(IntegerChoices, s("version"), s("xmlns", case_fold=True)):
|
|
9
|
+
_symmetric_builtins_ = [s("name", case_fold=True), s("label", case_fold=True)]
|
|
10
|
+
|
|
11
|
+
# name value label version xmlns
|
|
12
|
+
v0_4 = 1, "GeodesyML/0.4", 0.4, "urn:xml-gov-au:icsm:egeodesy:0.4"
|
|
13
|
+
v0_5 = 2, "GeodesyML/0.5", 0.5, "urn:xml-gov-au:icsm:egeodesy:0.5"
|
|
14
|
+
|
|
15
|
+
def __str__(self):
|
|
16
|
+
return self.label
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def latest(cls):
|
|
20
|
+
return [ver for ver in cls][-1]
|
|
21
|
+
|
|
22
|
+
@cached_property
|
|
23
|
+
def schema(self):
|
|
24
|
+
from lxml.etree import XMLParser, XMLSchema, parse
|
|
25
|
+
|
|
26
|
+
from slm.parsing import xsd
|
|
27
|
+
from slm.parsing.xsd.resolver import CachedResolver
|
|
28
|
+
|
|
29
|
+
parser = XMLParser()
|
|
30
|
+
parser.resolvers.add(CachedResolver())
|
|
31
|
+
# todo - do this with importlib.resources ?
|
|
32
|
+
return XMLSchema(
|
|
33
|
+
etree=parse(
|
|
34
|
+
str(
|
|
35
|
+
Path(xsd.__path__[0])
|
|
36
|
+
/ "geodesyml"
|
|
37
|
+
/ str(self.version)
|
|
38
|
+
/ "geodesyML.xsd"
|
|
39
|
+
),
|
|
40
|
+
parser,
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@cached_property
|
|
45
|
+
def template(self):
|
|
46
|
+
from django.template.loader import get_template
|
|
47
|
+
|
|
48
|
+
return get_template(f"slm/sitelog/xsd/geodesyml_{self.version}.xml")
|