igs-slm 0.1.0b0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. igs_slm-0.1.0b0/LICENSE +21 -0
  2. igs_slm-0.1.0b0/PKG-INFO +151 -0
  3. igs_slm-0.1.0b0/README.md +85 -0
  4. igs_slm-0.1.0b0/igs_tools/__init__.py +0 -0
  5. igs_slm-0.1.0b0/igs_tools/connection.py +88 -0
  6. igs_slm-0.1.0b0/igs_tools/defines/__init__.py +8 -0
  7. igs_slm-0.1.0b0/igs_tools/defines/constellation.py +21 -0
  8. igs_slm-0.1.0b0/igs_tools/defines/data_center.py +75 -0
  9. igs_slm-0.1.0b0/igs_tools/defines/rinex.py +49 -0
  10. igs_slm-0.1.0b0/igs_tools/directory.py +247 -0
  11. igs_slm-0.1.0b0/igs_tools/utils.py +66 -0
  12. igs_slm-0.1.0b0/pyproject.toml +180 -0
  13. igs_slm-0.1.0b0/slm/__init__.py +21 -0
  14. igs_slm-0.1.0b0/slm/admin.py +674 -0
  15. igs_slm-0.1.0b0/slm/api/edit/__init__.py +0 -0
  16. igs_slm-0.1.0b0/slm/api/edit/serializers.py +316 -0
  17. igs_slm-0.1.0b0/slm/api/edit/views.py +1632 -0
  18. igs_slm-0.1.0b0/slm/api/fields.py +89 -0
  19. igs_slm-0.1.0b0/slm/api/filter.py +504 -0
  20. igs_slm-0.1.0b0/slm/api/pagination.py +55 -0
  21. igs_slm-0.1.0b0/slm/api/permissions.py +65 -0
  22. igs_slm-0.1.0b0/slm/api/public/__init__.py +0 -0
  23. igs_slm-0.1.0b0/slm/api/public/serializers.py +249 -0
  24. igs_slm-0.1.0b0/slm/api/public/views.py +606 -0
  25. igs_slm-0.1.0b0/slm/api/serializers.py +132 -0
  26. igs_slm-0.1.0b0/slm/api/views.py +148 -0
  27. igs_slm-0.1.0b0/slm/apps.py +323 -0
  28. igs_slm-0.1.0b0/slm/authentication.py +198 -0
  29. igs_slm-0.1.0b0/slm/bin/__init__.py +0 -0
  30. igs_slm-0.1.0b0/slm/bin/startproject.py +262 -0
  31. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/pyproject.toml +35 -0
  32. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/__init__.py +0 -0
  33. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/__init__.py +0 -0
  34. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/base.py +15 -0
  35. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/__init__.py +56 -0
  36. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/local.py +4 -0
  37. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/wsgi.py +16 -0
  38. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/manage.py +34 -0
  39. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/__init__.py +61 -0
  40. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/wsgi.py +16 -0
  41. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/urls.py +7 -0
  42. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/sites/{{ site }}/validation.py +11 -0
  43. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/__init__.py +0 -0
  44. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/admin.py +5 -0
  45. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/apps.py +14 -0
  46. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/__init__.py +0 -0
  47. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/__init__.py +0 -0
  48. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/import_archive.py +64 -0
  49. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/migrations/__init__.py +0 -0
  50. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/models.py +6 -0
  51. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/templates/slm/base.html +8 -0
  52. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/urls.py +10 -0
  53. igs_slm-0.1.0b0/slm/bin/templates/{{ project_dir }}/{{ extension_app }}/views.py +5 -0
  54. igs_slm-0.1.0b0/slm/defines/AlertLevel.py +24 -0
  55. igs_slm-0.1.0b0/slm/defines/AntennaCalibration.py +25 -0
  56. igs_slm-0.1.0b0/slm/defines/AntennaFeatures.py +27 -0
  57. igs_slm-0.1.0b0/slm/defines/AntennaReferencePoint.py +22 -0
  58. igs_slm-0.1.0b0/slm/defines/Aspiration.py +13 -0
  59. igs_slm-0.1.0b0/slm/defines/CardinalDirection.py +19 -0
  60. igs_slm-0.1.0b0/slm/defines/CollocationStatus.py +12 -0
  61. igs_slm-0.1.0b0/slm/defines/EquipmentState.py +22 -0
  62. igs_slm-0.1.0b0/slm/defines/FlagSeverity.py +14 -0
  63. igs_slm-0.1.0b0/slm/defines/FractureSpacing.py +15 -0
  64. igs_slm-0.1.0b0/slm/defines/FrequencyStandardType.py +15 -0
  65. igs_slm-0.1.0b0/slm/defines/GeodesyMLVersion.py +48 -0
  66. igs_slm-0.1.0b0/slm/defines/ISOCountry.py +1194 -0
  67. igs_slm-0.1.0b0/slm/defines/Instrumentation.py +19 -0
  68. igs_slm-0.1.0b0/slm/defines/LogEntryType.py +30 -0
  69. igs_slm-0.1.0b0/slm/defines/SLMFileType.py +18 -0
  70. igs_slm-0.1.0b0/slm/defines/SiteFileUploadStatus.py +61 -0
  71. igs_slm-0.1.0b0/slm/defines/SiteLogFormat.py +49 -0
  72. igs_slm-0.1.0b0/slm/defines/SiteLogStatus.py +78 -0
  73. igs_slm-0.1.0b0/slm/defines/TectonicPlates.py +28 -0
  74. igs_slm-0.1.0b0/slm/defines/__init__.py +46 -0
  75. igs_slm-0.1.0b0/slm/forms.py +1126 -0
  76. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/ascii_9char.log +346 -0
  77. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/legacy.log +346 -0
  78. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/collocationInformation.xml +12 -0
  79. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/condition.xml +12 -0
  80. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/contact.xml +52 -0
  81. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/formInformation.xml +5 -0
  82. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/frequencyStandard.xml +12 -0
  83. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/gnssAntenna.xml +16 -0
  84. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/gnssReceiver.xml +11 -0
  85. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/humiditySensor.xml +13 -0
  86. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/localEpisodicEffect.xml +10 -0
  87. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/moreInformation.xml +22 -0
  88. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/multipathSource.xml +10 -0
  89. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/otherInstrumentation.xml +5 -0
  90. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/pressureSensor.xml +12 -0
  91. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/radioInterference.xml +11 -0
  92. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/sensor.xml +16 -0
  93. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/signalObstruction.xml +10 -0
  94. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/siteIdentification.xml +22 -0
  95. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/siteLocation.xml +21 -0
  96. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/surveyedLocalTie.xml +20 -0
  97. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/temperatureSensor.xml +13 -0
  98. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.4/waterVaporSensor.xml +11 -0
  99. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/0.5/document.xml +10 -0
  100. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/geodesyml_0.4.xml +99 -0
  101. igs_slm-0.1.0b0/slm/jinja2/slm/sitelog/xsd/geodesyml_0.5.xml +112 -0
  102. igs_slm-0.1.0b0/slm/management/__init__.py +0 -0
  103. igs_slm-0.1.0b0/slm/management/commands/__init__.py +53 -0
  104. igs_slm-0.1.0b0/slm/management/commands/build_index.py +96 -0
  105. igs_slm-0.1.0b0/slm/management/commands/generate_sinex.py +675 -0
  106. igs_slm-0.1.0b0/slm/management/commands/head_from_index.py +541 -0
  107. igs_slm-0.1.0b0/slm/management/commands/import_archive.py +908 -0
  108. igs_slm-0.1.0b0/slm/management/commands/import_equipment.py +351 -0
  109. igs_slm-0.1.0b0/slm/management/commands/set_site.py +56 -0
  110. igs_slm-0.1.0b0/slm/management/commands/sitelog.py +144 -0
  111. igs_slm-0.1.0b0/slm/management/commands/synchronize.py +60 -0
  112. igs_slm-0.1.0b0/slm/management/commands/update_data_availability.py +167 -0
  113. igs_slm-0.1.0b0/slm/management/commands/validate_db.py +186 -0
  114. igs_slm-0.1.0b0/slm/management/commands/validate_gml.py +73 -0
  115. igs_slm-0.1.0b0/slm/map/__init__.py +1 -0
  116. igs_slm-0.1.0b0/slm/map/admin.py +5 -0
  117. igs_slm-0.1.0b0/slm/map/api/__init__.py +0 -0
  118. igs_slm-0.1.0b0/slm/map/api/edit/__init__.py +0 -0
  119. igs_slm-0.1.0b0/slm/map/api/edit/serializers.py +28 -0
  120. igs_slm-0.1.0b0/slm/map/api/edit/views.py +46 -0
  121. igs_slm-0.1.0b0/slm/map/api/public/__init__.py +0 -0
  122. igs_slm-0.1.0b0/slm/map/api/public/serializers.py +29 -0
  123. igs_slm-0.1.0b0/slm/map/api/public/views.py +64 -0
  124. igs_slm-0.1.0b0/slm/map/apps.py +7 -0
  125. igs_slm-0.1.0b0/slm/map/defines.py +53 -0
  126. igs_slm-0.1.0b0/slm/map/migrations/0001_initial.py +115 -0
  127. igs_slm-0.1.0b0/slm/map/migrations/__init__.py +0 -0
  128. igs_slm-0.1.0b0/slm/map/models.py +63 -0
  129. igs_slm-0.1.0b0/slm/map/static/slm/css/map.css +86 -0
  130. igs_slm-0.1.0b0/slm/map/static/slm/js/map.js +159 -0
  131. igs_slm-0.1.0b0/slm/map/templates/slm/map.html +374 -0
  132. igs_slm-0.1.0b0/slm/map/templates/slm/station/base.html +11 -0
  133. igs_slm-0.1.0b0/slm/map/templates/slm/station/edit.html +10 -0
  134. igs_slm-0.1.0b0/slm/map/templates/slm/top_nav.html +17 -0
  135. igs_slm-0.1.0b0/slm/map/templatetags/__init__.py +0 -0
  136. igs_slm-0.1.0b0/slm/map/templatetags/slm_map.py +18 -0
  137. igs_slm-0.1.0b0/slm/map/urls.py +25 -0
  138. igs_slm-0.1.0b0/slm/map/views.py +36 -0
  139. igs_slm-0.1.0b0/slm/middleware.py +29 -0
  140. igs_slm-0.1.0b0/slm/migrations/0001_alter_siteantenna_marker_enu_alter_sitelocation_llh_and_more.py +47 -0
  141. igs_slm-0.1.0b0/slm/migrations/0001_initial.py +4826 -0
  142. igs_slm-0.1.0b0/slm/migrations/0002_alter_dataavailability_site.py +22 -0
  143. igs_slm-0.1.0b0/slm/migrations/0003_remove_logentry_slm_logentr_site_lo_7a2af7_idx_and_more.py +80 -0
  144. igs_slm-0.1.0b0/slm/migrations/0004_alter_logentry_timestamp_and_more.py +25 -0
  145. igs_slm-0.1.0b0/slm/migrations/0005_alter_logentry_options_alter_logentry_section_and_more.py +46 -0
  146. igs_slm-0.1.0b0/slm/migrations/0006_alter_logentry_options_alter_logentry_index_together.py +24 -0
  147. igs_slm-0.1.0b0/slm/migrations/0007_alter_dataavailability_rate.py +23 -0
  148. igs_slm-0.1.0b0/slm/migrations/0008_alter_archiveindex_options_and_more.py +64 -0
  149. igs_slm-0.1.0b0/slm/migrations/0009_alter_archiveindex_end.py +21 -0
  150. igs_slm-0.1.0b0/slm/migrations/0010_alter_dataavailability_rinex_version_and_more.py +844 -0
  151. igs_slm-0.1.0b0/slm/migrations/0011_alter_siteidentification_fracture_spacing.py +33 -0
  152. igs_slm-0.1.0b0/slm/migrations/0012_alter_logentry_type.py +36 -0
  153. igs_slm-0.1.0b0/slm/migrations/0013_unpublishedfilesalert.py +48 -0
  154. igs_slm-0.1.0b0/slm/migrations/0014_sitelogpublished.py +48 -0
  155. igs_slm-0.1.0b0/slm/migrations/0015_alter_siteantenna_options_and_more.py +181 -0
  156. igs_slm-0.1.0b0/slm/migrations/0016_alter_antenna_description_alter_radome_description_and_more.py +42 -0
  157. igs_slm-0.1.0b0/slm/migrations/0017_alter_logentry_unique_together_and_more.py +54 -0
  158. igs_slm-0.1.0b0/slm/migrations/0018_afix_deleted.py +34 -0
  159. igs_slm-0.1.0b0/slm/migrations/0018_alter_siteantenna_options_and_more.py +244 -0
  160. igs_slm-0.1.0b0/slm/migrations/0019_remove_siteantenna_marker_enu_siteantenna_marker_une_and_more.py +101 -0
  161. igs_slm-0.1.0b0/slm/migrations/0020_alter_manufacturer_options.py +16 -0
  162. igs_slm-0.1.0b0/slm/migrations/0021_alter_siteform_report_type.py +23 -0
  163. igs_slm-0.1.0b0/slm/migrations/0022_rename_antcal_antenna_radome_slm_antcal_antenna_20827a_idx_and_more.py +297 -0
  164. igs_slm-0.1.0b0/slm/migrations/0023_archivedsitelog_gml_version_and_more.py +55 -0
  165. igs_slm-0.1.0b0/slm/migrations/0024_alter_agency_name_alter_agency_shortname.py +24 -0
  166. igs_slm-0.1.0b0/slm/migrations/0025_alter_archivedsitelog_log_format_and_more.py +61 -0
  167. igs_slm-0.1.0b0/slm/migrations/0026_alter_archivedsitelog_log_format_and_more.py +61 -0
  168. igs_slm-0.1.0b0/slm/migrations/0027_importalert_file_contents_importalert_findings_and_more.py +41 -0
  169. igs_slm-0.1.0b0/slm/migrations/0028_antenna_replaced_manufacturer_url_radome_replaced_and_more.py +46 -0
  170. igs_slm-0.1.0b0/slm/migrations/0029_manufacturer_full_name.py +17 -0
  171. igs_slm-0.1.0b0/slm/migrations/0030_alter_antenna_state_alter_radome_state_and_more.py +43 -0
  172. igs_slm-0.1.0b0/slm/migrations/__init__.py +0 -0
  173. igs_slm-0.1.0b0/slm/migrations/load_satellitesystems.py +27 -0
  174. igs_slm-0.1.0b0/slm/models/__init__.py +118 -0
  175. igs_slm-0.1.0b0/slm/models/about.py +14 -0
  176. igs_slm-0.1.0b0/slm/models/alerts.py +1204 -0
  177. igs_slm-0.1.0b0/slm/models/data.py +58 -0
  178. igs_slm-0.1.0b0/slm/models/equipment.py +229 -0
  179. igs_slm-0.1.0b0/slm/models/help.py +14 -0
  180. igs_slm-0.1.0b0/slm/models/index.py +428 -0
  181. igs_slm-0.1.0b0/slm/models/sitelog.py +4279 -0
  182. igs_slm-0.1.0b0/slm/models/system.py +723 -0
  183. igs_slm-0.1.0b0/slm/models/user.py +304 -0
  184. igs_slm-0.1.0b0/slm/parsing/__init__.py +786 -0
  185. igs_slm-0.1.0b0/slm/parsing/legacy/__init__.py +4 -0
  186. igs_slm-0.1.0b0/slm/parsing/legacy/binding.py +817 -0
  187. igs_slm-0.1.0b0/slm/parsing/legacy/parser.py +377 -0
  188. igs_slm-0.1.0b0/slm/parsing/xsd/__init__.py +34 -0
  189. igs_slm-0.1.0b0/slm/parsing/xsd/binding.py +86 -0
  190. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/commonTypes.xsd +133 -0
  191. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/contact.xsd +29 -0
  192. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/dataStreams.xsd +129 -0
  193. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/document.xsd +64 -0
  194. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/equipment.xsd +427 -0
  195. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/fieldMeasurement.xsd +170 -0
  196. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/geodesyML.xsd +71 -0
  197. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/geodeticEquipment.xsd +343 -0
  198. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/geodeticMonument.xsd +147 -0
  199. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/lineage.xsd +614 -0
  200. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/localInterferences.xsd +131 -0
  201. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/measurement.xsd +473 -0
  202. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/monumentInfo.xsd +251 -0
  203. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/observationSystem.xsd +429 -0
  204. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/project.xsd +38 -0
  205. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/quality.xsd +176 -0
  206. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/referenceFrame.xsd +194 -0
  207. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.4/siteLog.xsd +71 -0
  208. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/commonTypes.xsd +133 -0
  209. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/contact.xsd +29 -0
  210. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/dataStreams.xsd +129 -0
  211. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/document.xsd +64 -0
  212. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/equipment.xsd +427 -0
  213. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/fieldMeasurement.xsd +170 -0
  214. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/geodesyML.xsd +71 -0
  215. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/geodeticEquipment.xsd +343 -0
  216. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/geodeticMonument.xsd +147 -0
  217. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/lineage.xsd +614 -0
  218. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/localInterferences.xsd +131 -0
  219. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/measurement.xsd +473 -0
  220. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/monumentInfo.xsd +306 -0
  221. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/observationSystem.xsd +429 -0
  222. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/project.xsd +38 -0
  223. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/quality.xsd +176 -0
  224. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/referenceFrame.xsd +194 -0
  225. igs_slm-0.1.0b0/slm/parsing/xsd/geodesyml/0.5/siteLog.xsd +73 -0
  226. igs_slm-0.1.0b0/slm/parsing/xsd/parser.py +116 -0
  227. igs_slm-0.1.0b0/slm/parsing/xsd/resolver.py +28 -0
  228. igs_slm-0.1.0b0/slm/receivers/__init__.py +11 -0
  229. igs_slm-0.1.0b0/slm/receivers/alerts.py +87 -0
  230. igs_slm-0.1.0b0/slm/receivers/cleanup.py +41 -0
  231. igs_slm-0.1.0b0/slm/receivers/event_loggers.py +175 -0
  232. igs_slm-0.1.0b0/slm/receivers/index.py +67 -0
  233. igs_slm-0.1.0b0/slm/settings/__init__.py +55 -0
  234. igs_slm-0.1.0b0/slm/settings/auth.py +15 -0
  235. igs_slm-0.1.0b0/slm/settings/ckeditor.py +14 -0
  236. igs_slm-0.1.0b0/slm/settings/debug.py +47 -0
  237. igs_slm-0.1.0b0/slm/settings/internationalization.py +12 -0
  238. igs_slm-0.1.0b0/slm/settings/logging.py +113 -0
  239. igs_slm-0.1.0b0/slm/settings/platform/__init__.py +0 -0
  240. igs_slm-0.1.0b0/slm/settings/platform/darwin.py +10 -0
  241. igs_slm-0.1.0b0/slm/settings/rest.py +21 -0
  242. igs_slm-0.1.0b0/slm/settings/root.py +152 -0
  243. igs_slm-0.1.0b0/slm/settings/routines.py +43 -0
  244. igs_slm-0.1.0b0/slm/settings/secrets.py +37 -0
  245. igs_slm-0.1.0b0/slm/settings/security.py +5 -0
  246. igs_slm-0.1.0b0/slm/settings/slm.py +188 -0
  247. igs_slm-0.1.0b0/slm/settings/static_templates.py +53 -0
  248. igs_slm-0.1.0b0/slm/settings/templates.py +29 -0
  249. igs_slm-0.1.0b0/slm/settings/uploads.py +8 -0
  250. igs_slm-0.1.0b0/slm/settings/urls.py +126 -0
  251. igs_slm-0.1.0b0/slm/settings/validation.py +196 -0
  252. igs_slm-0.1.0b0/slm/signals.py +250 -0
  253. igs_slm-0.1.0b0/slm/singleton.py +49 -0
  254. igs_slm-0.1.0b0/slm/static/rest_framework/css/bootstrap-tweaks.css +204 -0
  255. igs_slm-0.1.0b0/slm/static/rest_framework/css/bootstrap.min.css +7 -0
  256. igs_slm-0.1.0b0/slm/static/rest_framework/css/bootstrap.min.css.map +1 -0
  257. igs_slm-0.1.0b0/slm/static/rest_framework/css/default.css +82 -0
  258. igs_slm-0.1.0b0/slm/static/rest_framework/css/prettify.css +30 -0
  259. igs_slm-0.1.0b0/slm/static/rest_framework/docs/css/base.css +344 -0
  260. igs_slm-0.1.0b0/slm/static/rest_framework/docs/css/highlight.css +125 -0
  261. igs_slm-0.1.0b0/slm/static/rest_framework/docs/css/jquery.json-view.min.css +11 -0
  262. igs_slm-0.1.0b0/slm/static/rest_framework/docs/img/favicon.ico +0 -0
  263. igs_slm-0.1.0b0/slm/static/rest_framework/docs/img/grid.png +0 -0
  264. igs_slm-0.1.0b0/slm/static/rest_framework/docs/js/api.js +321 -0
  265. igs_slm-0.1.0b0/slm/static/rest_framework/docs/js/highlight.pack.js +2 -0
  266. igs_slm-0.1.0b0/slm/static/rest_framework/docs/js/jquery.json-view.min.js +7 -0
  267. igs_slm-0.1.0b0/slm/static/rest_framework/img/grid.png +0 -0
  268. igs_slm-0.1.0b0/slm/static/rest_framework/js/ajax-form.js +127 -0
  269. igs_slm-0.1.0b0/slm/static/rest_framework/js/bootstrap.bundle.min.js +7 -0
  270. igs_slm-0.1.0b0/slm/static/rest_framework/js/bootstrap.bundle.min.js.map +1 -0
  271. igs_slm-0.1.0b0/slm/static/rest_framework/js/bootstrap.min.js.map +1 -0
  272. igs_slm-0.1.0b0/slm/static/rest_framework/js/coreapi-0.1.1.js +2043 -0
  273. igs_slm-0.1.0b0/slm/static/rest_framework/js/csrf.js +52 -0
  274. igs_slm-0.1.0b0/slm/static/rest_framework/js/default.js +47 -0
  275. igs_slm-0.1.0b0/slm/static/rest_framework/js/jquery-3.5.1.min.js +2 -0
  276. igs_slm-0.1.0b0/slm/static/rest_framework/js/prettify-min.js +28 -0
  277. igs_slm-0.1.0b0/slm/static/slm/css/admin.css +3 -0
  278. igs_slm-0.1.0b0/slm/static/slm/css/defines.css +82 -0
  279. igs_slm-0.1.0b0/slm/static/slm/css/forms.css +1 -0
  280. igs_slm-0.1.0b0/slm/static/slm/css/style.css +1004 -0
  281. igs_slm-0.1.0b0/slm/static/slm/img/email-branding.png +0 -0
  282. igs_slm-0.1.0b0/slm/static/slm/img/favicon.ico +0 -0
  283. igs_slm-0.1.0b0/slm/static/slm/img/login-bg.jpg +0 -0
  284. igs_slm-0.1.0b0/slm/static/slm/img/slm-logo.svg +4 -0
  285. igs_slm-0.1.0b0/slm/static/slm/js/autocomplete.js +341 -0
  286. igs_slm-0.1.0b0/slm/static/slm/js/enums.js +322 -0
  287. igs_slm-0.1.0b0/slm/static/slm/js/fileIcons.js +30 -0
  288. igs_slm-0.1.0b0/slm/static/slm/js/form.js +404 -0
  289. igs_slm-0.1.0b0/slm/static/slm/js/formWidget.js +23 -0
  290. igs_slm-0.1.0b0/slm/static/slm/js/persistable.js +33 -0
  291. igs_slm-0.1.0b0/slm/static/slm/js/slm.js +1028 -0
  292. igs_slm-0.1.0b0/slm/static/slm/js/time24.js +212 -0
  293. igs_slm-0.1.0b0/slm/static_templates/slm/css/defines.css +26 -0
  294. igs_slm-0.1.0b0/slm/static_templates/slm/js/enums.js +28 -0
  295. igs_slm-0.1.0b0/slm/static_templates/slm/js/fileIcons.js +16 -0
  296. igs_slm-0.1.0b0/slm/static_templates/slm/js/urls.js +5 -0
  297. igs_slm-0.1.0b0/slm/templates/account/base.html +20 -0
  298. igs_slm-0.1.0b0/slm/templates/account/email/base.html +43 -0
  299. igs_slm-0.1.0b0/slm/templates/account/email/base_message.txt +7 -0
  300. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_message.html +16 -0
  301. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_message.txt +7 -0
  302. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_signup_message.html +1 -0
  303. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_signup_message.txt +1 -0
  304. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_signup_subject.txt +1 -0
  305. igs_slm-0.1.0b0/slm/templates/account/email/email_confirmation_subject.txt +4 -0
  306. igs_slm-0.1.0b0/slm/templates/account/email/password_reset_key_message.html +28 -0
  307. igs_slm-0.1.0b0/slm/templates/account/email/password_reset_key_message.txt +9 -0
  308. igs_slm-0.1.0b0/slm/templates/account/email/password_reset_key_subject.txt +4 -0
  309. igs_slm-0.1.0b0/slm/templates/account/email/unknown_account_message.html +25 -0
  310. igs_slm-0.1.0b0/slm/templates/account/email/unknown_account_message.txt +12 -0
  311. igs_slm-0.1.0b0/slm/templates/account/email/unknown_account_subject.txt +4 -0
  312. igs_slm-0.1.0b0/slm/templates/account/login.html +67 -0
  313. igs_slm-0.1.0b0/slm/templates/account/logout.html +38 -0
  314. igs_slm-0.1.0b0/slm/templates/account/password_change.html +48 -0
  315. igs_slm-0.1.0b0/slm/templates/account/password_reset.html +51 -0
  316. igs_slm-0.1.0b0/slm/templates/account/password_reset_done.html +20 -0
  317. igs_slm-0.1.0b0/slm/templates/account/password_reset_from_key.html +52 -0
  318. igs_slm-0.1.0b0/slm/templates/account/password_reset_from_key_done.html +17 -0
  319. igs_slm-0.1.0b0/slm/templates/admin/base.html +7 -0
  320. igs_slm-0.1.0b0/slm/templates/messages.html +8 -0
  321. igs_slm-0.1.0b0/slm/templates/rest_framework/README +16 -0
  322. igs_slm-0.1.0b0/slm/templates/rest_framework/admin/detail.html +10 -0
  323. igs_slm-0.1.0b0/slm/templates/rest_framework/admin/dict_value.html +11 -0
  324. igs_slm-0.1.0b0/slm/templates/rest_framework/admin/list.html +32 -0
  325. igs_slm-0.1.0b0/slm/templates/rest_framework/admin/list_value.html +11 -0
  326. igs_slm-0.1.0b0/slm/templates/rest_framework/admin/simple_list_value.html +2 -0
  327. igs_slm-0.1.0b0/slm/templates/rest_framework/admin.html +282 -0
  328. igs_slm-0.1.0b0/slm/templates/rest_framework/api.html +3 -0
  329. igs_slm-0.1.0b0/slm/templates/rest_framework/base.html +334 -0
  330. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/auth/basic.html +42 -0
  331. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/auth/session.html +40 -0
  332. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/auth/token.html +41 -0
  333. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/document.html +37 -0
  334. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/error.html +71 -0
  335. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/index.html +55 -0
  336. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/interact.html +57 -0
  337. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/javascript-intro.html +5 -0
  338. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/javascript.html +15 -0
  339. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/python-intro.html +3 -0
  340. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/python.html +13 -0
  341. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/shell-intro.html +3 -0
  342. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/langs/shell.html +6 -0
  343. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/link.html +113 -0
  344. igs_slm-0.1.0b0/slm/templates/rest_framework/docs/sidebar.html +78 -0
  345. igs_slm-0.1.0b0/slm/templates/rest_framework/filters/base.html +16 -0
  346. igs_slm-0.1.0b0/slm/templates/rest_framework/filters/ordering.html +17 -0
  347. igs_slm-0.1.0b0/slm/templates/rest_framework/filters/search.html +13 -0
  348. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/checkbox.html +23 -0
  349. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/checkbox_multiple.html +32 -0
  350. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/dict_field.html +11 -0
  351. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/fieldset.html +16 -0
  352. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/form.html +6 -0
  353. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/input.html +21 -0
  354. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/list_field.html +11 -0
  355. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/list_fieldset.html +13 -0
  356. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/radio.html +42 -0
  357. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/select.html +36 -0
  358. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/select_multiple.html +38 -0
  359. igs_slm-0.1.0b0/slm/templates/rest_framework/horizontal/textarea.html +21 -0
  360. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/checkbox.html +8 -0
  361. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/checkbox_multiple.html +14 -0
  362. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/dict_field.html +9 -0
  363. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/fieldset.html +6 -0
  364. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/form.html +8 -0
  365. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/input.html +9 -0
  366. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/list_field.html +9 -0
  367. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/list_fieldset.html +3 -0
  368. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/radio.html +25 -0
  369. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/select.html +24 -0
  370. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/select_multiple.html +25 -0
  371. igs_slm-0.1.0b0/slm/templates/rest_framework/inline/textarea.html +9 -0
  372. igs_slm-0.1.0b0/slm/templates/rest_framework/login.html +3 -0
  373. igs_slm-0.1.0b0/slm/templates/rest_framework/login_base.html +65 -0
  374. igs_slm-0.1.0b0/slm/templates/rest_framework/pagination/numbers.html +47 -0
  375. igs_slm-0.1.0b0/slm/templates/rest_framework/pagination/previous_and_next.html +21 -0
  376. igs_slm-0.1.0b0/slm/templates/rest_framework/raw_data_form.html +11 -0
  377. igs_slm-0.1.0b0/slm/templates/rest_framework/schema.js +3 -0
  378. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/checkbox.html +16 -0
  379. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/checkbox_multiple.html +30 -0
  380. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/dict_field.html +7 -0
  381. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/fieldset.html +13 -0
  382. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/form.html +6 -0
  383. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/input.html +17 -0
  384. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/list_field.html +7 -0
  385. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/list_fieldset.html +7 -0
  386. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/radio.html +40 -0
  387. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/select.html +34 -0
  388. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/select_multiple.html +31 -0
  389. igs_slm-0.1.0b0/slm/templates/rest_framework/vertical/textarea.html +17 -0
  390. igs_slm-0.1.0b0/slm/templates/slm/about.html +21 -0
  391. igs_slm-0.1.0b0/slm/templates/slm/alerts/alert.html +15 -0
  392. igs_slm-0.1.0b0/slm/templates/slm/alerts/geodesymlinvalid.html +8 -0
  393. igs_slm-0.1.0b0/slm/templates/slm/alerts/importalert.html +10 -0
  394. igs_slm-0.1.0b0/slm/templates/slm/alerts.html +18 -0
  395. igs_slm-0.1.0b0/slm/templates/slm/auth_menu.html +41 -0
  396. igs_slm-0.1.0b0/slm/templates/slm/base.html +195 -0
  397. igs_slm-0.1.0b0/slm/templates/slm/emails/alert_issued.html +31 -0
  398. igs_slm-0.1.0b0/slm/templates/slm/emails/alert_issued.txt +9 -0
  399. igs_slm-0.1.0b0/slm/templates/slm/emails/base.html +6 -0
  400. igs_slm-0.1.0b0/slm/templates/slm/emails/changes_rejected.txt +7 -0
  401. igs_slm-0.1.0b0/slm/templates/slm/emails/review_requested.txt +7 -0
  402. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/auto_complete.html +21 -0
  403. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/auto_complete_multiple.html +18 -0
  404. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/checkbox_multiple.html +6 -0
  405. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/inline_multi.html +1 -0
  406. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/splitdatetime.html +14 -0
  407. igs_slm-0.1.0b0/slm/templates/slm/forms/widgets/time24.html +37 -0
  408. igs_slm-0.1.0b0/slm/templates/slm/help.html +54 -0
  409. igs_slm-0.1.0b0/slm/templates/slm/messages.html +13 -0
  410. igs_slm-0.1.0b0/slm/templates/slm/new_site.html +88 -0
  411. igs_slm-0.1.0b0/slm/templates/slm/profile.html +57 -0
  412. igs_slm-0.1.0b0/slm/templates/slm/register.html +40 -0
  413. igs_slm-0.1.0b0/slm/templates/slm/reports/file_log.html +43 -0
  414. igs_slm-0.1.0b0/slm/templates/slm/reports/head_log.html +23 -0
  415. igs_slm-0.1.0b0/slm/templates/slm/reports/head_report.html +55 -0
  416. igs_slm-0.1.0b0/slm/templates/slm/reports/index_log.html +23 -0
  417. igs_slm-0.1.0b0/slm/templates/slm/reports/index_report.html +71 -0
  418. igs_slm-0.1.0b0/slm/templates/slm/station/alert.html +8 -0
  419. igs_slm-0.1.0b0/slm/templates/slm/station/alerts.html +19 -0
  420. igs_slm-0.1.0b0/slm/templates/slm/station/base.html +104 -0
  421. igs_slm-0.1.0b0/slm/templates/slm/station/download.html +87 -0
  422. igs_slm-0.1.0b0/slm/templates/slm/station/edit.html +283 -0
  423. igs_slm-0.1.0b0/slm/templates/slm/station/form.html +110 -0
  424. igs_slm-0.1.0b0/slm/templates/slm/station/log.html +18 -0
  425. igs_slm-0.1.0b0/slm/templates/slm/station/review.html +461 -0
  426. igs_slm-0.1.0b0/slm/templates/slm/station/upload.html +295 -0
  427. igs_slm-0.1.0b0/slm/templates/slm/station/uploads/attachment.html +20 -0
  428. igs_slm-0.1.0b0/slm/templates/slm/station/uploads/geodesyml.html +1 -0
  429. igs_slm-0.1.0b0/slm/templates/slm/station/uploads/image.html +27 -0
  430. igs_slm-0.1.0b0/slm/templates/slm/station/uploads/json.html +0 -0
  431. igs_slm-0.1.0b0/slm/templates/slm/station/uploads/legacy.html +77 -0
  432. igs_slm-0.1.0b0/slm/templates/slm/top_nav.html +14 -0
  433. igs_slm-0.1.0b0/slm/templates/slm/user_activity.html +16 -0
  434. igs_slm-0.1.0b0/slm/templates/slm/widgets/alert_scroll.html +135 -0
  435. igs_slm-0.1.0b0/slm/templates/slm/widgets/filelist.html +258 -0
  436. igs_slm-0.1.0b0/slm/templates/slm/widgets/legend.html +12 -0
  437. igs_slm-0.1.0b0/slm/templates/slm/widgets/log_scroll.html +88 -0
  438. igs_slm-0.1.0b0/slm/templates/slm/widgets/stationlist.html +233 -0
  439. igs_slm-0.1.0b0/slm/templatetags/__init__.py +0 -0
  440. igs_slm-0.1.0b0/slm/templatetags/jinja2.py +9 -0
  441. igs_slm-0.1.0b0/slm/templatetags/slm.py +459 -0
  442. igs_slm-0.1.0b0/slm/urls.py +148 -0
  443. igs_slm-0.1.0b0/slm/utils.py +299 -0
  444. igs_slm-0.1.0b0/slm/validators.py +297 -0
  445. igs_slm-0.1.0b0/slm/views.py +654 -0
  446. igs_slm-0.1.0b0/slm/widgets.py +134 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 NASA/Jet Propulsion Laboratory
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,151 @@
1
+ Metadata-Version: 2.1
2
+ Name: igs-slm
3
+ Version: 0.1.0b0
4
+ Summary: IGS Site Log Manager
5
+ Home-page: https://igs-slm.readthedocs.io
6
+ License: MIT
7
+ Keywords: SLM,Site Log Manager,IGS,International GNSS Service,GNSS,GPS,GLONASS,Galileo,BeiDou,QZSS
8
+ Author: Ashley Santiago
9
+ Author-email: ashley.k.santiago@jpl.nasa.gov
10
+ Requires-Python: >=3.8,<4.0
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Framework :: Django
14
+ Classifier: Framework :: Django :: 4.2
15
+ Classifier: Framework :: Django :: 5.0
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Natural Language :: English
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.8
23
+ Classifier: Programming Language :: Python :: 3.9
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Topic :: Internet :: WWW/HTTP
28
+ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
29
+ Classifier: Topic :: Software Development :: Libraries
30
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
+ Requires-Dist: Django (>=4.2.0,<6.0.0)
32
+ Requires-Dist: Jinja2 (>=3.1.2,<4.0.0)
33
+ Requires-Dist: Pillow (>=10.0.0,<11.0.0)
34
+ Requires-Dist: chardet (>=5.1.0,<6.0.0)
35
+ Requires-Dist: crispy-bootstrap5 (>=2024.2,<2025.0)
36
+ Requires-Dist: django-allauth (>=0.63.3,<0.64.0)
37
+ Requires-Dist: django-ckeditor (>=6.5.1,<7.0.0)
38
+ Requires-Dist: django-compressor (>=4.0,<5.0)
39
+ Requires-Dist: django-crispy-forms (>=2.0,<3.0)
40
+ Requires-Dist: django-enum (>=1.2.2,<2.0.0)
41
+ Requires-Dist: django-filter (>=24.2,<25.0)
42
+ Requires-Dist: django-ipware (>=7.0.1,<8.0.0)
43
+ Requires-Dist: django-polymorphic (>=3.1.0,<4.0.0)
44
+ Requires-Dist: django-render-static (>=3.1.0,<4.0.0)
45
+ Requires-Dist: django-routines (>=1.1.3,<2.0.0)
46
+ Requires-Dist: django-split-settings (>=1.2.0,<2.0.0)
47
+ Requires-Dist: django-typer (>=2.1.2,<3.0.0)
48
+ Requires-Dist: django-widget-tweaks (>=1.4.12,<2.0.0)
49
+ Requires-Dist: djangorestframework (>=3.15.2,<4.0.0)
50
+ Requires-Dist: djangorestframework-gis (>=1.0,<2.0)
51
+ Requires-Dist: enum-properties (>=1.7.0,<2.0.0)
52
+ Requires-Dist: geojson (>=3.1.0,<4.0.0)
53
+ Requires-Dist: importlib-resources (>1.3.0)
54
+ Requires-Dist: lxml (>=5.2.1,<6.0.0)
55
+ Requires-Dist: numpy (<=1.24) ; python_version <= "3.8"
56
+ Requires-Dist: numpy (>=1.26) ; python_version > "3.8"
57
+ Requires-Dist: polyline (>=2.0.0,<3.0.0)
58
+ Requires-Dist: psycopg[binary] (>=3.1.12,<4.0.0)
59
+ Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
60
+ Requires-Dist: requests (>=2.32.3,<3.0.0)
61
+ Requires-Dist: rich (>=13.7.1,<14.0.0)
62
+ Requires-Dist: tqdm (>=4.64.1,<5.0.0)
63
+ Project-URL: Repository, https://github.com/International-GNSS-Service/SLM
64
+ Description-Content-Type: text/markdown
65
+
66
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
67
+ [![PyPI version](https://badge.fury.io/py/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm/)
68
+ [![PyPI pyversions](https://img.shields.io/pypi/pyversions/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm/)
69
+ [![PyPI djversions](https://img.shields.io/pypi/djversions/igs-slm.svg)](https://pypi.org/project/igs-slm/)
70
+ [![PyPI status](https://img.shields.io/pypi/status/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm)
71
+ [![Documentation Status](https://readthedocs.org/projects/igs-slm/badge/?version=latest)](http://igs-slm.readthedocs.io/?badge=latest/)
72
+ [![codecov](https://codecov.io/github/International-GNSS-Service/SLM/graph/badge.svg?token=PQVWN1LNM3)](https://codecov.io/github/International-GNSS-Service/SLM)
73
+ [![Test Status](https://github.com/International-GNSS-Service/SLM/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/International-GNSS-Service/SLM/actions/workflows/test.yml?branch=master)
74
+ [![Lint Status](https://github.com/International-GNSS-Service/SLM/workflows/lint/badge.svg)](https://github.com/International-GNSS-Service/SLM/actions/workflows/lint.yml)
75
+ [![Security Status](https://github.com/International-GNSS-Service/SLM/workflows/security/badge.svg)](https://github.com/International-GNSS-Service/SLM/actions/workflows/security.yml)
76
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
77
+
78
+ # ![](https://github.com/International-GNSS-Service/SLM/blob/master/slm/static/slm/img/slm-logo.svg?raw=true)
79
+ Site Log Manager (SLM)
80
+
81
+ The Site Log Manager (SLM) is a web platform that aims to provide:
82
+
83
+ 1. GNSS Site meta data (site log) management with a moderation workflow.
84
+ 2. Support for multiple organizations and networks to be managed in an access controlled way.
85
+ 3. Full legacy site log format support (both import and export).
86
+ 4. Full GeodesyML support (both import and export).
87
+ 5. JSON renderings of meta data.
88
+ 6. Point-and-click graphical editing of site log data.
89
+ 7. Public RESTful api for searching site log data.
90
+ 8. Authenticated RESTful api for updating site log data.
91
+ 9. Full access to the historical record.
92
+ 10. Visualizations of networks and site information.
93
+ 11. Configurable data validation that goes above and beyond schema validation.
94
+ 12. Image and file attachments to sites.
95
+ 13. A no-fork extensible architecture that allows organizations to modify out-of-the box
96
+ behavior with plugins.
97
+
98
+ This code base has reached beta-maturity but is still undergoing rapid development. Check back soon
99
+ for new documentation and updates.
100
+
101
+
102
+ ## Table of Contents
103
+ 1. [Design](#Design)
104
+ 1. [Stack](#Stack)
105
+ 2. [Organization](#Organization)
106
+
107
+ ## Design
108
+
109
+ SLM is built in Python using the [Django website development framework.](https://www.djangoproject.com/)
110
+ Django is well documented. A basic understanding of how it works is helpful to understand how SLM is
111
+ put together. In addition to the [good intro tutorials](https://docs.djangoproject.com/en/stable/intro/tutorial01/), it's
112
+ helpful to understand [how reusable Django apps work](https://docs.djangoproject.com/en/stable/intro/reusable-apps/), how
113
+ [settings files work](https://docs.djangoproject.com/en/stable/topics/settings/) and how
114
+ [management commands work.](https://docs.djangoproject.com/en/stable/howto/custom-management-commands/)
115
+
116
+ ### Stack
117
+
118
+ Django can be served behind many http servers. A common production environment uses [Apache](https://httpd.apache.org/)
119
+ managing Django as a [WSGI](https://modwsgi.readthedocs.io/en/develop/index.html) daemon, but
120
+ another common setup involves proxying a [gunicorn](https://gunicorn.org/) instance behind [nginx](https://www.nginx.com).
121
+ In addition to Django, other critical components of the software stack are listed in the table below. Not all Python
122
+ dependencies are listed because many are incidental.
123
+
124
+ | Dependency | Description |
125
+ | ------------------------------------------------------------------------------ | ---------------------------------------------------- |
126
+ | [PostgreSQL](https://www.postgresql.org/) | Relation database management system |
127
+ | [Django](https://djangoproject.com) | Website development framework |
128
+ | [jQuery](https://jquery.com/) | Javascript DOM navigation library |
129
+ | [DataTables](https://datatables.net/) | Javascript tables library |
130
+ | [Bootstrap](https://getbootstrap.com/) | CSS framework |
131
+ | [djangorestframework](https://www.django-rest-framework.org/) | RESTful API framework for Django |
132
+ | [django-split-settings](https://github.com/sobolevn/django-split-settings) | Composite settings files for Django |
133
+ | [django_compressor](https://django-compressor.readthedocs.io/en/stable/) | Static file compression and management |
134
+ | [memcached](https://memcached.org/) | Memory object caching system |
135
+ | [django-render-static](https://django-render-static.readthedocs.io/en/latest/) | Static file rendering, javascript urls |
136
+ | [django-debug-toolbar](https://django-debug-toolbar.readthedocs.io/en/latest/) | Debugging components for Django sites (test only) |
137
+
138
+
139
+ ### Organization
140
+
141
+ #### Environment & Setup
142
+
143
+ 1. [pyenv](https://github.com/pyenv/pyenv) is not strictly required, but it is highly recommended to help manage multiple
144
+ local Python installations and keep environments clean. Python 3.8+ is required.
145
+ 2. [Poetry](https://Python-poetry.org/) is used for dependency and package management.
146
+ 3. SLM requires PostgresSQL along with the PostGIS extension that enables geographic queries to be run directly by the database.
147
+
148
+ | RDBMS | Minimum Version | Management Utilities |
149
+ | ---------------------------------------------| ----------------- | ------------------------------------------------------------|
150
+ | [PostgreSQL](https://www.postgresql.org/) | 12 | [PgAdmin](https://www.pgadmin.org/) |
151
+
@@ -0,0 +1,85 @@
1
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
2
+ [![PyPI version](https://badge.fury.io/py/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm/)
3
+ [![PyPI pyversions](https://img.shields.io/pypi/pyversions/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm/)
4
+ [![PyPI djversions](https://img.shields.io/pypi/djversions/igs-slm.svg)](https://pypi.org/project/igs-slm/)
5
+ [![PyPI status](https://img.shields.io/pypi/status/igs-slm.svg)](https://pypi.python.org/pypi/igs-slm)
6
+ [![Documentation Status](https://readthedocs.org/projects/igs-slm/badge/?version=latest)](http://igs-slm.readthedocs.io/?badge=latest/)
7
+ [![codecov](https://codecov.io/github/International-GNSS-Service/SLM/graph/badge.svg?token=PQVWN1LNM3)](https://codecov.io/github/International-GNSS-Service/SLM)
8
+ [![Test Status](https://github.com/International-GNSS-Service/SLM/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/International-GNSS-Service/SLM/actions/workflows/test.yml?branch=master)
9
+ [![Lint Status](https://github.com/International-GNSS-Service/SLM/workflows/lint/badge.svg)](https://github.com/International-GNSS-Service/SLM/actions/workflows/lint.yml)
10
+ [![Security Status](https://github.com/International-GNSS-Service/SLM/workflows/security/badge.svg)](https://github.com/International-GNSS-Service/SLM/actions/workflows/security.yml)
11
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
12
+
13
+ # ![](https://github.com/International-GNSS-Service/SLM/blob/master/slm/static/slm/img/slm-logo.svg?raw=true)
14
+ Site Log Manager (SLM)
15
+
16
+ The Site Log Manager (SLM) is a web platform that aims to provide:
17
+
18
+ 1. GNSS Site meta data (site log) management with a moderation workflow.
19
+ 2. Support for multiple organizations and networks to be managed in an access controlled way.
20
+ 3. Full legacy site log format support (both import and export).
21
+ 4. Full GeodesyML support (both import and export).
22
+ 5. JSON renderings of meta data.
23
+ 6. Point-and-click graphical editing of site log data.
24
+ 7. Public RESTful api for searching site log data.
25
+ 8. Authenticated RESTful api for updating site log data.
26
+ 9. Full access to the historical record.
27
+ 10. Visualizations of networks and site information.
28
+ 11. Configurable data validation that goes above and beyond schema validation.
29
+ 12. Image and file attachments to sites.
30
+ 13. A no-fork extensible architecture that allows organizations to modify out-of-the box
31
+ behavior with plugins.
32
+
33
+ This code base has reached beta-maturity but is still undergoing rapid development. Check back soon
34
+ for new documentation and updates.
35
+
36
+
37
+ ## Table of Contents
38
+ 1. [Design](#Design)
39
+ 1. [Stack](#Stack)
40
+ 2. [Organization](#Organization)
41
+
42
+ ## Design
43
+
44
+ SLM is built in Python using the [Django website development framework.](https://www.djangoproject.com/)
45
+ Django is well documented. A basic understanding of how it works is helpful to understand how SLM is
46
+ put together. In addition to the [good intro tutorials](https://docs.djangoproject.com/en/stable/intro/tutorial01/), it's
47
+ helpful to understand [how reusable Django apps work](https://docs.djangoproject.com/en/stable/intro/reusable-apps/), how
48
+ [settings files work](https://docs.djangoproject.com/en/stable/topics/settings/) and how
49
+ [management commands work.](https://docs.djangoproject.com/en/stable/howto/custom-management-commands/)
50
+
51
+ ### Stack
52
+
53
+ Django can be served behind many http servers. A common production environment uses [Apache](https://httpd.apache.org/)
54
+ managing Django as a [WSGI](https://modwsgi.readthedocs.io/en/develop/index.html) daemon, but
55
+ another common setup involves proxying a [gunicorn](https://gunicorn.org/) instance behind [nginx](https://www.nginx.com).
56
+ In addition to Django, other critical components of the software stack are listed in the table below. Not all Python
57
+ dependencies are listed because many are incidental.
58
+
59
+ | Dependency | Description |
60
+ | ------------------------------------------------------------------------------ | ---------------------------------------------------- |
61
+ | [PostgreSQL](https://www.postgresql.org/) | Relation database management system |
62
+ | [Django](https://djangoproject.com) | Website development framework |
63
+ | [jQuery](https://jquery.com/) | Javascript DOM navigation library |
64
+ | [DataTables](https://datatables.net/) | Javascript tables library |
65
+ | [Bootstrap](https://getbootstrap.com/) | CSS framework |
66
+ | [djangorestframework](https://www.django-rest-framework.org/) | RESTful API framework for Django |
67
+ | [django-split-settings](https://github.com/sobolevn/django-split-settings) | Composite settings files for Django |
68
+ | [django_compressor](https://django-compressor.readthedocs.io/en/stable/) | Static file compression and management |
69
+ | [memcached](https://memcached.org/) | Memory object caching system |
70
+ | [django-render-static](https://django-render-static.readthedocs.io/en/latest/) | Static file rendering, javascript urls |
71
+ | [django-debug-toolbar](https://django-debug-toolbar.readthedocs.io/en/latest/) | Debugging components for Django sites (test only) |
72
+
73
+
74
+ ### Organization
75
+
76
+ #### Environment & Setup
77
+
78
+ 1. [pyenv](https://github.com/pyenv/pyenv) is not strictly required, but it is highly recommended to help manage multiple
79
+ local Python installations and keep environments clean. Python 3.8+ is required.
80
+ 2. [Poetry](https://Python-poetry.org/) is used for dependency and package management.
81
+ 3. SLM requires PostgresSQL along with the PostGIS extension that enables geographic queries to be run directly by the database.
82
+
83
+ | RDBMS | Minimum Version | Management Utilities |
84
+ | ---------------------------------------------| ----------------- | ------------------------------------------------------------|
85
+ | [PostgreSQL](https://www.postgresql.org/) | 12 | [PgAdmin](https://www.pgadmin.org/) |
File without changes
@@ -0,0 +1,88 @@
1
+ from igs_tools.defines import DataCenter
2
+ from typing import Union, List
3
+ import ftplib
4
+ import requests
5
+ from bs4 import BeautifulSoup
6
+
7
+
8
+ class _FTPConnection:
9
+
10
+ connection: ftplib.FTP
11
+
12
+ def __init__(self, domain, username, password):
13
+ self.connection = ftplib.FTP(domain)
14
+ self.connection.login(user=username, passwd=password)
15
+
16
+ def list(self, directory: str) -> List[str]:
17
+ try:
18
+ self.connection.cwd(directory)
19
+ except ftplib.error_perm as eperr:
20
+ print(eperr)
21
+ return []
22
+ return self.connection.nlst()
23
+
24
+
25
+ class _HTTPConnection:
26
+
27
+ def __init__(self, domain, *args):
28
+ self.domain = domain
29
+ self.session = requests.session()
30
+
31
+ def list(self, directory: str) -> List[str]:
32
+ raise NotImplementedError(f'{self} must implement list()')
33
+
34
+
35
+ class _CDDISConnection(_HTTPConnection):
36
+
37
+ def list(self, directory: str) -> List[str]:
38
+ try:
39
+ filenames = []
40
+ resp = requests.get(
41
+ f'{self.domain.rstrip("/")}/{directory}'
42
+ )
43
+ if resp.status_code >= 400:
44
+ print(f'Error: {resp.status_code} {resp.reason}')
45
+ return []
46
+ soup = BeautifulSoup(resp.content, 'html.parser')
47
+ links = soup.find_all('a', {'class': 'archiveItemText'})
48
+ for link in links:
49
+ filenames.append(link.text)
50
+ return filenames
51
+ except Exception as err:
52
+ print(err)
53
+ return []
54
+
55
+
56
+ class Connection:
57
+
58
+ data_center: DataCenter
59
+ username: str
60
+ password: str
61
+
62
+ def __init__(self, data_center: DataCenter, username='', password=''):
63
+ self.data_center = data_center
64
+ self.username = username or ''
65
+ self.password = password or ''
66
+ if data_center.protocol == 'ftp':
67
+ self._connection = _FTPConnection(
68
+ data_center.domain,
69
+ self.username,
70
+ self.password
71
+ )
72
+ elif data_center.protocol in ['http', 'https']:
73
+ if data_center == DataCenter.CDDIS:
74
+ self._connection = _CDDISConnection(data_center.domain)
75
+ else:
76
+ raise NotImplementedError(
77
+ f'Connection for {data_center} not implemented.'
78
+ )
79
+ else:
80
+ raise NotImplementedError(
81
+ f'Protocol {data_center.protocol} not implemented.'
82
+ )
83
+
84
+ def list(self, directory: str) -> List[str]:
85
+ return self._connection.list(directory)
86
+
87
+ def download(self, path: str):
88
+ pass
@@ -0,0 +1,8 @@
1
+ from igs_tools.defines.rinex import (
2
+ RinexVersion,
3
+ DataRate
4
+ )
5
+ from igs_tools.defines.data_center import DataCenter
6
+
7
+
8
+ __all__ = ['RinexVersion', 'DataRate', 'DataCenter']
@@ -0,0 +1,21 @@
1
+ from enum_properties import IntFlagProperties, p, s
2
+
3
+
4
+ class GNSSConstellation(
5
+ IntFlagProperties,
6
+ s('label'), s('_id'), s('full_name')
7
+ ):
8
+ GPS = 2**0, 'GPS', 'G', 'GPS'
9
+ GLO = 2**1, 'GLO', 'R', 'GLONASS'
10
+ GAL = 2**2, 'GAL', 'E', 'Galileo'
11
+ BDS = 2**3, 'BDS', 'C', 'BeiDou'
12
+ QZSS = 2**4, 'QZSS', 'J', 'QZSS'
13
+ IRNSS = 2**5, 'IRNSS', 'I', 'IRNSS'
14
+ SBAS = 2**6, 'SBAS', 'S', 'SBAS'
15
+
16
+ def __str__(self):
17
+ return str(self.value)
18
+
19
+ @property
20
+ def id(self):
21
+ return self._id or 'M' # M == Mixed
@@ -0,0 +1,75 @@
1
+ from enum_properties import EnumProperties, p, s
2
+ from pathlib import Path
3
+ from .rinex import DataRate
4
+ from igs_tools.utils import day_of_year
5
+
6
+
7
+ class DataCenter(
8
+ EnumProperties,
9
+ p('protocol'), s('domain'), p('port'), s('full_name')
10
+ ):
11
+
12
+ IGN = 'IGN', 'ftp', 'igs.ign.fr', 21, "Institut National de l'Information Géographique et Forestière"
13
+ SIO = 'SIO', 'ftp', 'garner.ucsd.edu', 21, 'Scripps Institution of Oceanography'
14
+ KASI = 'KASI', 'ftp', 'nfs.kasi.re.kr', 21, 'Korea Astronomy and Space Science Institute'
15
+ CDDIS = 'CDDIS', 'https', 'https://cddis.nasa.gov', 443, 'NASA Center for Data and Information Services'
16
+
17
+ @property
18
+ def label(self):
19
+ return self.name
20
+
21
+ def __str__(self):
22
+ return str(self.label)
23
+
24
+ def directory(self, rinex_version, data_rate, date, hours=None):
25
+ """
26
+ todo this interface should be changed to return a list of paths and
27
+ honor the hours parameter
28
+ :param rinex_version:
29
+ :param data_rate:
30
+ :param date:
31
+ :param hours:
32
+ :return:
33
+ """
34
+ if self == self.IGN:
35
+ path = Path('/pub/igs/data')
36
+ if data_rate == DataRate.HOURLY:
37
+ path /= 'hourly'
38
+ elif data_rate == DataRate.HIGH_RATE:
39
+ path /= 'highrate'
40
+ path /= str(date.year)
41
+ path /= f'{day_of_year(date):03d}'
42
+ return str(path)
43
+ if self == self.SIO:
44
+ path = Path('/pub/rinex')
45
+ if data_rate == DataRate.HOURLY:
46
+ return None
47
+ elif data_rate == DataRate.HIGH_RATE:
48
+ path /= 'rinex_highrate'
49
+ path /= str(date.year)
50
+ path /= f'{day_of_year(date):03d}'
51
+ return str(path)
52
+ if self == self.KASI:
53
+ path = Path('/gps/data') # todo add constellation to list
54
+ if data_rate == DataRate.HOURLY or data_rate == DataRate.HIGH_RATE:
55
+ return None
56
+ elif data_rate == DataRate.DAILY:
57
+ path /= 'daily'
58
+ path /= str(date.year)
59
+ path /= f'{day_of_year(date):03d}'
60
+ path /= f'{str(date.year)[2:]}d'
61
+ return str(path)
62
+ if self == self.CDDIS:
63
+ path = Path('/archive/gnss/data')
64
+ if data_rate in [DataRate.HOURLY, DataRate.HIGH_RATE]:
65
+ path /= 'hourly'
66
+ elif data_rate == DataRate.DAILY:
67
+ path /= 'daily'
68
+ path /= str(date.year)
69
+ path /= f'{day_of_year(date):03d}'
70
+ if data_rate in [DataRate.DAILY, DataRate.HIGH_RATE]:
71
+ path /= f'{str(date.year)[2:]}d'
72
+ if data_rate in [DataRate.HOURLY, DataRate.HIGH_RATE]:
73
+ path /= '01'
74
+ return path
75
+ raise NotImplementedError(f'{self} must implement directory()')
@@ -0,0 +1,49 @@
1
+ from datetime import date
2
+ from enum_properties import IntEnumProperties, IntFlagProperties, p, s
3
+
4
+
5
+ class RinexVersion(
6
+ IntEnumProperties,
7
+ s('label'), s('major'), s('slug'), p('published')
8
+ ):
9
+
10
+ # Minor version not known
11
+
12
+ # Name Label Major Text Published
13
+ v2 = 2, 'RINEX 2', 2, '2', date(year=1993, month=4, day=1)
14
+ v3 = 3, 'RINEX 3', 3, '3', date(year=2007, month=11, day=28)
15
+ v4 = 4, 'RINEX 4', 4, '4', date(year=2021, month=12, day=1)
16
+ ###############################################################
17
+
18
+ v2_11 = 211, 'RINEX 2.11', 2, '2.11', date(year=2012, month=6, day=26)
19
+ v3_00 = 300, 'RINEX 3.00', 3, '3.00', date(year=2007, month=11, day=28)
20
+ v3_01 = 301, 'RINEX 3.01', 3, '3.01', date(year=2009, month=6, day=22)
21
+ v3_02 = 302, 'RINEX 3.02', 3, '3.02', date(year=2013, month=4, day=13)
22
+ v3_03 = 303, 'RINEX 3.03', 3, '3.03', date(year=2017, month=1, day=25)
23
+ v3_04 = 304, 'RINEX 3.04', 3, '3.04', date(year=2018, month=11, day=23)
24
+ v3_05 = 305, 'RINEX 3.05', 3, '3.05', date(year=2020, month=12, day=1)
25
+ v4_00 = 400, 'RINEX 4.00', 4, '4.00', date(year=2021, month=12, day=1)
26
+
27
+ def major_q(self, field_name='rinex_version'):
28
+ from django.db.models import Q
29
+ return Q(**{
30
+ f'{field_name}__in': [
31
+ rv.value for rv in RinexVersion if rv.major == self.major
32
+ ]})
33
+
34
+ @classmethod
35
+ def major_versions(cls):
36
+ return [cls.v2, cls.v3, cls.v4]
37
+
38
+ def __str__(self):
39
+ return str(self.label)
40
+
41
+
42
+ class DataRate(IntFlagProperties, s('label'), s('slug', case_fold=True)):
43
+
44
+ DAILY = 2**1, 'Daily', 'daily'
45
+ HOURLY = 2**2, 'Hourly', 'hourly'
46
+ HIGH_RATE = 2**3, 'High Rate', 'high'
47
+
48
+ def __str__(self):
49
+ return str(self.label)