def _import_Market_Role(sess, csv_reader): for values in csv_reader: role_code = values[0] role_description = values[1] role = MarketRole.find_by_code(sess, role_code) if role is None: MarketRole.insert(sess, role_code, role_description) else: role.description = role_description sess.flush()
def _import_Market_Participant_Role(sess, csv_reader): for values in csv_reader: participant_code = values[0] participant = Participant.get_by_code(sess, participant_code) market_role_code = values[1] market_role = MarketRole.get_by_code(sess, market_role_code) valid_from = parse_date(values[2]) party = Party.find_by_participant_role(sess, participant, market_role, valid_from) valid_to = parse_to_date(values[3]) name = values[4] dno_code_str = values[14] dno_code = None if len(dno_code_str) == 0 else dno_code_str if dno_code == "99": continue if party is None: participant.insert_party( sess, market_role, name, valid_from, valid_to, dno_code, ) else: party.name = name party.valid_to = valid_to party.dno_code = dno_code sess.flush()
def test_general_import_llfc_update_valid_to_no_change(sess): participant = Participant.insert(sess, "CALB", "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "10") insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "328", "PC 5-8 & HH HV", voltage_level, False, True, to_utc(ct_datetime(2020, 4, 1)), None, ) sess.commit() action = "update" vals = [ "10", "328", "2020-04-01 00:00", "Reserved EHV 33kV - Import", "HV", "False", "{no change}", "{no change}", ] args = [] chellow.general_import.general_import_llfc(sess, action, vals, args)
def test_fetch_cvs(mocker, sess): market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) properties = { "enabled": True, "url": "https://example.com", } Contract.insert_non_core(sess, "g_cv", "", properties, to_utc(ct_datetime(2014, 6, 1)), None, {}) sess.commit() mock_response = mocker.Mock() with open("test/test_g_cv/cv.csv") as f: mock_response.text = f.read() mock_requests = mocker.patch("chellow.g_cv.requests") mock_requests.post = mocker.Mock(return_value=mock_response) messages = [] def log_f(msg): messages.append(msg) chellow.g_cv.fetch_cvs(sess, log_f) assert messages[-1] == "Added new rate script."
def test_import_Line_Loss_Factor_Class(sess): participant_code = "CALB" participant = Participant.insert(sess, participant_code, "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party(sess, market_role_R, "WPD", to_utc(ct_datetime(2000, 1, 1)), None, "22") insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") llfc_code = "004" llfc_description = "PC 5-8 & HH HV" dno.insert_llfc( sess, llfc_code, llfc_description, voltage_level, False, True, to_utc(ct_datetime(1996, 1, 1)), None, ) sess.commit() row = [ participant_code, "", "", llfc_code, "01/01/1996", llfc_description, "A", "" ] csv_reader = iter([row]) chellow.mdd_importer._import_Line_Loss_Factor_Class(sess, csv_reader)
def test_MTC_find_by_code(sess): market_role_R = MarketRole.insert(sess, "R", "Distributor") participant = Participant.insert(sess, "CALB", "AK Industries") dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") code = "034" meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, dno, code, "an mtc", False, False, True, meter_type, meter_payment_type, 1, utc_datetime(2000, 1, 1), None, ) sess.commit() mtc = Mtc.find_by_code(sess, dno, "34", utc_datetime(2000, 1, 1)) assert mtc.code == code
def test_lafs_forecast_none(mocker, sess): caches = {"dno": {"22": {}}} participant = Participant.insert(sess, "CALB", "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party( sess, market_role_R, "WPD", to_utc(ct_datetime(2000, 1, 1)), None, "22" ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, to_utc(ct_datetime(1996, 1, 1)), None, ) start_date = to_utc(ct_datetime(2019, 2, 28, 23, 30)) hist_date = to_utc(ct_datetime(2018, 2, 28, 23, 30)) sess.commit() ds = mocker.Mock() ds.forecast_date = hist_date ds.start_date = start_date ds.finish_date = start_date ds.dno_code = "22" ds.gsp_group_code = "_L" ds.llfc_code = "510" ds.is_displaced = False ds.sc = 0 ds.supplier_bill = defaultdict(int) ds.supplier_rate_sets = defaultdict(set) ds.get_data_sources = mocker.Mock(return_value=iter([ds])) ds.caches = caches ds.sess = sess hh = { "hist-start": hist_date, "start-date": start_date, "ct-decimal-hour": 23.5, "ct-is-month-end": True, "ct-day-of-week": 3, "ct-year": 2019, "ct-month": 2, "msp-kwh": 0, "imp-msp-kvarh": 0, "exp-msp-kvarh": 0, } with pytest.raises( BadRequest, match="Missing LAF for DNO 22 and LLFC 510 and timestamps 2019-02-28 23:30, " "2018-02-28 23:30 and 2018-02-28 23:30", ): chellow.duos.datum_2012_02_23(ds, hh)
def test_lafs_hist(mocker, sess): caches = {"dno": {"22": {}}} participant = Participant.insert(sess, "CALB", "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party( sess, market_role_R, "WPD", to_utc(ct_datetime(2000, 1, 1)), None, "22" ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") llfc = dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, to_utc(ct_datetime(1996, 1, 1)), None, ) hist_laf = 1.5 start_date = to_utc(ct_datetime(2019, 2, 28, 23, 30)) hist_date = to_utc(ct_datetime(2018, 2, 28, 23, 30)) llfc.insert_laf(sess, hist_date, hist_laf) sess.commit() ds = mocker.Mock() ds.start_date = start_date ds.finish_date = start_date ds.dno_code = "22" ds.gsp_group_code = "_L" ds.llfc_code = "510" ds.is_displaced = False ds.sc = 0 ds.supplier_bill = defaultdict(int) ds.supplier_rate_sets = defaultdict(set) ds.get_data_sources = mocker.Mock(return_value=iter([ds])) ds.caches = caches ds.sess = sess ds.hh_data = [] hh = { "hist-start": hist_date, "start-date": start_date, "ct-decimal-hour": 23.5, "ct-is-month-end": True, "ct-day-of-week": 3, "ct-year": 2019, "ct-month": 2, "msp-kwh": 0, "imp-msp-kvarh": 0, "exp-msp-kvarh": 0, } chellow.duos.datum_2012_02_23(ds, hh) assert caches["dno"]["22"]["lafs"]["510"][start_date] == hist_laf
def test_duos_availability_from_to(mocker, sess): caches = {"dno": {"22": {}}} participant = Participant.insert(sess, "CALB", "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party( sess, market_role_R, "WPD", to_utc(ct_datetime(2000, 1, 1)), None, "22" ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") llfc = dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, to_utc(ct_datetime(1996, 1, 1)), None, ) month_from = to_utc(ct_datetime(2019, 2, 1)) month_to = to_utc(ct_datetime(2019, 2, 28, 23, 30)) for hh in hh_range(caches, month_from, month_to): llfc.insert_laf(sess, hh, 1) sess.commit() ds = mocker.Mock() ds.dno_code = "22" ds.gsp_group_code = "_L" ds.llfc_code = "510" ds.is_displaced = False ds.sc = 0 ds.supplier_bill = defaultdict(int) ds.supplier_rate_sets = defaultdict(set) ds.get_data_sources = mocker.Mock(return_value=[]) ds.caches = caches ds.sess = sess hh = { "start-date": ct_datetime(2019, 2, 28, 23, 30), "ct-decimal-hour": 23.5, "ct-is-month-end": True, "ct-day-of-week": 3, "ct-year": 2019, "ct-month": 2, "msp-kwh": 0, "imp-msp-kvarh": 0, "exp-msp-kvarh": 0, } chellow.duos.datum_2010_04_01(ds, hh) ds.get_data_sources.assert_called_with(month_from, month_to)
def test_general_import_llfc_insert(sess): participant = Participant.insert(sess, "CALB", "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "27") insert_voltage_levels(sess) sess.commit() action = "insert" vals = [ "27", "A1A", "LV:LV A Agg Band 0", "LV", "False", "True", "2020-10-21 00:00", "", ] args = [] chellow.general_import.general_import_llfc(sess, action, vals, args)
def test_http_supplier_batch_with_mpan_cores(mocker, client, sess): market_role_X = MarketRole.insert(sess, "X", "Supplier") participant = Participant.insert(sess, "hhak", "AK Industries") participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) batch = supplier_contract.insert_batch(sess, "005", "batch 5") sess.commit() MockThread = mocker.patch("chellow.reports.report_111.threading.Thread") data = { "batch_id": str(batch.id), "mpan_cores": "22 1065 3921 534", } response = client.get("/reports/111", data=data) match(response, 303) expected_args = ( batch.id, None, None, None, None, None, ["22 1065 3921 534"], "_batch_005", ) MockThread.assert_called_with(target=chellow.reports.report_111.content, args=expected_args)
def test_general_import_era_insert(sess): site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_dc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") insert_comms(sess) comm = Comm.get_by_code(sess, "GSM") exp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, comm, None, energisation_status, {}, None, None, None, None, None, "22 7867 6232 781", "521", exp_supplier_contract, "7748", 361, ) sess.commit() action = "insert" vals = [ "22 7867 6232 781", "2020-10-01 00:00", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "{no change}", "Fusion Supplier 2000", "{no change}", "{no change}", "{no change}", "{no change}", ] args = [] chellow.general_import.general_import_era(sess, action, vals, args)
def test_init_hh_data(sess, mocker): """New style channels""" site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_hhdc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) era = supply.eras[0] channel = era.insert_channel(sess, True, "ACTIVE") data_raw = [{ "start_date": utc_datetime(2009, 8, 10), "value": 10, "status": "A", }] channel.add_hh_data(sess, data_raw) sess.commit() caches = {} chunk_start = utc_datetime(2009, 7, 31, 23, 00) chunk_finish = utc_datetime(2009, 8, 31, 22, 30) is_import = True full_channels, hhd = chellow.computer._init_hh_data( sess, caches, era, chunk_start, chunk_finish, is_import) assert full_channels expected_hhd = { utc_datetime(2009, 8, 10): { "imp-msp-kvarh": 0.0, "imp-msp-kvar": 0.0, "exp-msp-kvarh": 0.0, "exp-msp-kvar": 0.0, "status": "A", "hist-kwh": 10.0, "msp-kwh": 10.0, "msp-kw": 20.0, } } assert hhd == expected_hhd
def test_get_era_bundles_bill_after_supply_end(sess, client): """Check that a bill starting after the end of a supply still gets shown. """ site = Site.insert(sess, "22488", "Water Works") insert_sources(sess) source = Source.get_by_code(sess, "net") gsp_group = GspGroup.insert(sess, "_L", "South Western") participant = Participant.insert(sess, "hhak", "AK Industries") market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_hhdc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2020, 1, 1), utc_datetime(2020, 1, 31), gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) batch = imp_supplier_contract.insert_batch(sess, "b1", "batch 1") insert_bill_types(sess) bill_type_N = BillType.get_by_code(sess, "N") batch.insert_bill( sess, "ytgeklf", "s77349", utc_datetime(2020, 2, 10), utc_datetime(2020, 2, 2), utc_datetime(2020, 3, 1), Decimal(0), Decimal("0.00"), Decimal("0.00"), Decimal("0.00"), bill_type_N, {}, supply, ) sess.commit() bundles = get_era_bundles(sess, supply) assert len(bundles[0]["imp_bills"]["bill_dicts"]) == 1
def test_batch(mocker, sess, client): site = Site.insert(sess, "22488", "Water Works") g_dn = GDn.insert(sess, "EE", "East of England") g_ldz = g_dn.insert_g_ldz(sess, "EA") g_exit_zone = g_ldz.insert_g_exit_zone(sess, "EA1") insert_g_units(sess) g_unit_M3 = GUnit.get_by_code(sess, "M3") participant = Participant.insert(sess, "CALB", "AK Industries") market_role_Z = MarketRole.get_by_code(sess, "Z") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) g_cv_rate_script = { "cvs": { "EA": { 1: { "applicable_at": utc_datetime(2020, 10, 3), "cv": 39.2000 }, } } } Contract.insert_non_core(sess, "g_cv", "", {}, utc_datetime(2000, 1, 1), None, g_cv_rate_script) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) charge_script = """ import chellow.g_ccl from chellow.g_engine import g_rates from chellow.utils import reduce_bill_hhs def virtual_bill_titles(): return [ 'units_consumed', 'correction_factor', 'unit_code', 'unit_factor', 'calorific_value', 'kwh', 'gas_rate', 'gas_gbp', 'ccl_rate', 'standing_rate', 'standing_gbp', 'net_gbp', 'vat_gbp', 'gross_gbp', 'problem'] def virtual_bill(ds): chellow.g_ccl.vb(ds) for hh in ds.hh_data: start_date = hh['start_date'] bill_hh = ds.bill_hhs[start_date] bill_hh['units_consumed'] = hh['units_consumed'] bill_hh['correction_factor'] = {hh['correction_factor']} bill_hh['unit_code'] = {hh['unit_code']} bill_hh['unit_factor'] = {hh['unit_factor']} bill_hh['calorific_value'] = {hh['calorific_value']} kwh = hh['kwh'] bill_hh['kwh'] = kwh gas_rate = float( g_rates(ds.sess, ds.caches, db_id, start_date)['gas_rate']) bill_hh['gas_rate'] = {gas_rate} bill_hh['gas_gbp'] = gas_rate * kwh bill_hh['ccl_kwh'] = kwh ccl_rate = hh['ccl'] bill_hh['ccl_rate'] = {ccl_rate} bill_hh['ccl_kwh'] = kwh bill_hh['ccl_gbp'] = kwh * ccl_rate if hh['utc_is_month_end']: standing_rate = float( g_rates( ds.sess, ds.caches, db_id, start_date)['standing_rate']) bill_hh['standing_rate'] = {standing_rate} bill_hh['standing_gbp'] = standing_rate if hh['utc_decimal_hour'] == 0: pass bill_hh['net_gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) bill_hh['vat_gbp'] = 0 bill_hh['gross_gbp'] = bill_hh['net_gbp'] + bill_hh['vat_gbp'] ds.bill = reduce_bill_hhs(ds.bill_hhs) """ g_contract_rate_script = { "gas_rate": 0.1, "standing_rate": 0.1, } g_contract = GContract.insert( sess, "Fusion 2020", charge_script, {}, utc_datetime(2000, 1, 1), None, g_contract_rate_script, ) insert_g_reading_frequencies(sess) g_reading_frequency_M = GReadingFrequency.get_by_code(sess, "M") g_supply = site.insert_g_supply( sess, "87614362", "main", g_exit_zone, utc_datetime(2018, 1, 1), None, "hgeu8rhg", 1, g_unit_M3, g_contract, "d7gthekrg", g_reading_frequency_M, ) g_batch = g_contract.insert_g_batch(sess, "b1", "Jan batch") breakdown = {"units_consumed": 771} insert_bill_types(sess) bill_type_n = BillType.get_by_code(sess, "N") g_bill = g_batch.insert_g_bill( sess, g_supply, bill_type_n, "55h883", "dhgh883", utc_datetime(2019, 4, 3), utc_datetime(2020, 1, 1), utc_datetime(2020, 1, 31, 23, 30), Decimal("45"), Decimal("12.40"), Decimal("1.20"), Decimal("14.52"), "", breakdown, ) sess.commit() mock_file = StringIO() mock_file.close = mocker.Mock() mocker.patch("chellow.reports.report_429.open", return_value=mock_file) mocker.patch("chellow.reports.report_429.chellow.dloads.make_names", return_value=("a", "b")) mocker.patch("chellow.reports.report_429.os.rename") user = mocker.Mock() chellow.reports.report_429.content(g_batch.id, g_bill.id, user) actual = mock_file.getvalue() expected = [ "batch,bill_reference,bill_type,bill_start_date,bill_finish_date," "mprn,supply_name,site_code,site_name,covered_start,covered_finish," "covered_bill_ids,covered_units_consumed,virtual_units_consumed," "covered_correction_factor,virtual_correction_factor," "covered_unit_code,virtual_unit_code,covered_unit_factor," "virtual_unit_factor,covered_calorific_value,virtual_calorific_value," "covered_kwh,virtual_kwh,covered_gas_rate,virtual_gas_rate," "covered_gas_gbp,virtual_gas_gbp,difference_gas_gbp,covered_ccl_rate," "virtual_ccl_rate,covered_standing_rate,virtual_standing_rate," "covered_standing_gbp,virtual_standing_gbp,difference_standing_gbp," "covered_net_gbp,virtual_net_gbp,difference_net_gbp,covered_vat_gbp," "virtual_vat_gbp,difference_vat_gbp,covered_gross_gbp," "virtual_gross_gbp,difference_gross_gbp,covered_problem," "virtual_problem", "b1,55h883,N,2020-01-01 00:00,2020-01-31 23:30,87614362,main,22488," "Water Works,2020-01-01 00:00,2020-01-31 23:30,1,771,0,,1.0,,M3,,1.0" ",,39.2,45,0.0,,0.1,,0.0,,,0.00339,,0.1,,0.1,,12.40,0.1,12.3,1.20,0," "1.2,14.52,0.1,14.42,,", ] expected_str = "\r\n".join(expected) + "\r\n" assert actual == expected_str
def test_https_handler(mocker, sess): site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_hhdc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) era = supply.eras[0] era.insert_channel(sess, True, "ACTIVE") sess.commit() mock_requests = mocker.patch("chellow.hh_importer.requests") mock_response = mocker.Mock() mock_requests.get.return_value = mock_response mock_response.json.return_value = { "DataPoints": [{ "Flags": 0, "Time": 636188256000000000, "Value": 21 }] } log = [] def log_f(msg): log.append(msg) properties = { "enabled": True, "protocol": "https", "download_days": 8, "url_template": "https://example.com/?from=" "{{chunk_start.strftime('%d/%m/%Y')}}&to=" "{{chunk_finish.strftime('%d/%m/%Y')}}", "url_values": { "22 7907 4116 080": { "api_key": "768234ht" } }, } now = utc_datetime(2020, 12, 22) https_handler(sess, log_f, properties, dc_contract, now=now) expected_log = [ "Window start: 2020-12-14 00:00", "Window finish: 2020-12-21 23:30", "Looking at MPAN core 22 7867 6232 781.", "Retrieving data from " "https://example.com/?from=14/12/2020&to=21/12/2020.", "Finished loading.", ] assert log == expected_log
def test_MddImporter(mocker, sess): participant_code = "ACCU" Participant.insert(sess, participant_code, "accu") market_role_code = "5" MarketRole.insert(sess, market_role_code, "mr5") sess.commit() party_name = "Callisto Data Limited" zf = BytesIO() vals = [ [ "Market Participant ID", "Market Participant Role Code", "Effective From Date (MPR)", "Effective To Date (MPR)", "Address 1", "Address 2", "Address 3", "Address 4", "Address 5", "Address 6", "Address 7", "Address 8", "Address 9", "Post Code", "Distributor Short Code", ], [ participant_code, market_role_code, "18/12/2013", "", party_name, "11 Silver Fox Way", "Cobalt Business Park", "Newcastle Upon Tyne", "Tyne and Wear", "", "", "", "", "NE27 0QJ", "", ], ] csv_file = StringIO() csv_writer = writer(csv_file) for row in vals: csv_writer.writerow(row) with ZipFile(zf, "w") as f: f.writestr("Market_Participant_Role_316.csv", csv_file.getvalue()) importer = chellow.mdd_importer.MddImporter(zf) importer.run() assert importer.error_message is None party = sess.execute(select(Party)).scalar_one() assert party.participant.code == participant_code assert party.market_role.code == market_role_code assert party.name == party_name assert party.valid_from == to_utc(ct_datetime(2013, 12, 18)) assert party.valid_to is None assert party.dno_code is None
def test_bill_http(mocker, sess, client): site = Site.insert(sess, "22488", "Water Works") g_dn = GDn.insert(sess, "EE", "East of England") g_ldz = g_dn.insert_g_ldz(sess, "EA") g_exit_zone = g_ldz.insert_g_exit_zone(sess, "EA1") insert_g_units(sess) g_unit_M3 = GUnit.get_by_code(sess, "M3") participant = Participant.insert(sess, "CALB", "AK Industries") market_role_Z = MarketRole.get_by_code(sess, "Z") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) g_contract = GContract.insert(sess, "Fusion 2020", "", {}, utc_datetime(2000, 1, 1), None, {}) insert_g_reading_frequencies(sess) g_reading_frequency_M = GReadingFrequency.get_by_code(sess, "M") g_supply = site.insert_g_supply( sess, "87614362", "main", g_exit_zone, utc_datetime(2018, 1, 1), None, "hgeu8rhg", 1, g_unit_M3, g_contract, "d7gthekrg", g_reading_frequency_M, ) g_batch = g_contract.insert_g_batch(sess, "b1", "Jan batch") breakdown = {"units_consumed": 771} insert_bill_types(sess) bill_type_n = BillType.get_by_code(sess, "N") g_bill = g_batch.insert_g_bill( sess, g_supply, bill_type_n, "55h883", "dhgh883", utc_datetime(2019, 4, 3), utc_datetime(2020, 1, 1), utc_datetime(2020, 1, 31, 23, 30), Decimal("45"), Decimal("12.40"), Decimal("1.20"), Decimal("14.52"), "", breakdown, ) sess.commit() data = {"g_bill_id": g_bill.id} mock_Thread = mocker.patch("chellow.reports.report_429.threading.Thread", autospec=True) response = client.get("/reports/429", data=data) match(response, 303) user = None args = (None, g_bill.id, user) mock_Thread.assert_called_with(target=chellow.reports.report_429.content, args=args)
def test_scenario_new_generation(mocker, sess): site = Site.insert(sess, "CI017", "Water Works") start_date = utc_datetime(2009, 7, 31, 23, 00) finish_date = utc_datetime(2009, 8, 31, 22, 30) supply_id = None report_context = {} forecast_from = utc_datetime(2020, 1, 1) market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_dc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") insert_comms(sess) comm = Comm.get_by_code(sess, "GSM") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, comm, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) sess.commit() scenario_hh = { "CI017": { "generated": """ 2009-08-01 00:00, 40 2009-08-15 00:00, 40""" } } era_maps = { utc_datetime(2000, 8, 1): { "llfcs": { "22": { "new_export": "521" } }, "supplier_contracts": { "new_export": 4 }, } } site_deltas = _make_site_deltas(sess, report_context, site, scenario_hh, forecast_from, supply_id) calcs, _, _ = _make_calcs( sess, site, start_date, finish_date, supply_id, site_deltas, forecast_from, report_context, era_maps, ) assert calcs[1][1] == "CI017_extra_gen_TRUE" assert calcs[2][2] == "CI017_extra_net_export"
def test_supply(mocker, sess, client): site = Site.insert(sess, "22488", "Water Works") g_dn = GDn.insert(sess, "EE", "East of England") g_ldz = g_dn.insert_g_ldz(sess, "EA") g_exit_zone = g_ldz.insert_g_exit_zone(sess, "EA1") insert_g_units(sess) g_unit_M3 = GUnit.get_by_code(sess, "M3") participant = Participant.insert(sess, "CALB", "AK Industries") market_role_Z = MarketRole.get_by_code(sess, "Z") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) g_cv_rate_script = { "cvs": { "EA": { 1: { "applicable_at": utc_datetime(2020, 10, 3), "cv": 39.2000 }, } } } Contract.insert_non_core(sess, "g_cv", "", {}, utc_datetime(2000, 1, 1), None, g_cv_rate_script) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) charge_script = """ import chellow.g_ccl from chellow.g_engine import g_rates from chellow.utils import reduce_bill_hhs def virtual_bill_titles(): return [ 'units_consumed', 'correction_factor', 'unit_code', 'unit_factor', 'calorific_value', 'kwh', 'gas_rate', 'gas_gbp', 'ccl_rate', 'standing_rate', 'standing_gbp', 'net_gbp', 'vat_gbp', 'gross_gbp', 'problem'] def virtual_bill(ds): chellow.g_ccl.vb(ds) for hh in ds.hh_data: start_date = hh['start_date'] bill_hh = ds.bill_hhs[start_date] bill_hh['units_consumed'] = hh['units_consumed'] bill_hh['correction_factor'] = {hh['correction_factor']} bill_hh['unit_code'] = {hh['unit_code']} bill_hh['unit_factor'] = {hh['unit_factor']} bill_hh['calorific_value'] = {hh['calorific_value']} kwh = hh['kwh'] bill_hh['kwh'] = kwh gas_rate = float( g_rates(ds.sess, ds.caches, db_id, start_date)['gas_rate']) bill_hh['gas_rate'] = {gas_rate} bill_hh['gas_gbp'] = gas_rate * kwh bill_hh['ccl_kwh'] = kwh ccl_rate = hh['ccl'] bill_hh['ccl_rate'] = {ccl_rate} bill_hh['ccl_kwh'] = kwh bill_hh['ccl_gbp'] = kwh * ccl_rate if hh['utc_is_month_end']: standing_rate = float( g_rates( ds.sess, ds.caches, db_id, start_date)['standing_rate']) bill_hh['standing_rate'] = {standing_rate} bill_hh['standing_gbp'] = standing_rate if hh['utc_decimal_hour'] == 0: pass bill_hh['net_gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) bill_hh['vat_gbp'] = 0 bill_hh['gross_gbp'] = bill_hh['net_gbp'] + bill_hh['vat_gbp'] ds.bill = reduce_bill_hhs(ds.bill_hhs) """ g_contract_rate_script = { "gas_rate": 0.1, "standing_rate": 0.1, } g_contract = GContract.insert( sess, "Fusion 2020", charge_script, {}, utc_datetime(2000, 1, 1), None, g_contract_rate_script, ) insert_g_reading_frequencies(sess) g_reading_frequency_M = GReadingFrequency.get_by_code(sess, "M") msn = "hgeu8rhg" g_supply = site.insert_g_supply( sess, "87614362", "main", g_exit_zone, utc_datetime(2010, 1, 1), None, msn, 1, g_unit_M3, g_contract, "d7gthekrg", g_reading_frequency_M, ) g_batch = g_contract.insert_g_batch(sess, "b1", "Jan batch") breakdown = {"units_consumed": 771} insert_bill_types(sess) bill_type_N = BillType.get_by_code(sess, "N") insert_g_read_types(sess) g_read_type_A = GReadType.get_by_code(sess, "A") g_bill = g_batch.insert_g_bill( sess, g_supply, bill_type_N, "55h883", "dhgh883", utc_datetime(2019, 4, 3), utc_datetime(2015, 9, 1), utc_datetime(2015, 9, 30, 22, 30), Decimal("45"), Decimal("12.40"), Decimal("1.20"), Decimal("14.52"), "", breakdown, ) g_bill.insert_g_read( sess, msn, g_unit_M3, Decimal("1"), Decimal("37"), Decimal("90"), utc_datetime(2015, 9, 1), g_read_type_A, Decimal("890"), utc_datetime(2015, 9, 25), g_read_type_A, ) sess.commit() mock_file = BytesIO() mock_file.close = mocker.Mock() mocker.patch("chellow.reports.report_g_monthly_duration.open", return_value=mock_file) mocker.patch( "chellow.reports.report_g_monthly_duration.chellow.dloads.make_names", return_value=("a", "b"), ) mocker.patch("chellow.reports.report_g_monthly_duration.os.rename") user = mocker.Mock() site_id = site.id g_supply_id = g_supply.id compression = False finish_year = 2015 finish_month = 9 months = 1 now = utc_datetime(2020, 9, 1) chellow.reports.report_g_monthly_duration.content( site_id, g_supply_id, user, compression, finish_year, finish_month, months, now=now, ) sheet = odio.parse_spreadsheet(mock_file) table = list(sheet.tables[1].rows) expected = [ [ "creation_date", "mprn", "supply_name", "exit_zone", "msn", "unit", "contract", "site_id", "site_name", "associated_site_ids", "month", "kwh", "gbp", "billed_kwh", "billed_gbp", "units_consumed", "correction_factor", "unit_code", "unit_factor", "calorific_value", "kwh", "gas_rate", "gas_gbp", "ccl_rate", "standing_rate", "standing_gbp", "net_gbp", "vat_gbp", "gross_gbp", "problem", ], [ Datetime(2020, 9, 1, 1), "87614362", "main", "EA1", "hgeu8rhg", "M3", "Fusion 2020", "22488", "Water Works", "", Datetime(2015, 9, 30, 23, 30), 10888.888888888665, 1146.1869155555785, 45.0, 12.4, 1000.0000000000156, 1.0, "M3", 1.0, 39.2, 10888.888888888665, 0.1, 1088.8888888888619, 0.00525288, 0.1, 0.1, 1146.1869155555785, 0.0, 1146.1869155555785, None, ], ] assert expected == table
def test_bill_after_end_supply(mocker, sess): site = Site.insert(sess, "CI017", "Water Works") start_date = utc_datetime(2009, 7, 31, 23, 00) months = 1 supply_id = None market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_charge_script = """ from chellow.utils import reduce_bill_hhs def virtual_bill_titles(): return ['net-gbp', 'problem'] def virtual_bill(ds): for hh in ds.hh_data: hh_start = hh['start-date'] bill_hh = ds.supplier_bill_hhs[hh_start] bill_hh['net-gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) ds.mop_bill = reduce_bill_hhs(ds.supplier_bill_hhs) """ mop_contract = Contract.insert_mop( sess, "Fusion Mop Contract", participant, mop_charge_script, {}, utc_datetime(2000, 1, 1), None, {}, ) dc_charge_script = """ from chellow.utils import reduce_bill_hhs def virtual_bill_titles(): return ['net-gbp', 'problem'] def virtual_bill(ds): for hh in ds.hh_data: hh_start = hh['start-date'] bill_hh = ds.supplier_bill_hhs[hh_start] bill_hh['net-gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) ds.dc_bill = reduce_bill_hhs(ds.supplier_bill_hhs) """ dc_contract = Contract.insert_dc( sess, "Fusion DC 2000", participant, dc_charge_script, {}, utc_datetime(2000, 1, 1), None, {}, ) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") insert_comms(sess) comm = Comm.get_by_code(sess, "GSM") supplier_charge_script = """ import chellow.ccl from chellow.utils import HH, reduce_bill_hhs, utc_datetime def virtual_bill_titles(): return [ 'ccl-kwh', 'ccl-rate', 'ccl-gbp', 'net-gbp', 'vat-gbp', 'gross-gbp', 'sum-msp-kwh', 'sum-msp-gbp', 'problem'] def virtual_bill(ds): for hh in ds.hh_data: hh_start = hh['start-date'] bill_hh = ds.supplier_bill_hhs[hh_start] bill_hh['sum-msp-kwh'] = hh['msp-kwh'] bill_hh['sum-msp-gbp'] = hh['msp-kwh'] * 0.1 bill_hh['net-gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) bill_hh['vat-gbp'] = 0 bill_hh['gross-gbp'] = bill_hh['net-gbp'] + bill_hh['vat-gbp'] ds.supplier_bill = reduce_bill_hhs(ds.supplier_bill_hhs) """ imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, supplier_charge_script, {}, utc_datetime(2000, 1, 1), None, {}, ) batch = imp_supplier_contract.insert_batch(sess, "a b", "") dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") gsp_group = GspGroup.insert(sess, "_L", "South Western") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), utc_datetime(2000, 1, 31, 23, 30), gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, comm, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) insert_bill_types(sess) bill_type = sess.execute( select(BillType).where(BillType.code == "N")).scalar_one() batch.insert_bill( sess, "dd", "hjk", start_date, utc_datetime(2009, 7, 10), utc_datetime(2009, 7, 10), Decimal("10.00"), Decimal("10.00"), Decimal("10.00"), Decimal("10.00"), bill_type, {}, supply, ) sess.commit() scenario_props = { "scenario_start_year": start_date.year, "scenario_start_month": start_date.month, "scenario_duration": months, "by_hh": False, } base_name = ["monthly_duration"] site_id = site.id user = mocker.Mock() compression = False site_codes = [] now = utc_datetime(2020, 1, 1) mock_file = BytesIO() mock_file.close = mocker.Mock() mocker.patch("chellow.reports.report_247.open", return_value=mock_file) mocker.patch("chellow.reports.report_247.chellow.dloads.make_names", return_value=("a", "b")) mocker.patch("chellow.reports.report_247.os.rename") content( scenario_props, base_name, site_id, supply_id, user, compression, site_codes, now, ) sheet = odio.parse_spreadsheet(mock_file) table = list(sheet.tables[0].rows) expected = [ [ "creation-date", "site-id", "site-name", "associated-site-ids", "month", "metering-type", "sources", "generator-types", "import-net-kwh", "export-net-kwh", "import-gen-kwh", "export-gen-kwh", "import-3rd-party-kwh", "export-3rd-party-kwh", "displaced-kwh", "used-kwh", "used-3rd-party-kwh", "import-net-gbp", "export-net-gbp", "import-gen-gbp", "export-gen-gbp", "import-3rd-party-gbp", "export-3rd-party-gbp", "displaced-gbp", "used-gbp", "used-3rd-party-gbp", "billed-import-net-kwh", "billed-import-net-gbp", "billed-supplier-import-net-gbp", "billed-dc-import-net-gbp", "billed-mop-import-net-gbp", ], [ Datetime(2020, 1, 1, 0, 0), "CI017", "Water Works", "", Datetime(2009, 7, 31, 23, 30), None, "", "", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, 10.0, 0.0, 0.0, ], ] assert expected == table
def test_Supply_insert_era_at(sess): """Where an era is inserted in the last HH of another era, check the template era is the one at the insertion date. """ site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_hhdc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) mtc_845 = Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") era1_msn = "e1msn" imp_mpan_core = "22 7867 6232 781" supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", era1_msn, pc, "845", cop, None, energisation_status, {}, imp_mpan_core, "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) era1 = supply.eras[0] era2_start_date = utc_datetime(2009, 7, 31, 23, 30) era2 = supply.insert_era_at(sess, era2_start_date) era2_msn = "e2msn" era2.update( sess, era2_start_date, None, mop_contract, "379540", dc_contract, "547yt", era2_msn, pc, mtc_845, cop, None, energisation_status, {}, imp_mpan_core, "510", imp_supplier_contract, "9745y6", 361, None, None, None, None, None, ) sess.commit() start_date = utc_datetime(2009, 7, 31, 23, 00) era3 = supply.insert_era_at(sess, start_date) assert era3.msn == era1.msn
def test_process(mocker, sess): site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party( sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None ) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party( sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None ) participant.insert_party( sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None ) participant.insert_party( sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None ) mop_contract = Contract.insert_mop( sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {} ) dc_contract = Contract.insert_dc( sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {} ) pc = Pc.insert(sess, "00", "hh", utc_datetime(2000, 1, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") insert_comms(sess) comm = Comm.get_by_code(sess, "GSM") imp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party( sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22" ) meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert( sess, "CR", "Credit", utc_datetime(1996, 1, 1), None ) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "E") gsp_group = GspGroup.insert(sess, "_L", "South Western") site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, comm, None, energisation_status, {}, "22 7867 6232 781", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) site.insert_e_supply( sess, source, None, "Dave", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, comm, None, energisation_status, {}, "22 7868 6232 789", "510", imp_supplier_contract, "7748", 361, None, None, None, None, None, ) report_run = ReportRun.insert( sess, "ecoes_comparison", None, "ecoes_comparison", {}, ) sess.commit() f = StringIO() ecoes_lines = [ "titles", ",".join( ( "2278676232781", "address-line-1", "address-line-2", "address-line-3", "address-line-4", "address-line-5", "address-line-6", "address-line-7", "address-line-8", "address-line-9", "post-code", "supplier", "registration-from", "mtc", "mtc-date", "llfc", "llfc-from", "pc", "", "measurement-class", "energisation-status", "da", "dc", "mop", "mop-appoint-date", "gsp-group", "gsp-effective-from", "dno", "msn", "meter-install-date", "meter-type", "map-id", ), ), ",".join( ( "2278686232789", "address-line-1", "address-line-2", "address-line-3", "address-line-4", "address-line-5", "address-line-6", "address-line-7", "address-line-8", "address-line-9", "post-code", "supplier", "registration-from", "mtc", "mtc-date", "llfc", "llfc-from", "pc", "", "measurement-class", "energisation-status", "da", "dc", "mop", "mop-appoint-date", "gsp-group", "gsp-effective-from", "dno", "msn", "meter-install-date", "meter-type", "map-id", ), ), ] exclude_mpan_cores = [] ignore_mpan_cores_msn = [] show_ignored = True _process( sess, ecoes_lines, exclude_mpan_cores, ignore_mpan_cores_msn, f, show_ignored, report_run, ) expected = [ [ "mpan_core", "mpan_core_no_spaces", "ecoes_pc", "chellow_pc", "ecoes_mtc", "chellow_mtc", "ecoes_llfc", "chellow_llfc", "ecoes_ssc", "chellow_ssc", "ecoes_es", "chellow_es", "ecoes_supplier", "chellow_supplier", "chellow_supplier_contract_name", "ecoes_dc", "chellow_dc", "ecoes_mop", "chellow_mop", "ecoes_gsp_group", "chellow_gsp_group", "ecoes_msn", "chellow_msn", "ecoes_msn_install_date", "ecoes_meter_type", "chellow_meter_type", "ignored", "problem", ], [ "22 7867 6232 781", "2278676232781", "pc", "00", "mtc", "845", "llfc", "510", "", "", "energisation-status", "E", "supplier", "CALB", "Fusion Supplier 2000", "dc", "CALB", "mop", "CALB", "gsp-group", "_L", "msn", "hgjeyhuw", "meter-install-date", "meter-type", "H", "False", "The energisation statuses don't match. Can't parse the PC. Can't parse " "the MTC. The LLFCs don't match. The supplier codes don't match. The DC " "codes don't match. The MOP codes don't match. The GSP group codes don't " "match. The meter serial numbers don't match. The meter types don't match. " "See https://dtc.mrasco.com/DataItem.aspx?ItemCounter=0483 ", ], [ "22 7868 6232 789", "2278686232789", "pc", "00", "mtc", "845", "llfc", "510", "", "", "energisation-status", "E", "supplier", "CALB", "Fusion Supplier 2000", "dc", "CALB", "mop", "CALB", "gsp-group", "_L", "msn", "hgjeyhuw", "meter-install-date", "meter-type", "H", "False", "The energisation statuses don't match. Can't parse the PC. Can't parse " "the MTC. The LLFCs don't match. The supplier codes don't match. The DC " "codes don't match. The MOP codes don't match. The GSP group codes don't " "match. The meter serial numbers don't match. The meter types don't match. " "See https://dtc.mrasco.com/DataItem.aspx?ItemCounter=0483 ", ], ] assert f.getvalue() == "\n".join(",".join(line) for line in expected) + "\n"
def test_supply(mocker, sess, client): site = Site.insert(sess, "22488", "Water Works") g_dn = GDn.insert(sess, "EE", "East of England") g_ldz = g_dn.insert_g_ldz(sess, "EA") g_exit_zone = g_ldz.insert_g_exit_zone(sess, "EA1") insert_g_units(sess) g_unit_M3 = GUnit.get_by_code(sess, "M3") participant = Participant.insert(sess, "CALB", "AK Industries") market_role_Z = MarketRole.get_by_code(sess, "Z") participant.insert_party( sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None ) g_contract = GContract.insert( sess, "Fusion 2020", "", {}, utc_datetime(2000, 1, 1), None, {} ) insert_g_reading_frequencies(sess) g_reading_frequency_M = GReadingFrequency.get_by_code(sess, "M") msn = "hgeu8rhg" g_supply = site.insert_g_supply( sess, "87614362", "main", g_exit_zone, utc_datetime(2010, 1, 1), None, msn, 1, g_unit_M3, g_contract, "d7gthekrg", g_reading_frequency_M, ) sess.commit() mock_file = StringIO() mock_file.close = mocker.Mock() mocker.patch( "chellow.reports.report_g_supplies_snapshot.open", return_value=mock_file ) mocker.patch( "chellow.reports.report_g_supplies_snapshot.chellow.dloads.make_names", return_value=("a", "b"), ) mocker.patch("chellow.reports.report_g_supplies_snapshot.os.rename") user = mocker.Mock() g_supply_id = g_supply.id date = utc_datetime(2020, 9, 1) chellow.reports.report_g_supplies_snapshot.content(date, g_supply_id, user) mock_file.seek(0) sheet = csv.reader(mock_file) table = list(sheet) expected = [ [ "Date", "Physical Site Id", "Physical Site Name", "Other Site Ids", "Other Site Names", "MPRN", "Exit Zone", "Meter Serial Number", "Correction Factor", "Unit", "Contract", "Account", "Supply Start", "Supply Finish", ], [ "2020-09-01 01:00", "22488", "Water Works", "", "", "87614362", "EA1", "hgeu8rhg", "1", "M3", "Fusion 2020", "d7gthekrg", "2010-01-01 00:00", "", ], ] assert expected == table
def test_supply(mocker, sess, client): site = Site.insert(sess, "22488", "Water Works") g_dn = GDn.insert(sess, "EE", "East of England") g_ldz = g_dn.insert_g_ldz(sess, "EA") g_exit_zone = g_ldz.insert_g_exit_zone(sess, "EA1") insert_g_units(sess) g_unit_M3 = GUnit.get_by_code(sess, "M3") participant = Participant.insert(sess, "CALB", "AK Industries") market_role_Z = MarketRole.get_by_code(sess, "Z") participant.insert_party( sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None ) g_cv_rate_script = { "cvs": { "EA": { 1: {"applicable_at": utc_datetime(2020, 10, 3), "cv": 39.2000}, } } } Contract.insert_non_core( sess, "g_cv", "", {}, utc_datetime(2000, 1, 1), None, g_cv_rate_script ) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) charge_script = """ import chellow.g_ccl from chellow.g_engine import g_rates from chellow.utils import reduce_bill_hhs def virtual_bill_titles(): return [ 'units_consumed', 'correction_factor', 'unit_code', 'unit_factor', 'calorific_value', 'kwh', 'gas_rate', 'gas_gbp', 'ccl_rate', 'standing_rate', 'standing_gbp', 'net_gbp', 'vat_gbp', 'gross_gbp', 'problem'] def virtual_bill(ds): chellow.g_ccl.vb(ds) for hh in ds.hh_data: start_date = hh['start_date'] bill_hh = ds.bill_hhs[start_date] bill_hh['units_consumed'] = hh['units_consumed'] bill_hh['correction_factor'] = {hh['correction_factor']} bill_hh['unit_code'] = {hh['unit_code']} bill_hh['unit_factor'] = {hh['unit_factor']} bill_hh['calorific_value'] = {hh['calorific_value']} kwh = hh['kwh'] bill_hh['kwh'] = kwh gas_rate = float( g_rates(ds.sess, ds.caches, db_id, start_date)['gas_rate']) bill_hh['gas_rate'] = {gas_rate} bill_hh['gas_gbp'] = gas_rate * kwh bill_hh['ccl_kwh'] = kwh ccl_rate = hh['ccl'] bill_hh['ccl_rate'] = {ccl_rate} bill_hh['ccl_kwh'] = kwh bill_hh['ccl_gbp'] = kwh * ccl_rate if hh['utc_is_month_end']: standing_rate = float( g_rates( ds.sess, ds.caches, db_id, start_date)['standing_rate']) bill_hh['standing_rate'] = {standing_rate} bill_hh['standing_gbp'] = standing_rate if hh['utc_decimal_hour'] == 0: pass bill_hh['net_gbp'] = sum( v for k, v in bill_hh.items() if k.endswith('gbp')) bill_hh['vat_gbp'] = 0 bill_hh['gross_gbp'] = bill_hh['net_gbp'] + bill_hh['vat_gbp'] ds.bill = reduce_bill_hhs(ds.bill_hhs) """ g_contract_rate_script = { "gas_rate": 0.1, "standing_rate": 0.1, } g_contract = GContract.insert( sess, "Fusion 2020", charge_script, {}, utc_datetime(2000, 1, 1), None, g_contract_rate_script, ) insert_g_reading_frequencies(sess) g_reading_frequency_M = GReadingFrequency.get_by_code(sess, "M") msn = "hgeu8rhg" g_supply = site.insert_g_supply( sess, "87614362", "main", g_exit_zone, utc_datetime(2010, 1, 1), None, msn, 1, g_unit_M3, g_contract, "d7gthekrg", g_reading_frequency_M, ) g_batch = g_contract.insert_g_batch(sess, "b1", "Jan batch") breakdown = {"units_consumed": 771} insert_bill_types(sess) bill_type_N = BillType.get_by_code(sess, "N") insert_g_read_types(sess) g_read_type_A = GReadType.get_by_code(sess, "A") g_bill = g_batch.insert_g_bill( sess, g_supply, bill_type_N, "55h883", "dhgh883", utc_datetime(2019, 4, 3), utc_datetime(2015, 9, 1), utc_datetime(2015, 9, 30, 22, 30), Decimal("45"), Decimal("12.40"), Decimal("1.20"), Decimal("14.52"), "", breakdown, ) g_bill.insert_g_read( sess, msn, g_unit_M3, Decimal("1"), Decimal("37"), Decimal("90"), utc_datetime(2015, 9, 1), g_read_type_A, Decimal("890"), utc_datetime(2015, 9, 25), g_read_type_A, ) sess.commit() mock_file = StringIO() mock_file.close = mocker.Mock() mocker.patch( "chellow.reports.report_g_virtual_bills_hh.open", return_value=mock_file ) mocker.patch( "chellow.reports.report_g_virtual_bills_hh.chellow.dloads.make_names", return_value=("a", "b"), ) mocker.patch("chellow.reports.report_g_virtual_bills.os.rename") user = mocker.Mock() g_supply_id = g_supply.id start_date = to_utc(ct_datetime(2018, 2, 1)) finish_date = to_utc(ct_datetime(2018, 2, 1, 0, 30)) chellow.reports.report_g_virtual_bills_hh.content( g_supply_id, start_date, finish_date, user ) mock_file.seek(0) table = list(csv.reader(mock_file)) expected = [ [ "MPRN", "Site Code", "Site Name", "Account", "HH Start", "", "", "units_consumed", "correction_factor", "unit_code", "unit_factor", "calorific_value", "kwh", "gas_rate", "gas_gbp", "ccl_rate", "standing_rate", "standing_gbp", "net_gbp", "vat_gbp", "gross_gbp", "problem", ], [ "87614362", "22488", "Water Works", "d7gthekrg", "2018-02-01 00:00", "", "", "0.6944444444444444", "1.0", "M3", "1.0", "39.2", "7.561728395061729", "0.1", "0.7561728395061729", "0.00198", "", "", "0.7711450617283951", "0", "0.7711450617283951", "", "ccl_gbp", "0.014972222222222222", "ccl_kwh", "7.561728395061729", ], [ "87614362", "22488", "Water Works", "d7gthekrg", "2018-02-01 00:30", "", "", "0.6944444444444444", "1.0", "M3", "1.0", "39.2", "7.561728395061729", "0.1", "0.7561728395061729", "0.00198", "", "", "0.7711450617283951", "0", "0.7711450617283951", "", "ccl_gbp", "0.014972222222222222", "ccl_kwh", "7.561728395061729", ], ] match_tables(table, expected)
def test_SupplySource_init_nhh(sess, mocker): """Old style channels""" site = Site.insert(sess, "CI017", "Water Works") market_role_Z = MarketRole.insert(sess, "Z", "Non-core") participant = Participant.insert(sess, "CALB", "AK Industries") participant.insert_party(sess, market_role_Z, "None core", utc_datetime(2000, 1, 1), None, None) bank_holiday_rate_script = {"bank_holidays": []} Contract.insert_non_core( sess, "bank_holidays", "", {}, utc_datetime(2000, 1, 1), None, bank_holiday_rate_script, ) market_role_X = MarketRole.insert(sess, "X", "Supplier") market_role_M = MarketRole.insert(sess, "M", "Mop") market_role_C = MarketRole.insert(sess, "C", "HH Dc") market_role_R = MarketRole.insert(sess, "R", "Distributor") participant.insert_party(sess, market_role_M, "Fusion Mop Ltd", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_X, "Fusion Ltc", utc_datetime(2000, 1, 1), None, None) participant.insert_party(sess, market_role_C, "Fusion DC", utc_datetime(2000, 1, 1), None, None) mop_contract = Contract.insert_mop(sess, "Fusion", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) dc_contract = Contract.insert_hhdc(sess, "Fusion DC 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}) pc = Pc.insert(sess, "03", "nhh", utc_datetime(2000, 1, 1), None) ssc = Ssc.insert(sess, "0393", "unrestricted", True, utc_datetime(2000, 1), None) insert_cops(sess) cop = Cop.get_by_code(sess, "5") exp_supplier_contract = Contract.insert_supplier( sess, "Fusion Supplier 2000", participant, "", {}, utc_datetime(2000, 1, 1), None, {}, ) dno = participant.insert_party(sess, market_role_R, "WPD", utc_datetime(2000, 1, 1), None, "22") meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) Mtc.insert( sess, None, "845", "HH COP5 And Above With Comms", False, False, True, meter_type, meter_payment_type, 0, utc_datetime(1996, 1, 1), None, ) insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") dno.insert_llfc( sess, "510", "PC 5-8 & HH HV", voltage_level, False, True, utc_datetime(1996, 1, 1), None, ) dno.insert_llfc( sess, "521", "Export (HV)", voltage_level, False, False, utc_datetime(1996, 1, 1), None, ) insert_sources(sess) source = Source.get_by_code(sess, "net") insert_energisation_statuses(sess) energisation_status = EnergisationStatus.get_by_code(sess, "D") gsp_group = GspGroup.insert(sess, "_L", "South Western") supply = site.insert_e_supply( sess, source, None, "Bob", utc_datetime(2000, 1, 1), None, gsp_group, mop_contract, "773", dc_contract, "ghyy3", "hgjeyhuw", pc, "845", cop, ssc, energisation_status, {}, None, None, None, None, None, "22 7867 6232 781", "521", exp_supplier_contract, "7748", 361, ) era = supply.eras[0] active_channel = era.insert_channel(sess, False, "ACTIVE") active_data_raw = [{ "start_date": utc_datetime(2009, 8, 10), "value": 10, "status": "A", }] active_channel.add_hh_data(sess, active_data_raw) era.insert_channel(sess, True, "REACTIVE_IMP") sess.commit() caches = {} start_date = utc_datetime(2009, 7, 31, 23, 00) finish_date = utc_datetime(2009, 8, 31, 22, 30) forecast_date = utc_datetime(2019, 8, 31, 22, 30) is_import = False chellow.computer.SupplySource(sess, start_date, finish_date, forecast_date, era, is_import, caches)
def test_parse_Valid_MTC_LLFC_SSC_PC_Combination(sess): participant_code = "EDFI" participant = Participant.insert(sess, participant_code, "AK Industries") market_role_R = MarketRole.insert(sess, "R", "Distributor") dno = participant.insert_party(sess, market_role_R, "WPD", to_utc(ct_datetime(2000, 1, 1)), None, "22") insert_voltage_levels(sess) voltage_level = VoltageLevel.get_by_code(sess, "HV") llfc_code = "906" llfc_description = "PC 5-8 & HH HV" llfc = dno.insert_llfc( sess, llfc_code, llfc_description, voltage_level, False, True, to_utc(ct_datetime(2009, 4, 16)), None, ) meter_type = MeterType.insert(sess, "C5", "COP 1-5", utc_datetime(2000, 1, 1), None) meter_payment_type = MeterPaymentType.insert(sess, "CR", "Credit", utc_datetime(1996, 1, 1), None) mtc = Mtc.insert( sess, dno, "001", "an mtc", False, False, True, meter_type, meter_payment_type, 1, to_utc(ct_datetime(2009, 4, 16)), None, ) ssc = Ssc.insert(sess, "0349", "an ssc", True, to_utc(ct_datetime(2009, 4, 16)), None) pc = Pc.insert(sess, "02", "dom", to_utc(ct_datetime(1996, 1, 1)), None) sess.commit() row = [ "1", "01/04/1996", participant_code, "16/04/2009", "0349", "16/04/2009", "906", "16/04/2009", "2", "17/03/2010", "20/08/2014", "F", ] csv_reader = iter([row]) chellow.mdd_importer._import_Valid_MTC_LLFC_SSC_PC_Combination( sess, csv_reader) sess.commit() ValidMtcLlfcSscPc.get_by_values(sess, mtc, llfc, ssc, pc, utc_datetime(2012, 1, 1))