Skip to content

Commit af42537

Browse files
committed
Add table NEXT_DAY_DISPATCHLOAD
1 parent ccce6b5 commit af42537

File tree

8 files changed

+180
-28
lines changed

8 files changed

+180
-28
lines changed

nemosis/data_fetch_methods.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ def _get_read_function(fformat, table_type, day):
350350
func = _read_mms_csv
351351
else:
352352
func = _read_constructed_csv
353-
elif table_type == 'DAILY_REGION_SUMMARY':
353+
elif table_type in ['DAILY_REGION_SUMMARY', "NEXT_DAY_DISPATCHLOAD"]:
354354
func = _read_constructed_csv
355355
return func
356356

@@ -695,7 +695,7 @@ def _determine_columns_and_read_csv(
695695
else:
696696
type = str
697697
if (
698-
_defaults.table_types[table_name] in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY"]
698+
_defaults.table_types[table_name] in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY", "NEXT_DAY_DISPATCHLOAD"]
699699
and not read_all_columns
700700
):
701701
headers = read_csv_func(csv_file, nrows=1).columns.tolist()
@@ -706,7 +706,7 @@ def _determine_columns_and_read_csv(
706706
]
707707
data = read_csv_func(csv_file, usecols=columns, dtype=type)
708708
elif (
709-
_defaults.table_types[table_name] in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY"]
709+
_defaults.table_types[table_name] in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY", "NEXT_DAY_DISPATCHLOAD"]
710710
and read_all_columns
711711
):
712712
data = read_csv_func(csv_file, dtype=type)
@@ -864,5 +864,6 @@ def _static_table_wrapper_for_gui(
864864
"INTERCONNECTOR": _dynamic_data_wrapper_for_gui,
865865
"INTERCONNECTORCONSTRAINT": _dynamic_data_wrapper_for_gui,
866866
"MARKET_PRICE_THRESHOLDS": _dynamic_data_wrapper_for_gui,
867-
"DAILY_REGION_SUMMARY": _dynamic_data_wrapper_for_gui
867+
"DAILY_REGION_SUMMARY": _dynamic_data_wrapper_for_gui,
868+
"NEXT_DAY_DISPATCHLOAD": _dynamic_data_wrapper_for_gui
868869
}

nemosis/defaults.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
names = {
22
"FCAS Providers": "NEM Registration and Exemption List.xls",
33
"DISPATCHLOAD": "PUBLIC_DVD_DISPATCHLOAD",
4+
"NEXT_DAY_DISPATCHLOAD": "PUBLIC_NEXT_DAY_DISPATCHLOAD",
45
"DUDETAILSUMMARY": "PUBLIC_DVD_DUDETAILSUMMARY",
56
"DUDETAIL": "PUBLIC_DVD_DUDETAIL",
67
"DISPATCHCONSTRAINT": "PUBLIC_DVD_DISPATCHCONSTRAINT",
@@ -38,6 +39,7 @@
3839
table_types = {
3940
"FCAS Providers": "STATICXL",
4041
"DISPATCHLOAD": "MMS",
42+
"NEXT_DAY_DISPATCHLOAD": "NEXT_DAY_DISPATCHLOAD",
4143
"DUDETAILSUMMARY": "MMS",
4244
"DUDETAIL": "MMS",
4345
"DISPATCHCONSTRAINT": "MMS",
@@ -74,14 +76,15 @@
7476
dynamic_tables = [
7577
table
7678
for table, type in table_types.items()
77-
if type in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY", "FCAS"]
79+
if type in ["MMS", "BIDDING", "DAILY_REGION_SUMMARY", "NEXT_DAY_DISPATCHLOAD", "FCAS"]
7880
]
7981

8082
return_tables = list(names.keys())
8183

8284
display_as_AMEO = [
8385
"FCAS Providers",
8486
"DISPATCHLOAD",
87+
"NEXT_DAY_DISPATCHLOAD",
8588
"DUDETAILSUMMARY",
8689
"DUDETAIL",
8790
"DISPATCHCONSTRAINT",
@@ -127,7 +130,8 @@
127130

128131
current_data_page_urls = {
129132
"BIDDING": "Reports/Current/Bidmove_Complete/",
130-
"DAILY_REGION_SUMMARY": "/Reports/Current/Daily_Reports/"
133+
"DAILY_REGION_SUMMARY": "/Reports/Current/Daily_Reports/",
134+
"NEXT_DAY_DISPATCHLOAD": "/Reports/Current/NEXT_DAY_DISPATCH/"
131135
}
132136

133137
fcas_4_url = "http://www.nemweb.com.au/Reports/Current/Causer_Pays/FCAS_{}{}{}{}.zip"
@@ -234,6 +238,31 @@
234238
"LOWERREGENABLEMENTMAX",
235239
"LOWERREGENABLEMENTMIN",
236240
],
241+
"NEXT_DAY_DISPATCHLOAD": [
242+
"SETTLEMENTDATE",
243+
"DUID",
244+
"INTERVENTION",
245+
"DISPATCHMODE",
246+
"AGCSTATUS",
247+
"INITIALMW",
248+
"TOTALCLEARED",
249+
"RAMPDOWNRATE",
250+
"RAMPUPRATE",
251+
"LOWER5MIN",
252+
"LOWER60SEC",
253+
"LOWER6SEC",
254+
"RAISE5MIN",
255+
"RAISE60SEC",
256+
"RAISE6SEC",
257+
"LOWERREG",
258+
"RAISEREG",
259+
"SEMIDISPATCHCAP",
260+
"AVAILABILITY",
261+
"RAISEREGENABLEMENTMAX",
262+
"RAISEREGENABLEMENTMIN",
263+
"LOWERREGENABLEMENTMAX",
264+
"LOWERREGENABLEMENTMIN",
265+
],
237266
"TRADINGLOAD": [
238267
"SETTLEMENTDATE",
239268
"DUID",
@@ -705,6 +734,7 @@
705734
"SETTLEMENTDATE",
706735
],
707736
"DISPATCHLOAD": ["SETTLEMENTDATE", "INTERVENTION", "DUID"],
737+
"NEXT_DAY_DISPATCHLOAD": ["SETTLEMENTDATE", "INTERVENTION", "DUID"],
708738
"DISPATCH_UNIT_SCADA": ["SETTLEMENTDATE", "DUID"],
709739
"FCAS_4_SECOND": ["TIMESTAMP", "ELEMENTNUMBER", "VARIABLENUMBER"],
710740
"ELEMENTS_FCAS_4_SECOND": ["ELEMENTNUMBER"],
@@ -744,6 +774,7 @@
744774

745775
primary_date_columns = {
746776
"DISPATCHLOAD": "SETTLEMENTDATE",
777+
"NEXT_DAY_DISPATCHLOAD": "SETTLEMENTDATE",
747778
"TRADINGLOAD": "SETTLEMENTDATE",
748779
"TRADINGPRICE": "SETTLEMENTDATE",
749780
"TRADINGREGIONSUM": "SETTLEMENTDATE",

nemosis/downloader.py

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,6 @@ def run(year, month, day, index, filename_stub, down_load_to):
3434
logger.warning(f"{filename_stub} not downloaded")
3535

3636

37-
def run_bidding_tables_by_day(year, month, day, index, filename_stub, down_load_to):
38-
"""This function"""
39-
40-
bid_move_complete_url = "https://nemweb.com.au/Reports/Current/Bidmove_Complete/PUBLIC_BIDMOVE_COMPLETE_{year}{month}{day}"
41-
bid_move_complete_url = bid_move_complete_url.format(year=year, month=month, day=day)
42-
bid_move_complete_url = _get_matching_link(url="https://nemweb.com.au/Reports/Current/Bidmove_Complete/",
43-
stub_link=bid_move_complete_url)
44-
45-
# Perform the download, unzipping saving of the file
46-
try:
47-
download_unzip_csv(bid_move_complete_url, down_load_to)
48-
except Exception:
49-
logger.warning(f"{filename_stub} not downloaded")
50-
51-
5237
def run_bid_tables(year, month, day, index, filename_stub, down_load_to):
5338
if day is None:
5439
run(year, month, day, index, filename_stub, down_load_to)
@@ -78,6 +63,17 @@ def run_next_day_region_tables(year, month, day, index, filename_stub, down_load
7863
logger.warning(f"{filename_stub} not downloaded")
7964

8065

66+
def run_next_dispatch_tables(year, month, day, index, filename_stub, down_load_to):
67+
try:
68+
filename_stub = "PUBLIC_NEXT_DAY_DISPATCH_{year}{month}{day}".format(year=year, month=month, day=day)
69+
download_url = _get_current_url(
70+
filename_stub,
71+
defaults.current_data_page_urls["NEXT_DAY_DISPATCHLOAD"])
72+
_download_and_unpack_next_dispatch_load_files_complete_files(download_url, down_load_to)
73+
except Exception:
74+
logger.warning(f"{filename_stub} not downloaded")
75+
76+
8177
def _get_current_url(filename_stub, current_page_url):
8278
sub_url = _get_matching_link(
8379
url=defaults.nem_web_domain_url + current_page_url,
@@ -148,6 +144,31 @@ def _download_and_unpack_next_region_tables(
148144
),
149145
index=False,
150146
)
147+
148+
149+
def _download_and_unpack_next_dispatch_load_files_complete_files(
150+
download_url, down_load_to
151+
):
152+
r = requests.get(download_url, headers=USR_AGENT_HEADER)
153+
zipped_file = zipfile.ZipFile(io.BytesIO(r.content))
154+
155+
file_name = zipped_file.namelist()[
156+
0
157+
] # Just one file so we can pull it out of the list using 0
158+
start_row_second_table = _find_start_row_nth_table(
159+
zipped_file, file_name, 2
160+
)
161+
csv_file = zipped_file.open(file_name)
162+
NEXT_DAY_DISPATCHLOAD = pd.read_csv(
163+
csv_file, header=1, nrows=start_row_second_table - 3, dtype=str
164+
)
165+
NEXT_DAY_DISPATCHLOAD.to_csv(
166+
os.path.join(
167+
down_load_to,
168+
"PUBLIC_NEXT_DAY_DISPATCHLOAD_" + file_name[25:33] + ".csv",
169+
),
170+
index=False,
171+
)
151172

152173

153174
def _find_start_row_nth_table(sub_folder_zipfile, file_name, n):

nemosis/processing_info_maps.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
setup = {
1313
"DISPATCHLOAD": None,
14+
"NEXT_DAY_DISPATCHLOAD": None,
1415
"TRADINGLOAD": None,
1516
"TRADINGPRICE": None,
1617
"TRADINGREGIONSUM": None,
@@ -46,6 +47,7 @@
4647

4748
search_type = {
4849
"DISPATCHLOAD": "start_to_end",
50+
"NEXT_DAY_DISPATCHLOAD": "start_to_end",
4951
"TRADINGLOAD": "start_to_end",
5052
"TRADINGPRICE": "start_to_end",
5153
"TRADINGREGIONSUM": "start_to_end",
@@ -81,6 +83,7 @@
8183

8284
date_cols = {
8385
"DISPATCHLOAD": ["SETTLEMENTDATE"],
86+
"NEXT_DAY_DISPATCHLOAD": ["SETTLEMENTDATE"],
8487
"TRADINGLOAD": ["SETTLEMENTDATE"],
8588
"TRADINGPRICE": ["SETTLEMENTDATE"],
8689
"TRADINGREGIONSUM": ["SETTLEMENTDATE"],
@@ -116,6 +119,7 @@
116119

117120
filter = {
118121
"DISPATCHLOAD": filters.filter_on_settlementdate,
122+
"NEXT_DAY_DISPATCHLOAD": filters.filter_on_settlementdate,
119123
"TRADINGLOAD": filters.filter_on_settlementdate,
120124
"TRADINGPRICE": filters.filter_on_settlementdate,
121125
"TRADINGREGIONSUM": filters.filter_on_settlementdate,
@@ -151,6 +155,7 @@
151155

152156
finalise = {
153157
"DISPATCHLOAD": None,
158+
"NEXT_DAY_DISPATCHLOAD": None,
154159
"TRADINGLOAD": None,
155160
"TRADINGPRICE": None,
156161
"TRADINGREGIONSUM": None,
@@ -224,20 +229,23 @@
224229

225230
date_gen = {
226231
"MMS": date_generators.year_and_month_gen,
232+
"NEXT_DAY_DISPATCHLOAD": date_generators.current_gen,
227233
"BIDDING": date_generators.bid_table_gen,
228234
"DAILY_REGION_SUMMARY": date_generators.current_gen,
229235
"FCAS": date_generators.year_month_day_index_gen,
230236
}
231237

232238
write_filename = {
233239
"MMS": write_file_names.write_file_names,
240+
"NEXT_DAY_DISPATCHLOAD": write_file_names.write_file_names_current,
234241
"BIDDING": write_file_names.write_file_names_mms_and_current,
235242
"DAILY_REGION_SUMMARY": write_file_names.write_file_names_mms_and_current,
236243
"FCAS": write_file_names.write_file_names_fcas,
237244
}
238245

239246
downloader = {
240247
"MMS": downloader.run,
248+
"NEXT_DAY_DISPATCHLOAD": downloader.run_next_dispatch_tables,
241249
"BIDDING": downloader.run_bid_tables,
242250
"DAILY_REGION_SUMMARY": downloader.run_next_day_region_tables,
243251
"FCAS": downloader.run_fcas4s,

nemosis/write_file_names.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ def write_file_names_mms_and_current(name, month, year, day, index, raw_data_loc
2020
return filename_stub, path_and_name
2121

2222

23+
def write_file_names_current(name, month, year, day, index, raw_data_location):
24+
# Add the year and month information to the generic AEMO file name
25+
filename_stub = (
26+
defaults.names[name] + "_" + str(year) + str(month) + str(day)
27+
)
28+
path_and_name = os.path.join(raw_data_location, filename_stub)
29+
return filename_stub, path_and_name
30+
31+
2332
def write_file_names_fcas(name, month, year, day, index, raw_data_location):
2433
# Add the year and month information to the generic AEMO file name
2534
filename_stub = defaults.names[name] + "_" + str(year) + str(month) + day + index

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="nemosis",
8-
version="3.3.0",
8+
version="3.4.0",
99
author="Nicholas Gorman, Abhijith Prakash",
1010
author_email="n.gorman305@gmail.com",
1111
description="A tool for accessing AEMO data.",

0 commit comments

Comments
 (0)