Skip to content

Commit 4c7593f

Browse files
authored
Update entity tags parsing logic (OWASP#1142)
* Update entity tags parsing logic * Update code
1 parent 8f329ef commit 4c7593f

File tree

3 files changed

+71
-20
lines changed

3 files changed

+71
-20
lines changed

backend/apps/github/management/commands/github_update_owasp_organization.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ def handle(self, *_args, **options):
4343
)
4444
return
4545

46-
remote_owasp_repositories_count = gh_owasp_organization.public_repos
47-
4846
owasp_organization = None
4947
owasp_user = None
5048

@@ -93,18 +91,21 @@ def handle(self, *_args, **options):
9391
Committee.bulk_save(committees)
9492
Project.bulk_save(projects)
9593

96-
# Check repository counts.
97-
local_owasp_repositories_count = Repository.objects.filter(
98-
is_owasp_repository=True
99-
).count()
100-
result = (
101-
"==" if remote_owasp_repositories_count == local_owasp_repositories_count else "!="
102-
)
103-
print(
104-
"\n"
105-
f"OWASP GitHub repositories count {result} synced repositories count: "
106-
f"{remote_owasp_repositories_count} {result} {local_owasp_repositories_count}"
107-
)
94+
if repository is None:
95+
# Check repository counts.
96+
local_owasp_repositories_count = Repository.objects.filter(
97+
is_owasp_repository=True,
98+
).count()
99+
remote_owasp_repositories_count = gh_owasp_organization.public_repos
100+
has_same_repositories_count = (
101+
local_owasp_repositories_count == remote_owasp_repositories_count
102+
)
103+
result = "==" if has_same_repositories_count else "!="
104+
print(
105+
"\n"
106+
f"OWASP GitHub repositories count {result} synced repositories count: "
107+
f"{remote_owasp_repositories_count} {result} {local_owasp_repositories_count}"
108+
)
108109

109110
gh.close()
110111

backend/apps/owasp/models/common.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def from_github(self, field_mapping):
122122
self.leaders_raw = self.get_leaders()
123123
self.is_leaders_policy_compliant = len(self.leaders_raw) > 1
124124

125-
self.tags = self.parse_tags(entity_metadata.get("tags", []))
125+
self.tags = self.parse_tags(entity_metadata.get("tags", None) or [])
126126

127127
return entity_metadata
128128

@@ -216,7 +216,10 @@ def get_top_contributors(self, repositories=()):
216216
]
217217

218218
def parse_tags(self, tags):
219-
"""Get entity tags."""
219+
"""Parse entity tags."""
220+
if not tags:
221+
return []
222+
220223
return (
221224
[tag.strip(", ") for tag in tags.split("," if "," in tags else " ")]
222225
if isinstance(tags, str)

backend/tests/owasp/models/common_test.py

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,50 @@ def test_get_leaders(self, content, expected_leaders):
3838

3939
assert leaders == expected_leaders
4040

41+
@pytest.mark.parametrize(
42+
("content", "expected_metadata"),
43+
[
44+
(
45+
"\n".join( # noqa: FLY002
46+
(
47+
"---",
48+
"layout: col-sidebar",
49+
"title: OWASP Oklahoma City",
50+
"tags: ",
51+
"level: 0",
52+
"region: North America",
53+
"auto-migrated: 0",
54+
"meetup-group: Oklahoma-City-Chapter-Meetup",
55+
"country: USA",
56+
"postal-code: 73101",
57+
"---",
58+
)
59+
),
60+
{
61+
"auto-migrated": 0,
62+
"country": "USA",
63+
"layout": "col-sidebar",
64+
"level": 0,
65+
"meetup-group": "Oklahoma-City-Chapter-Meetup",
66+
"postal-code": 73101,
67+
"region": "North America",
68+
"tags": None,
69+
"title": "OWASP Oklahoma City",
70+
},
71+
),
72+
],
73+
)
74+
def test_get_metadata(self, content, expected_metadata):
75+
model = EntityModel()
76+
repository = Repository()
77+
repository.name = "www-project-example"
78+
model.owasp_repository = repository
79+
80+
with patch("apps.owasp.models.common.get_repository_file_content", return_value=content):
81+
metadata = model.get_metadata()
82+
83+
assert metadata == expected_metadata
84+
4185
@pytest.mark.parametrize(
4286
("key", "expected_url"),
4387
[
@@ -76,14 +120,17 @@ def test_deactivate(self):
76120
model.save.assert_called_once_with(update_fields=("is_active",))
77121

78122
@pytest.mark.parametrize(
79-
("tags", "expected_normalized_tags"),
123+
("tags", "expected_tags"),
80124
[
81-
("tag1, tag2, tag3", ["tag1", "tag2", "tag3"]),
82125
("tag1 tag2 tag3", ["tag1", "tag2", "tag3"]),
126+
("tag1, tag2, tag3", ["tag1", "tag2", "tag3"]),
83127
(["tag1", "tag2", "tag3"], ["tag1", "tag2", "tag3"]),
128+
("", []),
129+
([], []),
130+
(None, []),
84131
],
85132
)
86-
def test_get_tags(self, tags, expected_normalized_tags):
133+
def test_parse_tags(self, tags, expected_tags):
87134
model = EntityModel()
88135

89136
with patch(
@@ -92,4 +139,4 @@ def test_get_tags(self, tags, expected_normalized_tags):
92139
):
93140
tags = model.parse_tags(tags)
94141

95-
assert tags == expected_normalized_tags
142+
assert tags == expected_tags

0 commit comments

Comments
 (0)