Skip to content

lint: ruff fixes - #130

Open
GuyKh wants to merge 1 commit into
mainfrom
ruff-fix
Open

lint: ruff fixes#130
GuyKh wants to merge 1 commit into
mainfrom
ruff-fix

Conversation

@GuyKh

@GuyKh GuyKh commented Feb 4, 2026

Copy link
Copy Markdown
Owner

PR Type

Enhancement


Description

  • Apply ruff linter fixes across codebase

  • Standardize formatting with proper spacing and indentation

  • Fix trailing commas and line length violations

  • Remove unnecessary type annotation ignore rule


Diagram Walkthrough

flowchart LR
  A["Ruff Linter Rules"] -->|Apply Formatting| B["Spacing & Indentation"]
  A -->|Apply Formatting| C["Trailing Commas"]
  A -->|Apply Formatting| D["Line Length"]
  B --> E["Updated Files"]
  C --> E
  D --> E
  F["Remove ANN101 Rule"] --> G["Config Update"]
Loading

File Walkthrough

Relevant files
Formatting
10 files
__init__.py
Add blank line and trailing comma fixes                                   
+2/-1     
commons.py
Add blank lines between functions and fix formatting         
+4/-5     
ims_envista.py
Fix method indentation and line length violations               
+41/-27 
meteo_data.py
Fix string concatenation indentation and spacing                 
+31/-24 
station_data.py
Add blank lines between function and class definitions     
+4/-0     
version.py
Add blank lines after module docstring                                     
+2/-0     
setup.py
Reformat setup call with proper indentation                           
+32/-22 
__init__.py
Fix comment indentation                                                                   
+1/-1     
test_ims_envista.py
Remove extra blank lines between test methods                       
+8/-16   
test_version.py
Add blank line after module docstring                                       
+1/-0     
Configuration changes
1 files
.ruff.toml
Remove unnecessary ANN101 ignore rule                                       
+0/-1     

@qodo-code-review

Copy link
Copy Markdown

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-code-review

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Re-evaluate enabling the ANN101 rule

The ANN101 rule, which requires type annotations for self, was enabled in
.ruff.toml. However, the codebase lacks these annotations, which will cause new
linting failures. It is suggested to either revert this change or add the
missing annotations.

Examples:

.ruff.toml [10]
ignore = [
ims_envista/ims_envista.py [45]
    def __init__(self, token: UUID | str, session: ClientSession | None = None) -> None:

Solution Walkthrough:

Before:

# .ruff.toml
[lint]
ignore = [
    "ANN101", # Missing type annotation for `self` in method
    ...
]

# ims_envista/ims_envista.py
class IMSEnvista:
    def __init__(self, token: UUID | str, session: ClientSession | None = None) -> None:
        ...
    async def get_latest_station_data(self, station_id: int, ...) -> StationMeteorologicalReadings:
        ...

After:

# .ruff.toml
[lint]
ignore = [
    "ANN101", # Missing type annotation for `self` in method
    ...
]

# ims_envista/ims_envista.py
# No changes to python files, only .ruff.toml is reverted.
class IMSEnvista:
    def __init__(self, token: UUID | str, session: ClientSession | None = None) -> None:
        ...
    async def get_latest_station_data(self, station_id: int, ...) -> StationMeteorologicalReadings:
        ...
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies that enabling the ANN101 linting rule without adding the required self type annotations will introduce numerous linting errors, contradicting the PR's goal of applying linter fixes.

High
Possible issue
Avoid incorrect double DST adjustment

Remove the redundant daylight saving time adjustment for the dt object to
prevent a double adjustment that causes incorrect timestamps.

ims_envista/meteo_data.py [213-216]

 if is_dst and time_val:
     # Strange IMS logic :o
-    dt = dt + datetime.timedelta(hours=1)
     time_val = time_val.replace(hour=(time_val.hour + 1) % 24)
  • Apply / Chat
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a critical bug where a datetime object is adjusted twice for daylight saving time, leading to incorrect data. The proposed fix is accurate and necessary.

High
  • More

@qodo-code-review

Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test

Failed stage: Run UnitTests [❌]

Failed test name: test_get_latest_station_data

Failure summary:

The action failed during python3 -m unittest discover because 3 unit tests errored due to network
timeouts when calling the external IMS Envista API.
- tests/unit/test_ims_envista.py:71
(test_get_latest_station_data) raised ims_envista.commons.ImsEnvistaApiClientCommunicationError
after aiohttp.client_exceptions.ConnectionTimeoutError connecting to
https://api.ims.gov.il/v1/envista/stations/178/data/latest (originating from
ims_envista/commons.py:67 -> commons.py:73 where the exception is wrapped and re-raised).
-
tests/unit/test_ims_envista.py:209 (test_get_monthly_station_data_with_channel) failed similarly
with a connection timeout to https://api.ims.gov.il/v1/envista/stations/178/data/7/monthly/2026/02.

- tests/unit/test_ims_envista.py:131 (test_get_station_data_from_date_with_channel) failed similarly
with a connection timeout to https://api.ims.gov.il/v1/envista/stations/178/data/7/daily/2026/2/4.

The test run ended with FAILED (errors=3) and the job exited with code 1. (The earlier
setuptools/license messages are warnings and not the cause of the failure.)

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

330:  ********************************************************************************
331:  Please consider removing the following classifiers in favor of a SPDX license expression:
332:  License :: OSI Approved :: MIT License
333:  See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
334:  ********************************************************************************
335:  !!
336:  self._finalize_license_expression()
337:  running install
338:  /opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/setuptools/_distutils/cmd.py:90: SetuptoolsDeprecationWarning: setup.py install is deprecated.
339:  !!
340:  ********************************************************************************
341:  Please avoid running ``setup.py`` directly.
342:  Instead, use pypa/build, pypa/installer or other
343:  standards-based tools.
344:  This deprecation is overdue, please update your project and remove deprecated
345:  calls to avoid build errors in the future.
346:  See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
...

422:  ##[group]Run python3 -m unittest discover
423:  �[36;1mpython3 -m unittest discover�[0m
424:  shell: /usr/bin/bash -e {0}
425:  env:
426:  IMS_TOKEN: ***
427:  pythonLocation: /opt/hostedtoolcache/Python/3.13.11/x64
428:  PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.11/x64/lib/pkgconfig
429:  Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.11/x64
430:  Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.11/x64
431:  Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.11/x64
432:  LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.11/x64/lib
433:  ##[endgroup]
434:  ..Executing <Task finished name='Task-16' coro=<TestIMSEnvista.test_get_earliest_station_data() done, defined at /home/runner/work/py-ims-envista/py-ims-envista/tests/unit/test_ims_envista.py:91> result=None created at /opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/runners.py:100> took 0.132 seconds
435:  ..E...E....E...
436:  ======================================================================
437:  ERROR: test_get_latest_station_data (tests.unit.test_ims_envista.TestIMSEnvista.test_get_latest_station_data)
438:  Test get_latest_station endpoint.
...

443:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
444:  ...<6 lines>...
445:  )
446:  ^
447:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection
448:  sock = await _connect_sock(
449:  ^^^^^^^^^^^^^^^^^^^^
450:  ...<6 lines>...
451:  )
452:  ^
453:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock
454:  await loop.sock_connect(sock, address)
455:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/selector_events.py", line 641, in sock_connect
456:  return await fut
457:  ^^^^^^^^^
458:  asyncio.exceptions.CancelledError
459:  The above exception was the direct cause of the following exception:
...

475:  raise last_exc
476:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection
477:  transp, proto = await self._wrap_create_connection(
478:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
479:  ...<7 lines>...
480:  )
481:  ^
482:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1295, in _wrap_create_connection
483:  async with ceil_timeout(
484:  ~~~~~~~~~~~~^
485:  timeout.sock_connect, ceil_threshold=timeout.ceil_threshold
486:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
487:  ):
488:  ^
489:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
490:  raise TimeoutError from exc_val
491:  TimeoutError
492:  The above exception was the direct cause of the following exception:
493:  Traceback (most recent call last):
494:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 67, in get
495:  response = await session.get(url=url, headers=headers)
496:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
497:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 779, in _request
498:  resp = await handler(req)
499:  ^^^^^^^^^^^^^^^^^^
500:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 738, in _connect_and_send_request
501:  raise ConnectionTimeoutError(
502:  f"Connection timeout to host {req.url}"
503:  ) from exc
504:  aiohttp.client_exceptions.ConnectionTimeoutError: Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/latest
505:  The above exception was the direct cause of the following exception:
506:  Traceback (most recent call last):
507:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/runners.py", line 118, in run
508:  return self._loop.run_until_complete(task)
509:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
510:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
511:  return future.result()
512:  ~~~~~~~~~~~~~^^
513:  File "/home/runner/work/py-ims-envista/py-ims-envista/tests/unit/test_ims_envista.py", line 71, in test_get_latest_station_data
514:  station_data = await self.ims.get_latest_station_data(self.station_id)
515:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
516:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/ims_envista.py", line 88, in get_latest_station_data
517:  await get(session=self._session, url=get_url, token=self._token)
518:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 73, in get
519:  raise ImsEnvistaApiClientCommunicationError(
520:  msg,
521:  ) from exception
522:  ims_envista.commons.ImsEnvistaApiClientCommunicationError: Timeout error fetching information from https://api.ims.gov.il/v1/envista/stations/178/data/latest - Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/latest
523:  ======================================================================
524:  ERROR: test_get_monthly_station_data_with_channel (tests.unit.test_ims_envista.TestIMSEnvista.test_get_monthly_station_data_with_channel)
525:  Test get_monthly_station_data endpoint with channel.
...

530:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
531:  ...<6 lines>...
532:  )
533:  ^
534:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection
535:  sock = await _connect_sock(
536:  ^^^^^^^^^^^^^^^^^^^^
537:  ...<6 lines>...
538:  )
539:  ^
540:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock
541:  await loop.sock_connect(sock, address)
542:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/selector_events.py", line 641, in sock_connect
543:  return await fut
544:  ^^^^^^^^^
545:  asyncio.exceptions.CancelledError
546:  The above exception was the direct cause of the following exception:
...

562:  raise last_exc
563:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection
564:  transp, proto = await self._wrap_create_connection(
565:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
566:  ...<7 lines>...
567:  )
568:  ^
569:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1295, in _wrap_create_connection
570:  async with ceil_timeout(
571:  ~~~~~~~~~~~~^
572:  timeout.sock_connect, ceil_threshold=timeout.ceil_threshold
573:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
574:  ):
575:  ^
576:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
577:  raise TimeoutError from exc_val
578:  TimeoutError
579:  The above exception was the direct cause of the following exception:
580:  Traceback (most recent call last):
581:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 67, in get
582:  response = await session.get(url=url, headers=headers)
583:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
584:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 779, in _request
585:  resp = await handler(req)
586:  ^^^^^^^^^^^^^^^^^^
587:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 738, in _connect_and_send_request
588:  raise ConnectionTimeoutError(
589:  f"Connection timeout to host {req.url}"
590:  ) from exc
591:  aiohttp.client_exceptions.ConnectionTimeoutError: Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/7/monthly/2026/02
592:  The above exception was the direct cause of the following exception:
...

595:  return self._loop.run_until_complete(task)
596:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
597:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
598:  return future.result()
599:  ~~~~~~~~~~~~~^^
600:  File "/home/runner/work/py-ims-envista/py-ims-envista/tests/unit/test_ims_envista.py", line 209, in test_get_monthly_station_data_with_channel
601:  station_data = await self.ims.get_monthly_station_data(
602:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
603:  self.station_id, channel_id=self.channel_id, month=month, year=year
604:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
605:  )
606:  ^
607:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/ims_envista.py", line 233, in get_monthly_station_data
608:  await get(session=self._session, url=get_url, token=self._token)
609:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 73, in get
610:  raise ImsEnvistaApiClientCommunicationError(
611:  msg,
612:  ) from exception
613:  ims_envista.commons.ImsEnvistaApiClientCommunicationError: Timeout error fetching information from https://api.ims.gov.il/v1/envista/stations/178/data/7/monthly/2026/02 - Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/7/monthly/2026/02
614:  ======================================================================
615:  ERROR: test_get_station_data_from_date_with_channel (tests.unit.test_ims_envista.TestIMSEnvista.test_get_station_data_from_date_with_channel)
616:  Test get_station_data_from_date endpoint with channel.
...

621:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
622:  ...<6 lines>...
623:  )
624:  ^
625:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection
626:  sock = await _connect_sock(
627:  ^^^^^^^^^^^^^^^^^^^^
628:  ...<6 lines>...
629:  )
630:  ^
631:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock
632:  await loop.sock_connect(sock, address)
633:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/selector_events.py", line 641, in sock_connect
634:  return await fut
635:  ^^^^^^^^^
636:  asyncio.exceptions.CancelledError
637:  The above exception was the direct cause of the following exception:
...

653:  raise last_exc
654:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection
655:  transp, proto = await self._wrap_create_connection(
656:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
657:  ...<7 lines>...
658:  )
659:  ^
660:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/connector.py", line 1295, in _wrap_create_connection
661:  async with ceil_timeout(
662:  ~~~~~~~~~~~~^
663:  timeout.sock_connect, ceil_threshold=timeout.ceil_threshold
664:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
665:  ):
666:  ^
667:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
668:  raise TimeoutError from exc_val
669:  TimeoutError
670:  The above exception was the direct cause of the following exception:
671:  Traceback (most recent call last):
672:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 67, in get
673:  response = await session.get(url=url, headers=headers)
674:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
675:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 779, in _request
676:  resp = await handler(req)
677:  ^^^^^^^^^^^^^^^^^^
678:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/site-packages/aiohttp/client.py", line 738, in _connect_and_send_request
679:  raise ConnectionTimeoutError(
680:  f"Connection timeout to host {req.url}"
681:  ) from exc
682:  aiohttp.client_exceptions.ConnectionTimeoutError: Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/7/daily/2026/2/4
683:  The above exception was the direct cause of the following exception:
...

686:  return self._loop.run_until_complete(task)
687:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
688:  File "/opt/hostedtoolcache/Python/3.13.11/x64/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
689:  return future.result()
690:  ~~~~~~~~~~~~~^^
691:  File "/home/runner/work/py-ims-envista/py-ims-envista/tests/unit/test_ims_envista.py", line 131, in test_get_station_data_from_date_with_channel
692:  station_data = await self.ims.get_station_data_from_date(
693:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
694:  self.station_id, self.tz.localize(datetime.now()), self.channel_id
695:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
696:  )
697:  ^
698:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/ims_envista.py", line 139, in get_station_data_from_date
699:  await get(session=self._session, url=get_url, token=self._token)
700:  File "/home/runner/work/py-ims-envista/py-ims-envista/ims_envista/commons.py", line 73, in get
701:  raise ImsEnvistaApiClientCommunicationError(
702:  msg,
703:  ) from exception
704:  ims_envista.commons.ImsEnvistaApiClientCommunicationError: Timeout error fetching information from https://api.ims.gov.il/v1/envista/stations/178/data/7/daily/2026/2/4 - Connection timeout to host https://api.ims.gov.il/v1/envista/stations/178/data/7/daily/2026/2/4
705:  ----------------------------------------------------------------------
706:  Ran 17 tests in 119.052s
707:  FAILED (errors=3)
708:  ##[error]Process completed with exit code 1.
709:  Post job cleanup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant