Skip to content

Commit 4f1de5a

Browse files
authored
fix: handle missing key more elegantly (#11)
* fix: handle missing key more elegantly * fix: simplify type
1 parent 5f78f21 commit 4f1de5a

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

nodestream_github/transformer/repo.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,33 @@ def __init__(
1919
full_name_key: str = "full_name",
2020
**kwargs: any,
2121
):
22-
2322
self.client = GithubRestApiClient(**kwargs)
2423
self.full_name_key = full_name_key
2524

2625
async def transform_record(
2726
self,
2827
record: types.GithubRepo,
2928
) -> AsyncGenerator[types.GithubUser]:
30-
(repo_owner, repo_name) = record[self.full_name_key].split("/")
31-
logging.debug("Transforming record %s/%s", repo_owner, repo_name)
29+
logging.debug("Attempting to transform %s", record)
3230

31+
full_name = record.get(self.full_name_key)
3332
simplified_repo = simplify_repo(record)
3433

34+
if full_name is not None:
35+
async for user in self._transform(full_name, simplified_repo):
36+
yield user
37+
else:
38+
logging.info("No full_name key found in record %s", record)
39+
40+
async def _transform(
41+
self,
42+
full_name: str,
43+
simplified_repo: types.SimplifiedRepo,
44+
) -> AsyncGenerator[types.GithubUser]:
45+
(repo_owner, repo_name) = full_name.split("/")
46+
47+
logging.debug("Transforming repo %s/%s", repo_owner, repo_name)
48+
3549
async for collaborator in self.client.fetch_collaborators_for_repo(
3650
owner_login=repo_owner,
3751
repo_name=repo_name,

tests/transformer/test_repo.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,20 @@ async def test_transform_records_alt_key(gh_rest_mock: GithubHttpxMock):
7575
OCTOCAT_USER | {"repository": repo_summary, "affiliation": "direct"},
7676
TURBO_USER | {"repository": repo_summary, "affiliation": "outside"},
7777
]
78+
79+
80+
@pytest.mark.asyncio
81+
async def test_no_full_name_key():
82+
transformer = RepoToCollaboratorsTransformer(
83+
full_name_key="full_name",
84+
auth_token="test-token",
85+
github_hostname=DEFAULT_HOSTNAME,
86+
user_agent="test-agent",
87+
max_retries=0,
88+
per_page=DEFAULT_PER_PAGE,
89+
)
90+
modified_repo = HELLO_WORLD_REPO.copy()
91+
del modified_repo["full_name"]
92+
93+
response = [r async for r in transformer.transform_record(modified_repo)]
94+
assert response == []

0 commit comments

Comments
 (0)