@nasa-terra/components 0.0.107 → 0.0.109
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.
- package/cdn/assets/data-access/download_files.py.txt +204 -0
- package/cdn/chunks/{chunk.CLNFE32U.js → chunk.3RVUTYH4.js} +1 -1
- package/cdn/chunks/{chunk.Y3BKT4GE.js → chunk.3Y6CUS3R.js} +1 -1
- package/cdn/chunks/{chunk.UQPG6VRH.js → chunk.4IOEKI2P.js} +1 -1
- package/cdn/chunks/chunk.4Q56BB6I.js +77 -0
- package/cdn/chunks/{chunk.TTKHEE2N.js → chunk.4ZSHIBMI.js} +1 -1
- package/cdn/chunks/{chunk.7B2K4OIZ.js → chunk.5FUN6F7Y.js} +1 -1
- package/cdn/chunks/{chunk.RSA5EY6Z.js → chunk.5IF36BN5.js} +1 -1
- package/cdn/chunks/chunk.5P2CYWIJ.js +55882 -0
- package/cdn/chunks/{chunk.B22Q2XEQ.js → chunk.5TH676QW.js} +1 -1
- package/cdn/chunks/{chunk.ISLR3X2Y.js → chunk.5UREWLES.js} +9 -33
- package/cdn/chunks/{chunk.UGTDMW23.js → chunk.67ZWVFY3.js} +16 -15
- package/cdn/chunks/{chunk.LB7XLHJ2.js → chunk.6BCAIZ5H.js} +1 -1
- package/cdn/chunks/{chunk.VWNRAOKX.js → chunk.6GWPE22I.js} +4 -4
- package/cdn/chunks/chunk.6KJ56SFL.js +186 -0
- package/cdn/chunks/{chunk.ITQWEDLQ.js → chunk.6SEMGF6B.js} +52 -45
- package/cdn/chunks/{chunk.XBSXVUTS.js → chunk.7A6NO75T.js} +5 -5
- package/cdn/chunks/{chunk.GVVLBUHE.js → chunk.7OXFGIR4.js} +1 -1
- package/cdn/chunks/{chunk.NW7JJHSN.js → chunk.AHJ3DUHR.js} +1 -1
- package/cdn/chunks/chunk.AKB2SQKJ.js +1373 -0
- package/cdn/chunks/{chunk.LGM7OPNT.js → chunk.AMHR4MGP.js} +1 -1
- package/cdn/chunks/{chunk.JTEYVEMK.js → chunk.B6222LBB.js} +1 -1
- package/cdn/chunks/{chunk.UATCIRCQ.js → chunk.B6JDR25L.js} +15 -15
- package/cdn/chunks/{chunk.66SMZ5FO.js → chunk.BWBH27LQ.js} +1 -1
- package/cdn/chunks/{chunk.NARPRG6A.js → chunk.C2B4QOG2.js} +1 -1
- package/cdn/chunks/{chunk.B55LOK23.js → chunk.CEZ44GCY.js} +1 -1
- package/cdn/chunks/{chunk.4CPVPWFD.js → chunk.COKKJ7HM.js} +1 -1
- package/cdn/chunks/{chunk.F5HVRR67.js → chunk.D3RC7JQX.js} +1 -1
- package/cdn/chunks/{chunk.NLEVWBY3.js → chunk.D5RVLVGT.js} +1 -1
- package/cdn/chunks/chunk.DBYG4VUT.js +192 -0
- package/cdn/chunks/{chunk.ZCTH5HUD.js → chunk.DDSIC4RK.js} +9 -12
- package/cdn/chunks/chunk.DJJZVLQV.js +85 -0
- package/cdn/chunks/{chunk.KJF74B5J.js → chunk.E2AJOKRZ.js} +4 -4
- package/cdn/chunks/{chunk.I2WOAHGS.js → chunk.E74MX4OO.js} +1 -1
- package/cdn/chunks/{chunk.SZX7RPJI.js → chunk.ECVHZJPM.js} +17 -15
- package/cdn/chunks/{chunk.WNRKHJWG.js → chunk.EF5LM7CJ.js} +43 -1
- package/cdn/chunks/{chunk.XPKQBL5B.js → chunk.EMPUPFDZ.js} +1 -1
- package/cdn/chunks/chunk.EOF7UX34.js +254 -0
- package/cdn/chunks/{chunk.Z4WJD2NW.js → chunk.FCLNX2EO.js} +44 -4
- package/cdn/chunks/{chunk.AA44POXJ.js → chunk.FTUQFNWL.js} +1 -1
- package/cdn/chunks/chunk.G2K67EIQ.js +19 -0
- package/cdn/chunks/{chunk.MDBWLNHM.js → chunk.G5H7GE33.js} +1 -1
- package/cdn/chunks/chunk.GCP5LF6C.js +401 -0
- package/cdn/chunks/{chunk.UG4MMICI.js → chunk.GGCARDAM.js} +38 -218
- package/cdn/chunks/{chunk.YN3H4E7G.js → chunk.GRTI7Z2X.js} +1 -1
- package/cdn/chunks/{chunk.RFTMFRCG.js → chunk.H3B3XS47.js} +1 -1
- package/cdn/chunks/{chunk.6522DLH6.js → chunk.H5IKDVHP.js} +1 -1
- package/cdn/chunks/{chunk.FEW4BOU6.js → chunk.HAJI335E.js} +1 -1
- package/cdn/chunks/{chunk.DBIIVRVV.js → chunk.HIUXWKRL.js} +1 -1
- package/cdn/chunks/{chunk.3UDAMFQQ.js → chunk.HIZDDWHW.js} +5 -3
- package/cdn/chunks/{chunk.BIXJBTOE.js → chunk.HQNP2KSY.js} +1 -1
- package/cdn/chunks/{chunk.NYHXVC5G.js → chunk.HU2BPO25.js} +3 -1
- package/cdn/chunks/{chunk.QJAY4ACM.js → chunk.HYOAXHTG.js} +1 -1
- package/cdn/chunks/{chunk.PWHCCDP6.js → chunk.IJ7YZ5I4.js} +1 -1
- package/cdn/chunks/{chunk.WAYZ7GRD.js → chunk.INU2YWW5.js} +1 -1
- package/cdn/chunks/{chunk.AJHI2APW.js → chunk.IS3KODMM.js} +11 -11
- package/cdn/chunks/{chunk.2QUWBFNV.js → chunk.JBTWQZ6F.js} +1 -21
- package/cdn/chunks/{chunk.UIC3QSBA.js → chunk.JJDWIH67.js} +1 -1
- package/cdn/chunks/{chunk.AY2URS27.js → chunk.JW7QSDAF.js} +463 -463
- package/cdn/chunks/{chunk.RVECZHKV.js → chunk.JWDHB224.js} +1 -1
- package/cdn/chunks/{chunk.24PX6VVB.js → chunk.K2G44Z2F.js} +10 -10
- package/cdn/chunks/{chunk.2UXMVWJY.js → chunk.KH3K4IPG.js} +1 -1
- package/cdn/chunks/chunk.KHU4VS56.js +19 -0
- package/cdn/chunks/{chunk.AHTFPHXY.js → chunk.KL3J4W22.js} +1 -1
- package/cdn/chunks/{chunk.NCWDKVFS.js → chunk.KVZQT4TD.js} +1 -1
- package/cdn/chunks/{chunk.EBJ4Y3ZY.js → chunk.KXZQG4GG.js} +1 -1
- package/cdn/chunks/{chunk.VBPR2GDC.js → chunk.L3USGNVD.js} +3 -3
- package/cdn/chunks/{chunk.AOKPZMO2.js → chunk.LKRS4CAN.js} +1 -1
- package/cdn/chunks/{chunk.RFMO6XCI.js → chunk.LOW6SKZI.js} +1 -1
- package/cdn/chunks/{chunk.Z76Z3SSD.js → chunk.MTWOB4SN.js} +4 -4
- package/cdn/chunks/{chunk.L6L43FNI.js → chunk.N3MG5AIE.js} +23 -14
- package/cdn/chunks/{chunk.IWSQ544B.js → chunk.O5CSY37A.js} +1 -1
- package/cdn/chunks/{chunk.QSPDPBP6.js → chunk.OCWEL5EY.js} +1 -1
- package/cdn/chunks/{chunk.YWHRP6GS.js → chunk.OQ45AXW5.js} +1 -1
- package/cdn/chunks/{chunk.TR7WGBZ4.js → chunk.PBE7PBVG.js} +14417 -14453
- package/cdn/chunks/chunk.PF7QH2DU.js +29 -0
- package/cdn/chunks/chunk.PGYVQFUC.js +198 -0
- package/cdn/chunks/{chunk.4G7722WS.js → chunk.PHA5SLGB.js} +1 -1
- package/cdn/chunks/{chunk.KRJK4P6L.js → chunk.PJTE3M6L.js} +1 -1
- package/cdn/chunks/{chunk.Y6MYSGG5.js → chunk.PMUXTRK7.js} +105 -53
- package/cdn/chunks/chunk.POY6ESUV.js +341 -0
- package/cdn/chunks/{chunk.CARE3PQT.js → chunk.PZY3E3DL.js} +1 -1
- package/cdn/chunks/{chunk.XV4TKJTB.js → chunk.QIHK2ETX.js} +1 -1
- package/cdn/chunks/{chunk.RB66VHTT.js → chunk.QNP3XW45.js} +1 -1
- package/cdn/chunks/{chunk.R2COQNKX.js → chunk.QW3BSXJD.js} +4 -4
- package/cdn/chunks/chunk.R5RMXQQB.js +19 -0
- package/cdn/chunks/{chunk.SKYRG5K4.js → chunk.RH6MKZOT.js} +4 -4
- package/cdn/chunks/{chunk.WGW33LYK.js → chunk.RIFRVSDP.js} +1 -1
- package/cdn/chunks/{chunk.E2Y4JI5T.js → chunk.RZ6JWWRE.js} +25 -23
- package/cdn/chunks/{chunk.RL7ASETS.js → chunk.SM24YZG6.js} +1 -1
- package/cdn/chunks/{chunk.7W4N2TTY.js → chunk.SP5PM52D.js} +1 -1
- package/cdn/chunks/{chunk.MQOX3MET.js → chunk.SPQDE22Y.js} +257 -110
- package/cdn/chunks/{chunk.G7BMUF2H.js → chunk.SUHGUAJT.js} +1 -1
- package/cdn/chunks/{chunk.NNAYEU6F.js → chunk.TQACULNH.js} +13 -13
- package/cdn/chunks/{chunk.7BCN7XYL.js → chunk.UBR4LNOH.js} +1 -1
- package/cdn/chunks/chunk.UDC3RNT3.js +29 -0
- package/cdn/chunks/chunk.ULWZSOMI.js +66 -0
- package/cdn/chunks/{chunk.JIV6YZNC.js → chunk.UNT2HSBI.js} +1 -1
- package/cdn/chunks/{chunk.UJRVLZTU.js → chunk.UQEMKKQV.js} +1 -1
- package/cdn/chunks/{chunk.OVQQUA2A.js → chunk.UVIJI2KE.js} +1 -1
- package/cdn/chunks/chunk.V6GUDCWA.js +85 -0
- package/cdn/chunks/{chunk.ZN6E5G62.js → chunk.VE7U5TBK.js} +1 -1
- package/cdn/chunks/{chunk.WJGR4QS5.js → chunk.VOIHASPR.js} +6 -6
- package/cdn/chunks/chunk.VORUIAGH.js +32 -0
- package/cdn/chunks/{chunk.CQUNRYV3.js → chunk.WHK7RCEW.js} +1 -1
- package/cdn/chunks/{chunk.L7OPWG3I.js → chunk.XERP5BC7.js} +1 -1
- package/cdn/chunks/{chunk.WDGNRNZG.js → chunk.XFQXFC3N.js} +5 -5
- package/cdn/chunks/chunk.XTOXUDHM.js +214 -0
- package/cdn/chunks/{chunk.PCG3QMHU.js → chunk.Y5W5KIZU.js} +1 -1
- package/cdn/chunks/{chunk.H4CLIUFZ.js → chunk.YB7R6T27.js} +78 -0
- package/cdn/chunks/{chunk.MOFTPQZT.js → chunk.YIU7LYSK.js} +7 -7
- package/cdn/chunks/chunk.YMM5AKGU.js +35 -0
- package/cdn/chunks/{chunk.O2MFSAE3.js → chunk.YY2VAXXO.js} +72 -7
- package/cdn/chunks/chunk.YYUTMN3B.js +597 -0
- package/cdn/chunks/{chunk.BLPK2GAC.js → chunk.YZDS3HXV.js} +5 -5
- package/cdn/chunks/{chunk.V6SLTWH2.js → chunk.ZBUFEWGG.js} +1 -1
- package/cdn/chunks/{chunk.R3KFGXL2.js → chunk.ZFHL277N.js} +1 -1
- package/cdn/chunks/chunk.ZNX2OKQP.js +522 -0
- package/cdn/chunks/{chunk.7EOJVAHY.js → chunk.ZZ2HFAQL.js} +1 -1
- package/cdn/components/accordion/accordion.component.js +8 -8
- package/cdn/components/accordion/accordion.js +9 -9
- package/cdn/components/alert/alert.component.js +5 -5
- package/cdn/components/alert/alert.js +6 -6
- package/cdn/components/browse-variables/browse-variables.component.js +29 -29
- package/cdn/components/browse-variables/browse-variables.controller.js +5 -5
- package/cdn/components/browse-variables/browse-variables.js +30 -30
- package/cdn/components/button/button.component.js +6 -5
- package/cdn/components/button/button.js +7 -6
- package/cdn/components/chip/chip.component.js +4 -4
- package/cdn/components/chip/chip.js +5 -5
- package/cdn/components/combobox/combobox.component.js +10 -10
- package/cdn/components/combobox/combobox.js +11 -11
- package/cdn/components/data-access/data-access.component.css +6801 -0
- package/cdn/components/data-access/data-access.component.d.ts +58 -0
- package/cdn/components/data-access/data-access.component.js +59 -0
- package/cdn/components/data-access/data-access.controller.d.ts +41 -0
- package/cdn/components/data-access/data-access.controller.js +13 -0
- package/cdn/components/data-access/data-access.css +6801 -0
- package/cdn/components/data-access/data-access.d.ts +8 -0
- package/cdn/components/data-access/data-access.js +60 -0
- package/cdn/components/data-access/data-access.styles.css +6801 -0
- package/cdn/components/data-access/data-access.styles.d.ts +4 -0
- package/cdn/components/data-access/data-access.styles.js +9 -0
- package/cdn/components/data-access/notebooks/data-access-notebook.d.ts +20 -0
- package/cdn/components/data-access/notebooks/data-access-notebook.js +81 -0
- package/cdn/components/data-rods/data-rods.component.js +55 -49
- package/cdn/components/data-rods/data-rods.js +56 -50
- package/cdn/components/data-subsetter/data-subsetter.component.css +6801 -0
- package/cdn/components/data-subsetter/data-subsetter.component.d.ts +6 -1
- package/cdn/components/data-subsetter/data-subsetter.component.js +51 -39
- package/cdn/components/data-subsetter/data-subsetter.controller.js +6 -6
- package/cdn/components/data-subsetter/data-subsetter.css +6801 -0
- package/cdn/components/data-subsetter/data-subsetter.js +52 -40
- package/cdn/components/data-subsetter/data-subsetter.styles.js +1 -1
- package/cdn/components/data-subsetter/notebooks/subsetter-notebook.js +1 -1
- package/cdn/components/data-subsetter-history/data-subsetter-history.component.css +6801 -0
- package/cdn/components/data-subsetter-history/data-subsetter-history.component.js +54 -42
- package/cdn/components/data-subsetter-history/data-subsetter-history.controller.js +3 -3
- package/cdn/components/data-subsetter-history/data-subsetter-history.css +6801 -0
- package/cdn/components/data-subsetter-history/data-subsetter-history.js +55 -43
- package/cdn/components/date-picker/date-picker.component.d.ts +91 -21
- package/cdn/components/date-picker/date-picker.component.js +12 -7
- package/cdn/components/date-picker/date-picker.js +13 -8
- package/cdn/components/date-picker/date-picker.styles.js +1 -1
- package/cdn/components/date-range-slider/date-range-slider.component.js +7 -6
- package/cdn/components/date-range-slider/date-range-slider.js +8 -7
- package/cdn/components/dialog/dialog.component.js +4 -4
- package/cdn/components/dialog/dialog.js +5 -5
- package/cdn/components/icon/icon.component.js +6 -6
- package/cdn/components/icon/icon.js +7 -7
- package/cdn/components/input/input.component.d.ts +58 -0
- package/cdn/components/input/input.component.js +19 -0
- package/cdn/components/input/input.d.ts +8 -0
- package/cdn/components/input/input.js +20 -0
- package/cdn/components/input/input.styles.d.ts +2 -0
- package/cdn/components/input/input.styles.js +9 -0
- package/cdn/components/loader/loader.component.js +4 -4
- package/cdn/components/loader/loader.js +5 -5
- package/cdn/components/login/login.component.js +19 -18
- package/cdn/components/login/login.js +20 -19
- package/cdn/components/map/leaflet-utils.d.ts +2 -1
- package/cdn/components/map/leaflet-utils.js +3 -3
- package/cdn/components/map/map.component.js +10 -10
- package/cdn/components/map/map.controller.js +3 -3
- package/cdn/components/map/map.js +11 -11
- package/cdn/components/plot/plot.component.d.ts +4 -0
- package/cdn/components/plot/plot.component.js +4 -4
- package/cdn/components/plot/plot.js +5 -5
- package/cdn/components/plot-toolbar/notebooks/time-averaged-map-notebook.js +1 -1
- package/cdn/components/plot-toolbar/notebooks/time-series-notebook.js +1 -1
- package/cdn/components/plot-toolbar/plot-toolbar.component.js +27 -26
- package/cdn/components/plot-toolbar/plot-toolbar.controller.js +4 -4
- package/cdn/components/plot-toolbar/plot-toolbar.js +28 -27
- package/cdn/components/skeleton/skeleton.component.d.ts +0 -4
- package/cdn/components/skeleton/skeleton.component.js +5 -13
- package/cdn/components/skeleton/skeleton.js +6 -14
- package/cdn/components/skeleton/skeleton.styles.js +1 -1
- package/cdn/components/slider/slider.component.d.ts +107 -0
- package/cdn/components/slider/slider.component.js +16 -0
- package/cdn/components/slider/slider.d.ts +8 -0
- package/cdn/components/slider/slider.js +17 -0
- package/cdn/components/slider/slider.styles.d.ts +2 -0
- package/cdn/components/slider/slider.styles.js +9 -0
- package/cdn/components/spatial-picker/spatial-picker.component.d.ts +8 -1
- package/cdn/components/spatial-picker/spatial-picker.component.js +17 -12
- package/cdn/components/spatial-picker/spatial-picker.js +18 -13
- package/cdn/components/spatial-picker/spatial-picker.styles.js +1 -1
- package/cdn/components/time-average-map/time-average-map.component.js +34 -32
- package/cdn/components/time-average-map/time-average-map.controller.js +4 -4
- package/cdn/components/time-average-map/time-average-map.js +35 -33
- package/cdn/components/time-series/time-series.component.js +37 -35
- package/cdn/components/time-series/time-series.controller.js +4 -4
- package/cdn/components/time-series/time-series.js +38 -36
- package/cdn/components/variable-combobox/lib.js +3 -3
- package/cdn/components/variable-combobox/variable-combobox.component.js +22 -21
- package/cdn/components/variable-combobox/variable-combobox.controller.js +5 -5
- package/cdn/components/variable-combobox/variable-combobox.js +23 -22
- package/cdn/components/variable-keyword-search/variable-keyword-search.component.js +23 -22
- package/cdn/components/variable-keyword-search/variable-keyword-search.controller.js +5 -5
- package/cdn/components/variable-keyword-search/variable-keyword-search.js +24 -23
- package/cdn/custom-elements.json +5733 -3796
- package/cdn/data-services/types.d.ts +2 -0
- package/cdn/events/events.d.ts +4 -0
- package/cdn/events/terra-blur.d.ts +6 -0
- package/cdn/events/terra-focus.d.ts +6 -0
- package/cdn/events/terra-input.d.ts +6 -0
- package/cdn/events/terra-slider-change.d.ts +11 -0
- package/cdn/internal/terra-element.d.ts +9 -0
- package/cdn/metadata-catalog/cmr-catalog.d.ts +5 -1
- package/cdn/metadata-catalog/queries.d.ts +1 -0
- package/cdn/metadata-catalog/types.d.ts +74 -0
- package/cdn/metadata-catalog/utilities.d.ts +9 -1
- package/cdn/react/accordion/index.js +9 -9
- package/cdn/react/alert/index.js +6 -6
- package/cdn/react/browse-variables/index.js +30 -30
- package/cdn/react/button/index.js +7 -6
- package/cdn/react/chip/index.js +5 -5
- package/cdn/react/combobox/index.js +11 -11
- package/cdn/react/data-access/index.css +6801 -0
- package/cdn/react/data-access/index.d.ts +18 -0
- package/cdn/react/data-access/index.js +60 -0
- package/cdn/react/data-rods/index.js +56 -50
- package/cdn/react/data-subsetter/index.css +6801 -0
- package/cdn/react/data-subsetter/index.js +52 -40
- package/cdn/react/data-subsetter-history/index.css +6801 -0
- package/cdn/react/data-subsetter-history/index.js +55 -43
- package/cdn/react/date-picker/index.d.ts +3 -1
- package/cdn/react/date-picker/index.js +13 -8
- package/cdn/react/date-range-slider/index.js +8 -7
- package/cdn/react/dialog/index.js +5 -5
- package/cdn/react/icon/index.js +7 -7
- package/cdn/react/index.css +6801 -0
- package/cdn/react/index.d.ts +9 -6
- package/cdn/react/index.js +146 -124
- package/cdn/react/input/index.d.ts +36 -0
- package/cdn/react/input/index.js +20 -0
- package/cdn/react/loader/index.js +5 -5
- package/cdn/react/login/index.js +20 -19
- package/cdn/react/map/index.js +11 -11
- package/cdn/react/plot/index.js +5 -5
- package/cdn/react/plot-toolbar/index.js +28 -27
- package/cdn/react/skeleton/index.js +6 -14
- package/cdn/react/slider/index.d.ts +3 -0
- package/cdn/react/slider/index.js +17 -0
- package/cdn/react/spatial-picker/index.js +18 -13
- package/cdn/react/time-average-map/index.js +35 -33
- package/cdn/react/time-series/index.js +38 -36
- package/cdn/react/variable-combobox/index.js +23 -22
- package/cdn/react/variable-keyword-search/index.js +24 -23
- package/cdn/terra-ui-components.css +6801 -0
- package/cdn/terra-ui-components.d.ts +3 -0
- package/cdn/terra-ui-components.js +145 -123
- package/cdn/themes/horizon.css +2 -2
- package/cdn/themes/horizon.styles.js +2 -2
- package/cdn/types/vue/index.d.ts +395 -201
- package/cdn/utilities/animation.js +7 -6
- package/cdn/vscode.html-custom-data.json +416 -266
- package/cdn/web-types.json +929 -594
- package/dist/assets/data-access/download_files.py.txt +204 -0
- package/dist/chunks/{chunk.FO3SMAQX.js → chunk.2MAH3RS5.js} +1 -1
- package/dist/chunks/{chunk.RRBBZBVU.js → chunk.2OLOAIUQ.js} +1 -1
- package/dist/chunks/chunk.33GLUR4S.js +11 -0
- package/dist/chunks/{chunk.TJOSCD3S.js → chunk.3DT43DOY.js} +1 -1
- package/dist/chunks/{chunk.XJZO5H2M.js → chunk.3S2XLMFC.js} +1 -1
- package/dist/chunks/{chunk.AI3MEP5B.js → chunk.3ZJ4KD64.js} +1 -1
- package/dist/chunks/{chunk.KCBAI3FB.js → chunk.55CZJZYH.js} +1 -1
- package/dist/chunks/{chunk.6CZYD3ML.js → chunk.55RKNGL5.js} +1 -1
- package/dist/chunks/{chunk.YWA7YBWM.js → chunk.65D3XPR3.js} +1 -1
- package/dist/chunks/{chunk.CQKGFVBT.js → chunk.6AVCMCYO.js} +1 -1
- package/dist/chunks/{chunk.XXZW2WN3.js → chunk.6Z2QXXCV.js} +1 -1
- package/dist/chunks/{chunk.GD6YXG7E.js → chunk.7HLWU7TX.js} +1 -1
- package/dist/chunks/{chunk.BEXC674K.js → chunk.7YXQE6PE.js} +7 -1
- package/dist/chunks/{chunk.BKAE55DO.js → chunk.AOX2R6VV.js} +1 -1
- package/dist/chunks/chunk.AV63MZ7W.js +11 -0
- package/dist/chunks/{chunk.ZOS3WRQK.js → chunk.AWMMSTPY.js} +1 -1
- package/dist/chunks/chunk.AXHBEA3B.js +21 -0
- package/dist/chunks/{chunk.KHGP3ICJ.js → chunk.B3R7BNNG.js} +1 -1
- package/dist/chunks/{chunk.KCUL4NNR.js → chunk.BAOWTLBS.js} +1 -1
- package/dist/chunks/{chunk.6VWWN3HM.js → chunk.BD2Y7YXC.js} +1 -1
- package/dist/chunks/{chunk.BCB6AFAO.js → chunk.BN5PJLUH.js} +14 -13
- package/dist/chunks/{chunk.LBF4CVRG.js → chunk.C7KOKFDY.js} +1 -1
- package/dist/chunks/{chunk.X2UNXIJ4.js → chunk.CERMDF55.js} +42 -0
- package/dist/chunks/chunk.CGVPVXTX.js +76 -0
- package/dist/chunks/{chunk.MGH3IHLS.js → chunk.CV4AUWY4.js} +1 -1
- package/dist/chunks/chunk.CWQ4PIAE.js +74 -0
- package/dist/chunks/{chunk.RSBTDP6D.js → chunk.DLQCAQON.js} +1 -1
- package/dist/chunks/chunk.DWL434TH.js +11 -0
- package/dist/chunks/chunk.ENVNZF6N.js +241 -0
- package/dist/chunks/{chunk.NRO5RC6F.js → chunk.EUNIHYQH.js} +1 -1
- package/dist/chunks/{chunk.LQ6HETRL.js → chunk.EY2WGN47.js} +4 -4
- package/dist/chunks/chunk.EZU4DLFO.js +67 -0
- package/dist/chunks/{chunk.NY5X4XJJ.js → chunk.F3Y2I2NL.js} +105 -53
- package/dist/chunks/{chunk.AMDQOH57.js → chunk.FTJ6Z36M.js} +1 -1
- package/dist/chunks/{chunk.ZEQWGEAM.js → chunk.G6ZXOELC.js} +1 -1
- package/dist/chunks/chunk.GCGYFFT7.js +175 -0
- package/dist/chunks/{chunk.HFD5ETAQ.js → chunk.HDIQCE45.js} +1 -1
- package/dist/chunks/{chunk.47OFOUVX.js → chunk.HGERMDT7.js} +9 -9
- package/dist/chunks/{chunk.D7PK3T2J.js → chunk.HOFUIAJ7.js} +1 -1
- package/dist/chunks/{chunk.D7HTBGUZ.js → chunk.HTAFMSHW.js} +1 -1
- package/dist/chunks/{chunk.N6AUWZHE.js → chunk.HY2VYT2U.js} +9 -33
- package/dist/chunks/{chunk.OIFKVY4T.js → chunk.I6HM5A75.js} +1 -1
- package/dist/chunks/{chunk.EIU2TJ7M.js → chunk.IBFYLVPO.js} +1 -1
- package/dist/chunks/{chunk.KIQKEOQI.js → chunk.IFPYTPZ3.js} +1 -1
- package/dist/chunks/{chunk.EHXSFWGZ.js → chunk.IGL5GIAX.js} +4 -4
- package/dist/chunks/{chunk.R5WRTGZ2.js → chunk.ILLCU5HB.js} +1 -1
- package/dist/chunks/{chunk.53Z3FHXA.js → chunk.IYQUFGRK.js} +44 -4
- package/dist/chunks/{chunk.4S4EVHNW.js → chunk.J5O6PWLI.js} +1 -1
- package/dist/chunks/{chunk.75DNKTIA.js → chunk.JYERS5HC.js} +1 -1
- package/dist/chunks/{chunk.YXRJUQR5.js → chunk.KDKPCPNN.js} +1 -1
- package/dist/chunks/{chunk.M53OVZVD.js → chunk.KRIE4TTT.js} +1 -1
- package/dist/chunks/{chunk.E3LMMT5E.js → chunk.L4VXPE4G.js} +1 -1
- package/dist/chunks/chunk.MCETAH6L.js +327 -0
- package/dist/chunks/{chunk.5N7GJZ2Z.js → chunk.MOVODGXH.js} +21 -19
- package/dist/chunks/{chunk.TZMV577R.js → chunk.MOWUXX6Z.js} +1 -1
- package/dist/chunks/{chunk.6ZARKYRG.js → chunk.MQHQ6KJF.js} +1 -1
- package/dist/chunks/{chunk.NGWBTRHR.js → chunk.N2WMAVWK.js} +1 -1
- package/dist/chunks/{chunk.L53CZ7GI.js → chunk.NELEH3YX.js} +1 -1
- package/dist/chunks/{chunk.3BKXRITY.js → chunk.NN3HTBRE.js} +1 -1
- package/dist/chunks/{chunk.N5JXKAY2.js → chunk.NXG2EYQK.js} +1 -1
- package/dist/chunks/{chunk.EZBSY2JR.js → chunk.O2KQGWYU.js} +1 -1
- package/dist/chunks/{chunk.5RC65ESO.js → chunk.OFCDZ7RV.js} +4 -4
- package/dist/chunks/{chunk.US4YJUBI.js → chunk.OPPXD3GB.js} +2 -2
- package/dist/chunks/{chunk.6WX6EGQD.js → chunk.OZF5V7R2.js} +4 -4
- package/dist/chunks/{chunk.IS4O6KW6.js → chunk.P7TPAWFS.js} +1 -1
- package/dist/chunks/chunk.PNW3FTQO.js +27 -0
- package/dist/chunks/{chunk.KFLTBQNX.js → chunk.PPMCLS5F.js} +1 -1
- package/dist/chunks/{chunk.6CD5FGEO.js → chunk.PU7SJ6RP.js} +1 -1
- package/dist/chunks/{chunk.LVOCWJ6A.js → chunk.PVXZUMSY.js} +3 -3
- package/dist/chunks/{chunk.N5S4GLSL.js → chunk.Q2HER5FV.js} +1 -1
- package/dist/chunks/{chunk.T76IYQBL.js → chunk.Q57J3TVM.js} +4 -4
- package/dist/chunks/{chunk.RNGW4CZW.js → chunk.QJHJRQNM.js} +12 -12
- package/dist/chunks/{chunk.PVSRXNRN.js → chunk.QTYSCQM6.js} +1 -1
- package/dist/chunks/{chunk.MUPD5QI2.js → chunk.R7F2GGWW.js} +6 -6
- package/dist/chunks/{chunk.5H3AACPC.js → chunk.R7R62MHJ.js} +1 -1
- package/dist/chunks/{chunk.24ERVPJP.js → chunk.RFTIZGPS.js} +1 -1
- package/dist/chunks/{chunk.FV3HGRYB.js → chunk.RMGRE6GT.js} +1 -1
- package/dist/chunks/{chunk.HOYC3ABS.js → chunk.RMTAS75H.js} +1 -1
- package/dist/chunks/{chunk.L3QCNRY4.js → chunk.RN3O4GQI.js} +2 -0
- package/dist/chunks/{chunk.NXUJIJLZ.js → chunk.S63AJHJ6.js} +1 -1
- package/dist/chunks/chunk.S7WPCN7K.js +778 -0
- package/dist/chunks/chunk.STL2JMRR.js +513 -0
- package/dist/chunks/{chunk.A7ED67JJ.js → chunk.SWUZUDLG.js} +1 -1
- package/dist/chunks/{chunk.EMWNKNKO.js → chunk.SYL7XFMD.js} +1 -1
- package/dist/chunks/{chunk.7SVNZTHD.js → chunk.TJB2CVGE.js} +4 -4
- package/dist/chunks/{chunk.MXI3U54M.js → chunk.TPGMOJAJ.js} +1 -1
- package/dist/chunks/{chunk.GEKPVTM6.js → chunk.U2GPEJKP.js} +253 -107
- package/dist/chunks/{chunk.4OEJ7XBG.js → chunk.UD63RHQ7.js} +1 -1
- package/dist/chunks/chunk.UESUCXOE.js +390 -0
- package/dist/chunks/{chunk.ZUVD4WKA.js → chunk.UFDYZHCD.js} +1 -1
- package/dist/chunks/{chunk.DZNHUSPW.js → chunk.UHNG7JUG.js} +9 -10
- package/dist/chunks/{chunk.6YYUKLC5.js → chunk.UIF7XF4C.js} +6 -6
- package/dist/chunks/chunk.UTGMGSPP.js +21 -0
- package/dist/chunks/{chunk.Z2MSBD4S.js → chunk.VEGINGYS.js} +1 -1
- package/dist/chunks/{chunk.25RKAQGE.js → chunk.VJ24NNA2.js} +1 -1
- package/dist/chunks/{chunk.S5PDNBWI.js → chunk.VPMGCXK5.js} +22 -13
- package/dist/chunks/{chunk.FFH55HPO.js → chunk.VQC4IVYQ.js} +1 -1
- package/dist/chunks/{chunk.OOG4GOOC.js → chunk.VWEWD4EW.js} +1 -1
- package/dist/chunks/{chunk.XSENGX5S.js → chunk.W4CW7B4I.js} +1 -1
- package/dist/chunks/{chunk.5ASTHFQ2.js → chunk.WB4ABGTR.js} +78 -0
- package/dist/chunks/chunk.WY7XHXY4.js +190 -0
- package/dist/chunks/{chunk.FL6RG6SH.js → chunk.XCHS7262.js} +5 -5
- package/dist/chunks/chunk.XMAPLUJM.js +586 -0
- package/dist/chunks/{chunk.MCTK54CJ.js → chunk.Y7TVVJ7B.js} +68 -4
- package/dist/chunks/chunk.YREYTPAK.js +1361 -0
- package/dist/chunks/{chunk.MNPXTFKZ.js → chunk.ZLS4TFIC.js} +12 -10
- package/dist/chunks/{chunk.LEJ5P2EK.js → chunk.ZTLRQIGN.js} +1 -1
- package/dist/chunks/chunk.ZWLPGCBY.js +196 -0
- package/dist/components/accordion/accordion.component.js +6 -6
- package/dist/components/accordion/accordion.js +7 -7
- package/dist/components/alert/alert.component.js +3 -3
- package/dist/components/alert/alert.js +4 -4
- package/dist/components/browse-variables/browse-variables.component.js +20 -20
- package/dist/components/browse-variables/browse-variables.controller.js +3 -3
- package/dist/components/browse-variables/browse-variables.js +21 -21
- package/dist/components/button/button.component.js +2 -2
- package/dist/components/button/button.js +3 -3
- package/dist/components/chip/chip.component.js +2 -2
- package/dist/components/chip/chip.js +3 -3
- package/dist/components/combobox/combobox.component.js +3 -3
- package/dist/components/combobox/combobox.js +4 -4
- package/dist/components/data-access/data-access.component.d.ts +58 -0
- package/dist/components/data-access/data-access.component.js +44 -0
- package/dist/components/data-access/data-access.controller.d.ts +41 -0
- package/dist/components/data-access/data-access.controller.js +11 -0
- package/dist/components/data-access/data-access.d.ts +8 -0
- package/dist/components/data-access/data-access.js +45 -0
- package/dist/components/data-access/data-access.styles.d.ts +4 -0
- package/dist/components/data-access/data-access.styles.js +7 -0
- package/dist/components/data-access/notebooks/data-access-notebook.d.ts +20 -0
- package/dist/components/data-access/notebooks/data-access-notebook.js +74 -0
- package/dist/components/data-rods/data-rods.component.js +38 -35
- package/dist/components/data-rods/data-rods.js +39 -36
- package/dist/components/data-subsetter/data-subsetter.component.d.ts +6 -1
- package/dist/components/data-subsetter/data-subsetter.component.js +37 -29
- package/dist/components/data-subsetter/data-subsetter.controller.js +4 -4
- package/dist/components/data-subsetter/data-subsetter.js +38 -30
- package/dist/components/data-subsetter/data-subsetter.styles.js +1 -1
- package/dist/components/data-subsetter/notebooks/subsetter-notebook.js +1 -1
- package/dist/components/data-subsetter-history/data-subsetter-history.component.js +40 -32
- package/dist/components/data-subsetter-history/data-subsetter-history.controller.js +2 -2
- package/dist/components/data-subsetter-history/data-subsetter-history.js +41 -33
- package/dist/components/date-picker/date-picker.component.d.ts +91 -21
- package/dist/components/date-picker/date-picker.component.js +6 -4
- package/dist/components/date-picker/date-picker.js +7 -5
- package/dist/components/date-picker/date-picker.styles.js +1 -1
- package/dist/components/date-range-slider/date-range-slider.component.js +4 -4
- package/dist/components/date-range-slider/date-range-slider.js +5 -5
- package/dist/components/dialog/dialog.component.js +2 -2
- package/dist/components/dialog/dialog.js +3 -3
- package/dist/components/icon/icon.component.js +4 -4
- package/dist/components/icon/icon.js +5 -5
- package/dist/components/input/input.component.d.ts +58 -0
- package/dist/components/input/input.component.js +11 -0
- package/dist/components/input/input.d.ts +8 -0
- package/dist/components/input/input.js +12 -0
- package/dist/components/input/input.styles.d.ts +2 -0
- package/dist/components/input/input.styles.js +7 -0
- package/dist/components/loader/loader.component.js +2 -2
- package/dist/components/loader/loader.js +3 -3
- package/dist/components/login/login.component.js +12 -12
- package/dist/components/login/login.js +13 -13
- package/dist/components/map/leaflet-utils.d.ts +2 -1
- package/dist/components/map/leaflet-utils.js +1 -1
- package/dist/components/map/map.component.js +4 -4
- package/dist/components/map/map.js +5 -5
- package/dist/components/plot/plot.component.d.ts +4 -0
- package/dist/components/plot/plot.component.js +2 -2
- package/dist/components/plot/plot.js +3 -3
- package/dist/components/plot-toolbar/notebooks/time-averaged-map-notebook.js +1 -1
- package/dist/components/plot-toolbar/notebooks/time-series-notebook.js +1 -1
- package/dist/components/plot-toolbar/plot-toolbar.component.js +17 -17
- package/dist/components/plot-toolbar/plot-toolbar.controller.js +3 -3
- package/dist/components/plot-toolbar/plot-toolbar.js +18 -18
- package/dist/components/skeleton/skeleton.component.d.ts +0 -4
- package/dist/components/skeleton/skeleton.component.js +3 -3
- package/dist/components/skeleton/skeleton.js +4 -4
- package/dist/components/skeleton/skeleton.styles.js +1 -1
- package/dist/components/slider/slider.component.d.ts +107 -0
- package/dist/components/slider/slider.component.js +12 -0
- package/dist/components/slider/slider.d.ts +8 -0
- package/dist/components/slider/slider.js +13 -0
- package/dist/components/slider/slider.styles.d.ts +2 -0
- package/dist/components/slider/slider.styles.js +7 -0
- package/dist/components/spatial-picker/spatial-picker.component.d.ts +8 -1
- package/dist/components/spatial-picker/spatial-picker.component.js +8 -6
- package/dist/components/spatial-picker/spatial-picker.js +9 -7
- package/dist/components/spatial-picker/spatial-picker.styles.js +1 -1
- package/dist/components/time-average-map/time-average-map.component.js +24 -23
- package/dist/components/time-average-map/time-average-map.controller.js +2 -2
- package/dist/components/time-average-map/time-average-map.js +25 -24
- package/dist/components/time-series/time-series.component.js +27 -26
- package/dist/components/time-series/time-series.controller.js +2 -2
- package/dist/components/time-series/time-series.js +28 -27
- package/dist/components/variable-combobox/variable-combobox.component.js +9 -9
- package/dist/components/variable-combobox/variable-combobox.js +10 -10
- package/dist/components/variable-keyword-search/variable-keyword-search.component.js +14 -14
- package/dist/components/variable-keyword-search/variable-keyword-search.controller.js +3 -3
- package/dist/components/variable-keyword-search/variable-keyword-search.js +15 -15
- package/dist/custom-elements.json +5733 -3796
- package/dist/data-services/types.d.ts +2 -0
- package/dist/events/events.d.ts +4 -0
- package/dist/events/terra-blur.d.ts +6 -0
- package/dist/events/terra-focus.d.ts +6 -0
- package/dist/events/terra-input.d.ts +6 -0
- package/dist/events/terra-slider-change.d.ts +11 -0
- package/dist/internal/terra-element.d.ts +9 -0
- package/dist/metadata-catalog/cmr-catalog.d.ts +5 -1
- package/dist/metadata-catalog/queries.d.ts +1 -0
- package/dist/metadata-catalog/types.d.ts +74 -0
- package/dist/metadata-catalog/utilities.d.ts +9 -1
- package/dist/react/accordion/index.js +7 -7
- package/dist/react/alert/index.js +4 -4
- package/dist/react/browse-variables/index.js +21 -21
- package/dist/react/button/index.js +3 -3
- package/dist/react/chip/index.js +3 -3
- package/dist/react/combobox/index.js +4 -4
- package/dist/react/data-access/index.d.ts +18 -0
- package/dist/react/data-access/index.js +45 -0
- package/dist/react/data-rods/index.js +39 -36
- package/dist/react/data-subsetter/index.js +38 -30
- package/dist/react/data-subsetter-history/index.js +41 -33
- package/dist/react/date-picker/index.d.ts +3 -1
- package/dist/react/date-picker/index.js +7 -5
- package/dist/react/date-range-slider/index.js +5 -5
- package/dist/react/dialog/index.js +3 -3
- package/dist/react/icon/index.js +5 -5
- package/dist/react/index.d.ts +9 -6
- package/dist/react/index.js +129 -109
- package/dist/react/input/index.d.ts +36 -0
- package/dist/react/input/index.js +12 -0
- package/dist/react/loader/index.js +3 -3
- package/dist/react/login/index.js +13 -13
- package/dist/react/map/index.js +5 -5
- package/dist/react/plot/index.js +3 -3
- package/dist/react/plot-toolbar/index.js +18 -18
- package/dist/react/skeleton/index.js +4 -4
- package/dist/react/slider/index.d.ts +3 -0
- package/dist/react/slider/index.js +13 -0
- package/dist/react/spatial-picker/index.js +9 -7
- package/dist/react/time-average-map/index.js +25 -24
- package/dist/react/time-series/index.js +28 -27
- package/dist/react/variable-combobox/index.js +10 -10
- package/dist/react/variable-keyword-search/index.js +15 -15
- package/dist/terra-ui-components.d.ts +3 -0
- package/dist/terra-ui-components.js +128 -108
- package/dist/{terra_ui_components-0.0.107-py3-none-any.whl → terra_ui_components-0.0.109-py3-none-any.whl} +0 -0
- package/dist/{terra_ui_components-0.0.107.tar.gz → terra_ui_components-0.0.109.tar.gz} +0 -0
- package/dist/themes/horizon.css +2 -2
- package/dist/themes/horizon.styles.js +2 -2
- package/dist/types/vue/index.d.ts +395 -201
- package/dist/vscode.html-custom-data.json +416 -266
- package/dist/web-types.json +929 -594
- package/package.json +3 -7
- package/cdn/chunks/chunk.3ZP27DIE.js +0 -57
- package/cdn/chunks/chunk.5O2H4A7R.js +0 -30
- package/cdn/chunks/chunk.BIDFT3EF.js +0 -10
- package/cdn/chunks/chunk.JPGP4RDG.js +0 -107
- package/cdn/chunks/chunk.SEOPS7OZ.js +0 -97
- package/cdn/chunks/chunk.YOVCJ3TE.js +0 -4030
- package/dist/chunks/chunk.4ZVIU4Q2.js +0 -44
- package/dist/chunks/chunk.G6SMK5II.js +0 -19
- package/dist/chunks/chunk.HTPZCN5Y.js +0 -207
- package/dist/chunks/chunk.XZB6CNAL.js +0 -96
- package/dist/chunks/chunk.YBSANUUP.js +0 -82
- package/cdn/chunks/{GeoTIFF.4QEQWAOC.js → GeoTIFF.HAUB3R6L.js} +0 -0
- package/cdn/chunks/{chunk.CO2YMLBX.js → chunk.6LTX6DHB.js} +4 -4
- package/cdn/chunks/{chunk.G4NSLCSU.js → chunk.AQTYPOFV.js} +5 -5
- package/cdn/chunks/{chunk.6XU5F5VM.js → chunk.VYYORGMV.js} +3 -3
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Python script for downloading data from the NASA CMR API
|
|
4
|
+
|
|
5
|
+
Requirements:
|
|
6
|
+
> pip install tqdm
|
|
7
|
+
|
|
8
|
+
To run the script: `python download_data_{{short_name}}_{{version}}_{{date}}.py`
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import os
|
|
12
|
+
import requests
|
|
13
|
+
from tqdm import tqdm
|
|
14
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
15
|
+
|
|
16
|
+
CMR_BASE_URL = "https://cmr.earthdata.nasa.gov"
|
|
17
|
+
|
|
18
|
+
SHORT_NAME = "{{short_name}}"
|
|
19
|
+
VERSION = "{{version}}"
|
|
20
|
+
FILTER_TEMPORAL = "{{filter_temporal}}"
|
|
21
|
+
FILTER_BBOX = "{{filter_bbox}}"
|
|
22
|
+
FILTER_SEARCH = "{{filter_search}}"
|
|
23
|
+
FILTER_CLOUD_COVER_MIN = "{{filter_cloud_cover_min}}"
|
|
24
|
+
FILTER_CLOUD_COVER_MAX = "{{filter_cloud_cover_max}}"
|
|
25
|
+
DOWNLOAD_DIR = f"./{SHORT_NAME}_{VERSION}"
|
|
26
|
+
MAX_WORKERS = 5 # Number of parallel downloads
|
|
27
|
+
|
|
28
|
+
os.makedirs(DOWNLOAD_DIR, exist_ok=True)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def query_cmr_granules(
|
|
32
|
+
short_name: str,
|
|
33
|
+
version: str,
|
|
34
|
+
page_size: int = 2000,
|
|
35
|
+
search_after: str | None = None,
|
|
36
|
+
**extra_params,
|
|
37
|
+
):
|
|
38
|
+
"""
|
|
39
|
+
Queries the CMR granules endpoint.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
short_name: The short name of the collection
|
|
43
|
+
version: The version of the collection
|
|
44
|
+
page_size: The number of results per page (max is 2000)
|
|
45
|
+
search_after: The pagination token for subsequent requests (optional, see https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after for more details)
|
|
46
|
+
**extra_params: Additional query parameters (e.g., temporal, bounding_box, etc.)
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
tuple: (response object, list of granule items)
|
|
50
|
+
"""
|
|
51
|
+
url = f"{CMR_BASE_URL}/search/granules.umm_json"
|
|
52
|
+
|
|
53
|
+
params = {
|
|
54
|
+
"short_name": short_name,
|
|
55
|
+
"version": version,
|
|
56
|
+
"page_size": page_size,
|
|
57
|
+
**extra_params, # Merge any additional parameters
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
headers = {"Accept": "application/json"}
|
|
61
|
+
if search_after:
|
|
62
|
+
headers["CMR-Search-After"] = search_after
|
|
63
|
+
|
|
64
|
+
response = requests.get(url, params=params, headers=headers)
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
response.raise_for_status()
|
|
68
|
+
except requests.exceptions.HTTPError:
|
|
69
|
+
print("Failed to fetch granules:", response.text)
|
|
70
|
+
raise
|
|
71
|
+
|
|
72
|
+
data = response.json()
|
|
73
|
+
items = data.get("items", [])
|
|
74
|
+
|
|
75
|
+
return response, items
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def download_data_from_cmr(
|
|
79
|
+
short_name: str, version: str, total_granules: int, page_size: int = 2000, **params
|
|
80
|
+
):
|
|
81
|
+
"""Fetches granules for a given collection from the CMR API, then downloads the data from the "GET DATA" URLs"""
|
|
82
|
+
search_after_value: str | None = None
|
|
83
|
+
all_download_urls = []
|
|
84
|
+
granules_without_urls = 0
|
|
85
|
+
|
|
86
|
+
# First pass: collect all download URLs
|
|
87
|
+
print("Collecting download URLs...")
|
|
88
|
+
with tqdm(total=total_granules, desc="Collecting URLs", unit="granule") as pbar:
|
|
89
|
+
while True:
|
|
90
|
+
# Use shared query function
|
|
91
|
+
response, items = query_cmr_granules(
|
|
92
|
+
short_name, version, page_size, search_after_value, **params
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Collect "GET DATA" URLs
|
|
96
|
+
for item in items:
|
|
97
|
+
pbar.update(1) # Update progress for each granule processed
|
|
98
|
+
download_urls = []
|
|
99
|
+
for related_url in item.get("umm", {}).get("RelatedUrls", []):
|
|
100
|
+
if related_url.get("Type") == "GET DATA":
|
|
101
|
+
download_urls.append(related_url.get("URL"))
|
|
102
|
+
|
|
103
|
+
if download_urls:
|
|
104
|
+
all_download_urls.extend(download_urls)
|
|
105
|
+
else:
|
|
106
|
+
granules_without_urls += 1
|
|
107
|
+
|
|
108
|
+
# Read the next search-after value from response headers
|
|
109
|
+
search_after_value = response.headers.get("CMR-Search-After")
|
|
110
|
+
|
|
111
|
+
# There is no next search-after value, we've reached the end
|
|
112
|
+
if not search_after_value:
|
|
113
|
+
break
|
|
114
|
+
|
|
115
|
+
print(f"Found {len(all_download_urls)} files to download")
|
|
116
|
+
if granules_without_urls > 0:
|
|
117
|
+
print(f"⚠️ {granules_without_urls} granules have no download URLs")
|
|
118
|
+
|
|
119
|
+
# Second pass: download all files in parallel
|
|
120
|
+
downloaded_count = 0
|
|
121
|
+
skipped_count = 0
|
|
122
|
+
failed_count = 0
|
|
123
|
+
|
|
124
|
+
with tqdm(total=len(all_download_urls), desc="Downloading files", unit="file") as pbar:
|
|
125
|
+
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
|
|
126
|
+
# Submit all download tasks at once
|
|
127
|
+
future_to_url = {executor.submit(download_file, url): url for url in all_download_urls}
|
|
128
|
+
|
|
129
|
+
# Process completed downloads as they finish
|
|
130
|
+
for future in as_completed(future_to_url):
|
|
131
|
+
status, filename = future.result()
|
|
132
|
+
if status == "success":
|
|
133
|
+
downloaded_count += 1
|
|
134
|
+
pbar.set_description(f"Downloaded: {filename}")
|
|
135
|
+
elif status == "skipped":
|
|
136
|
+
skipped_count += 1
|
|
137
|
+
pbar.set_description(f"Skipped: {filename}")
|
|
138
|
+
else: # failed
|
|
139
|
+
failed_count += 1
|
|
140
|
+
print(f"Failed: {filename}")
|
|
141
|
+
|
|
142
|
+
pbar.update(1)
|
|
143
|
+
|
|
144
|
+
print(f"Downloaded: {downloaded_count} files")
|
|
145
|
+
if skipped_count > 0:
|
|
146
|
+
print(f"Skipped: {skipped_count} files (already exist)")
|
|
147
|
+
if failed_count > 0:
|
|
148
|
+
print(f"Failed: {failed_count} files")
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def download_file(url: str):
|
|
152
|
+
"""Download a single file and return (success, skipped, failed) status and filename"""
|
|
153
|
+
local_filename = os.path.join(DOWNLOAD_DIR, os.path.basename(url))
|
|
154
|
+
if os.path.exists(local_filename):
|
|
155
|
+
return "skipped", os.path.basename(url) # skip existing
|
|
156
|
+
|
|
157
|
+
try:
|
|
158
|
+
with requests.get(url, stream=True, timeout=120) as r:
|
|
159
|
+
r.raise_for_status()
|
|
160
|
+
with open(local_filename, "wb") as f:
|
|
161
|
+
for chunk in r.iter_content(8192):
|
|
162
|
+
f.write(chunk)
|
|
163
|
+
return "success", os.path.basename(url)
|
|
164
|
+
except Exception as e:
|
|
165
|
+
print(f"⚠️ Error downloading {os.path.basename(url)}: {e}")
|
|
166
|
+
return "failed", os.path.basename(url)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def fetch_total_granules_count_from_cmr(short_name: str, version: str, **params):
|
|
170
|
+
"""Fetches the total number of granules for a given collection and filters from the CMR API"""
|
|
171
|
+
response, _ = query_cmr_granules(short_name, version, page_size=1, **params)
|
|
172
|
+
data = response.json()
|
|
173
|
+
return data.get("hits", 0)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def main():
|
|
177
|
+
"""Main function to download data from the CMR API"""
|
|
178
|
+
filter_params = {}
|
|
179
|
+
|
|
180
|
+
if FILTER_TEMPORAL:
|
|
181
|
+
filter_params["temporal"] = FILTER_TEMPORAL
|
|
182
|
+
|
|
183
|
+
if FILTER_BBOX:
|
|
184
|
+
filter_params["bounding_box"] = FILTER_BBOX
|
|
185
|
+
|
|
186
|
+
if FILTER_SEARCH:
|
|
187
|
+
filter_params["producer_granule_id[]"] = FILTER_SEARCH
|
|
188
|
+
filter_params["options[producer_granule_id][pattern]"] = 'true'
|
|
189
|
+
|
|
190
|
+
if FILTER_CLOUD_COVER_MIN and FILTER_CLOUD_COVER_MAX:
|
|
191
|
+
filter_params["cloud_cover"] = f"{FILTER_CLOUD_COVER_MIN},{FILTER_CLOUD_COVER_MAX}"
|
|
192
|
+
|
|
193
|
+
total_granules = fetch_total_granules_count_from_cmr(
|
|
194
|
+
SHORT_NAME, VERSION, **filter_params
|
|
195
|
+
)
|
|
196
|
+
print(f"Total granules: {total_granules:,}")
|
|
197
|
+
|
|
198
|
+
download_data_from_cmr(SHORT_NAME, VERSION, total_granules, **filter_params)
|
|
199
|
+
|
|
200
|
+
print("✅ All downloads complete.")
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
if __name__ == "__main__":
|
|
204
|
+
main()
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getVariableEntryId
|
|
3
|
+
} from "./chunk.V6GUDCWA.js";
|
|
4
|
+
import {
|
|
5
|
+
GiovanniVariableCatalog
|
|
6
|
+
} from "./chunk.7A6NO75T.js";
|
|
7
|
+
import {
|
|
8
|
+
h
|
|
9
|
+
} from "./chunk.CTTYXXNL.js";
|
|
10
|
+
import {
|
|
11
|
+
init_buffer,
|
|
12
|
+
init_dirname,
|
|
13
|
+
init_process
|
|
14
|
+
} from "./chunk.HBV76IJU.js";
|
|
15
|
+
|
|
16
|
+
// src/metadata-catalog/tasks.ts
|
|
17
|
+
init_dirname();
|
|
18
|
+
init_buffer();
|
|
19
|
+
init_process();
|
|
20
|
+
var variableCache = /* @__PURE__ */ new Map();
|
|
21
|
+
var pendingRequests = /* @__PURE__ */ new Map();
|
|
22
|
+
function setHostPropertiesFromVariable(host, variable, variableEntryId) {
|
|
23
|
+
var _a, _b, _c, _d;
|
|
24
|
+
host.startDate = (_b = host.startDate) != null ? _b : (_a = variable.exampleInitialStartDate) == null ? void 0 : _a.toISOString();
|
|
25
|
+
host.endDate = (_d = host.endDate) != null ? _d : (_c = variable.exampleInitialEndDate) == null ? void 0 : _c.toISOString();
|
|
26
|
+
host.catalogVariable = variable;
|
|
27
|
+
host.variableEntryId = variableEntryId;
|
|
28
|
+
}
|
|
29
|
+
function getFetchVariableTask(host, autoRun = true) {
|
|
30
|
+
const catalog = new GiovanniVariableCatalog();
|
|
31
|
+
return new h(host, {
|
|
32
|
+
task: async (_args) => {
|
|
33
|
+
const variableEntryId = getVariableEntryId(host);
|
|
34
|
+
console.debug("Fetch variable ", variableEntryId);
|
|
35
|
+
if (!variableEntryId) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (variableCache.has(variableEntryId)) {
|
|
39
|
+
console.debug("Using cached variable ", variableEntryId);
|
|
40
|
+
const cachedVariable = variableCache.get(variableEntryId);
|
|
41
|
+
setHostPropertiesFromVariable(host, cachedVariable, variableEntryId);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (pendingRequests.has(variableEntryId)) {
|
|
45
|
+
console.debug(
|
|
46
|
+
"Waiting for pending request for variable ",
|
|
47
|
+
variableEntryId
|
|
48
|
+
);
|
|
49
|
+
const variable = await pendingRequests.get(variableEntryId);
|
|
50
|
+
if (variable) {
|
|
51
|
+
console.debug("Using cached variable ", variableEntryId);
|
|
52
|
+
setHostPropertiesFromVariable(host, variable, variableEntryId);
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const requestPromise = catalog.getVariable(variableEntryId);
|
|
57
|
+
pendingRequests.set(variableEntryId, requestPromise);
|
|
58
|
+
try {
|
|
59
|
+
const variable = await requestPromise;
|
|
60
|
+
console.debug("Found variable ", variable);
|
|
61
|
+
if (!variable) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
variableCache.set(variableEntryId, variable);
|
|
65
|
+
setHostPropertiesFromVariable(host, variable, variableEntryId);
|
|
66
|
+
} finally {
|
|
67
|
+
pendingRequests.delete(variableEntryId);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
args: () => [host.variableEntryId, host.collection, host.variable],
|
|
71
|
+
autoRun
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export {
|
|
76
|
+
getFetchVariableTask
|
|
77
|
+
};
|