Skip to content

Commit 3fe7653

Browse files
bites 163
1 parent f09f03c commit 3fe7653

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,6 @@
5959
/258-pandas/README.md
6060
/132/README.md
6161
/257/README.md
62+
/163/README.md
63+
/Pipfile
64+
/Pipfile.lock

163/reqs.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from operator import methodcaller
2+
from packaging import version
3+
4+
def changed_dependencies(old_reqs: str, new_reqs: str) -> list:
5+
"""Compare old vs new requirement multiline strings
6+
and return a list of dependencies that have been upgraded
7+
(have a newer version)
8+
"""
9+
oldreqslines = old_reqs.split()
10+
newreqslines = new_reqs.split()
11+
oldreqs = {entry[0]: entry[1] for entry in map(methodcaller("split", "=="), oldreqslines)}
12+
newreqs = {entry[0]: entry[1] for entry in map(methodcaller("split", "=="), newreqslines)}
13+
upgradereqs = [entry[0] for entry in newreqs.items()
14+
if version.parse(entry[1]) > version.parse(oldreqs[entry[0]])]
15+
return upgradereqs
16+
17+
18+
other_old_reqs = """
19+
twilio==6.23.1
20+
urllib3==1.21.1
21+
Werkzeug==0.12.1
22+
WTForms==1.19.0
23+
"""
24+
other_new_reqs = """
25+
twilio==6.3.0
26+
urllib3==1.21.1
27+
Werkzeug==0.14.1
28+
WTForms==2.1
29+
"""
30+
changed_dependencies(other_old_reqs, other_new_reqs)

163/test_reqs.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from reqs import changed_dependencies
2+
3+
# version might be fictitious for testing purposes
4+
old_reqs = """
5+
certifi==2017.4.17
6+
chardet==3.0.4
7+
click==6.7
8+
Faker==0.7.12
9+
Flask==0.12.1
10+
"""
11+
new_reqs = """
12+
certifi==2016.11.29
13+
chardet==2.0.4
14+
click==5.0
15+
Faker==1.0.2
16+
Flask==1.0.2
17+
"""
18+
other_old_reqs = """
19+
twilio==6.23.1
20+
urllib3==1.21.1
21+
Werkzeug==0.12.1
22+
WTForms==1.19.0
23+
"""
24+
other_new_reqs = """
25+
twilio==6.3.0
26+
urllib3==1.21.1
27+
Werkzeug==0.14.1
28+
WTForms==2.1
29+
"""
30+
31+
32+
def test_changed_dependencies_old_vs_new():
33+
actual = changed_dependencies(old_reqs, new_reqs)
34+
expected = ['Faker', 'Flask']
35+
assert sorted(actual) == expected
36+
37+
38+
def test_changed_dependencies_other_data():
39+
actual = changed_dependencies(other_old_reqs, other_new_reqs)
40+
expected = ['WTForms', 'Werkzeug']
41+
assert sorted(actual) == expected

0 commit comments

Comments
 (0)