Untitled

dwd
mail@pastecode.io avatar
unknown
python
2 years ago
5.1 kB
2
Indexable
Never
def run_validator_LMI(download_f_name, s3_file_name):


    # validate from a txt file (extracted values).
    # start time for time count
    total_start_time = time.time()
    file_access_date = datetime.now().strftime("%Y%m%d")

    # TXT files, Nordea 7 template tables as TSV/TDV
    if (".xls" or ".xlsx") in s3_file_name:
        if ".xlsx" in s3_file_name:
            extent = ".xlsx"
        else:
            extent = ".xls"
        date_status, date_ex = valdiate_date_version(download_f_name)
        date_status = True
        date_ex = "20220416"

        filename = s3_file_name.replace(extent, "")
        file_path = modify_bulk_path(file_access_date, date_ex, filename)
        # crates json if not exists
        create_json_result(fp=file_path)

        if date_status == False:
            # appends json results
            duplicate_date_results(fp=file_path)
        if date_status == True:
            # open txt file with pandas
            d = pd.read_excel(download_f_name)

            # start time for time count
            # removes blank space from headers in df
            d = d.rename(columns=lambda x: x.strip())
            col_lst = list(d.columns.values)
            counter = 0
            for column in col_lst:
                if column in ["DATA_SOURCE_ID"]:
                    continue
                print(c(column, "blue"))
                for value in d[column]:

                    # check if the extracted value is separated with tildes
                    v_list = tilda_sep_config(value, column)
                    table, field = nordea_config(column)

                    for i in v_list:
                        value = prep_value(column, i)

                        if value == "skip_validation":
                            continue
                        else:
                            f = FieldValidation(
                                table, field, value, date_ex, file_path
                            )
                            f.validateField()
                            counter += 1

            print("number of validated fields is:", c(counter, "yellow"))
        # print out time taken to process 1 xml file
        duration_print(f" {s3_file_name}", total_start_time)

    else:
        print(c("File not processed: file extension not .txt or .xml", "red"))
        # delete downloaded file
        os.remove(download_f_name)

    validation_status = True

    # print out total time needed to process all files
    duration_print(" validation duaration", total_start_time)
    remove_7_days_old_json()
    return validation_status, file_path

    from run_validator_modify_bulk import run_validator
from run_validator_LMI import run_validator_LMI


def get_file_from_s3(filename):
# goes into s3, and loops through files
# downloads and processes only the file name given
def get_file_from_s3(filename, bucket):
    session = boto3.Session(
        aws_access_key_id="AKIARH3NC6NMEBXBZT7T",
        aws_secret_access_key="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",
    )
    s3 = session.resource("s3")
    my_bucket = s3.Bucket("slm-modify-bulk-profile")
    my_bucket = s3.Bucket(bucket)
    s3 = session.resource("s3")

    for my_bucket_object in my_bucket.objects.all():
        # s3 bucket access
        s3_file_name = my_bucket_object.key
        print(filename)
        print(s3_file_name)

        if filename in s3_file_name:
            download_f_name = os.path.join("download", s3_file_name)
            print(download_f_name)
            my_bucket.download_file(Key=s3_file_name, Filename=download_f_name)
            print(f"File {download_f_name} downloaded from s3 bucket.")
            # run data extraction and push data to DB

def run_modify_bulk(download_f_name, filename):
    # The Api triggers the validation proces and if successful than the import process
    v_stat, json_fp = run_validator(download_f_name, filename)
    validation_status = read_validation_results(json_fp)
    if "Modify bulk" in filename:
        v_stat, json_fp = run_validator(download_f_name, filename)
        validation_status = read_validation_results(json_fp)
    elif "LMI" in filename:
        v_stat, json_fp = run_validator_LMI(download_f_name, filename)
        validation_status = read_validation_results(json_fp)
    # import process based on validation results
    if validation_status != False:
        run_import_data_nordea(download_f_name)
        import_status(json_fp)

# Modify bulk
fname = "Modify bulk-FPFA_Address-20220414 v0.1.xlsx"
fname = "Modify bulk-FPFA_Bank-20220414 v0.1.xlsx"
fname = "Modify bulk-FPFA_Country_Data-20220414 v0.1.xlsx"
fname = "Modify bulk-FPFA_Sanctions_Country-20220414 v0.1.xlsx"
fname = "Modify bulk-FPFA_Source_Data-20220414 v0.1.xlsx"
fname = "Modify bulk-FPFA_Vessel_Details-20220414 v0.1.xlsx"
get_file_from_s3(fname)

# Nordea Internals
fname = "LMI ISS Input Template Entity Individual 20220314 v0.1.xlsx"

get_file_from_s3(fname, "slm-modify-bulk-profile")