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