Skip to content

Commit 5059a65

Browse files
committed
factor out json modeling params loading to common
1 parent 00806ad commit 5059a65

File tree

5 files changed

+54
-22
lines changed

5 files changed

+54
-22
lines changed

solarforecastarbiter/io/reference_observations/common.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,3 +629,31 @@ def create_forecasts(api, site, variables, templates):
629629
persist_created = create_persistence_forecasts(
630630
api, site, variables, nwp_templates)
631631
return nwp_created + persist_created
632+
633+
634+
def apply_json_site_parameters(json_sitefile, site):
635+
"""Updates site metadata with modeling parameters found in a json file.
636+
637+
Parameters
638+
----------
639+
json_sitefile: str
640+
Absolute path of a json file with a 'sites' key containing a list of
641+
sites in the Solar Forecast Arbiter JSON format.
642+
site: dict
643+
644+
Returns
645+
-------
646+
dict
647+
Copy of inputs plus a new key 'modeling_parameters'.
648+
"""
649+
with open(json_sitefile) as fp:
650+
sites_metadata = json.load(fp)['sites']
651+
site_api_id = str(site['extra_parameters']['network_api_id'])
652+
for site_metadata in sites_metadata:
653+
site_extra_params = json.loads(site_metadata['extra_parameters'])
654+
if str(site_extra_params['network_api_id']) == site_api_id:
655+
site_out = site.copy()
656+
site_out['modeling_parameters'] = site_metadata[
657+
'modeling_parameters']
658+
return site_out
659+
return site

solarforecastarbiter/io/reference_observations/pvdaq.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,7 @@ def adjust_site_parameters(site):
4141
--------
4242
solarforecastarbiter.io.reference_observations.site_df_to_dicts
4343
"""
44-
with open(DEFAULT_SITEFILE) as fp:
45-
sites_metadata = json.load(fp)['sites']
46-
site_api_id = int(site['extra_parameters']['network_api_id'])
47-
for site_metadata in sites_metadata:
48-
site_extra_params = json.loads(site_metadata['extra_parameters'])
49-
if site_extra_params['network_api_id'] == site_api_id:
50-
site_out = site.copy()
51-
site_out['modeling_parameters'] = site_metadata[
52-
'modeling_parameters']
53-
site_out['extra_parameters'].update(site_extra_params)
54-
return site_out
44+
return common.apply_json_site_parameters(DEFAULT_SITEFILE, site)
5545

5646

5747
def initialize_site_observations(api, site):

solarforecastarbiter/io/reference_observations/srml.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,7 @@ def adjust_site_parameters(site):
5858
dict
5959
Copy of inputs plus a new key 'modeling_parameters'.
6060
"""
61-
with open(DEFAULT_SITEFILE) as fp:
62-
sites_metadata = json.load(fp)['sites']
63-
site_api_id = site['extra_parameters']['network_api_id']
64-
for site_metadata in sites_metadata:
65-
site_extra_params = json.loads(site_metadata['extra_parameters'])
66-
if site_extra_params['network_api_id'] == site_api_id:
67-
site_out = site.copy()
68-
site_out['modeling_parameters'] = site_metadata[
69-
'modeling_parameters']
70-
return site_out
71-
return site
61+
return common.apply_json_site_parameters(DEFAULT_SITEFILE, site)
7262

7363

7464
def request_data(site, year, month):

solarforecastarbiter/io/reference_observations/tests/conftest.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import copy
22
import json
3+
from pkg_resources import resource_filename, Requirement
4+
5+
36
import numpy as np
47
import pandas as pd
58
import pytest
@@ -150,3 +153,11 @@ def mock_fetch(mocker, fake_ghi_data):
150153
fetch = mocker.MagicMock()
151154
fetch.return_value = fake_ghi_data
152155
return fetch
156+
157+
158+
@pytest.fixture
159+
def test_json_site_file():
160+
return resource_filename(
161+
Requirement.parse('solarforecastarbiter'),
162+
'solarforecastarbiter/io/reference_observations/'
163+
'tests/data/test_site.json')

solarforecastarbiter/io/reference_observations/tests/test_common.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,3 +776,16 @@ def test_create_forecasts(template_fx, mocker):
776776
assert len(fxs) == 3
777777
assert create_nwp.call_count == 1
778778
assert create_nwp.call_args[0][-1] == templates[:1]
779+
common.create_forecasts(api, site, vars_, templates)
780+
781+
782+
@pytest.mark.parametrize('params', [
783+
{'network_api_id': 2},
784+
{'network_api_id': '2'},
785+
])
786+
def test_apply_json_site_parameters_plant(test_json_site_file, params):
787+
new_site = common.apply_json_site_parameters(
788+
test_json_site_file,
789+
{'extra_parameters': params},
790+
)
791+
assert 'modeling_parameters' in new_site

0 commit comments

Comments
 (0)