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_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_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_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_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_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_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_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_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_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_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_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))