Esempio n. 1
0
    def _copy_vsam_to_temp_data_set(self, ds_name):
        """ Copy VSAM data set to a temporary sequential data set """
        mvs_rc = 0
        vsam_size = self._get_vsam_size(ds_name)
        sysprint = sysin = out_ds_name = None
        try:
            sysin = data_set.DataSet.create_temp("MVSTMP")
            sysprint = data_set.DataSet.create_temp("MVSTMP")
            out_ds_name = data_set.DataSet.create_temp("MSVTMP",
                                                       space_primary=vsam_size,
                                                       space_type="K")
            repro_sysin = " REPRO INFILE(INPUT)  OUTFILE(OUTPUT) "
            Datasets.write(sysin, repro_sysin)

            dd_statements = []
            dd_statements.append(
                types.DDStatement(ddName="sysin", dataset=sysin))
            dd_statements.append(
                types.DDStatement(ddName="input", dataset=ds_name))
            dd_statements.append(
                types.DDStatement(ddName="output", dataset=out_ds_name))
            dd_statements.append(
                types.DDStatement(ddName="sysprint", dataset=sysprint))

            mvs_rc = MVSCmd.execute_authorized(pgm="idcams",
                                               args="",
                                               dds=dd_statements)

        except OSError as err:
            self._fail_json(msg=str(err))

        except Exception as err:
            if Datasets.exists(out_ds_name):
                Datasets.delete(out_ds_name)

            if mvs_rc != 0:
                self._fail_json(
                    msg=(
                        "Non-zero return code received while executing MVSCmd "
                        "to copy VSAM data set {0}".format(ds_name)),
                    rc=mvs_rc,
                )
            self._fail_json(
                msg=
                ("Failed to call IDCAMS to copy VSAM data set {0} to a temporary"
                 " sequential data set".format(ds_name)),
                stderr=str(err),
                rc=mvs_rc,
            )

        finally:
            Datasets.delete(sysprint)
            Datasets.delete(sysin)

        return out_ds_name
Esempio n. 2
0

def luhn(card_number):
    def digits_of(n):
        return [int(d) for d in str(n)]

    digits = digits_of(card_number)  # digits is set to the card number
    odd_digits = digits[-1::-2]  # find odd numbers
    even_digits = digits[-2::-2]  # find even number
    checksum = 0
    checksum += sum(odd_digits)  #checksum adds the sum of all odd digits
    for d in even_digits:  # for every even number, apply the luhn equation and add to checksum
        checksum += sum(digits_of(d * 2))
    return (checksum % 10)  # return the simplified checksum number


cc_list = cc_contents.splitlines(
)  # take that giant string and turn it into a List
invalid_cc_list = []  # A second list to hold invalid entries
for cc_line in cc_list:  # do everything here for every item in that List
    cc_digits = int(cc_line[2:21])  # Grabs the full number
    if (luhn(cc_digits)):  # If the card number is INVALID
        invalid_cc_list.append(cc_line)  #append to our invalid list

now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
report_output = '\n'.join(invalid_cc_list)
report_output = "INVALID CREDIT CARD REPORT FOR " + dt_string + '\n\n' + report_output
print(report_output)  # Print it out to the screen.
Datasets.write(output_dataset, report_output)
cc_list = cc_contents.splitlines()      # take that giant string and turn it into a List
invalid_cc_list = []                    # A second list to hold invalid entries
for cc_line in cc_list:                 # do everything here for every item in that List
    cc_digits = int(cc_line[5:21])      # Just grabbing some digits. Not a full CC number (HINT!)
    if (luhn(cc_digits)):            # If the card number is valid
        invalid_cc_list.append(cc_line)


#The Report-Writing Part
    #
    # NOTE: DON'T USE APPEND FOR MULTIPLE LINES. 
    #       IT WILL BE SLOW
    #       INSTEAD, THROW EVERYTHING INTO A VARIABLE
    #       AND WRITE THAT OUT ONCE, LIKE THIS.
    #       
    #       TRUST US ON THIS.
    #
    #       YOU SHOULD BE ABLE TO USE THE CODE BELOW, ONLY HAVING TO ADD
    #       A LINE TO WRITE OUT THE FINAL report_output TO YOUR output_dataset
    #       REMEMBER, THE REPORT NEEDS TO HAVE THE DATETIME STRING IN IT ABOVE THE DATA
    #
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
report_output = '\n'.join(invalid_cc_list)
report_output = "INVALID CREDIT CARD REPORT FOR " + dt_string + '\n\n' + report_output
print(report_output)  # Print it out to the screen. 
# When you're ready to write your report out to file, uncomment that last line
Datasets.create("Z09150.OUTPUT.CCINVALD", "SEQ")
Datasets.write("Z09150.OUTPUT.CCINVALD",report_output)
Esempio n. 4
0
    DDStatement(ddName="sysin", dataset="USR.MVSCMD.DFSORT.CMD"))
dd_statements.append(
    DDStatement(ddName="sortout", dataset="USR.MVSCMD.DFSORT.MERGE"))
dd_statements.append(DDStatement(ddName="sysout", dataset="*"))

# Delete datasets if already exist
Datasets.delete("USR.MVSCMD.DFSORT.*")

# Create datasets
Datasets.create("USR.MVSCMD.DFSORT.MASTER", type="SEQ")
Datasets.create("USR.MVSCMD.DFSORT.NEW", type="SEQ")
Datasets.create("USR.MVSCMD.DFSORT.CMD", type="SEQ")
Datasets.create("USR.MVSCMD.DFSORT.MERGE", type="SEQ")

# Write command to USR.MVSCMD.DFSORT.CMD
Datasets.write("USR.MVSCMD.DFSORT.CMD", " MERGE FORMAT=CH,FIELDS=(1,9,A)")

# Write example text to USR.MVSCMD.DFSORT.MASTER
Datasets.write("USR.MVSCMD.DFSORT.MASTER", "Chang Joe 278 232 6043")
Datasets.write("USR.MVSCMD.DFSORT.MASTER",
               "DeBeer Jo 348 132 6023",
               append=True)
Datasets.write("USR.MVSCMD.DFSORT.MASTER",
               "White Belinda 178 222 5043",
               append=True)

# Write example text to USR.MVSCMD.DFSORT.NEW
Datasets.write("USR.MVSCMD.DFSORT.NEW", "Doe Jane 878 222 5043")
Datasets.write("USR.MVSCMD.DFSORT.NEW", "Smith Joe 778 232 6043", append=True)
Datasets.write("USR.MVSCMD.DFSORT.NEW", "Smyth Jo 748 132 6023", append=True)