Skip to content

Commit 4244d85

Browse files
Merge branch 'release/1.4.0'
2 parents cd989e2 + 6693d84 commit 4244d85

27 files changed

Lines changed: 461 additions & 382 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# PV_Live
33
A Python implementation of the PV_Live web API. See https://www.solar.sheffield.ac.uk/pvlive/
44

5-
**Latest Version: 1.3.0**
5+
**Latest Version: 1.4.0**
66

77
## About this repository
88

Tests/test_pvlive_api.py

Lines changed: 113 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"""
66

77
import unittest
8-
from datetime import datetime, date
8+
from datetime import datetime, date, time
99
import pytz
1010

1111
import pandas.api.types as ptypes
@@ -18,7 +18,14 @@ def setUp(self):
1818
"""
1919
Setup the instance of class.
2020
"""
21-
self.api = PVLive()
21+
self.api = PVLive(
22+
retries=3,
23+
proxies=None,
24+
ssl_verify=True,
25+
# domain_url="api0.solar.sheffield.ac.uk",
26+
domain_url="api.solar.sheffield.ac.uk",
27+
# domain_url="api.pvlive.uk"
28+
)
2229
self.expected_dtypes = {
2330
"pes_id": ptypes.is_integer_dtype,
2431
"gsp_id": ptypes.is_integer_dtype,
@@ -118,20 +125,31 @@ def test_latest(self):
118125
data = self.api.latest(entity_type="pes", entity_id=0, dataframe=True)
119126
self.check_df_columns(data)
120127
self.check_df_dtypes(data)
121-
data = self.api.latest(entity_type="pes", entity_id=0,
122-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
123-
dataframe=True)
128+
data = self.api.latest(
129+
entity_type="pes",
130+
entity_id=0,
131+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
132+
dataframe=True
133+
)
124134
self.check_df_columns(data)
125135
self.check_df_dtypes(data)
126-
data = self.api.latest(entity_type="pes", entity_id=0, period=5)
136+
data = self.api.latest(
137+
entity_type="pes",
138+
entity_id=0,
139+
period=5
140+
)
127141
self.check_pes_tuple(data)
128142
self.check_pes_tuple_dtypes(data)
129143
data = self.api.latest(entity_type="pes", entity_id=0, period=5, dataframe=True)
130144
self.check_df_columns(data)
131145
self.check_df_dtypes(data)
132-
data = self.api.latest(entity_type="pes", entity_id=0,
133-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
134-
period=5, dataframe=True)
146+
data = self.api.latest(
147+
entity_type="pes",
148+
entity_id=0,
149+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
150+
period=5,
151+
dataframe=True
152+
)
135153
self.check_df_columns(data)
136154
self.check_df_dtypes(data)
137155
data = self.api.latest(entity_type="gsp", entity_id=103)
@@ -143,31 +161,50 @@ def test_latest(self):
143161

144162
def test_day_peak(self):
145163
"""Tests the day_peak function."""
146-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="pes", entity_id=0)
164+
test_date = date(2024, 12, 17)
165+
data = self.api.day_peak(d=test_date, entity_type="pes", entity_id=0)
147166
self.check_pes_tuple(data)
148167
self.check_pes_tuple_dtypes(data)
149-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="pes", entity_id=0, dataframe=True)
168+
data = self.api.day_peak(d=test_date, entity_type="pes", entity_id=0, dataframe=True)
150169
self.check_df_columns(data)
151170
self.check_df_dtypes(data)
152-
data = self.api.day_peak(d=date(2023, 12, 1),
153-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
154-
entity_type="pes", entity_id=0, dataframe=True)
155-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="pes", entity_id=0, period=5)
171+
data = self.api.day_peak(
172+
d=test_date,
173+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
174+
entity_type="pes",
175+
entity_id=0,
176+
dataframe=True
177+
)
178+
data = self.api.day_peak(d=test_date, entity_type="pes", entity_id=0, period=5)
156179
self.check_pes_tuple(data)
157180
self.check_pes_tuple_dtypes(data)
158-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="pes", entity_id=0, period=5,
159-
dataframe=True)
181+
data = self.api.day_peak(
182+
d=test_date,
183+
entity_type="pes",
184+
entity_id=0,
185+
period=5,
186+
dataframe=True
187+
)
160188
self.check_df_columns(data)
161189
self.check_df_dtypes(data)
162-
data = self.api.day_peak(d=date(2023, 12, 1),
163-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
164-
entity_type="pes", entity_id=0, period=5, dataframe=True)
190+
data = self.api.day_peak(
191+
d=test_date,
192+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
193+
entity_type="pes",
194+
entity_id=0,
195+
period=5,
196+
dataframe=True
197+
)
165198
self.check_df_dtypes(data)
166-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="gsp", entity_id=54)
199+
data = self.api.day_peak(d=test_date, entity_type="gsp", entity_id=54)
167200
self.check_gsp_tuple(data)
168201
self.check_gsp_tuple_dtypes(data)
169-
data = self.api.day_peak(d=date(2023, 12, 1), entity_type="gsp", entity_id=54,
170-
dataframe=True)
202+
data = self.api.day_peak(
203+
d=test_date,
204+
entity_type="gsp",
205+
entity_id=54,
206+
dataframe=True
207+
)
171208
self.check_df_columns(data)
172209
self.check_df_dtypes(data)
173210

@@ -178,61 +215,82 @@ def test_day_energy(self):
178215

179216
def test_between(self):
180217
"""Test the between function."""
181-
data = self.api.between(start=datetime(2023, 12, 1, 12, 20, tzinfo=pytz.utc),
182-
end=datetime(2023, 12, 1, 14, 0, tzinfo=pytz.utc),
183-
entity_type="pes", entity_id=0)
218+
test_date = date(2024, 12, 17)
219+
get_test_time = lambda h, m: datetime.combine(test_date, time(h, m))\
220+
.replace(tzinfo=pytz.UTC)
221+
data = self.api.between(
222+
start=get_test_time(12, 20),
223+
end=get_test_time(14, 0),
224+
entity_type="pes",
225+
entity_id=0
226+
)
184227
with self.subTest():
185228
assert isinstance(data, list)
186-
data = self.api.between(start=datetime(2023, 12, 1, 12, 20, tzinfo=pytz.utc),
187-
end=datetime(2023, 12, 1, 14, 0, tzinfo=pytz.utc),
188-
entity_type="pes", entity_id=0, dataframe=True)
229+
data = self.api.between(
230+
start=get_test_time(12, 20),
231+
end=get_test_time(14, 0),
232+
entity_type="pes",
233+
entity_id=0,
234+
dataframe=True
235+
)
189236
self.check_df_columns(data)
190237
self.check_df_dtypes(data)
191-
data = self.api.between(start=datetime(2023, 12, 1, tzinfo=pytz.utc),
192-
end=datetime(2023, 12, 1, 14, 00, tzinfo=pytz.utc),
193-
entity_type="pes", entity_id=0, period=5)
238+
data = self.api.between(
239+
start=get_test_time(0, 0),
240+
end=get_test_time(14, 0),
241+
entity_type="pes",
242+
entity_id=0,
243+
period=5
244+
)
194245
with self.subTest():
195246
assert isinstance(data, list)
196-
data = self.api.between(start=datetime(2023, 12, 1, 12, 20, tzinfo=pytz.utc),
197-
end=datetime(2023, 12, 1, 14, 00, tzinfo=pytz.utc),
198-
entity_type="pes", entity_id=0, period=5, dataframe=True)
247+
data = self.api.between(
248+
start=get_test_time(12, 20),
249+
end=get_test_time(14, 0),
250+
entity_type="pes",
251+
entity_id=0,
252+
period=5,
253+
dataframe=True
254+
)
199255
self.check_df_columns(data)
200256
self.check_df_dtypes(data)
201257

202258
def test_at_time(self):
203259
"""Test the at_time function."""
204-
data = self.api.at_time(dt=datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
205-
entity_id=0)
260+
test_time = datetime(2024, 12, 18, 12, 35, tzinfo=pytz.utc)
261+
data = self.api.at_time(dt=test_time, entity_type="pes", entity_id=0)
206262
self.check_pes_tuple(data)
207263
self.check_pes_tuple_dtypes(data)
208-
data = self.api.at_time(datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
209-
entity_id=0, dataframe=True)
264+
data = self.api.at_time(test_time, entity_type="pes", entity_id=0, dataframe=True)
210265
self.check_df_columns(data)
211266
self.check_df_dtypes(data)
212-
data = self.api.at_time(datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
213-
entity_id=0,
214-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
215-
dataframe=True)
267+
data = self.api.at_time(
268+
test_time,
269+
entity_type="pes",
270+
entity_id=0,
271+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
272+
dataframe=True
273+
)
216274
self.check_df_dtypes(data)
217-
data = self.api.at_time(dt=datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
218-
entity_id=0, period=5)
275+
data = self.api.at_time(dt=test_time, entity_type="pes", entity_id=0, period=5)
219276
self.check_pes_tuple(data)
220277
self.check_pes_tuple_dtypes(data)
221-
data = self.api.at_time(datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
222-
entity_id=0, period=5, dataframe=True)
278+
data = self.api.at_time(test_time, entity_type="pes", entity_id=0, period=5, dataframe=True)
223279
self.check_df_columns(data)
224280
self.check_df_dtypes(data)
225-
data = self.api.at_time(datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="pes",
226-
entity_id=0,
227-
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
228-
period=5, dataframe=True)
281+
data = self.api.at_time(
282+
test_time,
283+
entity_type="pes",
284+
entity_id=0,
285+
extra_fields="ucl_mw,lcl_mw,installedcapacity_mwp,stats_error",
286+
period=5,
287+
dataframe=True
288+
)
229289
self.check_df_dtypes(data)
230-
data = self.api.at_time(dt=datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="gsp",
231-
entity_id=26)
290+
data = self.api.at_time(dt=test_time, entity_type="gsp", entity_id=26)
232291
self.check_gsp_tuple(data)
233292
self.check_gsp_tuple_dtypes(data)
234-
data = self.api.at_time(datetime(2023, 12, 1, 12, 35, tzinfo=pytz.utc), entity_type="gsp",
235-
entity_id=26, dataframe=True)
293+
data = self.api.at_time(test_time, entity_type="gsp", entity_id=26, dataframe=True)
236294
self.check_df_columns(data)
237295
self.check_df_dtypes(data)
238296

179 KB
Binary file not shown.

docs/build/doctrees/index.doctree

62 Bytes
Binary file not shown.
1.92 KB
Binary file not shown.

docs/build/html/.buildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Sphinx build info version 1
22
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3-
config: 19fe90bd7ee55c3d916d60d32c492b4e
3+
config: 6b2ed2e41e9cd54c1d316afe8fc76945
44
tags: 645f666f9bcd5a90fca523b33c5a78b7

docs/build/html/_modules/index.html

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
<!DOCTYPE html>
2-
<html class="writer-html5" lang="en" >
2+
<html class="writer-html5" lang="en" data-content_root="../">
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>Overview: module code &mdash; PV_Live API 1.3.0 documentation</title>
7-
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
8-
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
6+
<title>Overview: module code &mdash; PV_Live API 1.4.0 documentation</title>
7+
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
8+
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094" />
9+
10+
911
<!--[if lt IE 9]>
1012
<script src="../_static/js/html5shiv.min.js"></script>
1113
<![endif]-->
1214

13-
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
14-
<script src="../_static/jquery.js"></script>
15-
<script src="../_static/underscore.js"></script>
16-
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
17-
<script src="../_static/doctools.js"></script>
15+
<script src="../_static/jquery.js?v=5d32c60e"></script>
16+
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
17+
<script src="../_static/documentation_options.js?v=9172181d"></script>
18+
<script src="../_static/doctools.js?v=888ff710"></script>
19+
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
1820
<script src="../_static/js/theme.js"></script>
1921
<link rel="index" title="Index" href="../genindex.html" />
2022
<link rel="search" title="Search" href="../search.html" />
@@ -32,7 +34,7 @@
3234
PV_Live API
3335
</a>
3436
<div class="version">
35-
1.3.0
37+
1.4.0
3638
</div>
3739
<div role="search">
3840
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">

0 commit comments

Comments
 (0)