Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ dev = [
]

[project.scripts]
open-data-pvnet = "open_data_pvnet.main:main"
open-data-pvnet = "open_data_pvnet.scripts.nwp_data.main:main"

[tool.black]
line-length = 100
Expand Down
6 changes: 3 additions & 3 deletions src/open_data_pvnet/scripts/archive.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import logging
from typing import Optional
from open_data_pvnet.nwp.met_office import process_met_office_data
from open_data_pvnet.nwp.gfs import process_gfs_data
from open_data_pvnet.nwp.dwd import process_dwd_data
from open_data_pvnet.scripts.nwp_data.met_office import process_met_office_data
from open_data_pvnet.scripts.nwp_data.gfs import process_gfs_data
from open_data_pvnet.scripts.nwp_data.dwd import process_dwd_data

logger = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
from typing import List, Tuple
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this main file should also move in scripts/nwp_data

from open_data_pvnet.utils.data_uploader import upload_monthly_zarr, upload_to_huggingface
from open_data_pvnet.scripts.archive import handle_archive
from open_data_pvnet.nwp.met_office import CONFIG_PATHS
from open_data_pvnet.nwp.dwd import process_dwd_data
from open_data_pvnet.scripts.nwp_data.met_office import CONFIG_PATHS
from open_data_pvnet.scripts.nwp_data.dwd import process_dwd_data

logger = logging.getLogger(__name__)

Expand Down
26 changes: 13 additions & 13 deletions tests/test_dwd.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from unittest.mock import Mock
from pathlib import Path

from open_data_pvnet.nwp.dwd import (
from open_data_pvnet.scripts.nwp_data.dwd import (
generate_variable_url,
fetch_dwd_data,
process_dwd_data,
Expand Down Expand Up @@ -36,9 +36,9 @@ def test_generate_variable_url():
def test_fetch_dwd_data_success(mocker, mock_config, tmp_path):
"""Test successful fetching of DWD data."""
# Setup mocks
mocker.patch("open_data_pvnet.nwp.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.nwp.dwd.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.load_config", return_value=mock_config)

# Mock HTML content
html_content = b"""
Expand Down Expand Up @@ -76,9 +76,9 @@ def test_fetch_dwd_data_success(mocker, mock_config, tmp_path):
def test_fetch_dwd_data_no_files(mocker, mock_config, tmp_path):
"""Test fetching DWD data when no files are available."""
# Setup mocks
mocker.patch("open_data_pvnet.nwp.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.nwp.dwd.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.load_config", return_value=mock_config)

# Mock empty HTML response
mock_head = mocker.patch("requests.head")
Expand All @@ -94,10 +94,10 @@ def test_fetch_dwd_data_no_files(mocker, mock_config, tmp_path):
def test_process_dwd_data_success(mocker, mock_config, tmp_path):
"""Test successful processing of DWD data."""
# Setup mocks
mocker.patch("open_data_pvnet.nwp.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.nwp.dwd.load_config", return_value=mock_config)
mock_fetch = mocker.patch("open_data_pvnet.nwp.dwd.fetch_dwd_data", return_value=3)
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.CONFIG_PATH", "test_config.yaml")
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.load_config", return_value=mock_config)
mock_fetch = mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.fetch_dwd_data", return_value=3)

# Mock xarray operations
mock_ds = mocker.MagicMock()
Expand Down Expand Up @@ -129,8 +129,8 @@ def test_process_dwd_data_success(mocker, mock_config, tmp_path):

def test_process_dwd_data_no_files(mocker, mock_config):
"""Test processing when no files are downloaded."""
mocker.patch("open_data_pvnet.nwp.dwd.load_config", return_value=mock_config)
mock_fetch = mocker.patch("open_data_pvnet.nwp.dwd.fetch_dwd_data", return_value=0)
mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.load_config", return_value=mock_config)
mock_fetch = mocker.patch("open_data_pvnet.scripts.nwp_data.dwd.fetch_dwd_data", return_value=0)

process_dwd_data(2023, 1, 1, 0)

Expand Down
20 changes: 10 additions & 10 deletions tests/test_main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
from unittest.mock import patch
from open_data_pvnet.main import (
from open_data_pvnet.scripts.nwp_data.main import (
configure_parser,
load_env_and_setup_logger,
main,
Expand Down Expand Up @@ -98,23 +98,23 @@ def test_configure_parser():
assert not args.overwrite


@patch("open_data_pvnet.main.load_environment_variables")
@patch("open_data_pvnet.main.logging.basicConfig")
@patch("open_data_pvnet.scripts.nwp_data.main.load_environment_variables")
@patch("open_data_pvnet.scripts.nwp_data.main.logging.basicConfig")
def test_load_env_and_setup_logger_success(mock_logging, mock_load_env):
load_env_and_setup_logger()
mock_load_env.assert_called_once()
mock_logging.assert_called_once()


@patch("open_data_pvnet.main.load_environment_variables")
@patch("open_data_pvnet.scripts.nwp_data.main.load_environment_variables")
def test_load_env_and_setup_logger_failure(mock_load_env):
mock_load_env.side_effect = FileNotFoundError("Config file not found")
with pytest.raises(FileNotFoundError):
load_env_and_setup_logger()


@patch("open_data_pvnet.main.handle_load")
@patch("open_data_pvnet.main.load_env_and_setup_logger")
@patch("open_data_pvnet.scripts.nwp_data.main.handle_load")
@patch("open_data_pvnet.scripts.nwp_data.main.load_env_and_setup_logger")
def test_main_metoffice_load(mock_load_env, mock_handle_load):
# Test metoffice load command
test_args = [
Expand Down Expand Up @@ -148,8 +148,8 @@ def test_main_metoffice_load(mock_load_env, mock_handle_load):
)


@patch("open_data_pvnet.main.print")
@patch("open_data_pvnet.main.load_env_and_setup_logger")
@patch("open_data_pvnet.scripts.nwp_data.main.print")
@patch("open_data_pvnet.scripts.nwp_data.main.load_env_and_setup_logger")
def test_main_list_providers(mock_load_env, mock_print):
# Test --list providers
test_args = ["--list", "providers"]
Expand All @@ -158,8 +158,8 @@ def test_main_list_providers(mock_load_env, mock_print):
assert mock_print.call_count == 4 # One for header + three providers


@patch("open_data_pvnet.main.handle_load")
@patch("open_data_pvnet.main.load_env_and_setup_logger")
@patch("open_data_pvnet.scripts.nwp_data.main.handle_load")
@patch("open_data_pvnet.scripts.nwp_data.main.load_env_and_setup_logger")
def test_main_metoffice_load_remote(mock_load_env, mock_handle_load):
# Test metoffice load command with remote option
test_args = [
Expand Down
54 changes: 27 additions & 27 deletions tests/test_met_office.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from unittest.mock import Mock

from open_data_pvnet.nwp.met_office import (
from open_data_pvnet.scripts.nwp_data.met_office import (
generate_prefix,
fetch_met_office_data,
process_met_office_data,
Expand Down Expand Up @@ -36,17 +36,17 @@ def test_generate_prefix_global():

def test_process_met_office_data_success(mocker, mock_config, tmp_path):
# Setup mocks
mocker.patch("open_data_pvnet.nwp.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.nwp.met_office.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.load_config", return_value=mock_config)
mock_fetch = mocker.patch(
"open_data_pvnet.nwp.met_office.fetch_met_office_data", return_value=3
"open_data_pvnet.scripts.nwp_data.met_office.fetch_met_office_data", return_value=3
)
mock_convert = mocker.patch(
"open_data_pvnet.nwp.met_office.convert_nc_to_zarr", return_value=(3, 1000)
"open_data_pvnet.scripts.nwp_data.met_office.convert_nc_to_zarr", return_value=(3, 1000)
)
mock_upload = mocker.patch("open_data_pvnet.nwp.met_office.upload_to_huggingface")
mock_rmtree = mocker.patch("open_data_pvnet.nwp.met_office.shutil.rmtree")
mock_upload = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.upload_to_huggingface")
mock_rmtree = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.shutil.rmtree")

# Call function with default archive_type
process_met_office_data(2023, 12, 25, 0, "uk", overwrite=False)
Expand All @@ -68,17 +68,17 @@ def test_process_met_office_data_success(mocker, mock_config, tmp_path):

def test_process_met_office_data_with_tar(mocker, mock_config, tmp_path):
# Setup mocks
mocker.patch("open_data_pvnet.nwp.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.nwp.met_office.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.load_config", return_value=mock_config)
mock_fetch = mocker.patch(
"open_data_pvnet.nwp.met_office.fetch_met_office_data", return_value=3
"open_data_pvnet.scripts.nwp_data.met_office.fetch_met_office_data", return_value=3
)
mock_convert = mocker.patch(
"open_data_pvnet.nwp.met_office.convert_nc_to_zarr", return_value=(3, 1000)
"open_data_pvnet.scripts.nwp_data.met_office.convert_nc_to_zarr", return_value=(3, 1000)
)
mock_upload = mocker.patch("open_data_pvnet.nwp.met_office.upload_to_huggingface")
mock_rmtree = mocker.patch("open_data_pvnet.nwp.met_office.shutil.rmtree")
mock_upload = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.upload_to_huggingface")
mock_rmtree = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.shutil.rmtree")

# Call function with tar archive_type
process_met_office_data(2023, 12, 25, 0, "uk", overwrite=True, archive_type="tar")
Expand All @@ -100,14 +100,14 @@ def test_process_met_office_data_with_tar(mocker, mock_config, tmp_path):

def test_process_met_office_data_no_files(mocker, mock_config, tmp_path):
# Setup mocks
mocker.patch("open_data_pvnet.nwp.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.nwp.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.nwp.met_office.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.PROJECT_BASE", str(tmp_path))
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.load_config", return_value=mock_config)
mock_fetch = mocker.patch(
"open_data_pvnet.nwp.met_office.fetch_met_office_data", return_value=0
"open_data_pvnet.scripts.nwp_data.met_office.fetch_met_office_data", return_value=0
)
mock_convert = mocker.patch("open_data_pvnet.nwp.met_office.convert_nc_to_zarr")
mock_upload = mocker.patch("open_data_pvnet.nwp.met_office.upload_to_huggingface")
mock_convert = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.convert_nc_to_zarr")
mock_upload = mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.upload_to_huggingface")

# Call function
process_met_office_data(2023, 12, 25, 0, "uk")
Expand All @@ -120,10 +120,10 @@ def test_process_met_office_data_no_files(mocker, mock_config, tmp_path):

def test_fetch_met_office_data_success(mocker, mock_config):
# Setup mocks
mocker.patch("open_data_pvnet.nwp.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.nwp.met_office.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.load_config", return_value=mock_config)
mock_s3 = Mock()
mocker.patch("open_data_pvnet.nwp.met_office.boto3.client", return_value=mock_s3)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.boto3.client", return_value=mock_s3)

# Mock S3 response
mock_s3.list_objects_v2.return_value = {
Expand All @@ -146,10 +146,10 @@ def test_fetch_met_office_data_success(mocker, mock_config):

def test_fetch_met_office_data_no_files(mocker, mock_config):
# Setup mocks
mocker.patch("open_data_pvnet.nwp.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.nwp.met_office.load_config", return_value=mock_config)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.CONFIG_PATHS", {"uk": "test_config.yaml"})
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.load_config", return_value=mock_config)
mock_s3 = Mock()
mocker.patch("open_data_pvnet.nwp.met_office.boto3.client", return_value=mock_s3)
mocker.patch("open_data_pvnet.scripts.nwp_data.met_office.boto3.client", return_value=mock_s3)

# Mock empty S3 response
mock_s3.list_objects_v2.return_value = {}
Expand Down