def backup_futures_contract_prices_to_csv(data):
    instrument_list = (
        data.arctic_futures_contract_price.get_instruments_with_price_data())
    for instrument_code in instrument_list:
        contract_dates = data.arctic_futures_contract_price.contract_dates_with_price_data_for_instrument_code(
            instrument_code)

        for contract_date in contract_dates:
            arctic_data = data.arctic_futures_contract_price.get_prices_for_instrument_code_and_contract_date(
                instrument_code, contract_date)

            csv_data = data.csv_futures_contract_price.get_prices_for_instrument_code_and_contract_date(
                instrument_code, contract_date)

            if check_df_equals(arctic_data, csv_data):
                # No updated needed, move on
                print("No update needed")
            else:
                # Write backup
                try:
                    data.csv_futures_contract_price.write_prices_for_instrument_code_and_contract_date(
                        instrument_code,
                        contract_date,
                        arctic_data,
                        ignore_duplication=True,
                    )
                    data.log.msg("Written backup .csv of prices for %s %s" %
                                 (instrument_code, contract_date))
                except BaseException:
                    data.log.warn("Problem writing .csv of prices for %s %s" %
                                  (instrument_code, contract_date))
def backup_futures_contract_prices_for_instrument_to_csv(
        data: dataBlob, instrument_code: str):
    list_of_contracts = data.arctic_futures_contract_price.contracts_with_price_data_for_instrument_code(
        instrument_code)

    for contract in list_of_contracts:
        arctic_data = data.arctic_futures_contract_price.get_prices_for_contract_object(
            contract)

        csv_data = data.csv_futures_contract_price.get_prices_for_contract_object(
            contract)

        if check_df_equals(arctic_data, csv_data):
            # No updated needed, move on
            print("No update needed")
        else:
            # Write backup
            try:
                data.csv_futures_contract_price.write_prices_for_contract_object(
                    contract,
                    arctic_data,
                    ignore_duplication=True,
                )
                data.log.msg("Written backup .csv of prices for %s" %
                             (contract))
            except BaseException:
                data.log.warn("Problem writing .csv of prices for %s %s" %
                              (contract))
def backup_futures_contract_prices_for_contract_to_csv(
        data: dataBlob, futures_contract: futuresContract
        ):
        if futures_contract.days_since_expiry()>CALENDAR_DAYS_IN_YEAR:
            ## Almost certainly expired, skip
            data.log.msg("Skipping expired contract %s" % str(futures_contract))

            return None

        arctic_data = data.arctic_futures_contract_price.get_prices_for_contract_object(
            futures_contract
        )

        csv_data = data.csv_futures_contract_price.get_prices_for_contract_object(
            futures_contract
        )

        if check_df_equals(arctic_data, csv_data):
            # No update needed, move on
            data.log.msg("No prices backup needed for %s" % str(futures_contract))
        else:
            # Write backup
            try:
                data.csv_futures_contract_price.write_prices_for_contract_object(
                    futures_contract,
                    arctic_data,
                    ignore_duplication=True,
                )
                data.log.msg("Written backup .csv of prices for %s" % str(futures_contract))
            except BaseException:
                data.log.warn("Problem writing .csv of prices for %s" % str(futures_contract))
def backup_multiple_to_csv(data):
    instrument_list = data.arctic_futures_multiple_prices.get_list_of_instruments()
    for instrument_code in instrument_list:
        arctic_data = data.arctic_futures_multiple_prices.get_multiple_prices(instrument_code)
        csv_data = data.csv_futures_multiple_prices.get_multiple_prices(instrument_code)

        if check_df_equals(arctic_data, csv_data):
            print("No update needed")
            pass
        else:
            try:
                data.csv_futures_multiple_prices.add_multiple_prices(instrument_code, arctic_data, ignore_duplication=True)
                data.log.msg("Written .csv backup multiple prices for %s" % instrument_code)
            except:
                data.log.warn("Problem writing .csv backup multiple prices for %s" % instrument_code)
def backup_multiple_to_csv_for_instrument(data, instrument_code: str):
    arctic_data = data.arctic_futures_multiple_prices.get_multiple_prices(
        instrument_code
    )
    csv_data = data.csv_futures_multiple_prices.get_multiple_prices(instrument_code)

    if check_df_equals(arctic_data, csv_data):
        data.log.msg("No multiple prices backup needed for %s" % instrument_code)
        pass
    else:
        try:
            data.csv_futures_multiple_prices.add_multiple_prices(
                instrument_code, arctic_data, ignore_duplication=True
            )
            data.log.msg("Written .csv backup multiple prices for %s" % instrument_code)
        except BaseException:
            data.log.warn(
                "Problem writing .csv backup multiple prices for %s" % instrument_code
            )