Skip to content

Commit 1af402c

Browse files
committed
step 5
1 parent 4aa6806 commit 1af402c

File tree

15 files changed

+92
-63
lines changed

15 files changed

+92
-63
lines changed

.flake8

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[flake8]
2+
max-line-length = 79
3+
exclude = __pycache__,.venv
4+
ignore = F401, F821, E501

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*.egg-info
2+
.venv
3+
__pycache__/
4+
generate_diff.py
5+
dist/
6+

.gitignore.swp

-12 KB
Binary file not shown.

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
install:
2+
uv sync
3+
4+
build:
5+
uv build
6+
7+
lint:
8+
uv run flake8 gendiff

gendiff/diff_generator.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from gendiff.read import read_file
2+
3+
def generate_diff(file_path1, file_path2):
4+
data1 = read_file(file_path1)
5+
data2 = read_file(file_path2)
6+
7+
keys = sorted(set(data1.keys()) | set(data2.keys()))
8+
diff = []
9+
10+
for key in keys:
11+
if key not in data1: # Если ключ есть только во втором файле
12+
diff.append(f" + {key}: {data2[key]}")
13+
elif key not in data2: # Если ключ есть только в первом файле
14+
diff.append(f" - {key}: {data1[key]}")
15+
elif data1[key] == data2[key]: # Если значения равны
16+
diff.append(f" {key}: {data1[key]}")
17+
else: # Если значения отличаются
18+
diff.append(f" - {key}: {data1[key]}")
19+
diff.append(f" + {key}: {data2[key]}")
20+
21+
return "{\n" + "\n".join(diff) + "\n}"

gendiff/parser.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# gendiff/parser.py
2+
3+
import argparse
4+
from gendiff.diff_generator import generate_diff
5+
6+
7+
def args_parser():
8+
parser = argparse.ArgumentParser(
9+
description="Compares two configuration files and shows a difference."
10+
)
11+
parser.add_argument("first_file", help="path to the first file")
12+
parser.add_argument("second_file", help="path to the second file")
13+
parser.add_argument(
14+
"-f", "--format",
15+
help="set format of output",
16+
default="stylish"
17+
)
18+
args = parser.parse_args()
19+
diff = generate_diff(args.first_file, args.second_file)
20+
print(diff)
21+
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
# gendiff/scripts/read.py
1+
# gendiff/read.py
22

33
import json
44
import os
55

6+
67
def read_file(file_path):
78
with open(file_path, 'r') as file:
8-
return json.load(file)
9+
return json.load(file)
-921 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

gendiff/scripts/gendiff.py

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,9 @@
1-
import argparse
2-
import json
3-
from gendiff.scripts.read import read_file
1+
from gendiff.parser import args_parser
42

5-
def generate_diff(file_path1, file_path2):
6-
data1 = read_file(file_path1)
7-
data2 = read_file(file_path2)
8-
9-
keys = sorted(set(data1.keys()) | set(data2.keys()))
10-
diff = []
11-
12-
for key in keys:
13-
if key not in data1: # Если ключ есть только во втором файле
14-
diff.append(f" + {key}: {data2[key]}")
15-
elif key not in data2: # Если ключ есть только в первом файле
16-
diff.append(f" - {key}: {data1[key]}")
17-
elif data1[key] == data2[key]: # Если значения равны
18-
diff.append(f" {key}: {data1[key]}")
19-
else: # Если значения отличаются
20-
diff.append(f" - {key}: {data1[key]}")
21-
diff.append(f" + {key}: {data2[key]}")
22-
23-
return "{\n" + "\n".join(diff) + "\n}"
243

254
def main():
26-
parser = argparse.ArgumentParser(
27-
description="Compares two configuration files and shows a difference."
28-
)
29-
parser.add_argument("first_file", help="path to the first file")
30-
parser.add_argument("second_file", help="path to the second file")
31-
parser.add_argument(
32-
"-f", "--format",
33-
help="set format of output",
34-
default="stylish"
35-
)
5+
print(args_parser())
366

37-
args = parser.parse_args()
38-
diff = generate_diff(args.first_file, args.second_file)
39-
print(diff)
407

418
if __name__ == '__main__':
429
main()

0 commit comments

Comments
 (0)