Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Introduce a second version of the Holland 2010 model #846

Merged
merged 17 commits into from
Jun 21, 2024

Merge branch 'develop' into feature/hollland_2010_version2

d820064
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

WIP: Introduce a second version of the Holland 2010 model #846

Merge branch 'develop' into feature/hollland_2010_version2
d820064
Select commit
Loading
Failed to load commit list.
GitHub Actions / Petals / Unit Test Results (3.9) failed Jun 21, 2024 in 0s

1 fail, 191 pass in 11m 23s

192 tests   191 ✅  11m 23s ⏱️
  1 suites    0 💤
  1 files      1 ❌

Results for commit d820064.

Annotations

Check warning on line 0 in climada_petals.hazard.test.test_drought.TestReader

See this annotation in the file changed.

@github-actions github-actions / Petals / Unit Test Results (3.9)

test (climada_petals.hazard.test.test_drought.TestReader) failed

climada_petals/tests_xml/tests.xml [took 7m 4s]
Raw output
requests.exceptions.ChunkedEncodingError: Importing the SPEI data file failed: ('Connection broken: IncompleteRead(114028093 bytes read, 245437036 more expected)', IncompleteRead(114028093 bytes read, 245437036 more expected))
self = <urllib3.response.HTTPResponse object at 0x7f1320d05790>

    @contextmanager
    def _error_catcher(self) -> typing.Generator[None, None, None]:
        """
        Catch low-level python exceptions, instead re-raising urllib3
        variants, so that low-level exceptions are not leaked in the
        high-level api.
    
        On exit, release the connection back to the pool.
        """
        clean_exit = False
    
        try:
            try:
>               yield

../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:748: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <urllib3.response.HTTPResponse object at 0x7f1320d05790>, amt = 1024

    def _raw_read(
        self,
        amt: int | None = None,
        *,
        read1: bool = False,
    ) -> bytes:
        """
        Reads `amt` of bytes from the socket.
        """
        if self._fp is None:
            return None  # type: ignore[return-value]
    
        fp_closed = getattr(self._fp, "closed", False)
    
        with self._error_catcher():
            data = self._fp_read(amt, read1=read1) if not fp_closed else b""
            if amt is not None and amt != 0 and not data:
                # Platform-specific: Buggy versions of Python.
                # Close the connection when no data is returned
                #
                # This is redundant to what httplib/http.client _should_
                # already do.  However, versions of python released before
                # December 15, 2012 (http://bugs.python.org/issue16298) do
                # not properly close the connection in all cases. There is
                # no harm in redundantly calling close.
                self._fp.close()
                if (
                    self.enforce_content_length
                    and self.length_remaining is not None
                    and self.length_remaining != 0
                ):
                    # This is an edge case that httplib failed to cover due
                    # to concerns of backward compatibility. We're
                    # addressing it here to make sure IncompleteRead is
                    # raised during streaming, so all calls with incorrect
                    # Content-Length are caught.
>                   raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
E                   urllib3.exceptions.IncompleteRead: IncompleteRead(114028093 bytes read, 245437036 more expected)

../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:894: IncompleteRead

The above exception was the direct cause of the following exception:

    def generate():
        # Special case for urllib3.
        if hasattr(self.raw, "stream"):
            try:
>               yield from self.raw.stream(chunk_size, decode_content=True)

../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/requests/models.py:820: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:1060: in stream
    data = self.read(amt=amt, decode_content=decode_content)
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:977: in read
    data = self._raw_read(amt)
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:902: in _raw_read
    self._fp.close()
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/contextlib.py:137: in __exit__
    self.gen.throw(typ, value, traceback)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <urllib3.response.HTTPResponse object at 0x7f1320d05790>

    @contextmanager
    def _error_catcher(self) -> typing.Generator[None, None, None]:
        """
        Catch low-level python exceptions, instead re-raising urllib3
        variants, so that low-level exceptions are not leaked in the
        high-level api.
    
        On exit, release the connection back to the pool.
        """
        clean_exit = False
    
        try:
            try:
                yield
    
            except SocketTimeout as e:
                # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but
                # there is yet no clean way to get at it from this context.
                raise ReadTimeoutError(self._pool, None, "Read timed out.") from e  # type: ignore[arg-type]
    
            except BaseSSLError as e:
                # FIXME: Is there a better way to differentiate between SSLErrors?
                if "read operation timed out" not in str(e):
                    # SSL errors related to framing/MAC get wrapped and reraised here
                    raise SSLError(e) from e
    
                raise ReadTimeoutError(self._pool, None, "Read timed out.") from e  # type: ignore[arg-type]
    
            except IncompleteRead as e:
                if (
                    e.expected is not None
                    and e.partial is not None
                    and e.expected == -e.partial
                ):
                    arg = "Response may not contain content."
                else:
                    arg = f"Connection broken: {e!r}"
>               raise ProtocolError(arg, e) from e
E               urllib3.exceptions.ProtocolError: ('Connection broken: IncompleteRead(114028093 bytes read, 245437036 more expected)', IncompleteRead(114028093 bytes read, 245437036 more expected))

../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/urllib3/response.py:772: ProtocolError

During handling of the above exception, another exception occurred:

self = <climada_petals.hazard.drought.Drought object at 0x7f1322c94070>

    def setup(self):
        """Set up the hazard drought"""
        try:
    
            if not self.file_path.is_file():
>               download_file(SPEI_FILE_URL, download_dir=SPEI_FILE_DIR)

climada_petals/hazard/drought.py:134: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/climada/util/files_handler.py:103: in download_file
    for data in tqdm(req_file.iter_content(block_size),
../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/tqdm/std.py:1181: in __iter__
    for obj in iterable:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def generate():
        # Special case for urllib3.
        if hasattr(self.raw, "stream"):
            try:
                yield from self.raw.stream(chunk_size, decode_content=True)
            except ProtocolError as e:
>               raise ChunkedEncodingError(e)
E               requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(114028093 bytes read, 245437036 more expected)', IncompleteRead(114028093 bytes read, 245437036 more expected))

../../../../micromamba/envs/climada_env_3.9/lib/python3.9/site-packages/requests/models.py:822: ChunkedEncodingError

The above exception was the direct cause of the following exception:

self = <climada_petals.hazard.test.test_drought.TestReader testMethod=test>

    def test(self):
    
        drought = Drought()
        drought.set_area(44.5, 5, 50, 12)
    
>       hazard_set = drought.setup()

climada_petals/hazard/test/test_drought.py:34: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <climada_petals.hazard.drought.Drought object at 0x7f1322c94070>

    def setup(self):
        """Set up the hazard drought"""
        try:
    
            if not self.file_path.is_file():
                download_file(SPEI_FILE_URL, download_dir=SPEI_FILE_DIR)
    
            LOGGER.debug('Importing %s', str(SPEI_FILE_NAME))
            dataset = xr.open_dataset(self.file_path)
    
        except Exception as err:
>           raise type(err)('Importing the SPEI data file failed: ' + str(err)) from err
E           requests.exceptions.ChunkedEncodingError: Importing the SPEI data file failed: ('Connection broken: IncompleteRead(114028093 bytes read, 245437036 more expected)', IncompleteRead(114028093 bytes read, 245437036 more expected))

climada_petals/hazard/drought.py:140: ChunkedEncodingError