diff --git a/AI_POLICY.md b/AI_POLICY.md new file mode 100644 index 000000000..ae70f6b3d --- /dev/null +++ b/AI_POLICY.md @@ -0,0 +1,45 @@ +# AI Usage Policy + +The argopy developing team has set some rules for generative AI usage. These rules are not definitive and may be updated in the future. + +- **All generative AI usage in any form must be disclosed.** If AI was used to generate a significant portion of your contribution (beyond simple autocomplete), we ask that you **disclose it** within the code or PR description. You must state the tool you used along with a sentence saying that the work was AI-assisted. + +- **Pull requests and issues created by AI are forbidden.** + If AI isn't disclosed but a maintainer suspects its use within a PR or issue **creation**, the PR will be closed. AI assistance can be used for discussions inside PR or issues, but must always be supervized and reviewed by a human eye before submission. + +- **Media.** + Text and code are the only acceptable AI-generated content, per the + other rules in this policy. + +These rules apply to all contributors, including maintainers. + +## Human Accountability + +**The human contributor is 100% responsible for the contribution.** + +If you submit a Pull Request that includes AI-generated code, documentation, or +comments: + +- You must **fully understand** the code you submit, and the context in which it is included inside the global project or **Argopy**. +- You must be able to explain the "**why**" behind the implementation during the + review process. +- You are responsible for the long-term maintenance of that code. + +## The people + +Please keep in mind that **Argopy** is developed and maintained by humans being. + +It is for us a fundamental aspect of the project that discussions (in issues or PR), even if happenning on github, are made between humans. Knowing this, it will be considered impolite to approach the **Argopy** dev community with AI-agent. + +## Ethics, Ecology & Expertise + +For more than 20 years, the Argo program has been a key element in the observation and understanding of climate change and its impact on the ocean. Argo is incremental in monitoring how the human-driven climate change negatively impact the ocean state and marine life ([check the IPCC special report on ocean](https://www.ipcc.ch/srocc/) or [that brief overview also from the IPCC](https://www.ipcc.ch/report/ar6/wg1/downloads/factsheets/IPCC_AR6_WGI_Sectoral_Fact_Sheet_Marine_Ecosystems_Fisheries.pdf)). So, it is of primary and inherent concern to Argo to limit its environmental footprint. + +We like to think that **Argopy** is part of the Argo ecosystem. + +As sustainable software developers, the **Argopy** team aims to better understand the generative AI’s environmental impact, following our preliminary work in [monitoring the carbon footprint of maintaining and developing **Argopy**](https://argopy.readthedocs.io/en/latest/energy.html). But very little information are available on the generative AI’s environmental impact and "current GAI models are deployed mainly in carbon-intensive regions" ([Ding et al, 2025](https://doi.org/10.1016/j.xinn.2025.100866)). + +With that, 2 things to keep in mind when contributing to the development of **Argopy** : + +- **Ethics & Ecology** : Not knowing the - presumably very large - impact of generative AI on CO2 emissions (and use of limited Earth resources), it is important to us that we adopt a conservative and limited approach regarding GAI usage in contributing to **Argopy** in order to limit its environmental footprint. +- **Expertise** : **Argopy**, as part of a public research infrastructure, has more duty in developing/preserving a technical and scientific expertise for the public good, than participating in a blind race to productivity gain (in the [social acceleration sense](https://en.wikipedia.org/wiki/Social_acceleration), an argument echoing the [slow science](https://en.wikipedia.org/wiki/Slow_science) approach at work within **Argopy**). It is thus also important to us that we adopt a conservative and limited approach regarding GAI usage in contributing to **Argopy** to preserve a good level of human expertise regarding the produced code and our associated ability to disseminate our expertise to the end-users. diff --git a/argopy/data_fetchers/erddap_data.py b/argopy/data_fetchers/erddap_data.py index 0e924c3c7..0cc75bed3 100644 --- a/argopy/data_fetchers/erddap_data.py +++ b/argopy/data_fetchers/erddap_data.py @@ -29,7 +29,6 @@ from .proto import ArgoDataFetcherProto from .erddap_data_processors import pre_process - log = logging.getLogger("argopy.erddap.data") access_points = ["wmo", "box"] @@ -49,6 +48,7 @@ class ErddapArgoDataFetcher(ArgoDataFetcherProto): This class is a prototype not meant to be instantiated directly """ + data_source = "erddap" ### @@ -147,8 +147,8 @@ def __init__( # noqa: C901 self.fs = kwargs["fs"] if "fs" in kwargs else httpstore(**self.store_opts) self.parallelize, self.parallel_method = PARALLEL_SETUP(parallel) - if self.parallelize and self.parallel_method == 'thread': - self.parallel_method = 'erddap' # Use our custom filestore + if self.parallelize and self.parallel_method == "thread": + self.parallel_method = "erddap" # Use our custom filestore self.progress = progress self.chunks = chunks self.chunks_maxsize = chunks_maxsize @@ -239,6 +239,17 @@ def __init__( # noqa: C901 % (v, ", ".join(self._bgc_vlist_avail)) ) + if ( + self._bgc_vlist_params is not None + and self._bgc_vlist_measured is not None + ): + for v in self._bgc_vlist_measured: + if v not in self._bgc_vlist_params: + raise ValueError( + "'%s' can't be in the 'measured' list if it is not in the 'params' list. Please check your arguments." + % v + ) + def __repr__(self): summary = [""] summary.append(self._repr_data_source) @@ -359,7 +370,7 @@ def _minimal_vlist(self): ] [vlist.append(p) for p in plist] - # Core/Deep variables: + # BGC/Core/Deep variables: plist = [p.lower() for p in list_core_parameters()] [vlist.append(p) for p in plist] [vlist.append(p + "_qc") for p in plist] @@ -521,7 +532,9 @@ def getNfromncHeader(url): if "Your query produced no matching results. (nRows = 0)" in ncHeader: return 0 else: - lines = [line for line in ncHeader.splitlines() if "row = " in line][0] + lines = [ + line for line in ncHeader.splitlines() if "row = " in line + ][0] return int(lines.split("=")[1].split(";")[0]) except Exception: raise ErddapServerError( @@ -944,6 +957,6 @@ def uri(self): except DataNotFound: log.debug("This box fetcher will contain no data") except ValueError as e: - if 'not available for this access point' in str(e): + if "not available for this access point" in str(e): log.debug("This box fetcher does not contained required data") return urls diff --git a/argopy/data_fetchers/gdac_data.py b/argopy/data_fetchers/gdac_data.py index 059cee2f7..b5fe45b0a 100644 --- a/argopy/data_fetchers/gdac_data.py +++ b/argopy/data_fetchers/gdac_data.py @@ -9,6 +9,7 @@ import pandas as pd import xarray as xr from abc import abstractmethod +from typing import Union import warnings import getpass import logging @@ -16,6 +17,8 @@ from ..utils.format import argo_split_path from ..options import OPTIONS, check_gdac_option, PARALLEL_SETUP +from ..utils.lists import list_bgc_s_variables, list_core_parameters +from ..utils import is_list_of_strings, to_list from ..errors import DataNotFound from ..stores import ArgoIndex, has_distributed, distributed from .proto import ArgoDataFetcherProto @@ -64,6 +67,8 @@ def __init__( dimension: Literal["point", "profile"] = "point", errors: str = "raise", api_timeout: int = 0, + params: Union[str, list] = "all", + measured: Union[str, list] = None, **kwargs ): """Init fetcher @@ -94,6 +99,14 @@ def __init__( Show a progress bar or not when fetching data. api_timeout: int (optional) Server request time out in seconds. Set to OPTIONS['api_timeout'] by default. + params: Union[str, list] (optional, default='all') + List of BGC essential variables to retrieve, i.e. that will be in the output :class:`xr.DataSet``. + By default, this is set to ``all``, i.e. any variable found in at least of the profile in the data + selection will be included in the output. + measured: Union[str, list] (optional, default=None) + List of BGC essential variables that can't be NaN. If set to 'all', this is an easy way to reduce the size of the + :class:`xr.DataSet`` to points where all variables have been measured. Otherwise, provide a simple list of + variables. Other parameters ---------------- @@ -108,6 +121,8 @@ def __init__( self.errors = errors self.dimension = dimension + self.init(**kwargs) + # Validate server, raise GdacPathError if not valid. check_gdac_option(self.server, errors="raise") @@ -123,8 +138,81 @@ def __init__( cachedir=cachedir, timeout=self.timeout, ) + self.fs = self.indexfs.fs["src"] # Reuse the appropriate file system + if self.dataset_id in ["bgc", "bgc-s"]: + self._bgc_vlist_gdac = [v.lower() for v in list_bgc_s_variables()] + # Handle the 'params' argument: + self._bgc_params = to_list(params) + if isinstance(params, str): + if params == "all": + params = self._bgc_vlist_avail + else: + params = to_list(params) + elif params is None: + raise ValueError() + elif params[0] == "all": + params = self._bgc_vlist_avail + elif not is_list_of_strings(params): + raise ValueError("'params' argument must be a list of strings") + # raise ValueError("'params' argument must be a list of strings (possibly with a * wildcard)") + self._bgc_vlist_params = [p.upper() for p in params] + # self._bgc_vlist_params = self._bgc_handle_wildcard(self._bgc_vlist_params) + + for v in self._bgc_vlist_params: + if v not in self._bgc_vlist_avail: + raise ValueError( + "'%s' not available for this access point. The 'params' argument must have values in [%s]" + % (v, ",".join(self._bgc_vlist_avail)) + ) + + for p in list_core_parameters(): + if p not in self._bgc_vlist_params: + self._bgc_vlist_params.append(p) + + if ( + self.user_mode in ["standard", "research"] + and "CDOM" in self._bgc_vlist_params + ): + self._bgc_vlist_params.remove("CDOM") + log.warning( + "CDOM was requested but was removed from the fetcher because executed in '%s' user mode" + % self.user_mode + ) + + # Handle the 'measured' criteria for BGC requests: + self._bgc_measured = to_list(measured) + if isinstance(measured, str): + if measured == "all": + measured = self._bgc_vlist_params + else: + measured = to_list(measured) + elif self._bgc_measured[0] is None: + measured = [] + elif self._bgc_measured[0] == "all": + measured = self._bgc_vlist_params + elif not is_list_of_strings(self._bgc_measured): + raise ValueError("'measured' argument must be a list of strings") + # raise ValueError("'measured' argument must be a list of strings (possibly with a * wildcard)") + self._bgc_vlist_measured = [m.upper() for m in measured] + # self._bgc_vlist_measured = self._bgc_handle_wildcard(self._bgc_vlist_measured) + + for v in self._bgc_vlist_measured: + if v not in self._bgc_vlist_avail: + raise ValueError( + "'%s' not available for this access point. The 'measured' argument must have values in [%s]" + % (v, ", ".join(self._bgc_vlist_avail)) + ) + + if self._bgc_vlist_params is not None and self._bgc_vlist_measured is not None: + for v in self._bgc_vlist_measured: + if v not in self._bgc_vlist_params: + raise ValueError( + "'%s' can't be in the 'measured' list if it is not in the 'params' list. Please check your arguments." + % v + ) + nrows = None if "N_RECORDS" in kwargs: nrows = kwargs["N_RECORDS"] @@ -136,13 +224,16 @@ def __init__( self.parallelize, self.parallel_method = PARALLEL_SETUP(parallel) self.progress = progress - self.init(**kwargs) - def __repr__(self): summary = [""] summary.append(self._repr_data_source) summary.append(self._repr_access_point) summary.append(self._repr_server) + if self.dataset_id in ["bgc", "bgc-s"]: + summary.append("📗 Parameters: %s" % self._bgc_vlist_params) + summary.append( + "📕 BGC 'must be measured' parameters: %s" % self._bgc_vlist_measured + ) if hasattr(self.indexfs, "index"): summary.append( "📗 Index: %s (%i records)" % (self.indexfs.index_file, self.N_RECORDS) @@ -227,6 +318,117 @@ def mono2multi(mono_path): new_uri = list(set(new_uri)) return new_uri + @property + def _bgc_vlist_avail(self): + """Return the list of the gdac BGC dataset available for this access point + + Apply search criteria in the index, then retrieve the list of parameters + """ + if hasattr(self, "WMO"): + if hasattr(self, "CYC") and self.CYC is not None: + self.indexfs.query.wmo_cyc(self.WMO, self.CYC) + else: + self.indexfs.query.wmo(self.WMO) + elif hasattr(self, "BOX"): + if len(self.indexBOX) == 4: + self.indexfs.query.lon_lat(self.indexBOX) + else: + self.indexfs.query.box(self.indexBOX) + + params = self.indexfs.read_params() + + results = [] + for p in params: + if p.lower() in self._bgc_vlist_gdac: + results.append(p) + # else: + # log.error( + # "Removed '%s' because it is not available on the erddap server (%s), but it should !" + # % (p, self._server) + # ) + + return results + + @property + def _minimal_vlist(self): + """Return the list of variables to retrieve measurements for""" + vlist = list() + if self.dataset_id == "phy": + plist = [ + "data_mode", + "latitude", + "longitude", + "position_qc", + "time", + "time_qc", + "direction", + "platform_number", + "cycle_number", + "config_mission_number", + "vertical_sampling_scheme", + ] + [vlist.append(p) for p in plist] + + # BGC/Core/Deep variables: + plist = [p.lower() for p in list_core_parameters()] + [vlist.append(p) for p in plist] + [vlist.append(p + "_qc") for p in plist] + [vlist.append(p + "_adjusted") for p in plist] + [vlist.append(p + "_adjusted_qc") for p in plist] + [vlist.append(p + "_adjusted_error") for p in plist] + + if self.dataset_id in ["bgc", "bgc-s"]: + plist = [ + # "parameter_data_mode", # never !!! + "latitude", + "longitude", + "position_qc", + "time", + "time_qc", + "direction", + "platform_number", + "cycle_number", + "config_mission_number", + ] + [vlist.append(p) for p in plist] + + # Search in the profile index the list of parameters to load: + params = self._bgc_vlist_params # rq: include 'core' variables + # log.debug("erddap-bgc parameters to load: %s" % params) + + for p in params: + vname = p.lower() + if self.user_mode in ["expert"]: + vlist.append("%s" % vname) + vlist.append("%s_qc" % vname) + vlist.append("%s_adjusted" % vname) + vlist.append("%s_adjusted_qc" % vname) + vlist.append("%s_adjusted_error" % vname) + + elif self.user_mode in ["standard"]: + vlist.append("%s" % vname) + vlist.append("%s_qc" % vname) + vlist.append("%s_adjusted" % vname) + vlist.append("%s_adjusted_qc" % vname) + vlist.append("%s_adjusted_error" % vname) + + elif self.user_mode in ["research"]: + vlist.append("%s_adjusted" % vname) + vlist.append("%s_adjusted_qc" % vname) + vlist.append("%s_adjusted_error" % vname) + + # vlist.append("profile_%s_qc" % vname) # not in the database + + if self.dataset_id == "ref": + plist = ["latitude", "longitude", "time", "platform_number", "cycle_number"] + [vlist.append(p) for p in plist] + plist = ["pres", "temp", "psal", "ptmp"] + [vlist.append(p) for p in plist] + + vlist.sort() + vlist = [p.upper() for p in vlist] + return vlist + @property def cachepath(self): """Return path to cache file(s) for this request @@ -298,6 +500,8 @@ def to_xarray( "access_point_opts": access_point_opts, "pre_filter_points": self._post_filter_points, "dimension": dimension, + "params_list": self._minimal_vlist, + "measured_params": self._bgc_vlist_measured if self.dataset_id in ["bgc", "bgc-s"] else None, } # Download and pre-process data: @@ -309,6 +513,10 @@ def to_xarray( "preprocess": pre_process_multiprof, "preprocess_opts": preprocess_opts, } + # ATTEMPT TO HANDLE BGC PARAMS SELECTION FOR GDAC + if self.dataset_id in ["bgc", "bgc-s"]: + opts["data_vars"] = self._bgc_vlist_params + if self.parallel_method in ["thread"]: opts["method"] = "thread" opts["open_dataset_opts"] = {"xr_opts": {"engine": "argo"}} diff --git a/argopy/data_fetchers/gdac_data_processors.py b/argopy/data_fetchers/gdac_data_processors.py index 792ef5d24..114361484 100644 --- a/argopy/data_fetchers/gdac_data_processors.py +++ b/argopy/data_fetchers/gdac_data_processors.py @@ -3,7 +3,6 @@ from typing import Literal import logging - log = logging.getLogger("argopy.gdac.data") @@ -11,8 +10,10 @@ def pre_process_multiprof( ds: xr.Dataset, access_point: str, access_point_opts: {}, + params_list: list = None, + measured_params: list = None, pre_filter_points: bool = False, - dimension: Literal['point', 'profile'] = 'point', + dimension: Literal["point", "profile"] = "point", # dataset_id: str = "phy", # cname: str = '?', ) -> xr.Dataset: @@ -48,7 +49,7 @@ def pre_process_multiprof( # ds = ds.assign_coords(N_PROF=np.arange(0, len(ds["N_PROF"]))) ds = ds.reset_coords() coords = ("LATITUDE", "LONGITUDE", "TIME", "N_PROF") - ds = ds.assign_coords({'N_PROF': np.arange(0, len(ds['N_PROF']))}) + ds = ds.assign_coords({"N_PROF": np.arange(0, len(ds["N_PROF"]))}) ds = ds.set_coords(coords) # Cast data types: @@ -65,7 +66,7 @@ def pre_process_multiprof( if len(list(ds[v].dims)) == 0: ds = ds.drop_vars(v) - if dimension == 'point': + if dimension == "point": ds = ( ds.argo.profile2point() ) # Default output is a collection of points, along N_POINTS @@ -75,6 +76,50 @@ def pre_process_multiprof( if pre_filter_points: ds = filter_points(ds, access_point=access_point, **access_point_opts) + # keep only requested params if specified (for bgc datasets) + if params_list is not None: + params_list = [p for p in params_list if p in ds.data_vars] + ds = ds[params_list] + + # Apply the 'measured' criteria for BGC requests: + if measured_params is not None: + ds = filter_measured(ds, measured_params=measured_params) + + return ds + + +def filter_measured(ds: xr.Dataset, measured_params: list = None) -> xr.Dataset: + """Re-enforce the 'measured' criteria for BGC requests + + Parameters + ---------- + ds: :class:`xr.Dataset` + + """ + # Enforce the 'measured' argument for BGC: + if len(measured_params) == 0: + return ds + elif len(ds["N_POINTS"]) > 0: + log.debug("Keep only samples without NaN in %s" % measured_params) + for v in measured_params: + this_mask = None + if v in ds and "%s_ADJUSTED" % v in ds: + this_mask = np.logical_or.reduce( + (ds[v].notnull(), ds["%s_ADJUSTED" % v].notnull()) + ) + elif v in ds: + this_mask = ds[v].notnull() + elif "%s_ADJUSTED" % v in ds: + this_mask = ds["%s_ADJUSTED" % v].notnull() + else: + log.debug( + "'%s' or '%s_ADJUSTED' not in the dataset to apply the 'filter_measured' method" + % (v, v) + ) + if this_mask is not None: + ds = ds.loc[dict(N_POINTS=this_mask)] + + ds["N_POINTS"] = np.arange(0, len(ds["N_POINTS"])) return ds @@ -86,8 +131,8 @@ def filter_points(ds: xr.Dataset, access_point: str = None, **kwargs) -> xr.Data """ dim = "N_PROF" if "N_PROF" in ds.dims else "N_POINTS" ds = ds.assign_coords({dim: np.arange(0, len(ds[dim]))}) - if 'N_LEVELS' in ds.dims: - ds = ds.assign_coords({'N_LEVELS': np.arange(0, len(ds['N_LEVELS']))}) + if "N_LEVELS" in ds.dims: + ds = ds.assign_coords({"N_LEVELS": np.arange(0, len(ds["N_LEVELS"]))}) if access_point == "BOX": BOX = kwargs["BOX"] diff --git a/argopy/related/utils.py b/argopy/related/utils.py index d599cd841..55bbdf3e3 100644 --- a/argopy/related/utils.py +++ b/argopy/related/utils.py @@ -1,9 +1,6 @@ import importlib -import os -import json import logging -from argopy.reference import ArgoNVSReferenceTables - +from argopy.reference import ArgoReferenceTable log = logging.getLogger("argopy.related.utils") path2assets = importlib.util.find_spec( @@ -13,37 +10,15 @@ def load_dict(ptype): if ptype == "profilers": - try: - nvs = ArgoNVSReferenceTables(cache=True) - profilers = {} - for irow, row in nvs.tbl(8).iterrows(): - profilers.update({int(row['id'].split("/")[-2]): row["prefLabel"]}) - profilers = dict(sorted(profilers.items())) - return profilers - except Exception: - with open(os.path.join(path2assets, "profilers.json"), "rb") as f: - jsdata = json.load(f) - log.debug( - "Failed to load the ArgoNVSReferenceTables R08 for profiler types, fall back on static assets last updated on %s" - % jsdata["last_update"] - ) - return jsdata["data"]["profilers"] + art = ArgoReferenceTable('ARGO_WMO_INST_TYPE') + profilers = {} + [profilers.update({int(arv.name): arv.long_name}) for arv in art.values()] + return profilers elif ptype == "institutions": - try: - nvs = ArgoNVSReferenceTables(cache=True) - institutions = {} - for row in nvs.tbl(4).iterrows(): - institutions.update({row[1]["altLabel"]: row[1]["prefLabel"]}) - institutions = dict(sorted(institutions.items())) - return institutions - except Exception: - with open(os.path.join(path2assets, "institutions.json"), "rb") as f: - jsdata = json.load(f) - log.debug( - "Failed to load the ArgoNVSReferenceTables R04 for institutions name, fall back on static assets last updated on %s" - % jsdata["last_update"] - ) - return jsdata["data"]["institutions"] + art = ArgoReferenceTable('DATA_CENTRE_CODES') + institutions = {} + [institutions.update({arv.name: arv.long_name}) for arv in art.values()] + return institutions else: raise ValueError("Invalid dictionary name") diff --git a/argopy/static/assets/gdac_servers.json b/argopy/static/assets/gdac_servers.json index 8025799e1..40f337a1c 100644 --- a/argopy/static/assets/gdac_servers.json +++ b/argopy/static/assets/gdac_servers.json @@ -1,11 +1,11 @@ { "name": "gdac", "long_name": "List of official Argo GDAC servers", - "last_update": "2026-01-25T10:32:13.399091+00:00", + "last_update": "2026-06-04T15:17:04.495683+00:00", "data": { "paths": [ "https://data-argo.ifremer.fr", - "https://usgodae.org/pub/outgoing/argo", + "https://nrlgodae1.nrlmry.navy.mil/pub/outgoing/argo", "https://argo-gdac-sandbox.s3-eu-west-3.amazonaws.com/pub", "ftp://ftp.ifremer.fr/ifremer/argo", "s3://argo-gdac-sandbox/pub" @@ -15,11 +15,13 @@ "https": "https://data-argo.ifremer.fr", "fr-http": "https://data-argo.ifremer.fr", "fr-https": "https://data-argo.ifremer.fr", - "us-http": "https://usgodae.org/pub/outgoing/argo", - "us-https": "https://usgodae.org/pub/outgoing/argo", + "us-http": "https://nrlgodae1.nrlmry.navy.mil/pub/outgoing/argo", + "us-https": "https://nrlgodae1.nrlmry.navy.mil/pub/outgoing/argo", "ftp": "ftp://ftp.ifremer.fr/ifremer/argo", "s3": "s3://argo-gdac-sandbox/pub", - "aws": "s3://argo-gdac-sandbox/pub" + "aws": "s3://argo-gdac-sandbox/pub", + "us-http-legacy": "https://usgodae.org/pub/outgoing/argo", + "us-https-legacy": "https://usgodae.org/pub/outgoing/argo" } } } \ No newline at end of file diff --git a/argopy/stores/float/spec.py b/argopy/stores/float/spec.py index 2e72bac91..bd8a0ab1d 100644 --- a/argopy/stores/float/spec.py +++ b/argopy/stores/float/spec.py @@ -67,10 +67,14 @@ def __init__( or self.host.startswith("ftp") or self.host.startswith("s3") ): - raise InvalidOption( - "Trying to work with remote host '%s' without a web connection. Check your connection parameters or try to work with a local GDAC path." - % self.host - ) + if self.host.startswith("http://127.0.0.1"): + pass + # Keep using online implementation with a local server. + else: + raise InvalidOption( + "Trying to work with remote host '%s' without a web connection. Check your connection parameters or try to work with a local GDAC path." + % self.host + ) if "idx" not in kwargs: self.idx = ArgoIndex( diff --git a/argopy/tests/test_data/019b4adbffbab7b37a27ebc246fcbf5cd05151d2336fc569f71e4df16e8fd3c7.nc b/argopy/tests/test_data/019b4adbffbab7b37a27ebc246fcbf5cd05151d2336fc569f71e4df16e8fd3c7.nc new file mode 100644 index 000000000..ace4dca99 Binary files /dev/null and b/argopy/tests/test_data/019b4adbffbab7b37a27ebc246fcbf5cd05151d2336fc569f71e4df16e8fd3c7.nc differ diff --git a/argopy/tests/test_data/05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53.gz b/argopy/tests/test_data/05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53.gz index f2a2907de..370d306ae 100644 Binary files a/argopy/tests/test_data/05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53.gz and b/argopy/tests/test_data/05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53.gz differ diff --git a/argopy/tests/test_data/080a17b21720d217a7133793e7ab59b63d25d6c906c9450fdfaccf3bc4a744db.nc b/argopy/tests/test_data/080a17b21720d217a7133793e7ab59b63d25d6c906c9450fdfaccf3bc4a744db.nc new file mode 100644 index 000000000..149732c2d Binary files /dev/null and b/argopy/tests/test_data/080a17b21720d217a7133793e7ab59b63d25d6c906c9450fdfaccf3bc4a744db.nc differ diff --git a/argopy/tests/test_data/0dfb6a6580fa82a8bedbb59a1e3c87f0957ac833b03a3f335b6a634d4e9361fa.nc b/argopy/tests/test_data/0dfb6a6580fa82a8bedbb59a1e3c87f0957ac833b03a3f335b6a634d4e9361fa.nc new file mode 100644 index 000000000..dc2676a8c Binary files /dev/null and b/argopy/tests/test_data/0dfb6a6580fa82a8bedbb59a1e3c87f0957ac833b03a3f335b6a634d4e9361fa.nc differ diff --git a/argopy/tests/test_data/0e9c27c82d0c2e9679362bfa84f9cf2ef48beb334db595c89749ba987170ef06.nc b/argopy/tests/test_data/0e9c27c82d0c2e9679362bfa84f9cf2ef48beb334db595c89749ba987170ef06.nc new file mode 100644 index 000000000..74aec6a4c Binary files /dev/null and b/argopy/tests/test_data/0e9c27c82d0c2e9679362bfa84f9cf2ef48beb334db595c89749ba987170ef06.nc differ diff --git a/argopy/tests/test_data/1139d8f8f6b747d3e07f600cfea195d35a9bc318689972a7ad825fc76ab02fb8.nc b/argopy/tests/test_data/1139d8f8f6b747d3e07f600cfea195d35a9bc318689972a7ad825fc76ab02fb8.nc new file mode 100644 index 000000000..c94f7a852 Binary files /dev/null and b/argopy/tests/test_data/1139d8f8f6b747d3e07f600cfea195d35a9bc318689972a7ad825fc76ab02fb8.nc differ diff --git a/argopy/tests/test_data/13dd29871c48db45dc00cd0e08cfe0bae9acf292d0b4a2d988561e4754704142.nc b/argopy/tests/test_data/13dd29871c48db45dc00cd0e08cfe0bae9acf292d0b4a2d988561e4754704142.nc new file mode 100644 index 000000000..74574f002 Binary files /dev/null and b/argopy/tests/test_data/13dd29871c48db45dc00cd0e08cfe0bae9acf292d0b4a2d988561e4754704142.nc differ diff --git a/argopy/tests/test_data/160b0992e24369dcc8e4136c9744ec0fd6514f216caaed13eea35278c3f38015.nc b/argopy/tests/test_data/160b0992e24369dcc8e4136c9744ec0fd6514f216caaed13eea35278c3f38015.nc new file mode 100644 index 000000000..7216f8526 Binary files /dev/null and b/argopy/tests/test_data/160b0992e24369dcc8e4136c9744ec0fd6514f216caaed13eea35278c3f38015.nc differ diff --git a/argopy/tests/test_data/16d2fa09176ea62a5e4eb8a3588294549fecfca9a4c7a07a1bc2d3716214e9b8.nc b/argopy/tests/test_data/16d2fa09176ea62a5e4eb8a3588294549fecfca9a4c7a07a1bc2d3716214e9b8.nc new file mode 100644 index 000000000..c3a5eed44 Binary files /dev/null and b/argopy/tests/test_data/16d2fa09176ea62a5e4eb8a3588294549fecfca9a4c7a07a1bc2d3716214e9b8.nc differ diff --git a/argopy/tests/test_data/17601e7143a31e4aaaedf33e57f62362fbd53b51ffe8b3f2b390e4d651ff7fce.nc b/argopy/tests/test_data/17601e7143a31e4aaaedf33e57f62362fbd53b51ffe8b3f2b390e4d651ff7fce.nc new file mode 100644 index 000000000..5670af919 Binary files /dev/null and b/argopy/tests/test_data/17601e7143a31e4aaaedf33e57f62362fbd53b51ffe8b3f2b390e4d651ff7fce.nc differ diff --git a/argopy/tests/test_data/188dc17daace1b9f740526fe2505346dc334834a50ea556e6582e875645e9076.nc b/argopy/tests/test_data/188dc17daace1b9f740526fe2505346dc334834a50ea556e6582e875645e9076.nc new file mode 100644 index 000000000..36e314f75 Binary files /dev/null and b/argopy/tests/test_data/188dc17daace1b9f740526fe2505346dc334834a50ea556e6582e875645e9076.nc differ diff --git a/argopy/tests/test_data/1acc7a2efa94cb51f421c84a3d388ce830e391ad2edee6780c8b12190086bb67.nc b/argopy/tests/test_data/1acc7a2efa94cb51f421c84a3d388ce830e391ad2edee6780c8b12190086bb67.nc new file mode 100644 index 000000000..d511ba7e3 Binary files /dev/null and b/argopy/tests/test_data/1acc7a2efa94cb51f421c84a3d388ce830e391ad2edee6780c8b12190086bb67.nc differ diff --git a/argopy/tests/test_data/1dd408520ef51bdcacd149c07257bb8077236c3ec647a662c0b058bc917c7693.nc b/argopy/tests/test_data/1dd408520ef51bdcacd149c07257bb8077236c3ec647a662c0b058bc917c7693.nc new file mode 100644 index 000000000..02ca098ac Binary files /dev/null and b/argopy/tests/test_data/1dd408520ef51bdcacd149c07257bb8077236c3ec647a662c0b058bc917c7693.nc differ diff --git a/argopy/tests/test_data/1f4d27d475fe4f63ecf0ff337664e06ed4a5dc37befabf5a3dc667d3d088bb38.nc b/argopy/tests/test_data/1f4d27d475fe4f63ecf0ff337664e06ed4a5dc37befabf5a3dc667d3d088bb38.nc new file mode 100644 index 000000000..a904252cb Binary files /dev/null and b/argopy/tests/test_data/1f4d27d475fe4f63ecf0ff337664e06ed4a5dc37befabf5a3dc667d3d088bb38.nc differ diff --git a/argopy/tests/test_data/1f8f09a423f851204065e571596a40bc3afed15bf9193035cab40c5b266292ec.nc b/argopy/tests/test_data/1f8f09a423f851204065e571596a40bc3afed15bf9193035cab40c5b266292ec.nc new file mode 100644 index 000000000..da01c5736 Binary files /dev/null and b/argopy/tests/test_data/1f8f09a423f851204065e571596a40bc3afed15bf9193035cab40c5b266292ec.nc differ diff --git a/argopy/tests/test_data/237342843116e7049c58d6be5016e35df71f68bf0f5af13e7b7568d4fc66792f.nc b/argopy/tests/test_data/237342843116e7049c58d6be5016e35df71f68bf0f5af13e7b7568d4fc66792f.nc new file mode 100644 index 000000000..2d446acbc Binary files /dev/null and b/argopy/tests/test_data/237342843116e7049c58d6be5016e35df71f68bf0f5af13e7b7568d4fc66792f.nc differ diff --git a/argopy/tests/test_data/28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f.nc b/argopy/tests/test_data/28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f.nc index fc74dcca1..0f4436e70 100644 Binary files a/argopy/tests/test_data/28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f.nc and b/argopy/tests/test_data/28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f.nc differ diff --git a/argopy/tests/test_data/2a9b5707641619c5b1ca7b1c52592b9f6cb0eb5cf881f4949efa077dfae827e2.nc b/argopy/tests/test_data/2a9b5707641619c5b1ca7b1c52592b9f6cb0eb5cf881f4949efa077dfae827e2.nc new file mode 100644 index 000000000..ea7155731 Binary files /dev/null and b/argopy/tests/test_data/2a9b5707641619c5b1ca7b1c52592b9f6cb0eb5cf881f4949efa077dfae827e2.nc differ diff --git a/argopy/tests/test_data/365b7aa03347c618d2d54eb931772de7e8384ba26a27ce0624ccaf3de11a8afd.nc b/argopy/tests/test_data/365b7aa03347c618d2d54eb931772de7e8384ba26a27ce0624ccaf3de11a8afd.nc new file mode 100644 index 000000000..aca84d3a1 Binary files /dev/null and b/argopy/tests/test_data/365b7aa03347c618d2d54eb931772de7e8384ba26a27ce0624ccaf3de11a8afd.nc differ diff --git a/argopy/tests/test_data/36c912d1df5cf2f51d10f7b8ebb175af7792132255504615a95ea040611ace18.nc b/argopy/tests/test_data/36c912d1df5cf2f51d10f7b8ebb175af7792132255504615a95ea040611ace18.nc new file mode 100644 index 000000000..ee212b312 Binary files /dev/null and b/argopy/tests/test_data/36c912d1df5cf2f51d10f7b8ebb175af7792132255504615a95ea040611ace18.nc differ diff --git a/argopy/tests/test_data/37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a.nc b/argopy/tests/test_data/37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a.nc index b81df7489..9082b5fb0 100644 Binary files a/argopy/tests/test_data/37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a.nc and b/argopy/tests/test_data/37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a.nc differ diff --git a/argopy/tests/test_data/3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51.nc b/argopy/tests/test_data/3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51.nc index 6638e3eb7..04d6c505c 100644 Binary files a/argopy/tests/test_data/3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51.nc and b/argopy/tests/test_data/3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51.nc differ diff --git a/argopy/tests/test_data/3fb35a9171d55a7f1aab677719dbb886e470fa044ec64b9fdeffbbb5a02f06a0.nc b/argopy/tests/test_data/3fb35a9171d55a7f1aab677719dbb886e470fa044ec64b9fdeffbbb5a02f06a0.nc new file mode 100644 index 000000000..690b4acaa Binary files /dev/null and b/argopy/tests/test_data/3fb35a9171d55a7f1aab677719dbb886e470fa044ec64b9fdeffbbb5a02f06a0.nc differ diff --git a/argopy/tests/test_data/40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5.nc b/argopy/tests/test_data/40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5.nc index 720286a18..9bcc1e96b 100644 Binary files a/argopy/tests/test_data/40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5.nc and b/argopy/tests/test_data/40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5.nc differ diff --git a/argopy/tests/test_data/41c4db7ed31adf4449961b8b34a9a856ca4dcd79d89662f2d575552c2f5f6f06.nc b/argopy/tests/test_data/41c4db7ed31adf4449961b8b34a9a856ca4dcd79d89662f2d575552c2f5f6f06.nc new file mode 100644 index 000000000..b22bcf4c7 Binary files /dev/null and b/argopy/tests/test_data/41c4db7ed31adf4449961b8b34a9a856ca4dcd79d89662f2d575552c2f5f6f06.nc differ diff --git a/argopy/tests/test_data/41dd8eb0c0c7e41ba4c7b790a4da7d18ed4fe097592c666c35bfe3fea8f5a6ea.nc b/argopy/tests/test_data/41dd8eb0c0c7e41ba4c7b790a4da7d18ed4fe097592c666c35bfe3fea8f5a6ea.nc new file mode 100644 index 000000000..c6f74b667 Binary files /dev/null and b/argopy/tests/test_data/41dd8eb0c0c7e41ba4c7b790a4da7d18ed4fe097592c666c35bfe3fea8f5a6ea.nc differ diff --git a/argopy/tests/test_data/44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295.nc b/argopy/tests/test_data/44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295.nc index 8022f6413..56bf978cb 100644 Binary files a/argopy/tests/test_data/44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295.nc and b/argopy/tests/test_data/44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295.nc differ diff --git a/argopy/tests/test_data/4510b05e1222d5c6536441f6b38315dba64c840b1b724cd7805d880e896eb32b.nc b/argopy/tests/test_data/4510b05e1222d5c6536441f6b38315dba64c840b1b724cd7805d880e896eb32b.nc new file mode 100644 index 000000000..e8cf1f571 Binary files /dev/null and b/argopy/tests/test_data/4510b05e1222d5c6536441f6b38315dba64c840b1b724cd7805d880e896eb32b.nc differ diff --git a/argopy/tests/test_data/45652933808cd84c1ce148997eccb0ea479e8f889234a5bf07f75493aa1a8fd9.nc b/argopy/tests/test_data/45652933808cd84c1ce148997eccb0ea479e8f889234a5bf07f75493aa1a8fd9.nc new file mode 100644 index 000000000..e22833743 Binary files /dev/null and b/argopy/tests/test_data/45652933808cd84c1ce148997eccb0ea479e8f889234a5bf07f75493aa1a8fd9.nc differ diff --git a/argopy/tests/test_data/47271cb181c2030db5f74893d5d36738c6e1d8a171b94d9e71104941f1710e41.nc b/argopy/tests/test_data/47271cb181c2030db5f74893d5d36738c6e1d8a171b94d9e71104941f1710e41.nc new file mode 100644 index 000000000..e56331a0d Binary files /dev/null and b/argopy/tests/test_data/47271cb181c2030db5f74893d5d36738c6e1d8a171b94d9e71104941f1710e41.nc differ diff --git a/argopy/tests/test_data/4ddaef0683a0c40229395cc47823226c9ee0943060c30febac669595896d376b.nc b/argopy/tests/test_data/4ddaef0683a0c40229395cc47823226c9ee0943060c30febac669595896d376b.nc new file mode 100644 index 000000000..8a8cc7ab5 Binary files /dev/null and b/argopy/tests/test_data/4ddaef0683a0c40229395cc47823226c9ee0943060c30febac669595896d376b.nc differ diff --git a/argopy/tests/test_data/4e9df0cd2c6efef84b0d943a7480ef7ed4786fb0fee851713dfb1bffb61f8928.nc b/argopy/tests/test_data/4e9df0cd2c6efef84b0d943a7480ef7ed4786fb0fee851713dfb1bffb61f8928.nc new file mode 100644 index 000000000..10e6f9316 Binary files /dev/null and b/argopy/tests/test_data/4e9df0cd2c6efef84b0d943a7480ef7ed4786fb0fee851713dfb1bffb61f8928.nc differ diff --git a/argopy/tests/test_data/5aa7afa6363875ae09cb1a60f1a1fd0eca826893b33aa9ab17bb00aa634012ae.nc b/argopy/tests/test_data/5aa7afa6363875ae09cb1a60f1a1fd0eca826893b33aa9ab17bb00aa634012ae.nc new file mode 100644 index 000000000..ab05e7e2f Binary files /dev/null and b/argopy/tests/test_data/5aa7afa6363875ae09cb1a60f1a1fd0eca826893b33aa9ab17bb00aa634012ae.nc differ diff --git a/argopy/tests/test_data/5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230.nc b/argopy/tests/test_data/5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230.nc index 60e7c8cc9..d353286f2 100644 Binary files a/argopy/tests/test_data/5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230.nc and b/argopy/tests/test_data/5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230.nc differ diff --git a/argopy/tests/test_data/60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302.nc b/argopy/tests/test_data/60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302.nc index 3cf46c777..38b6748e8 100644 Binary files a/argopy/tests/test_data/60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302.nc and b/argopy/tests/test_data/60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302.nc differ diff --git a/argopy/tests/test_data/61917ff2d9b59956b4aca43d4d57b0f8a6946afff0af6d2f2615e66dffd502c9.nc b/argopy/tests/test_data/61917ff2d9b59956b4aca43d4d57b0f8a6946afff0af6d2f2615e66dffd502c9.nc new file mode 100644 index 000000000..b2b099234 Binary files /dev/null and b/argopy/tests/test_data/61917ff2d9b59956b4aca43d4d57b0f8a6946afff0af6d2f2615e66dffd502c9.nc differ diff --git a/argopy/tests/test_data/62e8638bbca580bd753f63b24a71ea78003b55b90f4553b48585c4e43c8b3ce2.nc b/argopy/tests/test_data/62e8638bbca580bd753f63b24a71ea78003b55b90f4553b48585c4e43c8b3ce2.nc new file mode 100644 index 000000000..b02dab9ee Binary files /dev/null and b/argopy/tests/test_data/62e8638bbca580bd753f63b24a71ea78003b55b90f4553b48585c4e43c8b3ce2.nc differ diff --git a/argopy/tests/test_data/62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6.nc b/argopy/tests/test_data/62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6.nc index 58b7baf35..550a8dbe4 100644 Binary files a/argopy/tests/test_data/62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6.nc and b/argopy/tests/test_data/62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6.nc differ diff --git a/argopy/tests/test_data/6ab68f84a8aec43c0a99b2ec9742d0368f7bf4202d11295e32ae3a76fcf0dc54.nc b/argopy/tests/test_data/6ab68f84a8aec43c0a99b2ec9742d0368f7bf4202d11295e32ae3a76fcf0dc54.nc new file mode 100644 index 000000000..d3d4c7351 Binary files /dev/null and b/argopy/tests/test_data/6ab68f84a8aec43c0a99b2ec9742d0368f7bf4202d11295e32ae3a76fcf0dc54.nc differ diff --git a/argopy/tests/test_data/6b04da67d0598a32392f85b469cf026c479f56046d63ed7f85abd0d9a9f168b8.nc b/argopy/tests/test_data/6b04da67d0598a32392f85b469cf026c479f56046d63ed7f85abd0d9a9f168b8.nc new file mode 100644 index 000000000..c0d2daac9 Binary files /dev/null and b/argopy/tests/test_data/6b04da67d0598a32392f85b469cf026c479f56046d63ed7f85abd0d9a9f168b8.nc differ diff --git a/argopy/tests/test_data/6e454d84f34f6acef9006b293415a151a0204741f9e83eccd65148d470de5966.nc b/argopy/tests/test_data/6e454d84f34f6acef9006b293415a151a0204741f9e83eccd65148d470de5966.nc new file mode 100644 index 000000000..453247211 Binary files /dev/null and b/argopy/tests/test_data/6e454d84f34f6acef9006b293415a151a0204741f9e83eccd65148d470de5966.nc differ diff --git a/argopy/tests/test_data/735ed164d2c11df8099df6ea2369e565586771aa43c827ccc036c5fe684aaa13.nc b/argopy/tests/test_data/735ed164d2c11df8099df6ea2369e565586771aa43c827ccc036c5fe684aaa13.nc new file mode 100644 index 000000000..4adaaf88c Binary files /dev/null and b/argopy/tests/test_data/735ed164d2c11df8099df6ea2369e565586771aa43c827ccc036c5fe684aaa13.nc differ diff --git a/argopy/tests/test_data/73dd0e98a037066a5f27c86ae54de2808e4a1c233d180613956eab1b6df76233.nc b/argopy/tests/test_data/73dd0e98a037066a5f27c86ae54de2808e4a1c233d180613956eab1b6df76233.nc new file mode 100644 index 000000000..650583bf9 Binary files /dev/null and b/argopy/tests/test_data/73dd0e98a037066a5f27c86ae54de2808e4a1c233d180613956eab1b6df76233.nc differ diff --git a/argopy/tests/test_data/7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f.nc b/argopy/tests/test_data/7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f.nc index ac4f093c6..63315fd8d 100644 Binary files a/argopy/tests/test_data/7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f.nc and b/argopy/tests/test_data/7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f.nc differ diff --git a/argopy/tests/test_data/77fb1bccfaff754c8e52678be20d6a37ea92de55e4979f890f22da2d0e436c2a.nc b/argopy/tests/test_data/77fb1bccfaff754c8e52678be20d6a37ea92de55e4979f890f22da2d0e436c2a.nc new file mode 100644 index 000000000..1a36a2b27 Binary files /dev/null and b/argopy/tests/test_data/77fb1bccfaff754c8e52678be20d6a37ea92de55e4979f890f22da2d0e436c2a.nc differ diff --git a/argopy/tests/test_data/78243381c2623886a0d2356bc701ffcdf743acd8eb3b63f3f8976d9abfc1c55f.nc b/argopy/tests/test_data/78243381c2623886a0d2356bc701ffcdf743acd8eb3b63f3f8976d9abfc1c55f.nc new file mode 100644 index 000000000..b1405842f Binary files /dev/null and b/argopy/tests/test_data/78243381c2623886a0d2356bc701ffcdf743acd8eb3b63f3f8976d9abfc1c55f.nc differ diff --git a/argopy/tests/test_data/7ad2428472ef4ded1695e8cf24347e66f161d272e921ee575f97fd87399d2a29.nc b/argopy/tests/test_data/7ad2428472ef4ded1695e8cf24347e66f161d272e921ee575f97fd87399d2a29.nc new file mode 100644 index 000000000..4bb56d5fb Binary files /dev/null and b/argopy/tests/test_data/7ad2428472ef4ded1695e8cf24347e66f161d272e921ee575f97fd87399d2a29.nc differ diff --git a/argopy/tests/test_data/7bc599fbe45a202b2278e357e6b6fe037304419396cd02833495c003539bb1cb.nc b/argopy/tests/test_data/7bc599fbe45a202b2278e357e6b6fe037304419396cd02833495c003539bb1cb.nc new file mode 100644 index 000000000..fc94ca208 Binary files /dev/null and b/argopy/tests/test_data/7bc599fbe45a202b2278e357e6b6fe037304419396cd02833495c003539bb1cb.nc differ diff --git a/argopy/tests/test_data/8227a5ec989ae1e265ef8d1fb2d45f210b3a7573b76d4c10064ba0bd2e56f715.nc b/argopy/tests/test_data/8227a5ec989ae1e265ef8d1fb2d45f210b3a7573b76d4c10064ba0bd2e56f715.nc new file mode 100644 index 000000000..321a7d24c Binary files /dev/null and b/argopy/tests/test_data/8227a5ec989ae1e265ef8d1fb2d45f210b3a7573b76d4c10064ba0bd2e56f715.nc differ diff --git a/argopy/tests/test_data/83635c933da3eac1d20befec7f854123fe801bc21ba1be3a70fcf1aa4a91b959.nc b/argopy/tests/test_data/83635c933da3eac1d20befec7f854123fe801bc21ba1be3a70fcf1aa4a91b959.nc new file mode 100644 index 000000000..c491eebec Binary files /dev/null and b/argopy/tests/test_data/83635c933da3eac1d20befec7f854123fe801bc21ba1be3a70fcf1aa4a91b959.nc differ diff --git a/argopy/tests/test_data/8b2d852d53d4be84265af171574572fdda8c3010c3c9cafac94e43c682101b00.nc b/argopy/tests/test_data/8b2d852d53d4be84265af171574572fdda8c3010c3c9cafac94e43c682101b00.nc new file mode 100644 index 000000000..7ad458806 Binary files /dev/null and b/argopy/tests/test_data/8b2d852d53d4be84265af171574572fdda8c3010c3c9cafac94e43c682101b00.nc differ diff --git a/argopy/tests/test_data/9021f4d79ef710f97a1e7164fe219b4981819e1ed5b2b28643fa214da096a98d.nc b/argopy/tests/test_data/9021f4d79ef710f97a1e7164fe219b4981819e1ed5b2b28643fa214da096a98d.nc new file mode 100644 index 000000000..105f80de2 Binary files /dev/null and b/argopy/tests/test_data/9021f4d79ef710f97a1e7164fe219b4981819e1ed5b2b28643fa214da096a98d.nc differ diff --git a/argopy/tests/test_data/98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225.nc b/argopy/tests/test_data/98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225.nc index 305390364..386f70caa 100644 Binary files a/argopy/tests/test_data/98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225.nc and b/argopy/tests/test_data/98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225.nc differ diff --git a/argopy/tests/test_data/994ed1468ad5f07e222e53b1347a6b181ecb94cc7f44966c9120b2ef995f4b5b.nc b/argopy/tests/test_data/994ed1468ad5f07e222e53b1347a6b181ecb94cc7f44966c9120b2ef995f4b5b.nc new file mode 100644 index 000000000..3198be4cf Binary files /dev/null and b/argopy/tests/test_data/994ed1468ad5f07e222e53b1347a6b181ecb94cc7f44966c9120b2ef995f4b5b.nc differ diff --git a/argopy/tests/test_data/9fe01870abc4cd5f8eb91f339f0b1a6bc685312caddcf17c191954b61c7e3270.nc b/argopy/tests/test_data/9fe01870abc4cd5f8eb91f339f0b1a6bc685312caddcf17c191954b61c7e3270.nc new file mode 100644 index 000000000..be23adf57 Binary files /dev/null and b/argopy/tests/test_data/9fe01870abc4cd5f8eb91f339f0b1a6bc685312caddcf17c191954b61c7e3270.nc differ diff --git a/argopy/tests/test_data/a03e92804ce3285fe29617ca8fa1f983b0083ad376d5ff89d9e4c6ea5963b8d6.nc b/argopy/tests/test_data/a03e92804ce3285fe29617ca8fa1f983b0083ad376d5ff89d9e4c6ea5963b8d6.nc new file mode 100644 index 000000000..9492d6a0a Binary files /dev/null and b/argopy/tests/test_data/a03e92804ce3285fe29617ca8fa1f983b0083ad376d5ff89d9e4c6ea5963b8d6.nc differ diff --git a/argopy/tests/test_data/a83d9b99104664bffe788222d6b31a0a378a44ccf043dbfeeb163683caaff618.nc b/argopy/tests/test_data/a83d9b99104664bffe788222d6b31a0a378a44ccf043dbfeeb163683caaff618.nc new file mode 100644 index 000000000..f78b4cd1e Binary files /dev/null and b/argopy/tests/test_data/a83d9b99104664bffe788222d6b31a0a378a44ccf043dbfeeb163683caaff618.nc differ diff --git a/argopy/tests/test_data/ad6b572b13ab8d3edf5c1b45f5380f08a1c1c936229c1e3fda0fa5923c29b7cc.nc b/argopy/tests/test_data/ad6b572b13ab8d3edf5c1b45f5380f08a1c1c936229c1e3fda0fa5923c29b7cc.nc new file mode 100644 index 000000000..896820b3c Binary files /dev/null and b/argopy/tests/test_data/ad6b572b13ab8d3edf5c1b45f5380f08a1c1c936229c1e3fda0fa5923c29b7cc.nc differ diff --git a/argopy/tests/test_data/b2dc40b30dcd980d69fda58a3c92b1c6a69d4e412a253aa07642f221cf6bc62d.nc b/argopy/tests/test_data/b2dc40b30dcd980d69fda58a3c92b1c6a69d4e412a253aa07642f221cf6bc62d.nc new file mode 100644 index 000000000..fd83c833f Binary files /dev/null and b/argopy/tests/test_data/b2dc40b30dcd980d69fda58a3c92b1c6a69d4e412a253aa07642f221cf6bc62d.nc differ diff --git a/argopy/tests/test_data/b4d460492596ee7223a67d9c22b832d131394f4e3e4996e61cb051a8b1b01ec4.nc b/argopy/tests/test_data/b4d460492596ee7223a67d9c22b832d131394f4e3e4996e61cb051a8b1b01ec4.nc new file mode 100644 index 000000000..3575b1d60 Binary files /dev/null and b/argopy/tests/test_data/b4d460492596ee7223a67d9c22b832d131394f4e3e4996e61cb051a8b1b01ec4.nc differ diff --git a/argopy/tests/test_data/b6d249b6279e498cf68862d5aafa0a7d5ff0859312c276519ba7d0e42687b2eb.nc b/argopy/tests/test_data/b6d249b6279e498cf68862d5aafa0a7d5ff0859312c276519ba7d0e42687b2eb.nc new file mode 100644 index 000000000..6f35e0f50 Binary files /dev/null and b/argopy/tests/test_data/b6d249b6279e498cf68862d5aafa0a7d5ff0859312c276519ba7d0e42687b2eb.nc differ diff --git a/argopy/tests/test_data/b8b77811a58f9104387ccdf3c5b15c0a423b74f0e3a4004bb172e6420fbe2cdd.nc b/argopy/tests/test_data/b8b77811a58f9104387ccdf3c5b15c0a423b74f0e3a4004bb172e6420fbe2cdd.nc new file mode 100644 index 000000000..2b716741f Binary files /dev/null and b/argopy/tests/test_data/b8b77811a58f9104387ccdf3c5b15c0a423b74f0e3a4004bb172e6420fbe2cdd.nc differ diff --git a/argopy/tests/test_data/bacbd07e0afba6d01d7597363826b6afc1b634806681ce007e7b46c480bc0905.nc b/argopy/tests/test_data/bacbd07e0afba6d01d7597363826b6afc1b634806681ce007e7b46c480bc0905.nc new file mode 100644 index 000000000..ea6975ee0 Binary files /dev/null and b/argopy/tests/test_data/bacbd07e0afba6d01d7597363826b6afc1b634806681ce007e7b46c480bc0905.nc differ diff --git a/argopy/tests/test_data/c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d.html b/argopy/tests/test_data/c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d.html index 304923338..75da28405 100644 --- a/argopy/tests/test_data/c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d.html +++ b/argopy/tests/test_data/c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d.html @@ -1,4 +1,4 @@ - + Index of /dac @@ -9,16 +9,16 @@

Index of /dac

[ICO]NameLast modifiedSizeDescription
[PARENTDIR]Parent Directory  -   -[DIR]aoml/2025-12-05 01:10 -   -[DIR]bodc/2025-11-18 22:11 -   -[DIR]coriolis/2025-12-08 09:35 -   -[DIR]csio/2025-10-26 07:12 -   -[DIR]csiro/2025-12-06 09:13 -   -[DIR]incois/2025-05-05 12:14 -   -[DIR]jma/2025-11-25 08:15 -   -[DIR]kiost/2024-11-25 06:17 -   +[DIR]aoml/2026-06-16 19:10 -   +[DIR]bodc/2026-06-18 09:11 -   +[DIR]coriolis/2026-06-01 15:35 -   +[DIR]csio/2026-05-08 05:12 -   +[DIR]csiro/2026-05-27 10:13 -   +[DIR]incois/2026-04-01 12:14 -   +[DIR]jma/2026-06-16 09:15 -   +[DIR]kiost/2026-03-13 04:17 -   [DIR]kma/2025-08-14 12:16 -   -[DIR]meds/2025-06-04 19:18 -   +[DIR]meds/2026-06-16 00:18 -   [DIR]nmdis/2019-03-27 10:09 -  
diff --git a/argopy/tests/test_data/c061abcb4d69ee56b572e74cf6f116f5f9e8dde433cc47ffb149458001f35b15.nc b/argopy/tests/test_data/c061abcb4d69ee56b572e74cf6f116f5f9e8dde433cc47ffb149458001f35b15.nc new file mode 100644 index 000000000..41390a8ca Binary files /dev/null and b/argopy/tests/test_data/c061abcb4d69ee56b572e74cf6f116f5f9e8dde433cc47ffb149458001f35b15.nc differ diff --git a/argopy/tests/test_data/c2b71e0b4bc14ebc8d12e67e55f09400922b5ec2d7f5c9c9009c3fc3e9b7703f.nc b/argopy/tests/test_data/c2b71e0b4bc14ebc8d12e67e55f09400922b5ec2d7f5c9c9009c3fc3e9b7703f.nc new file mode 100644 index 000000000..15f662f85 Binary files /dev/null and b/argopy/tests/test_data/c2b71e0b4bc14ebc8d12e67e55f09400922b5ec2d7f5c9c9009c3fc3e9b7703f.nc differ diff --git a/argopy/tests/test_data/c6d8d73e9a3350bf04b5e2f11a6989d7512068976e8d20e0742189f4df0e126e.nc b/argopy/tests/test_data/c6d8d73e9a3350bf04b5e2f11a6989d7512068976e8d20e0742189f4df0e126e.nc new file mode 100644 index 000000000..64a95d67e Binary files /dev/null and b/argopy/tests/test_data/c6d8d73e9a3350bf04b5e2f11a6989d7512068976e8d20e0742189f4df0e126e.nc differ diff --git a/argopy/tests/test_data/d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8.nc b/argopy/tests/test_data/d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8.nc index 630424c0b..66cf5e220 100644 Binary files a/argopy/tests/test_data/d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8.nc and b/argopy/tests/test_data/d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8.nc differ diff --git a/argopy/tests/test_data/d094010ac6949a807fddd4f9d569b73178c66170da882d0d9f445397a9732071.nc b/argopy/tests/test_data/d094010ac6949a807fddd4f9d569b73178c66170da882d0d9f445397a9732071.nc new file mode 100644 index 000000000..ede6a23c8 Binary files /dev/null and b/argopy/tests/test_data/d094010ac6949a807fddd4f9d569b73178c66170da882d0d9f445397a9732071.nc differ diff --git a/argopy/tests/test_data/d2094b493fe9a024ac2d15875c86121e9082d0de03352cbec20d04583f9cf6b7.nc b/argopy/tests/test_data/d2094b493fe9a024ac2d15875c86121e9082d0de03352cbec20d04583f9cf6b7.nc new file mode 100644 index 000000000..8cea44ea0 Binary files /dev/null and b/argopy/tests/test_data/d2094b493fe9a024ac2d15875c86121e9082d0de03352cbec20d04583f9cf6b7.nc differ diff --git a/argopy/tests/test_data/d82e5556f8f6ab64dc3167f2a8ef3b3899fe44ad7928096d9b3ac7098c67f88c.nc b/argopy/tests/test_data/d82e5556f8f6ab64dc3167f2a8ef3b3899fe44ad7928096d9b3ac7098c67f88c.nc new file mode 100644 index 000000000..d8db6e048 Binary files /dev/null and b/argopy/tests/test_data/d82e5556f8f6ab64dc3167f2a8ef3b3899fe44ad7928096d9b3ac7098c67f88c.nc differ diff --git a/argopy/tests/test_data/db3b0b305a82aca68fb1f8b07ca9ca020a56264ca784f32cecb77881a51687ba.nc b/argopy/tests/test_data/db3b0b305a82aca68fb1f8b07ca9ca020a56264ca784f32cecb77881a51687ba.nc new file mode 100644 index 000000000..8def5fca4 Binary files /dev/null and b/argopy/tests/test_data/db3b0b305a82aca68fb1f8b07ca9ca020a56264ca784f32cecb77881a51687ba.nc differ diff --git a/argopy/tests/test_data/dc5827c801510b7d479bb6bc13d9132ba382518ba1a8341b8b661e915efdc1bb.nc b/argopy/tests/test_data/dc5827c801510b7d479bb6bc13d9132ba382518ba1a8341b8b661e915efdc1bb.nc new file mode 100644 index 000000000..f4aac94f2 Binary files /dev/null and b/argopy/tests/test_data/dc5827c801510b7d479bb6bc13d9132ba382518ba1a8341b8b661e915efdc1bb.nc differ diff --git a/argopy/tests/test_data/dc5f698865514e42fcf917ba5858fa5acc625759ddd259d11c038c2ea4126b78.nc b/argopy/tests/test_data/dc5f698865514e42fcf917ba5858fa5acc625759ddd259d11c038c2ea4126b78.nc new file mode 100644 index 000000000..dc87d9118 Binary files /dev/null and b/argopy/tests/test_data/dc5f698865514e42fcf917ba5858fa5acc625759ddd259d11c038c2ea4126b78.nc differ diff --git a/argopy/tests/test_data/dfe0d4bacc3d7f5702e27331b08e21454f658f19c47de898bc6bec284aa60a3c.nc b/argopy/tests/test_data/dfe0d4bacc3d7f5702e27331b08e21454f658f19c47de898bc6bec284aa60a3c.nc new file mode 100644 index 000000000..bb78db476 Binary files /dev/null and b/argopy/tests/test_data/dfe0d4bacc3d7f5702e27331b08e21454f658f19c47de898bc6bec284aa60a3c.nc differ diff --git a/argopy/tests/test_data/e321c4b25b215f421519e5acf82e20c5f66996c13e6b83b48be2aee0f29ef1e6.nc b/argopy/tests/test_data/e321c4b25b215f421519e5acf82e20c5f66996c13e6b83b48be2aee0f29ef1e6.nc new file mode 100644 index 000000000..f08296822 Binary files /dev/null and b/argopy/tests/test_data/e321c4b25b215f421519e5acf82e20c5f66996c13e6b83b48be2aee0f29ef1e6.nc differ diff --git a/argopy/tests/test_data/e5732eb4dda9e8667d76797504011933db16d890e9d70854926859e59f0a3073.nc b/argopy/tests/test_data/e5732eb4dda9e8667d76797504011933db16d890e9d70854926859e59f0a3073.nc new file mode 100644 index 000000000..354a36e8f Binary files /dev/null and b/argopy/tests/test_data/e5732eb4dda9e8667d76797504011933db16d890e9d70854926859e59f0a3073.nc differ diff --git a/argopy/tests/test_data/e608bf7d88137ef8820f21b4fbe9d69f48526bf08cf0f9b1eaf74618b04aa69b.nc b/argopy/tests/test_data/e608bf7d88137ef8820f21b4fbe9d69f48526bf08cf0f9b1eaf74618b04aa69b.nc new file mode 100644 index 000000000..c69c3c53c Binary files /dev/null and b/argopy/tests/test_data/e608bf7d88137ef8820f21b4fbe9d69f48526bf08cf0f9b1eaf74618b04aa69b.nc differ diff --git a/argopy/tests/test_data/e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448.nc b/argopy/tests/test_data/e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448.nc index 33ba5eb90..6682acc58 100644 Binary files a/argopy/tests/test_data/e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448.nc and b/argopy/tests/test_data/e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448.nc differ diff --git a/argopy/tests/test_data/ed8e71e5e526f35ba5e136d190f881c0e947255e4570c15d20a9bbee1efaf3b9.nc b/argopy/tests/test_data/ed8e71e5e526f35ba5e136d190f881c0e947255e4570c15d20a9bbee1efaf3b9.nc new file mode 100644 index 000000000..0400b139f Binary files /dev/null and b/argopy/tests/test_data/ed8e71e5e526f35ba5e136d190f881c0e947255e4570c15d20a9bbee1efaf3b9.nc differ diff --git a/argopy/tests/test_data/f17ea8164b719ce0bd998f9911be425b80d11d4e18b837038f28ee559c09af03.nc b/argopy/tests/test_data/f17ea8164b719ce0bd998f9911be425b80d11d4e18b837038f28ee559c09af03.nc new file mode 100644 index 000000000..b4ee99299 Binary files /dev/null and b/argopy/tests/test_data/f17ea8164b719ce0bd998f9911be425b80d11d4e18b837038f28ee559c09af03.nc differ diff --git a/argopy/tests/test_data/f3f2f2e8542bb36df9ce39281e10539b8f1097f65a3bb45a6048577235531aeb.nc b/argopy/tests/test_data/f3f2f2e8542bb36df9ce39281e10539b8f1097f65a3bb45a6048577235531aeb.nc new file mode 100644 index 000000000..914df5512 Binary files /dev/null and b/argopy/tests/test_data/f3f2f2e8542bb36df9ce39281e10539b8f1097f65a3bb45a6048577235531aeb.nc differ diff --git a/argopy/tests/test_data/f6b8b1d72b2af63f951225f01589bbfdba40bdd831761f6979352c85b8f1a815.nc b/argopy/tests/test_data/f6b8b1d72b2af63f951225f01589bbfdba40bdd831761f6979352c85b8f1a815.nc new file mode 100644 index 000000000..40d7e486c Binary files /dev/null and b/argopy/tests/test_data/f6b8b1d72b2af63f951225f01589bbfdba40bdd831761f6979352c85b8f1a815.nc differ diff --git a/argopy/tests/test_data/f7b3c1047634dc88dfb8d3c33d7f0992a0b1d876db456371fc4877ba337e8fc7.nc b/argopy/tests/test_data/f7b3c1047634dc88dfb8d3c33d7f0992a0b1d876db456371fc4877ba337e8fc7.nc new file mode 100644 index 000000000..9d34956fa Binary files /dev/null and b/argopy/tests/test_data/f7b3c1047634dc88dfb8d3c33d7f0992a0b1d876db456371fc4877ba337e8fc7.nc differ diff --git a/argopy/tests/test_data/fda439a960b77186bc4040ace9ff7dab03168236d9f7b1e641c4e7d09b844c47.nc b/argopy/tests/test_data/fda439a960b77186bc4040ace9ff7dab03168236d9f7b1e641c4e7d09b844c47.nc new file mode 100644 index 000000000..a2a7cefc8 Binary files /dev/null and b/argopy/tests/test_data/fda439a960b77186bc4040ace9ff7dab03168236d9f7b1e641c4e7d09b844c47.nc differ diff --git a/argopy/tests/test_data/ff62472ef5a790478cf50d8e63aa6e99c02dcff5b172214d1b1b62e3a8db55c9.nc b/argopy/tests/test_data/ff62472ef5a790478cf50d8e63aa6e99c02dcff5b172214d1b1b62e3a8db55c9.nc new file mode 100644 index 000000000..9bfd7eb59 Binary files /dev/null and b/argopy/tests/test_data/ff62472ef5a790478cf50d8e63aa6e99c02dcff5b172214d1b1b62e3a8db55c9.nc differ diff --git a/argopy/tests/test_data/httpmocked_uri_index.json b/argopy/tests/test_data/httpmocked_uri_index.json index 6c3b3352a..9f1b29a33 100644 --- a/argopy/tests/test_data/httpmocked_uri_index.json +++ b/argopy/tests/test_data/httpmocked_uri_index.json @@ -1,4 +1,753 @@ [ + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900590/profiles/D4900590_097.nc", + "ext": "nc", + "sha": "080a17b21720d217a7133793e7ab59b63d25d6c906c9450fdfaccf3bc4a744db", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900590/profiles/D4900590_098.nc", + "ext": "nc", + "sha": "83635c933da3eac1d20befec7f854123fe801bc21ba1be3a70fcf1aa4a91b959", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_035.nc", + "ext": "nc", + "sha": "b4d460492596ee7223a67d9c22b832d131394f4e3e4996e61cb051a8b1b01ec4", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_036.nc", + "ext": "nc", + "sha": "ff62472ef5a790478cf50d8e63aa6e99c02dcff5b172214d1b1b62e3a8db55c9", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_037.nc", + "ext": "nc", + "sha": "1acc7a2efa94cb51f421c84a3d388ce830e391ad2edee6780c8b12190086bb67", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_029.nc", + "ext": "nc", + "sha": "ed8e71e5e526f35ba5e136d190f881c0e947255e4570c15d20a9bbee1efaf3b9", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_030.nc", + "ext": "nc", + "sha": "b2dc40b30dcd980d69fda58a3c92b1c6a69d4e412a253aa07642f221cf6bc62d", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_031.nc", + "ext": "nc", + "sha": "36c912d1df5cf2f51d10f7b8ebb175af7792132255504615a95ea040611ace18", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_032.nc", + "ext": "nc", + "sha": "3fb35a9171d55a7f1aab677719dbb886e470fa044ec64b9fdeffbbb5a02f06a0", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900883/profiles/D4900883_026.nc", + "ext": "nc", + "sha": "1f4d27d475fe4f63ecf0ff337664e06ed4a5dc37befabf5a3dc667d3d088bb38", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4900883/profiles/D4900883_027.nc", + "ext": "nc", + "sha": "f17ea8164b719ce0bd998f9911be425b80d11d4e18b837038f28ee559c09af03", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4901079/profiles/D4901079_010.nc", + "ext": "nc", + "sha": "160b0992e24369dcc8e4136c9744ec0fd6514f216caaed13eea35278c3f38015", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:49" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/13857_prof.nc", + "ext": "nc", + "sha": "5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:55:51" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_090.nc", + "ext": "nc", + "sha": "4e9df0cd2c6efef84b0d943a7480ef7ed4786fb0fee851713dfb1bffb61f8928", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:09" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900564/3900564_prof.nc", + "ext": "nc", + "sha": "148da521a45d125dd127860a552fd231b10fe1fbf85c0b491c8d732a6ade0191", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902415/1902415_prof.nc", + "ext": "nc", + "sha": "28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902072/1902072_prof.nc", + "ext": "nc", + "sha": "62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900818/1900818_prof.nc", + "ext": "nc", + "sha": "769ba7376a0f14aa14f310bf323ecea1885da9113b36a1a8bc3a5508c0eb5a00", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901709/1901709_prof.nc", + "ext": "nc", + "sha": "9361751935dfa1ca2d0bd61eec17c517b9d7f47cc01e7c34dcc55b67addeae19", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900783/1900783_prof.nc", + "ext": "nc", + "sha": "20cbe5a0eed5d67a198d8f87770d554409deabcb79acfcc63c900443812c379a", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902401/1902401_prof.nc", + "ext": "nc", + "sha": "40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902400/1902400_prof.nc", + "ext": "nc", + "sha": "e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900296/3900296_prof.nc", + "ext": "nc", + "sha": "2c26380148e45b76e7f5d8867e84405be9e5f4f1a5211e89abb36b7e8ce7e859", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900500/1900500_prof.nc", + "ext": "nc", + "sha": "8953e390e5d3c15c828b78237fcc2e248e2a86fe03b6282a7e848325d3ee3cb6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902414/1902414_prof.nc", + "ext": "nc", + "sha": "37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902070/1902070_prof.nc", + "ext": "nc", + "sha": "d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/13859_prof.nc", + "ext": "nc", + "sha": "7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/39008/39008_prof.nc", + "ext": "nc", + "sha": "98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901589/1901589_prof.nc", + "ext": "nc", + "sha": "34bdcd0292644dec5925b7d89a311a9021f11a0e35ac5d0889aae181be9a76b6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901458/1901458_prof.nc", + "ext": "nc", + "sha": "01b049d8bfb0a4e104e59f3e084e763c4a0e78606476144ec3657abe695a2f5e", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901806/1901806_prof.nc", + "ext": "nc", + "sha": "700ae50b274601f3a221689ea7b3b76d46e5035832ecd6d1fdf341edfe27a597", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901692/1901692_prof.nc", + "ext": "nc", + "sha": "125fbde9f271588262a6abce052f563406e76fabc97154c4b4592d256c69b200", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902436/1902436_prof.nc", + "ext": "nc", + "sha": "60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3901242/3901242_prof.nc", + "ext": "nc", + "sha": "44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901462/1901462_prof.nc", + "ext": "nc", + "sha": "2ae6fc97206e120dde68592ec863c874fc7cff132749bbbdf6c48865c60d24d5", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900561/1900561_prof.nc", + "ext": "nc", + "sha": "465e4dda08985393838c626c8e77396b9fe39a06b993467dd2d442a24c472d7b", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900707/3900707_prof.nc", + "ext": "nc", + "sha": "1d8ba196cf4c82844027ad17622e31cd214cecb1881015341f9c90103bbb2a2a", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901685/1901685_prof.nc", + "ext": "nc", + "sha": "705387652d52a694d070c7c18e1616530e2544f7539d6d5e210332d86cfe23f9", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/13858_prof.nc", + "ext": "nc", + "sha": "729d60a7d1b546ab122bcd8f2f88550652bd0a92de69c3b528fcd45b2b2707e6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901467/1901467_prof.nc", + "ext": "nc", + "sha": "2dc90517bda298b776b21e5f2510769216c153e4fd1b6b7ade4c9a1803aec902", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901449/1901449_prof.nc", + "ext": "nc", + "sha": "99b96aa829f6683cb035a11eb1628e5d03f9168ef52e964ed8a3dccd67390054", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900706/3900706_prof.nc", + "ext": "nc", + "sha": "87b2352dbddbca447627615252066c642bb2f5b1d16c59a64e226eeffe65914d", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901820/1901820_prof.nc", + "ext": "nc", + "sha": "3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901450/1901450_prof.nc", + "ext": "nc", + "sha": "661a469dfbbd13a6c296ab4bf13d142f073cb2699998ed8575f4f7b6e796c996", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901826/1901826_prof.nc", + "ext": "nc", + "sha": "1e8980bc79037a776ceb21fde05c9ac45420e41013a1851d308666552e8ce8ee", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:26" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_001.nc", + "ext": "nc", + "sha": "2a9b5707641619c5b1ca7b1c52592b9f6cb0eb5cf881f4949efa077dfae827e2", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:43" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_002.nc", + "ext": "nc", + "sha": "45652933808cd84c1ce148997eccb0ea479e8f889234a5bf07f75493aa1a8fd9", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:43" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_003.nc", + "ext": "nc", + "sha": "78243381c2623886a0d2356bc701ffcdf743acd8eb3b63f3f8976d9abfc1c55f", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:43" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/profiles/R13858_004.nc", + "ext": "nc", + "sha": "5974bc7ae4645de10b254671f22517dea9b886a8d07daa633740d4be56654848", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:43" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/profiles/D13859_001.nc", + "ext": "nc", + "sha": "73dd0e98a037066a5f27c86ae54de2808e4a1c233d180613956eab1b6df76233", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:56:43" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902797/6902797_prof.nc", + "ext": "nc", + "sha": "dc5f698865514e42fcf917ba5858fa5acc625759ddd259d11c038c2ea4126b78", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900475/6900475_prof.nc", + "ext": "nc", + "sha": "019b4adbffbab7b37a27ebc246fcbf5cd05151d2336fc569f71e4df16e8fd3c7", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900719/6900719_prof.nc", + "ext": "nc", + "sha": "f7b3c1047634dc88dfb8d3c33d7f0992a0b1d876db456371fc4877ba337e8fc7", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6901613/6901613_prof.nc", + "ext": "nc", + "sha": "e5732eb4dda9e8667d76797504011933db16d890e9d70854926859e59f0a3073", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900723/6900723_prof.nc", + "ext": "nc", + "sha": "7bc599fbe45a202b2278e357e6b6fe037304419396cd02833495c003539bb1cb", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/bodc/3901897/3901897_prof.nc", + "ext": "nc", + "sha": "47271cb181c2030db5f74893d5d36738c6e1d8a171b94d9e71104941f1710e41", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900722/6900722_prof.nc", + "ext": "nc", + "sha": "0e9c27c82d0c2e9679362bfa84f9cf2ef48beb334db595c89749ba987170ef06", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900554/1900554_prof.nc", + "ext": "nc", + "sha": "365b7aa03347c618d2d54eb931772de7e8384ba26a27ce0624ccaf3de11a8afd", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3901820/3901820_prof.nc", + "ext": "nc", + "sha": "e608bf7d88137ef8820f21b4fbe9d69f48526bf08cf0f9b1eaf74618b04aa69b", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902929/6902929_prof.nc", + "ext": "nc", + "sha": "0dfb6a6580fa82a8bedbb59a1e3c87f0957ac833b03a3f335b6a634d4e9361fa", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903057/6903057_prof.nc", + "ext": "nc", + "sha": "735ed164d2c11df8099df6ea2369e565586771aa43c827ccc036c5fe684aaa13", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3901821/3901821_prof.nc", + "ext": "nc", + "sha": "ad6b572b13ab8d3edf5c1b45f5380f08a1c1c936229c1e3fda0fa5923c29b7cc", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4901210/4901210_prof.nc", + "ext": "nc", + "sha": "c2b71e0b4bc14ebc8d12e67e55f09400922b5ec2d7f5c9c9009c3fc3e9b7703f", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902761/6902761_prof.nc", + "ext": "nc", + "sha": "41c4db7ed31adf4449961b8b34a9a856ca4dcd79d89662f2d575552c2f5f6f06", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1901094/1901094_prof.nc", + "ext": "nc", + "sha": "fda439a960b77186bc4040ace9ff7dab03168236d9f7b1e641c4e7d09b844c47", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/3900279/3900279_prof.nc", + "ext": "nc", + "sha": "61917ff2d9b59956b4aca43d4d57b0f8a6946afff0af6d2f2615e66dffd502c9", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902651/6902651_prof.nc", + "ext": "nc", + "sha": "dc5827c801510b7d479bb6bc13d9132ba382518ba1a8341b8b661e915efdc1bb", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900987/6900987_prof.nc", + "ext": "nc", + "sha": "16d2fa09176ea62a5e4eb8a3588294549fecfca9a4c7a07a1bc2d3716214e9b8", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903110/6903110_prof.nc", + "ext": "nc", + "sha": "a83d9b99104664bffe788222d6b31a0a378a44ccf043dbfeeb163683caaff618", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900893/6900893_prof.nc", + "ext": "nc", + "sha": "db3b0b305a82aca68fb1f8b07ca9ca020a56264ca784f32cecb77881a51687ba", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900659/1900659_prof.nc", + "ext": "nc", + "sha": "c6d8d73e9a3350bf04b5e2f11a6989d7512068976e8d20e0742189f4df0e126e", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903877/6903877_prof.nc", + "ext": "nc", + "sha": "e321c4b25b215f421519e5acf82e20c5f66996c13e6b83b48be2aee0f29ef1e6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6901744/6901744_prof.nc", + "ext": "nc", + "sha": "6b04da67d0598a32392f85b469cf026c479f56046d63ed7f85abd0d9a9f168b8", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1902714/1902714_prof.nc", + "ext": "nc", + "sha": "bacbd07e0afba6d01d7597363826b6afc1b634806681ce007e7b46c480bc0905", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/meds/4902562/4902562_prof.nc", + "ext": "nc", + "sha": "6e454d84f34f6acef9006b293415a151a0204741f9e83eccd65148d470de5966", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/3900280/3900280_prof.nc", + "ext": "nc", + "sha": "7ad2428472ef4ded1695e8cf24347e66f161d272e921ee575f97fd87399d2a29", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903103/6903103_prof.nc", + "ext": "nc", + "sha": "62e8638bbca580bd753f63b24a71ea78003b55b90f4553b48585c4e43c8b3ce2", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/bodc/3901984/3901984_prof.nc", + "ext": "nc", + "sha": "f3f2f2e8542bb36df9ce39281e10539b8f1097f65a3bb45a6048577235531aeb", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902650/6902650_prof.nc", + "ext": "nc", + "sha": "4ddaef0683a0c40229395cc47823226c9ee0943060c30febac669595896d376b", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902652/6902652_prof.nc", + "ext": "nc", + "sha": "188dc17daace1b9f740526fe2505346dc334834a50ea556e6582e875645e9076", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/39015/39015_prof.nc", + "ext": "nc", + "sha": "b8b77811a58f9104387ccdf3c5b15c0a423b74f0e3a4004bb172e6420fbe2cdd", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3901822/3901822_prof.nc", + "ext": "nc", + "sha": "237342843116e7049c58d6be5016e35df71f68bf0f5af13e7b7568d4fc66792f", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900521/1900521_prof.nc", + "ext": "nc", + "sha": "1dd408520ef51bdcacd149c07257bb8077236c3ec647a662c0b058bc917c7693", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902720/6902720_prof.nc", + "ext": "nc", + "sha": "994ed1468ad5f07e222e53b1347a6b181ecb94cc7f44966c9120b2ef995f4b5b", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/7902219/7902219_prof.nc", + "ext": "nc", + "sha": "b6d249b6279e498cf68862d5aafa0a7d5ff0859312c276519ba7d0e42687b2eb", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902984/6902984_prof.nc", + "ext": "nc", + "sha": "8b2d852d53d4be84265af171574572fdda8c3010c3c9cafac94e43c682101b00", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903876/6903876_prof.nc", + "ext": "nc", + "sha": "4510b05e1222d5c6536441f6b38315dba64c840b1b724cd7805d880e896eb32b", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902744/6902744_prof.nc", + "ext": "nc", + "sha": "9fe01870abc4cd5f8eb91f339f0b1a6bc685312caddcf17c191954b61c7e3270", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/7900508/7900508_prof.nc", + "ext": "nc", + "sha": "13dd29871c48db45dc00cd0e08cfe0bae9acf292d0b4a2d988561e4754704142", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900653/1900653_prof.nc", + "ext": "nc", + "sha": "5aa7afa6363875ae09cb1a60f1a1fd0eca826893b33aa9ab17bb00aa634012ae", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/bodc/3901983/3901983_prof.nc", + "ext": "nc", + "sha": "c061abcb4d69ee56b572e74cf6f116f5f9e8dde433cc47ffb149458001f35b15", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902724/6902724_prof.nc", + "ext": "nc", + "sha": "d82e5556f8f6ab64dc3167f2a8ef3b3899fe44ad7928096d9b3ac7098c67f88c", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6903047/6903047_prof.nc", + "ext": "nc", + "sha": "d2094b493fe9a024ac2d15875c86121e9082d0de03352cbec20d04583f9cf6b7", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4903477/4903477_prof.nc", + "ext": "nc", + "sha": "a03e92804ce3285fe29617ca8fa1f983b0083ad376d5ff89d9e4c6ea5963b8d6", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/39016/39016_prof.nc", + "ext": "nc", + "sha": "41dd8eb0c0c7e41ba4c7b790a4da7d18ed4fe097592c666c35bfe3fea8f5a6ea", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900207/1900207_prof.nc", + "ext": "nc", + "sha": "1f8f09a423f851204065e571596a40bc3afed15bf9193035cab40c5b266292ec", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/bodc/3901982/3901982_prof.nc", + "ext": "nc", + "sha": "8227a5ec989ae1e265ef8d1fb2d45f210b3a7573b76d4c10064ba0bd2e56f715", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900901/6900901_prof.nc", + "ext": "nc", + "sha": "17601e7143a31e4aaaedf33e57f62362fbd53b51ffe8b3f2b390e4d651ff7fce", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6900721/6900721_prof.nc", + "ext": "nc", + "sha": "d094010ac6949a807fddd4f9d569b73178c66170da882d0d9f445397a9732071", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/1900662/1900662_prof.nc", + "ext": "nc", + "sha": "f6b8b1d72b2af63f951225f01589bbfdba40bdd831761f6979352c85b8f1a815", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6902731/6902731_prof.nc", + "ext": "nc", + "sha": "77fb1bccfaff754c8e52678be20d6a37ea92de55e4979f890f22da2d0e436c2a", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/coriolis/6904139/6904139_prof.nc", + "ext": "nc", + "sha": "9021f4d79ef710f97a1e7164fe219b4981819e1ed5b2b28643fa214da096a98d", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4901459/4901459_prof.nc", + "ext": "nc", + "sha": "dfe0d4bacc3d7f5702e27331b08e21454f658f19c47de898bc6bec284aa60a3c", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/bodc/3901898/3901898_prof.nc", + "ext": "nc", + "sha": "6ab68f84a8aec43c0a99b2ec9742d0368f7bf4202d11295e32ae3a76fcf0dc54", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/4903231/4903231_prof.nc", + "ext": "nc", + "sha": "1139d8f8f6b747d3e07f600cfea195d35a9bc318689972a7ad825fc76ab02fb8", + "type": "application/x-netcdf", + "ts": "2026-06-18 11:57:00" + }, + { + "uri": "https://data-argo.ifremer.fr/ar_index_global_prof.txt.gz", + "ext": "gz", + "sha": "05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53", + "type": "application/x-gzip", + "ts": "2026-06-18 11:57:17" + }, + { + "uri": "https://data-argo.ifremer.fr/dac", + "ext": "html", + "sha": "c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d", + "type": "text/html", + "ts": "2026-06-18 11:57:17" + }, { "uri": "https://vocab.nerc.ac.uk/sparql?query=\n PREFIX dc: \n PREFIX sssom: \n PREFIX text: \n PREFIX skos: \n\n select ?subj ?pred ?obj where { ?a a sssom:Mapping .\n ?a sssom:subject_id ?subj .\n skos:member ?subj.\n ?a sssom:predicate_id ?pred .\n ?a sssom:object_id ?obj .\n skos:member ?obj.}\n ", "ext": "json", @@ -2148,13 +2897,6 @@ "type": "application/json", "ts": "2025-12-08 14:59:08" }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/13857_prof.nc", - "ext": "nc", - "sha": "5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230", - "type": "application/x-netcdf", - "ts": "2025-12-08 14:59:27" - }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_090.nc", "ext": "nc", @@ -2162,223 +2904,6 @@ "type": "application/x-netcdf", "ts": "2025-12-08 14:59:47" }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/13858_prof.nc", - "ext": "nc", - "sha": "729d60a7d1b546ab122bcd8f2f88550652bd0a92de69c3b528fcd45b2b2707e6", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901467/1901467_prof.nc", - "ext": "nc", - "sha": "2dc90517bda298b776b21e5f2510769216c153e4fd1b6b7ade4c9a1803aec902", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901458/1901458_prof.nc", - "ext": "nc", - "sha": "01b049d8bfb0a4e104e59f3e084e763c4a0e78606476144ec3657abe695a2f5e", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900706/3900706_prof.nc", - "ext": "nc", - "sha": "87b2352dbddbca447627615252066c642bb2f5b1d16c59a64e226eeffe65914d", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3901242/3901242_prof.nc", - "ext": "nc", - "sha": "44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902415/1902415_prof.nc", - "ext": "nc", - "sha": "28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901806/1901806_prof.nc", - "ext": "nc", - "sha": "700ae50b274601f3a221689ea7b3b76d46e5035832ecd6d1fdf341edfe27a597", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900296/3900296_prof.nc", - "ext": "nc", - "sha": "2c26380148e45b76e7f5d8867e84405be9e5f4f1a5211e89abb36b7e8ce7e859", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901692/1901692_prof.nc", - "ext": "nc", - "sha": "125fbde9f271588262a6abce052f563406e76fabc97154c4b4592d256c69b200", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902072/1902072_prof.nc", - "ext": "nc", - "sha": "62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900564/3900564_prof.nc", - "ext": "nc", - "sha": "148da521a45d125dd127860a552fd231b10fe1fbf85c0b491c8d732a6ade0191", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900500/1900500_prof.nc", - "ext": "nc", - "sha": "8953e390e5d3c15c828b78237fcc2e248e2a86fe03b6282a7e848325d3ee3cb6", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900707/3900707_prof.nc", - "ext": "nc", - "sha": "1d8ba196cf4c82844027ad17622e31cd214cecb1881015341f9c90103bbb2a2a", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/39008/39008_prof.nc", - "ext": "nc", - "sha": "98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/13859_prof.nc", - "ext": "nc", - "sha": "7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902414/1902414_prof.nc", - "ext": "nc", - "sha": "37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901820/1901820_prof.nc", - "ext": "nc", - "sha": "3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902400/1902400_prof.nc", - "ext": "nc", - "sha": "e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901826/1901826_prof.nc", - "ext": "nc", - "sha": "1e8980bc79037a776ceb21fde05c9ac45420e41013a1851d308666552e8ce8ee", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900561/1900561_prof.nc", - "ext": "nc", - "sha": "465e4dda08985393838c626c8e77396b9fe39a06b993467dd2d442a24c472d7b", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900818/1900818_prof.nc", - "ext": "nc", - "sha": "769ba7376a0f14aa14f310bf323ecea1885da9113b36a1a8bc3a5508c0eb5a00", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901685/1901685_prof.nc", - "ext": "nc", - "sha": "705387652d52a694d070c7c18e1616530e2544f7539d6d5e210332d86cfe23f9", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901462/1901462_prof.nc", - "ext": "nc", - "sha": "2ae6fc97206e120dde68592ec863c874fc7cff132749bbbdf6c48865c60d24d5", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902401/1902401_prof.nc", - "ext": "nc", - "sha": "40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901450/1901450_prof.nc", - "ext": "nc", - "sha": "661a469dfbbd13a6c296ab4bf13d142f073cb2699998ed8575f4f7b6e796c996", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901589/1901589_prof.nc", - "ext": "nc", - "sha": "34bdcd0292644dec5925b7d89a311a9021f11a0e35ac5d0889aae181be9a76b6", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902070/1902070_prof.nc", - "ext": "nc", - "sha": "d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901709/1901709_prof.nc", - "ext": "nc", - "sha": "9361751935dfa1ca2d0bd61eec17c517b9d7f47cc01e7c34dcc55b67addeae19", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902436/1902436_prof.nc", - "ext": "nc", - "sha": "60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901449/1901449_prof.nc", - "ext": "nc", - "sha": "99b96aa829f6683cb035a11eb1628e5d03f9168ef52e964ed8a3dccd67390054", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900783/1900783_prof.nc", - "ext": "nc", - "sha": "20cbe5a0eed5d67a198d8f87770d554409deabcb79acfcc63c900443812c379a", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" - }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_001.nc", "ext": "nc", @@ -2400,13 +2925,6 @@ "type": "application/x-netcdf", "ts": "2025-12-08 15:00:21" }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/profiles/R13858_004.nc", - "ext": "nc", - "sha": "5974bc7ae4645de10b254671f22517dea9b886a8d07daa633740d4be56654848", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" - }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/profiles/R13859_001.nc", "ext": "nc", @@ -2414,20 +2932,6 @@ "type": "application/x-netcdf", "ts": "2025-12-08 15:00:21" }, - { - "uri": "https://data-argo.ifremer.fr/ar_index_global_prof.txt.gz", - "ext": "gz", - "sha": "05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53", - "type": "application/x-gzip", - "ts": "2025-12-08 15:00:21" - }, - { - "uri": "https://data-argo.ifremer.fr/dac", - "ext": "html", - "sha": "c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d", - "type": "text/html", - "ts": "2025-12-08 15:00:21" - }, { "uri": "https://data-argo.ifremer.fr/dac/coriolis/5904989/5904989_Sprof.nc", "ext": "nc", @@ -3093,13 +3597,6 @@ "type": "application/x-netcdf", "ts": "2025-12-08 15:00:34" }, - { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/13857_prof.nc", - "ext": "nc", - "sha": "5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230", - "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:34" - }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/13857_tech.nc", "ext": "nc", diff --git a/argopy/tests/test_fetchers_dask_cluster.py b/argopy/tests/test_fetchers_dask_cluster.py index ae75af275..b54b2b0bd 100644 --- a/argopy/tests/test_fetchers_dask_cluster.py +++ b/argopy/tests/test_fetchers_dask_cluster.py @@ -4,7 +4,6 @@ distributed = pytest.importorskip("distributed", reason="Requires 'Dask' and 'distributed'") from dask.distributed import Client - import logging from argopy import DataFetcher from collections import ChainMap @@ -98,7 +97,6 @@ class Test_Backend: ############# def setup_class(self): """setup any state specific to the execution of the given class""" - # Create the cache folder here, so that it's not the same for the pandas and pyarrow tests self.client = Client(processes=True) log.debug("Dask dashboard: %s" % self.client.dashboard_link) @@ -110,6 +108,7 @@ def _test2fetcherargs(self, this_request): } if USE_MOCKED_SERVER: defaults_args["server"] = mocked_server_address + defaults_args["gdac"] = mocked_server_address src = this_request.param["src"] dataset = this_request.param["ds"] diff --git a/argopy/tests/test_fetchers_data_gdac.py b/argopy/tests/test_fetchers_data_gdac.py index 23665c424..4663af034 100644 --- a/argopy/tests/test_fetchers_data_gdac.py +++ b/argopy/tests/test_fetchers_data_gdac.py @@ -4,6 +4,7 @@ Here we try an approach based on fixtures and pytest parametrization to make more explicit the full list of scenario tested. """ + import sys import xarray as xr @@ -33,16 +34,15 @@ Since the fetcher is compatible with host from local, http or ftp protocols, we try to test them all: """ HOSTS = [ - argopy.tutorial.open_dataset("gdac")[0], - MOCKHTTP, - 'MOCKFTP', - ] + argopy.tutorial.open_dataset("gdac")[0], + MOCKHTTP, + "MOCKFTP", +] if has_s3: # todo Create a mocked server for s3 tests HOSTS.append("s3://argo-gdac-sandbox/pub") # todo: How do we mock a s3 server ? - """ List access points to be tested. For each access points, we list 1-to-2 scenario to make sure all possibilities are tested @@ -50,42 +50,52 @@ ACCESS_POINTS = [ {"float": [13857]}, {"profile": [13857, 90]}, - {"region": [-20, -16., 0, 1, 0, 100.]}, - {"region": [-20, -16., 0, 1, 0, 100., "1997-07-01", "1997-09-01"]}, - ] - -""" -List parallel methods to be tested. -""" -valid_parallel_opts = [ - {"parallel": "thread"}, - # {"parallel": True, "parallel_method": "thread"}, # opts0 - # {"parallel": True, "parallel_method": "process"} # opts1 + {"region": [-20, -16.0, 0, 1, 0, 100.0]}, + {"region": [-20, -16.0, 0, 1, 0, 100.0, "1997-07-01", "1997-09-01"]}, ] +# PARALLEL_ACCESS_POINTS = [ +# {"float": [1900468, 1900117, 1900386]}, +# {"region": [-60, -55, 40.0, 45.0, 0.0, 20.0]}, +# {"region": [-60, -55, 40.0, 45.0, 0.0, 20.0, "2007-08-01", "2007-09-01"]}, +# ] + +# """ +# List parallel methods to be tested. +# +# For a Dask client, see the dedicated test_fetchers_dask_cluster.py +# +# #todo The parallel fetching integration is not tested with the GDAC data fetcher +# +# """ +# PARALLEL_OPTS = [ +# {"parallel": "thread"}, +# # {"parallel": True, "parallel_method": "thread"}, # opts0 +# # {"parallel": True, "parallel_method": "process"} # opts1 +# ] """ List user modes to be tested """ -USER_MODES = ['standard', 'expert', 'research'] +USER_MODES = ["standard", "expert", "research"] @requires_gdac def create_fetcher(fetcher_args, access_point): - """ Create a fetcher for a given set of facade options and access point + """Create a fetcher for a given set of facade options and access point""" - """ def core(fargs, apts): try: f = ArgoDataFetcher(**fargs) if "float" in apts: - f = f.float(apts['float']) + f = f.float(apts["float"]) elif "profile" in apts: - f = f.profile(*apts['profile']) + f = f.profile(*apts["profile"]) elif "region" in apts: - f = f.region(apts['region']) + f = f.region(apts["region"]) except Exception: raise return f + fetcher = core(fetcher_args, access_point) return fetcher @@ -93,32 +103,35 @@ def core(fargs, apts): def assert_fetcher(server, this_fetcher, cacheable=False): """Assert a data fetcher. - This should be used by all tests + This should be used by all tests """ try: - assert isinstance(this_fetcher.to_xarray(errors='raise'), xr.Dataset) + assert isinstance(this_fetcher.to_xarray(errors="raise"), xr.Dataset) except PermissionError: - if sys.platform.startswith('win32') or sys.platform.startswith('cygwin'): - pytest.xfail("Fails because of Windows permissions error that can't be fixed (e.g. https://github.com/python/cpython/issues/66305)") + if sys.platform.startswith("win32") or sys.platform.startswith("cygwin"): + pytest.xfail( + "Fails because of Windows permissions error that can't be fixed (e.g. https://github.com/python/cpython/issues/66305)" + ) else: raise core = this_fetcher.fetcher assert is_list_of_strings(core.uri) - assert (core.N_RECORDS >= 1) # Make sure we loaded the index file content - assert (core.N_FILES >= 1) # Make sure we found results + assert core.N_RECORDS >= 1 # Make sure we loaded the index file content + assert core.N_FILES >= 1 # Make sure we found results if cacheable: assert is_list_of_strings(core.cachepath) def gdac_shortname(gdac): """Get a short name for scenarios IDs, given a FTP host""" - if gdac == 'MOCKFTP': - return 'ftp_mocked' - elif 'localhost' in gdac or '127.0.0.1' in gdac: - return 'http_mocked' + if gdac == "MOCKFTP": + return "ftp_mocked" + elif "localhost" in gdac or "127.0.0.1" in gdac: + return "http_mocked" else: - return (lambda x: 'file' if x == "" else x)(urlparse(gdac).scheme) + return (lambda x: "file" if x == "" else x)(urlparse(gdac).scheme) + """ Make a list of VALID host/dataset/access_points to be tested @@ -127,14 +140,38 @@ def gdac_shortname(gdac): for host in HOSTS: for mode in USER_MODES: for ap in ACCESS_POINTS: - VALID_ACCESS_POINTS.append({'host': host, 'ds': 'phy', 'mode': mode, 'access_point': ap}) - VALID_ACCESS_POINTS_IDS.append("host='%s', ds='%s', mode='%s', %s" % (gdac_shortname(host), 'phy', mode, ap)) - - + VALID_ACCESS_POINTS.append( + {"host": host, "ds": "phy", "mode": mode, "access_point": ap} + ) + VALID_ACCESS_POINTS_IDS.append( + "host='%s', ds='%s', mode='%s', %s" + % (gdac_shortname(host), "phy", mode, ap) + ) + + +#todo The parallel fetching integration is not tested with the GDAC data fetcher +# VALID_PARALLEL_ACCESS_POINTS, VALID_PARALLEL_ACCESS_POINTS_IDS = [], [] +# for host in HOSTS: +# for mode in USER_MODES: +# for ap in PARALLEL_ACCESS_POINTS: +# for opts in PARALLEL_OPTS: +# VALID_PARALLEL_ACCESS_POINTS.append( +# { +# "host": host, +# "ds": "phy", +# "mode": mode, +# "parallel_opts": opts, +# "access_point": ap, +# } +# ) +# VALID_PARALLEL_ACCESS_POINTS_IDS.append( +# f"host='{gdac_shortname(host)}', ds='phy', mode='{mode}', parallel='{opts}', {ap}" +# ) +# @requires_gdac class TestBackend: - src = 'gdac' + src = "gdac" ############# # UTILITIES # @@ -150,19 +187,22 @@ def _patch_gdac(self, gdac): def _setup_fetcher(self, this_request, cached=False, parallel=False): """Helper method to set up options for a fetcher creation""" - gdac = this_request.param['host'] - access_point = this_request.param['access_point'] - N_RECORDS = None if 'tutorial' in gdac or 'MOCK' in gdac else 100 # Make sure we're not going to load the full index - - fetcher_args = {"src": self.src, - "gdac": self._patch_gdac(gdac), - "ds": this_request.param['ds'], - "mode": this_request.param['mode'], - "cache": cached, - "cachedir": self.cachedir, - "parallel": False, - "N_RECORDS": N_RECORDS, - } + gdac = this_request.param["host"] + access_point = this_request.param["access_point"] + N_RECORDS = ( + None if "tutorial" in gdac or "MOCK" in gdac else 100 + ) # Make sure we're not going to load the full index + + fetcher_args = { + "src": self.src, + "gdac": self._patch_gdac(gdac), + "ds": this_request.param["ds"], + "mode": this_request.param["mode"], + "cache": cached, + "cachedir": self.cachedir, + "parallel": False, + "N_RECORDS": N_RECORDS, + } if not cached: # cache is False by default, so we don't need to clutter the arguments list @@ -172,37 +212,46 @@ def _setup_fetcher(self, this_request, cached=False, parallel=False): # parallel is False by default, so we don't need to clutter the arguments list del fetcher_args["parallel"] - if not check_gdac_path(fetcher_args['gdac']): - pytest.xfail("Fails because %s cannot be reached" % fetcher_args['gdac']) + if not check_gdac_path(fetcher_args["gdac"]): + pytest.xfail("Fails because %s cannot be reached" % fetcher_args["gdac"]) else: return fetcher_args, access_point @pytest.fixture def fetcher(self, request, mocked_httpserver): - """ Fixture to create a GDAC fetcher for a given host and access point """ + """Fixture to create a GDAC fetcher for a given host and access point""" fetcher_args, access_point = self._setup_fetcher(request, cached=False) yield create_fetcher(fetcher_args, access_point) @pytest.fixture def cached_fetcher(self, request): - """ Fixture to create a cached FTP fetcher for a given host and access point """ + """Fixture to create a cached FTP fetcher for a given host and access point""" fetcher_args, access_point = self._setup_fetcher(request, cached=True) yield create_fetcher(fetcher_args, access_point) def teardown_class(self): """Cleanup once we are finished.""" + def remove_test_dir(): shutil.rmtree(self.cachedir) + remove_test_dir() ######### # TESTS # ######### - @pytest.mark.parametrize("fetcher", VALID_ACCESS_POINTS, indirect=True, ids=VALID_ACCESS_POINTS_IDS) + @pytest.mark.parametrize( + "fetcher", VALID_ACCESS_POINTS, indirect=True, ids=VALID_ACCESS_POINTS_IDS + ) def test_fetching(self, mocked_httpserver, fetcher): assert_fetcher(mocked_httpserver, fetcher, cacheable=False) - @pytest.mark.parametrize("cached_fetcher", VALID_ACCESS_POINTS, indirect=True, ids=VALID_ACCESS_POINTS_IDS) + @pytest.mark.parametrize( + "cached_fetcher", + VALID_ACCESS_POINTS, + indirect=True, + ids=VALID_ACCESS_POINTS_IDS, + ) def test_fetching_cached(self, mocked_httpserver, cached_fetcher): # Assert the fetcher (this trigger data fetching, hence caching as well): assert_fetcher(mocked_httpserver, cached_fetcher, cacheable=True) @@ -212,6 +261,8 @@ def test_fetching_cached(self, mocked_httpserver, cached_fetcher): cached_fetcher.fetcher.cachepath def test_uri_mono2multi(self, mocked_httpserver): - ap = [v for v in ACCESS_POINTS if 'region' in v.keys()][0] - f = create_fetcher({"src": self.src, "gdac": HOSTS[0], "N_RECORDS": 100}, ap).fetcher + ap = [v for v in ACCESS_POINTS if "region" in v.keys()][0] + f = create_fetcher( + {"src": self.src, "gdac": HOSTS[0], "N_RECORDS": 100}, ap + ).fetcher assert is_list_of_strings(f.uri_mono2multi(f.uri)) diff --git a/argopy/tests/test_fetchers_facade_data.py b/argopy/tests/test_fetchers_facade_data.py index 6d3895067..1e7b13289 100644 --- a/argopy/tests/test_fetchers_facade_data.py +++ b/argopy/tests/test_fetchers_facade_data.py @@ -11,7 +11,7 @@ OptionValueError, ) from argopy.utils import is_list_of_strings -from utils import ( +from argopy.tests.helpers.utils import ( requires_fetcher, requires_connection, requires_connected_erddap_phy, @@ -25,8 +25,12 @@ has_seaborn, has_cartopy, has_ipython, + ) +from mocked_http import mocked_httpserver +from mocked_http import mocked_server_address as MOCKHTTP + if has_matplotlib: import matplotlib as mpl @@ -101,24 +105,15 @@ def test_to_dataframe(self): with pytest.raises(InvalidFetcher): assert self.__get_fetcher()[0].to_dataframe() - params = [(p, c) for p in [True, False] for c in [False]] + params = [(p, c) for p in [True, False] for c in [False, True]] ids_params = ["full=%s, coriolis_id=%s" % (p[0], p[1]) for p in params] @pytest.mark.parametrize("params", params, indirect=False, ids=ids_params) - def test_to_index(self, params): + def test_to_index(self, params, mocked_httpserver): full, coriolis_id = params - assert isinstance(self.__get_fetcher()[1].to_index(full=full, coriolis_id=coriolis_id), pd.core.frame.DataFrame) - - params = [(p, c) for p in [True, False] for c in [True]] - ids_params = ["full=%s, coriolis_id=%s" % (p[0], p[1]) for p in params] - @pytest.mark.parametrize("params", params, - indirect=False, - ids=ids_params) - @requires_connection - def test_to_index_coriolis(self, params): - full, coriolis_id = params - assert isinstance(self.__get_fetcher()[1].to_index(full=full, coriolis_id=coriolis_id), pd.core.frame.DataFrame) + with argopy.set_options(server=MOCKHTTP): + assert isinstance(self.__get_fetcher()[1].to_index(full=full, coriolis_id=coriolis_id), pd.core.frame.DataFrame) def test_load(self): f, fetcher = self.__get_fetcher(pt='float') @@ -178,13 +173,14 @@ def test_domain(self): f, fetcher = self.__get_fetcher(pt='float') fetcher.domain - def test_dashboard(self): - f, fetcher = self.__get_fetcher(pt='float') - assert isinstance(fetcher.dashboard(url_only=True), str) + def test_dashboard(self, mocked_httpserver): + with argopy.set_options(server=MOCKHTTP): + f, fetcher = self.__get_fetcher(pt='float') + assert isinstance(fetcher.dashboard(url_only=True), str) - f, fetcher = self.__get_fetcher(pt='profile') - assert isinstance(fetcher.dashboard(url_only=True), str) + f, fetcher = self.__get_fetcher(pt='profile') + assert isinstance(fetcher.dashboard(url_only=True), str) - with pytest.warns(UserWarning): - f, fetcher = self.__get_fetcher(pt='region') - fetcher.dashboard(url_only=True) + with pytest.warns(UserWarning): + f, fetcher = self.__get_fetcher(pt='region') + fetcher.dashboard(url_only=True) diff --git a/argopy/tests/test_fetchers_facade_index.py b/argopy/tests/test_fetchers_facade_index.py deleted file mode 100644 index e689ec929..000000000 --- a/argopy/tests/test_fetchers_facade_index.py +++ /dev/null @@ -1,131 +0,0 @@ -import pytest -import importlib - -import argopy -from argopy import IndexFetcher as ArgoIndexFetcher -from argopy.errors import InvalidFetcherAccessPoint, OptionValueError -from utils import ( - # AVAILABLE_INDEX_SOURCES, - requires_fetcher_index, - requires_connected_erddap_index, - requires_connected_gdac, - requires_connection, - requires_ipython, - ci_erddap_index, - requires_matplotlib, - has_matplotlib, - has_seaborn, - has_cartopy -) - - -if has_matplotlib: - import matplotlib as mpl - -if has_cartopy: - import cartopy - - -skip_for_debug = pytest.mark.skipif(True, reason="Taking too long !") - - -@requires_connection -class Test_Facade: - local_ftp = argopy.tutorial.open_dataset("gdac")[0] - src = 'gdac' - src_opts = {'ftp': local_ftp} - - def __get_fetcher(self, empty: bool = False, pt: str = 'profile'): - f = ArgoIndexFetcher(src=self.src, **self.src_opts) - - if pt == 'float': - if not empty: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).float(2901623) - else: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).float(12) - - if pt == 'profile': - if not empty: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).profile(2901623, 12) - else: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).profile(12, 1200) - - if pt == 'region': - if not empty: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).region([-60, -55, 40.0, 45.0, 0.0, 10.0, - "2007-08-01", "2007-09-01"]) - else: - return f, ArgoIndexFetcher(src=self.src, **self.src_opts).region([-60, -55, 40.0, 45.0, 99.92, 99.99, - "2007-08-01", "2007-08-01"]) - - def test_invalid_fetcher(self): - with pytest.raises(OptionValueError): - ArgoIndexFetcher(src="invalid_fetcher").to_xarray() - - @requires_fetcher_index - def test_invalid_accesspoint(self): - # Use the first valid data source - with pytest.raises(InvalidFetcherAccessPoint): - ArgoIndexFetcher( - src=self.src, **self.src_opts - ).invalid_accesspoint.to_xarray() # Can't get data if access point not defined first - with pytest.raises(InvalidFetcherAccessPoint): - ArgoIndexFetcher( - src=self.src, **self.src_opts - ).to_xarray() # Can't get data if access point not defined first - - @requires_fetcher_index - def test_invalid_dataset(self): - with pytest.raises(ValueError): - ArgoIndexFetcher(src=self.src, ds='dummy_ds', **self.src_opts) - - @requires_matplotlib - def test_plot(self): - f, fetcher = self.__get_fetcher(pt='float') - - # Test 'trajectory' - for ws in [False, has_seaborn]: - for wc in [False, has_cartopy]: - for legend in [True, False]: - fig, ax = fetcher.plot(ptype='trajectory', with_seaborn=ws, with_cartopy=wc, add_legend=legend) - assert isinstance(fig, mpl.figure.Figure) - - expected_ax_type = ( - cartopy.mpl.geoaxes.GeoAxesSubplot - if has_cartopy and wc - else mpl.axes.Axes - ) - assert isinstance(ax, expected_ax_type) - - expected_lg_type = mpl.legend.Legend if legend else type(None) - assert isinstance(ax.get_legend(), expected_lg_type) - - mpl.pyplot.close(fig) - - # Test 'dac', 'profiler' - for ws in [False, has_seaborn]: - for by in [ - "dac", - "profiler" - ]: - fig, ax = fetcher.plot(ptype=by, with_seaborn=ws) - assert isinstance(fig, mpl.figure.Figure) - mpl.pyplot.close(fig) - - # Test 'qc_altimetry' - if importlib.util.find_spec('IPython') is not None: - import IPython - dsh = fetcher.plot(ptype='qc_altimetry', embed='slide') - assert isinstance(dsh(0), IPython.display.Image) - - # Test invalid plot - with pytest.raises(ValueError): - fetcher.plot(ptype='invalid_cat', with_seaborn=ws) - - @requires_ipython - @requires_matplotlib - def test_plot_qc_altimetry(self): - import IPython - f, fetcher = self.__get_fetcher(pt='float') - dsh = fetcher.plot(ptype='qc_altimetry', embed='slide') - assert isinstance(dsh(0), IPython.display.Image) diff --git a/argopy/tests/test_fetchers_proto.py b/argopy/tests/test_fetchers_proto.py index 0e7c04a6b..f2eac41c9 100644 --- a/argopy/tests/test_fetchers_proto.py +++ b/argopy/tests/test_fetchers_proto.py @@ -1,6 +1,7 @@ import pytest import logging +import argopy import xarray from argopy.data_fetchers.proto import ArgoDataFetcherProto from argopy.utils import to_list @@ -46,20 +47,21 @@ def test_required_methods(): f.filter_researchmode(xarray.Dataset) -@pytest.mark.parametrize("profile", [[13857, None], [13857, 90]], +@pytest.mark.parametrize("profile", [[6901929, None], [6901929, 90]], indirect=False, - ids=["%s" % p for p in [[13857, None], [13857, 90]]]) -def test_dashboard(profile): - #todo Use the mocked_httpserver here + ids=["%s" % p for p in [[6901929, None], [6901929, 90]]]) +def test_dashboard(profile, mocked_httpserver): - f = Fetcher() - f.WMO, f.CYC = profile - f.WMO = to_list(f.WMO) - f.CYC = to_list(f.CYC) - assert isinstance(f.dashboard(url_only=True), str) + with argopy.set_options(server=mocked_server_address): - with pytest.warns(UserWarning): f = Fetcher() - f.WMO = [1901393, 6902746] - f.CYC = None - f.dashboard(url_only=True) + f.WMO, f.CYC = profile + f.WMO = to_list(f.WMO) + f.CYC = to_list(f.CYC) + assert isinstance(f.dashboard(url_only=True), str) + + with pytest.warns(UserWarning): + f = Fetcher() + f.WMO = [1901393, 6902746] + f.CYC = None + f.dashboard(url_only=True) diff --git a/argopy/tests/test_stores_float_metaconfig.py b/argopy/tests/test_stores_float_metaconfig.py index 43751f5cd..65bd002dd 100644 --- a/argopy/tests/test_stores_float_metaconfig.py +++ b/argopy/tests/test_stores_float_metaconfig.py @@ -4,8 +4,13 @@ import pandas as pd import tempfile -import argopy -from argopy.stores import ArgoFloat +import argopy as ar + +# Load both implementations: +# (this import method does not register the static extensions) +from argopy.stores.float.implementations.online.float import FloatStore as OnlineArgoFloat +from argopy.stores.float.implementations.offline.float import FloatStore as OfflineArgoFloat + from argopy.stores.float.implementations.online.meta_config import ( ConfigParameters as config_on, ) @@ -19,7 +24,7 @@ from mocked_http import mocked_httpserver, mocked_server_address log = logging.getLogger("argopy.tests.floatstore.config") -argopy.clear_cache() +ar.clear_cache() skip_offline = pytest.mark.skipif(0, reason="Skipped tests for offline implementation") skip_online = pytest.mark.skipif(0, reason="Skipped tests for online implementation") @@ -28,6 +33,7 @@ List WMO to be tested, one for each mission """ VALID_WMO = [13857, 3902131] +# VALID_WMO = [13857] class FloatStore_Config_Proto: @@ -99,15 +105,15 @@ def test_to_dataframe(self, wmo, config, mocked_httpserver): @skip_offline @requires_gdac class Test_FloatStore_Config_Offline(FloatStore_Config_Proto): - af: dict[int, ArgoFloat] = {} + af: dict[int, OfflineArgoFloat] = {} # Define a fixture for an offline ArgoFloat instance (local store) @pytest.fixture def argo_float(self, wmo): if wmo not in self.af: - self.af[wmo] = ArgoFloat( + self.af[wmo] = OfflineArgoFloat( wmo, - host=argopy.tutorial.open_dataset("gdac")[0], + host=ar.tutorial.open_dataset("gdac")[0], cache=True, cachedir=self.cachedir, ) @@ -121,13 +127,13 @@ def config(self, argo_float): @skip_online class Test_FloatStore_Config_Online(FloatStore_Config_Proto): - af: dict[int, ArgoFloat] = {} + af: dict[int, OnlineArgoFloat] = {} # Define a fixture for an online ArgoFloat instance (but using mocked http) @pytest.fixture def argo_float(self, wmo, mocked_httpserver): if wmo not in self.af: - self.af[wmo] = ArgoFloat( + self.af[wmo] = OnlineArgoFloat( wmo, host=mocked_server_address, cache=True, diff --git a/argopy/tests/test_stores_float_plot.py b/argopy/tests/test_stores_float_plot.py index 7e239ec6c..3ac0bbd1d 100644 --- a/argopy/tests/test_stores_float_plot.py +++ b/argopy/tests/test_stores_float_plot.py @@ -21,17 +21,13 @@ log = logging.getLogger("argopy.tests.floatstore.plot") argopy.clear_cache() -skip_online = pytest.mark.skipif(0, reason="Skipped tests for online implementation") skip_offline = pytest.mark.skipif(0, reason="Skipped tests for offline implementation") - +#todo The `ArgoFloat.plot` integration testing does not cover the online implementation """ Select GDAC host to be use for plot extension tests """ VALID_HOST = argopy.tutorial.open_dataset("gdac")[0] # Use local files -# 'http1': mocked_server_address, # Use the mocked http server -# 'http2': 'https://data-argo.ifremer.fr', -# 'ftp': "MOCKFTP", # keyword to use a fake/mocked ftp server (running on localhost) """ List WMO to be tested, one for each mission diff --git a/cli/citests_httpdata_manager b/cli/citests_httpdata_manager index a6edafae2..be2063eb0 100755 --- a/cli/citests_httpdata_manager +++ b/cli/citests_httpdata_manager @@ -61,7 +61,6 @@ import logging import hashlib import numpy as np from pathlib import Path -import glob sys.path.append(os.path.join(os.path.dirname(__file__), "..")) import argopy @@ -125,6 +124,7 @@ DEFAULT_TARGETS = [ # Http requests time out in seconds: TIMEOUT = 60 * 10 + def setup_args(): icons_help_string = """CI Tests data manager for the http mocked server""" @@ -210,7 +210,13 @@ def setup_args(): def can_xr_be_opened(src, file): try: time_coder = xr.coders.CFDatetimeCoder(use_cftime=False) - xr.open_dataset(file, decode_cf=1, decode_times=time_coder, mask_and_scale=1, decode_timedelta=True) + xr.open_dataset( + file, + decode_cf=1, + decode_times=time_coder, + mask_and_scale=1, + decode_timedelta=True, + ) return src except: # print("This source can't be opened with xarray: %s" % src) @@ -653,6 +659,9 @@ class Lister: this_URI = UriRegistry(name="ifremer_gdac") server = "https://data-argo.ifremer.fr" + def add_to_URI(facade): + [this_URI.commit(self.dfile(uri, "nc")) for uri in facade.uri] + requests_seq = { "float": [[13857]], "profile": [[13857, 90]], @@ -662,9 +671,6 @@ class Lister: ], } - def add_to_URI(facade): - [this_URI.commit(self.dfile(uri, "nc")) for uri in facade.uri] - fetcher = DataFetcher(src="gdac", gdac=server, ds="phy", MAX_FILES=100) for access_point in requests_seq: [ @@ -683,6 +689,40 @@ class Lister: if access_point == "region" ] + # Parallel data fetching: + # Only used by test_fetchers_dask_cluster.py + # Parallel option is not implemented under test_fetchers_data_gdac.py ! + # Only 'thread' is used by test_fetchers_dask_cluster.py + requests_par = { + "region": [ + [-60, -55, 40.0, 45.0, 0.0, 20.0, "2007-08-01", "2007-09-01"], + ], + } + + fetcher = DataFetcher( + src="gdac", + gdac=server, + ds="phy", + parallel="thread", + chunks_maxsize={"lon": 2.5, "lat": 2.5}, + ) + for access_point in requests_par: + [ + add_to_URI(fetcher.profile(*cfg)) + for cfg in requests_par[access_point] + if access_point == "profile" + ] + [ + add_to_URI(fetcher.float(cfg)) + for cfg in requests_par[access_point] + if access_point == "float" + ] + [ + add_to_URI(fetcher.region(cfg)) + for cfg in requests_par[access_point] + if access_point == "region" + ] + # Add more URI from the IFREMER GDAC: this_URI.commit(self.dfile("%s/ar_index_global_prof.txt.gz" % server, "gz")) this_URI.commit(self.dfile("%s/dac" % server, "html")) @@ -870,8 +910,8 @@ class Lister: this_URI = UriRegistry(name="nvs_store") nvs = NVS_online() - RTID_TESTED = ['R27'] - CONCEPTID_TESTED = ['AANDERAA_OPTODE_3835'] + RTID_TESTED = ["R27"] + CONCEPTID_TESTED = ["AANDERAA_OPTODE_3835"] MAPPING_TESTED = [("R08", "R23")] for rtid in RTID_TESTED: @@ -884,10 +924,10 @@ class Lister: fmts = {"ld+json": "json", "rdf+xml": "xml", "text/turtle": "txt"} for fmt in fmts.keys(): - url = nvs._vocabulary2uri('R27', fmt=fmt) + url = nvs._vocabulary2uri("R27", fmt=fmt) this_URI.commit(self.dfile(unquote(url), fmts[fmt])) - url = nvs._concept2uri('AANDERAA_OPTODE_3835', fmt=fmt) + url = nvs._concept2uri("AANDERAA_OPTODE_3835", fmt=fmt) this_URI.commit(self.dfile(unquote(url), fmts[fmt])) for s, o in MAPPING_TESTED: @@ -981,7 +1021,7 @@ class Lister: this_URI = UriRegistry(name="argofloat") for wmo in [13857, 3902131]: - af = ArgoFloat(wmo, host='https') + af = ArgoFloat(wmo, host="https") this_URI.commit(self.dfile(af.path, "html")) uri = af.host_sep.join([af.path, "profiles"]) @@ -1098,35 +1138,39 @@ def consolidate(target=None): with open(DB_FILE, "r") as f: URIs = json.load(f) for item in URIs: - file_path = Path(DATA_FOLDER).joinpath( - "%s.%s" % (item["sha"], item["ext"]) - ) + file_path = Path(DATA_FOLDER).joinpath("%s.%s" % (item["sha"], item["ext"])) with open(file_path, mode="rb") as file: data = file.read() # if data[0:3] in [b"Err", b"502 Proxy Error" in data: - recommended = 'r' + recommended = "r" if b"The proxy server could not handle the request" in data: - recommended = 'r' + recommended = "r" - if b"Not Found: Your query produced no matching results. (nRows = 0)" in data: - recommended = 'k' + if ( + b"Not Found: Your query produced no matching results. (nRows = 0)" + in data + ): + recommended = "k" print("🚨 Unexpected %s content in: %s" % (item["type"], file_path)) print("▶ Record: ", item) print("▶ Content[0:100] = ", data[0:100]) txt = "?" while txt.lower() not in ["k", "r", ""]: - txt = input("What do you want to do with this record ? [k]eep or [r]emove (we recommend '%s')" % recommended) - if txt == "" and recommended == 'r': + txt = input( + "What do you want to do with this record ? [k]eep or [r]emove (we recommend '%s')" + % recommended + ) + if txt == "" and recommended == "r": txt = "r" - if txt == 'r': + if txt == "r": n_delete += 1 file_path.unlink() URIs.remove(item) diff --git a/cli/citests_httpdata_manager_ifremer_gdac.json b/cli/citests_httpdata_manager_ifremer_gdac.json index f38783b26..5f37a2892 100644 --- a/cli/citests_httpdata_manager_ifremer_gdac.json +++ b/cli/citests_httpdata_manager_ifremer_gdac.json @@ -4,279 +4,363 @@ "ext": "nc", "sha": "5baab8b80a58383f9f2a36c5f51282d3d5b673e9f2e3904c3dbb9ff600ceb230", "type": "application/x-netcdf", - "ts": "2025-12-08 14:59:27" + "ts": "2026-06-18 12:16:37" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_090.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_090.nc", "ext": "nc", - "sha": "61826c0b5eaa64c194edf932dad4a3588b4b557089ce8b045e3a327e22111227", + "sha": "4e9df0cd2c6efef84b0d943a7480ef7ed4786fb0fee851713dfb1bffb61f8928", "type": "application/x-netcdf", - "ts": "2025-12-08 14:59:47" + "ts": "2026-06-18 12:16:55" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/13858_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900707/3900707_prof.nc", "ext": "nc", - "sha": "729d60a7d1b546ab122bcd8f2f88550652bd0a92de69c3b528fcd45b2b2707e6", + "sha": "1d8ba196cf4c82844027ad17622e31cd214cecb1881015341f9c90103bbb2a2a", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901467/1901467_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901709/1901709_prof.nc", "ext": "nc", - "sha": "2dc90517bda298b776b21e5f2510769216c153e4fd1b6b7ade4c9a1803aec902", + "sha": "9361751935dfa1ca2d0bd61eec17c517b9d7f47cc01e7c34dcc55b67addeae19", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901458/1901458_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/3901242/3901242_prof.nc", "ext": "nc", - "sha": "01b049d8bfb0a4e104e59f3e084e763c4a0e78606476144ec3657abe695a2f5e", + "sha": "44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901450/1901450_prof.nc", + "ext": "nc", + "sha": "661a469dfbbd13a6c296ab4bf13d142f073cb2699998ed8575f4f7b6e796c996", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901462/1901462_prof.nc", + "ext": "nc", + "sha": "2ae6fc97206e120dde68592ec863c874fc7cff132749bbbdf6c48865c60d24d5", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900783/1900783_prof.nc", + "ext": "nc", + "sha": "20cbe5a0eed5d67a198d8f87770d554409deabcb79acfcc63c900443812c379a", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900564/3900564_prof.nc", + "ext": "nc", + "sha": "148da521a45d125dd127860a552fd231b10fe1fbf85c0b491c8d732a6ade0191", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901467/1901467_prof.nc", + "ext": "nc", + "sha": "2dc90517bda298b776b21e5f2510769216c153e4fd1b6b7ade4c9a1803aec902", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/3900706/3900706_prof.nc", "ext": "nc", "sha": "87b2352dbddbca447627615252066c642bb2f5b1d16c59a64e226eeffe65914d", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3901242/3901242_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901449/1901449_prof.nc", "ext": "nc", - "sha": "44cd4faa933a86d8833096fc987432a596715c33db7b44cdd140d9b8b5308295", + "sha": "99b96aa829f6683cb035a11eb1628e5d03f9168ef52e964ed8a3dccd67390054", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902401/1902401_prof.nc", + "ext": "nc", + "sha": "40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/13859_prof.nc", + "ext": "nc", + "sha": "7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901692/1901692_prof.nc", + "ext": "nc", + "sha": "125fbde9f271588262a6abce052f563406e76fabc97154c4b4592d256c69b200", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901820/1901820_prof.nc", + "ext": "nc", + "sha": "3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/1902415/1902415_prof.nc", "ext": "nc", "sha": "28a3d6682b41b12fa25eac5ca11b15de5abcb970ee991efe14d51712dd90405f", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/1901806/1901806_prof.nc", "ext": "nc", "sha": "700ae50b274601f3a221689ea7b3b76d46e5035832ecd6d1fdf341edfe27a597", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900296/3900296_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901589/1901589_prof.nc", "ext": "nc", - "sha": "2c26380148e45b76e7f5d8867e84405be9e5f4f1a5211e89abb36b7e8ce7e859", + "sha": "34bdcd0292644dec5925b7d89a311a9021f11a0e35ac5d0889aae181be9a76b6", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901692/1901692_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902400/1902400_prof.nc", "ext": "nc", - "sha": "125fbde9f271588262a6abce052f563406e76fabc97154c4b4592d256c69b200", + "sha": "e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902072/1902072_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901685/1901685_prof.nc", "ext": "nc", - "sha": "62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6", + "sha": "705387652d52a694d070c7c18e1616530e2544f7539d6d5e210332d86cfe23f9", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900564/3900564_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902070/1902070_prof.nc", "ext": "nc", - "sha": "148da521a45d125dd127860a552fd231b10fe1fbf85c0b491c8d732a6ade0191", + "sha": "d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900500/1900500_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901458/1901458_prof.nc", "ext": "nc", - "sha": "8953e390e5d3c15c828b78237fcc2e248e2a86fe03b6282a7e848325d3ee3cb6", + "sha": "01b049d8bfb0a4e104e59f3e084e763c4a0e78606476144ec3657abe695a2f5e", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/3900707/3900707_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/3900296/3900296_prof.nc", "ext": "nc", - "sha": "1d8ba196cf4c82844027ad17622e31cd214cecb1881015341f9c90103bbb2a2a", + "sha": "2c26380148e45b76e7f5d8867e84405be9e5f4f1a5211e89abb36b7e8ce7e859", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900818/1900818_prof.nc", + "ext": "nc", + "sha": "769ba7376a0f14aa14f310bf323ecea1885da9113b36a1a8bc3a5508c0eb5a00", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1901826/1901826_prof.nc", + "ext": "nc", + "sha": "1e8980bc79037a776ceb21fde05c9ac45420e41013a1851d308666552e8ce8ee", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/39008/39008_prof.nc", "ext": "nc", "sha": "98bab99907e1e8f80a4158a0b171b0187661247ba1760d7b66c6a7e5392bf225", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/13859_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902436/1902436_prof.nc", "ext": "nc", - "sha": "7424d25381dab63d8bf90539fcd38dbd8e2618ddb25552c1b47be04aee3eb47f", + "sha": "60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" + }, + { + "uri": "https://data-argo.ifremer.fr/dac/aoml/1902072/1902072_prof.nc", + "ext": "nc", + "sha": "62f05073f9219dce4491a0d29e730c2f71afbf5f17b83cd06dfaa5b0da08ece6", + "type": "application/x-netcdf", + "ts": "2026-06-18 12:17:12" }, { "uri": "https://data-argo.ifremer.fr/dac/aoml/1902414/1902414_prof.nc", "ext": "nc", "sha": "37b4fe616c2f98f48939f6dd7e69b4d52ebb965d9b5fddd9091c0898b4acd73a", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901820/1901820_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900561/1900561_prof.nc", "ext": "nc", - "sha": "3c16609cd4c11dda82abcb41f3a501ddc15c502e80507c41417fa61daa712b51", + "sha": "465e4dda08985393838c626c8e77396b9fe39a06b993467dd2d442a24c472d7b", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902400/1902400_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/1900500/1900500_prof.nc", "ext": "nc", - "sha": "e60de23c325823b63bad40d6bd763fd3f3c7408a08962f76b08f49bdba816448", + "sha": "8953e390e5d3c15c828b78237fcc2e248e2a86fe03b6282a7e848325d3ee3cb6", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901826/1901826_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/13858_prof.nc", "ext": "nc", - "sha": "1e8980bc79037a776ceb21fde05c9ac45420e41013a1851d308666552e8ce8ee", + "sha": "729d60a7d1b546ab122bcd8f2f88550652bd0a92de69c3b528fcd45b2b2707e6", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:12" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900561/1900561_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_001.nc", "ext": "nc", - "sha": "465e4dda08985393838c626c8e77396b9fe39a06b993467dd2d442a24c472d7b", + "sha": "2a9b5707641619c5b1ca7b1c52592b9f6cb0eb5cf881f4949efa077dfae827e2", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:32" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900818/1900818_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_002.nc", "ext": "nc", - "sha": "769ba7376a0f14aa14f310bf323ecea1885da9113b36a1a8bc3a5508c0eb5a00", + "sha": "45652933808cd84c1ce148997eccb0ea479e8f889234a5bf07f75493aa1a8fd9", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:32" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901685/1901685_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/D13857_003.nc", "ext": "nc", - "sha": "705387652d52a694d070c7c18e1616530e2544f7539d6d5e210332d86cfe23f9", + "sha": "78243381c2623886a0d2356bc701ffcdf743acd8eb3b63f3f8976d9abfc1c55f", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:32" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901462/1901462_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/profiles/R13858_004.nc", "ext": "nc", - "sha": "2ae6fc97206e120dde68592ec863c874fc7cff132749bbbdf6c48865c60d24d5", + "sha": "5974bc7ae4645de10b254671f22517dea9b886a8d07daa633740d4be56654848", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:32" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902401/1902401_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/profiles/D13859_001.nc", "ext": "nc", - "sha": "40fd4997660cf5b89a50139c7b931810371acb774849aa4f4c170669a1a3f8a5", + "sha": "73dd0e98a037066a5f27c86ae54de2808e4a1c233d180613956eab1b6df76233", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:32" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901450/1901450_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900590/profiles/D4900590_097.nc", "ext": "nc", - "sha": "661a469dfbbd13a6c296ab4bf13d142f073cb2699998ed8575f4f7b6e796c996", + "sha": "080a17b21720d217a7133793e7ab59b63d25d6c906c9450fdfaccf3bc4a744db", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901589/1901589_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900590/profiles/D4900590_098.nc", "ext": "nc", - "sha": "34bdcd0292644dec5925b7d89a311a9021f11a0e35ac5d0889aae181be9a76b6", + "sha": "83635c933da3eac1d20befec7f854123fe801bc21ba1be3a70fcf1aa4a91b959", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902070/1902070_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_035.nc", "ext": "nc", - "sha": "d091612ad7c1f8187ba25eefc9f68a303c39646626c425c891362909cf47bcc8", + "sha": "b4d460492596ee7223a67d9c22b832d131394f4e3e4996e61cb051a8b1b01ec4", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901709/1901709_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_036.nc", "ext": "nc", - "sha": "9361751935dfa1ca2d0bd61eec17c517b9d7f47cc01e7c34dcc55b67addeae19", + "sha": "ff62472ef5a790478cf50d8e63aa6e99c02dcff5b172214d1b1b62e3a8db55c9", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1902436/1902436_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/aoml/4900782/profiles/D4900782_037.nc", "ext": "nc", - "sha": "60066a9c43e4103277e70c81607c6a78e3d3db53dd7b65c40f519ae457218302", + "sha": "1acc7a2efa94cb51f421c84a3d388ce830e391ad2edee6780c8b12190086bb67", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1901449/1901449_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_029.nc", "ext": "nc", - "sha": "99b96aa829f6683cb035a11eb1628e5d03f9168ef52e964ed8a3dccd67390054", + "sha": "ed8e71e5e526f35ba5e136d190f881c0e947255e4570c15d20a9bbee1efaf3b9", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/1900783/1900783_prof.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_030.nc", "ext": "nc", - "sha": "20cbe5a0eed5d67a198d8f87770d554409deabcb79acfcc63c900443812c379a", + "sha": "b2dc40b30dcd980d69fda58a3c92b1c6a69d4e412a253aa07642f221cf6bc62d", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:05" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_001.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_031.nc", "ext": "nc", - "sha": "4ff9d2d81bf838cd912985cc9e5d4763f2b6860b4334fa352237e21517d93611", + "sha": "36c912d1df5cf2f51d10f7b8ebb175af7792132255504615a95ea040611ace18", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_002.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900882/profiles/D4900882_032.nc", "ext": "nc", - "sha": "19dae4d3c5269c14618df62f1150eeda1536347047db31a8c19ca01c5a1b408a", + "sha": "3fb35a9171d55a7f1aab677719dbb886e470fa044ec64b9fdeffbbb5a02f06a0", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13857/profiles/R13857_003.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900883/profiles/D4900883_026.nc", "ext": "nc", - "sha": "dd5a8ab1c038f6c6093360f16b874617f2da4fb6beb22ff4a68449956a2c9fba", + "sha": "1f4d27d475fe4f63ecf0ff337664e06ed4a5dc37befabf5a3dc667d3d088bb38", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13858/profiles/R13858_004.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4900883/profiles/D4900883_027.nc", "ext": "nc", - "sha": "5974bc7ae4645de10b254671f22517dea9b886a8d07daa633740d4be56654848", + "sha": "f17ea8164b719ce0bd998f9911be425b80d11d4e18b837038f28ee559c09af03", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { - "uri": "https://data-argo.ifremer.fr/dac/aoml/13859/profiles/R13859_001.nc", + "uri": "https://data-argo.ifremer.fr/dac/meds/4901079/profiles/D4901079_010.nc", "ext": "nc", - "sha": "4d8d211924c073f7ce74fd9ffc6319698224643bb5b55e6aed016534033bf122", + "sha": "160b0992e24369dcc8e4136c9744ec0fd6514f216caaed13eea35278c3f38015", "type": "application/x-netcdf", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { "uri": "https://data-argo.ifremer.fr/ar_index_global_prof.txt.gz", "ext": "gz", "sha": "05c1dd2e89c619af221fa155a81c3cd4a262131187f8eb3a8eda266ae2706d53", "type": "application/x-gzip", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" }, { "uri": "https://data-argo.ifremer.fr/dac", "ext": "html", "sha": "c054d15eec83bae19b8604a691a5066af9b97a4ce90d5b72676f732c5d8b636d", "type": "text/html", - "ts": "2025-12-08 15:00:21" + "ts": "2026-06-18 12:17:49" } ] \ No newline at end of file diff --git a/docs/_static/Training_20260603.jpg b/docs/_static/Training_20260603.jpg new file mode 100644 index 000000000..ce9f0c31c Binary files /dev/null and b/docs/_static/Training_20260603.jpg differ diff --git a/docs/impact.rst b/docs/impact.rst index b2fffaf7f..c86ca7c27 100644 --- a/docs/impact.rst +++ b/docs/impact.rst @@ -6,6 +6,8 @@ Papers & proceedings citing Argopy #. Bartlett, Jenna (2022). "An investigation of geostationary satellite imagery to compare developing and non-developing African easterly waves", Thesis and Dissertations. 5600. https://scholarsjunction.msstate.edu/td/5600 +#. Broullón, E., Williams, R. G., Naveira Garabato, A. C., Clément, L., & Fernández Castro, B. (2026). "The lifecycle of tracer variance in the North Atlantic". Geophysical Research Letters, 53, e2026GL122823. https://doi.org/10.1029/2026GL122823 + #. Chafik, et.al (2023). "The Faroe-Shetland Channel Jet: Structure, Variability, and Driving Mechanisms", Journal of Geophysical Research: Oceans. https://doi.org/10.1029/2022JC019083 #. Chevillard C, Juza M, Dıaz-Barroso L, Reyes E, Escudier R and Tintore J (2024). "Capability of the Mediterranean Argo network to monitor sub-regional climate change indicators", Front. Mar. Sci. 11:1416486. https://doi.org/10.3389/fmars.2024.1416486 @@ -54,7 +56,7 @@ Blog post & personal pages : - Samapriya Roy : https://samapriyaroy.medium.com/open-ocean-data-with-argofloats-tool-50efef6c4f05 -Some academic python env : +Academic referencing/use-cases: - Sydney univ academic conda env : http://climate-cms.wikis.unsw.edu.au/Conda @@ -62,4 +64,6 @@ Some academic python env : - Heliocloud : https://git.smce.nasa.gov/heliocloud/heliocloud-docker-images/-/blob/main/environment_pangeo_base_min.yml?ref_type=heads -- Stackoverflow : https://stackoverflow.com/search?q=argopy +- `NMFS Hack days `_: `Video `_ and Notebooks to `load Argo-BGC data `_ and perform `Rrs data matchup `_. + +- DTU M.Sc. course 25340 Digital Ocean: https://kurser.dtu.dk/course/25340, 38 students, 2026, ArgoPy with Jupyter notebooks, with markedly better outcomes than with Matlab (two 4 hours sessions). “...the coding exercises relating to the argo float were great and i learned a lot by doing..” “...Very good hands-on exercises. …(ArgoPy) more students moved forward faster instead of fighting with the computer….”. diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 5cf430d3f..381710d38 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -11,6 +11,13 @@ Contributions are highly welcomed and appreciated. So, if you are interested in Tutorials --------- +Click the `MyBinder `_ button below to open a jupyter notebook ready to play with Argopy tutorials: + +|Binder| + +.. |Binder| image:: https://img.shields.io/static/v1.svg?logo=Jupyter&label=Argopy&message=Start%20online%20tutorial%20notebooks&color=blue + :target: https://2i2c.mybinder.org/v2/gh/euroargodev/binder-sandbox/main?urlpath=git-pull%3Frepo%3Dhttps%253A%252F%252Fgithub.com%252Feuroargodev%252Fargopy-training%26urlpath%3Dlab%252Ftree%252Fargopy-training%252Fcontent%26branch%3Dmain + .. list-table:: List of **Argopy** tutorial notebooks :header-rows: 0 :stub-columns: 1 @@ -50,14 +57,15 @@ Tutorials Training sessions ----------------- -.. admonition:: Registration +.. grid:: 1 1 2 2 + :gutter: 4 - You can register for the next **online** training session `here `_ + .. grid-item-card:: LOV/IMEV + :img-top: _static/Training_20260603.jpg -Past sessions: + Spring 2026 -.. grid:: 1 1 2 2 - :gutter: 4 + **In person** training on Wednesday June 3rd 2026, room Tregouboff, `LOV/IMEV `_ (14 participants). .. grid-item-card:: Local Brest community :img-top: _static/Training_20251125.jpg diff --git a/docs/whats-new.rst b/docs/whats-new.rst index 261550640..0e78d4cdb 100644 --- a/docs/whats-new.rst +++ b/docs/whats-new.rst @@ -16,6 +16,14 @@ Features and front-end API - **Full Argo vocabulary support** for reference tables (:class:`ArgoReferenceTable`), values (:class:`ArgoReferenceValue`) and mappings (:class:`ArgoReferenceMapping`) (:pr:`575`) by |gmaze|. +Internals +^^^^^^^^^ + +- **Update USA GDAC url** :issue:`624` (:pr:`624`) by |gmaze|. + +- **Fix bug** where by some unit tests would raise `fsspec.exceptions.FSTimeoutError`, :issue:`593`. (:pr:`640`) by |gmaze|. + + v1.4.0 (5 Jan. 2026) --------------------