Skip to content
This repository was archived by the owner on Nov 1, 2023. It is now read-only.

Commit cb895d0

Browse files
authored
fix GithubIssueTemplate deserialization (#990)
1 parent 2ff9c47 commit cb895d0

File tree

4 files changed

+46
-28
lines changed

4 files changed

+46
-28
lines changed

src/api-service/tests/test_secrets.py

+42
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Licensed under the MIT License.
55

66
import json
7+
import pathlib
78
import unittest
89

910
from onefuzztypes.enums import OS, ContainerType
@@ -21,6 +22,7 @@
2122
TeamsTemplate,
2223
)
2324
from onefuzztypes.primitives import Container
25+
from onefuzztypes.requests import NotificationCreate
2426

2527
from __app__.onefuzzlib.orm import hide_secrets
2628

@@ -91,3 +93,43 @@ def test_read_secret(self) -> None:
9193
self.assertIsInstance(notification.config.url.secret, SecretAddress)
9294
else:
9395
self.fail(f"Invalid config type {type(notification.config)}")
96+
97+
def test_roundtrip_github_issue(self) -> None:
98+
current_path = pathlib.Path(__file__).parent.absolute()
99+
with open(
100+
f"{current_path}"
101+
+ "/../../../contrib/onefuzz-job-github-actions/github-issues.json"
102+
) as json_file:
103+
b = json.load(json_file)
104+
b["container"] = "testing"
105+
c = NotificationCreate.parse_obj(b)
106+
d = c.json()
107+
e = json.loads(d)
108+
NotificationCreate.parse_obj(e)
109+
110+
def test_roundtrip_team_issue(self) -> None:
111+
a = """
112+
{
113+
"config" : {"url": "http://test"},
114+
"container": "testing"
115+
}
116+
117+
""" # noqa
118+
b = json.loads(a)
119+
c = NotificationCreate.parse_obj(b)
120+
d = c.json()
121+
e = json.loads(d)
122+
NotificationCreate.parse_obj(e)
123+
124+
def test_roundtrip_ado(self) -> None:
125+
current_path = pathlib.Path(__file__).parent.absolute()
126+
with open(
127+
f"{current_path}"
128+
+ "/../../../contrib/onefuzz-job-azure-devops-pipeline/ado-work-items.json" # noqa
129+
) as json_file:
130+
b = json.load(json_file)
131+
b["container"] = "testing"
132+
c = NotificationCreate.parse_obj(b)
133+
d = c.json()
134+
e = json.loads(d)
135+
NotificationCreate.parse_obj(e)

src/cli/onefuzz/backend.py

-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import msal
3131
import requests
3232
from azure.storage.blob import ContainerClient
33-
from onefuzztypes.models import SecretAddress, SecretData
3433
from pydantic import BaseModel, Field
3534
from tenacity import Future as tenacity_future
3635
from tenacity import Retrying, retry
@@ -378,8 +377,6 @@ def container_file_path(container_url: str, blob_name: str) -> str:
378377
def serialize(data: Any) -> Any:
379378
if data is None:
380379
return data
381-
if isinstance(data, SecretData) and not isinstance(data.secret, SecretAddress):
382-
return serialize(data.secret)
383380
if isinstance(data, BaseModel):
384381
return {serialize(a): serialize(b) for (a, b) in data.dict().items()}
385382
if isinstance(data, dict):

src/cli/tests/test_serialize.py

-21
This file was deleted.

src/pytypes/onefuzztypes/models.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ class SecretData(Generic[T]):
6161
secret: Union[T, SecretAddress]
6262

6363
def __init__(self, secret: Union[T, SecretAddress]):
64-
if isinstance(secret, dict):
64+
try:
6565
self.secret = SecretAddress.parse_obj(secret)
66-
else:
66+
except Exception:
6767
self.secret = secret
6868

6969
def __str__(self) -> str:
@@ -511,15 +511,15 @@ class GithubIssueTemplate(BaseModel):
511511
# validator needed for backward compatibility
512512
@validator("auth", pre=True, always=True)
513513
def validate_auth(cls, v: Any) -> SecretData:
514-
if isinstance(v, str):
514+
if isinstance(v, GithubAuth):
515515
return SecretData(secret=v)
516516
elif isinstance(v, SecretData):
517517
return v
518518
elif isinstance(v, dict):
519519
try:
520520
return SecretData(GithubAuth.parse_obj(v))
521521
except Exception:
522-
return SecretData(secret=v["secret"])
522+
return SecretData(GithubAuth.parse_obj(v["secret"]))
523523
else:
524524
raise TypeError(f"invalid datatype {type(v)}")
525525

0 commit comments

Comments
 (0)