def write_to_req_files(file_reqs, session, env_filename, uniq_reqs, installations): # first step process the requirements and split them into separate for each of the file for filename in file_reqs: # type: str _, content = get_file_content(filename, session=session) orig_lines = enumerate(content.splitlines(), start=1) joined_lines = req_file.join_lines(orig_lines) lines = OrderedDict(joined_lines) # 1. save new requirements if filename == env_filename: installed = set(installations.keys()).difference( set(uniq_reqs.keys())) for new_req in installed: line_num = len(lines) + 1 lines[line_num] = str(installations[new_req]).strip() for req in file_reqs[filename]: frozenrequirement = installations.get(req.name) if frozenrequirement: # 2. updates lines[req.line_num] = str(frozenrequirement).strip() else: # 3. removals lines.pop(req.line_num) # 4. finally write to file with open(filename, "wb") as f: for line in lines: cnt = lines[line].strip() if cnt: f.write((cnt + "\n").encode("utf-8"))
def test_last_line_with_escape(self): lines = enumerate([ 'line 1', 'line 2 \\', ], start=1) expect = [ (1, 'line 1'), (2, 'line 2 '), ] assert expect == list(join_lines(lines))
def test_last_line_with_escape(self): lines = enumerate([ 'line 1', 'line 2 \\', ], start=1) expect = [ (1, 'line 1'), (2, 'line 2 '), ] assert expect == list(join_lines(lines))
def test_join_lines(self): lines = enumerate([ 'line 1', 'line 2:1 \\', 'line 2:2', 'line 3:1 \\', 'line 3:2 \\', 'line 3:3', 'line 4' ], start=1) expect = [ (1, 'line 1'), (2, 'line 2:1 line 2:2'), (4, 'line 3:1 line 3:2 line 3:3'), (7, 'line 4'), ] assert expect == list(join_lines(lines))
def test_last_line_with_escape(self) -> None: lines = enumerate( [ "line 1", "line 2 \\", ], start=1, ) expect = [ (1, "line 1"), (2, "line 2 "), ] assert expect == list(join_lines(lines))
def test_join_lines(self): lines = enumerate([ 'line 1', 'line 2:1 \\', 'line 2:2', 'line 3:1 \\', 'line 3:2 \\', 'line 3:3', 'line 4' ], start=1) expect = [ (1, 'line 1'), (2, 'line 2:1 line 2:2'), (4, 'line 3:1 line 3:2 line 3:3'), (7, 'line 4'), ] assert expect == list(join_lines(lines))
def test_join_lines(self) -> None: lines = enumerate( [ "line 1", "line 2:1 \\", "line 2:2", "line 3:1 \\", "line 3:2 \\", "line 3:3", "line 4", ], start=1, ) expect = [ (1, "line 1"), (2, "line 2:1 line 2:2"), (4, "line 3:1 line 3:2 line 3:3"), (7, "line 4"), ] assert expect == list(join_lines(lines))