def test_assign_two_sequences_to_4fields(self): """ This shows that a single sequence can be used on multiple files without creating duplicates. It also shows that multiple sequences can be made from multiple sources. """ old_rec = ['0', 'o1', 'o2', 'o3'] new_rec = ['0', 'n1', 'n2', 'n3'] cur_rec = ['', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_assignment('insert', 0, 'sequence', None, 'old', 0) dass.set_assignment('insert', 2, 'sequence', None, 'old', 2) dass.set_assignment('chgnew', 0, 'sequence', None, 'old', 0) dass.set_assignment('chgnew', 2, 'sequence', None, 'old', 2) fqfn = pjoin(self.temp_dir, 'old.csv') with open(fqfn, 'w') as f: f.write('3,o,2,ooo\n') f.write('5,o,4,ooo\n') f.write('5,o,6,ooo\n') dass.set_sequence_starts(self.dialect, fqfn) print('---- post sequence_starts seq dict: -----') print(dass.seq) print('---- post sequence_starts print-done: -----') dass.assign('insert', cur_rec, old_rec, new_rec) assert cur_rec == ['6', 'b', '7', 'd'] dass.assign('chgnew', cur_rec, old_rec, new_rec) assert cur_rec == ['7', 'b', '8', 'd']
def test_assign_copy_newfield_to_rec(self): old_rec = ['o0', 'o1', 'o2', 'o3'] new_rec = ['n0', 'n1', 'n2', 'n3'] cur_rec = ['a', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_assignment('chgold', 2, 'copy', None, 'new', 1) dass.assign('chgold', cur_rec, old_rec, new_rec) assert cur_rec == ['a', 'b', 'n1', 'd']
def test_assign_literal_to_rec(self): old_rec = ['o0', 'o1', 'o2', 'o3'] new_rec = ['n0', 'n1', 'n2', 'n3'] cur_rec = ['a', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_assignment('insert', 2, 'literal', 'foo') dass.assign('insert', cur_rec, old_rec, new_rec) assert cur_rec == ['a', 'b', 'foo', 'd']
def test_assign_copy_oldfield_empty(self): old_rec = [] new_rec = ['n0', 'n1', 'n2', 'n3'] cur_rec = ['a', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_assignment('insert', 2, 'copy', None, 'old', 1) with pytest.raises(SystemExit): dass.assign('insert', cur_rec, old_rec, new_rec)
def test_assign_specialvalue_to_rec(self): old_rec = ['o0', 'o1', 'o2', 'o3'] new_rec = ['n0', 'n1', 'n2', 'n3'] cur_rec = ['a', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_special_values('batchid', '9999') dass.set_assignment('insert', 1, 'special', 'batchid', None, None) dass.assign('insert', cur_rec, old_rec, new_rec) assert cur_rec == ['a', '9999', 'c', 'd']
def test_set_assignments(self): dass = mod.DeltaAssignments() dass.set_assignment('insert', 3, 'literal', 'foo') assert dass.assignments['insert'][3] == { 'src_type': 'literal', 'src_val': 'foo', 'src_file': None, 'src_field': None } dass.set_assignment('chgold', 2, 'copy', src_file='new', src_field=2) assert dass.assignments['chgold'][2] == { 'src_type': 'copy', 'src_val': None, 'src_file': 'new', 'src_field': 2 }
def test_set_assignment_args(self): dass = mod.DeltaAssignments() with pytest.raises(ValueError): dass.set_assignment(None, None, None, None) with pytest.raises(ValueError): dass.set_assignment('foo', None, None, None) with pytest.raises(ValueError): dass.set_assignment('insert', 'foo', 'bar', None) with pytest.raises(ValueError): dass.set_assignment('delete', 3, 'literal', None) assert dass.set_assignment('insert', 3, 'literal', 'foo') is None assert dass.set_assignment('delete', 3, 'literal', 'foo') is None assert dass.set_assignment('chgold', 3, 'literal', 'foo') is None assert dass.set_assignment('chgnew', 3, 'literal', 'foo') is None assert dass.set_assignment( 'chgnew', 3, 'copy', src_file='old', src_field=5) is None assert dass.set_assignment('chgnew', 3, 'literal', 'foo') is None
def test_assign_sequences_empty_old(self): old_rec = None new_rec = ['0', 'n1', 'n2', 'n3'] cur_rec = ['', 'b', 'c', 'd'] dass = mod.DeltaAssignments() dass.set_assignment('insert', 0, 'sequence', None, 'old', 0) fqfn = pjoin(self.temp_dir, 'old.csv') with open(fqfn, 'w') as f: pass dass.set_sequence_starts(self.dialect, fqfn) print('---- post sequence_starts seq dict: -----') print(dass.seq) print('---- post sequence_starts print-done: -----') dass.assign('insert', cur_rec, old_rec, new_rec) assert cur_rec == ['1', 'b', 'c', 'd']