Skip to content

Commit

Permalink
fix(models): changed wrong keyword argument for parameters schema and…
Browse files Browse the repository at this point in the history
… usages
  • Loading branch information
GG-Yanne committed Dec 6, 2024
1 parent a932163 commit 03648d2
Show file tree
Hide file tree
Showing 9 changed files with 492 additions and 23 deletions.
6 changes: 5 additions & 1 deletion pygitguardian/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
CreateTeam,
CreateTeamInvitation,
CreateTeamMember,
CreateTeamMemberParameter,
CursorPaginatedResponse,
DeleteMember,
Detail,
Expand Down Expand Up @@ -1011,9 +1012,10 @@ def list_teams(
parameters: Optional[TeamsParameter] = None,
extra_headers: Optional[Dict[str, str]] = None,
) -> Union[Detail, CursorPaginatedResponse[Team]]:
params = parameters.to_dict() if parameters else {}
response = self.get(
endpoint="teams",
data=parameters.to_dict() if parameters else {},
params=params,
extra_headers=extra_headers,
)

Expand Down Expand Up @@ -1189,11 +1191,13 @@ def create_team_member(
self,
team_id: int,
member: CreateTeamMember,
parameters: Optional[CreateTeamMemberParameter] = None,
extra_headers: Optional[Dict[str, str]] = None,
) -> Union[Detail, TeamMember]:
response = self.post(
endpoint=f"teams/{team_id}/team_memberships",
data=CreateTeamMember.to_dict(member),
params=parameters.to_dict() if parameters else {},
extra_headers=extra_headers,
)

Expand Down
44 changes: 22 additions & 22 deletions pygitguardian/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -985,7 +985,7 @@ class Feedback(Base, FromDictMixin):
@dataclass
class SecretIncidentStats(Base, FromDictMixin):
total: int
severity_breakdown: dict[Severity, int]
severity_breakdown: Dict[Severity, int]


@dataclass
Expand Down Expand Up @@ -1165,7 +1165,7 @@ class SearchParameter(ToDictMixin):
@dataclass
class CursorPaginatedResponse(Generic[PaginatedData]):
status_code: int
data: list[PaginatedData]
data: List[PaginatedData]
prev: Optional[str] = None
next: Optional[str] = None

Expand All @@ -1174,7 +1174,7 @@ def from_response(
cls, response: "requests.Response", data_type: Type[PaginatedData]
) -> "CursorPaginatedResponse[PaginatedData]":
data = cast(
list[PaginatedData], data_type.from_dict(response.json(), many=True)
List[PaginatedData], data_type.from_dict(response.json(), many=True)
)
paginated_response = cls(status_code=response.status_code, data=data)

Expand Down Expand Up @@ -1205,7 +1205,7 @@ class MembersParametersSchema(BaseSchema):
ordering = fields.Str(allow_none=True)

@post_load
def return_members_parameters(self, data: dict[str, Any], **kwargs: dict[str, Any]):
def return_members_parameters(self, data: Dict[str, Any], **kwargs: Dict[str, Any]):
return MembersParameters(**data)


Expand Down Expand Up @@ -1239,10 +1239,9 @@ class MemberSchema(BaseSchema):
@post_load
def return_member(
self,
data: list[dict[str, Any]] | dict[str, Any],
**kwargs: dict[str, Any],
data: Dict[str, Any],
**kwargs: Dict[str, Any],
):
data = cast(dict[str, Any], data)
return Member(**data)


Expand All @@ -1256,8 +1255,8 @@ class UpdateMemberSchema(BaseSchema):

@post_dump
def access_level_value(
self, data: dict[str, Any], **kwargs: dict[str, Any]
) -> dict[str, Any]:
self, data: Dict[str, Any], **kwargs: Dict[str, Any]
) -> Dict[str, Any]:
if "access_level" in data:
data["access_level"] = AccessLevel(data["access_level"]).value
return data
Expand Down Expand Up @@ -1290,13 +1289,14 @@ class DeleteMember(Base, FromDictMixin):
DeleteMember.SCHEMA = DeleteMemberSchema()


class TeamsParameter(PaginationParameter, SearchParameter, ToDictMixin):
@dataclass
class TeamsParameter(PaginationParameter, SearchParameter, FromDictMixin, ToDictMixin):
is_global: Optional[bool] = None


TeamsParameterSchema = cast(
Type[BaseSchema],
marshmallow_dataclass.class_schema(DeleteMember, base_schema=BaseSchema),
marshmallow_dataclass.class_schema(TeamsParameter, base_schema=BaseSchema),
)
TeamsParameter.SCHEMA = TeamsParameterSchema()

Expand Down Expand Up @@ -1368,7 +1368,6 @@ class TeamInvitationParameter(PaginationParameter, ToDictMixin):
incident_permission: Optional[IncidentPermission] = None


@dataclass
class TeamInvitationParameterSchema(BaseSchema):
invitation_id = fields.Int(allow_none=True)
is_team_leader = fields.Bool(allow_none=True)
Expand Down Expand Up @@ -1404,8 +1403,8 @@ class TeamInvitationSchema(BaseSchema):
@post_load
def return_member(
self,
data: dict[str, Any],
**kwargs: dict[str, Any],
data: Dict[str, Any],
**kwargs: Dict[str, Any],
):
return TeamInvitation(**data)

Expand All @@ -1428,7 +1427,7 @@ class CreateTeamInvitationSchema(BaseSchema):
incident_permission = fields.Enum(IncidentPermission, by_value=True, required=True)

@post_load
def return_team_invitation(self, data: dict[str, Any], **kwargs: dict[str, Any]):
def return_team_invitation(self, data: Dict[str, Any], **kwargs: Dict[str, Any]):
return CreateTeamInvitation(**data)

class Meta:
Expand All @@ -1438,6 +1437,7 @@ class Meta:
CreateTeamInvitation.SCHEMA = CreateTeamInvitationSchema()


@dataclass
class TeamMemberParameter(PaginationParameter, SearchParameter, ToDictMixin):
is_team_leader: Optional[bool] = None
incident_permission: Optional[IncidentPermission] = None
Expand All @@ -1453,7 +1453,7 @@ class TeamMembershipParameterSchema(BaseSchema):

@post_load
def return_team_membership_parameter(
self, data: dict[str, Any], **kwargs: dict[str, Any]
self, data: Dict[str, Any], **kwargs: Dict[str, Any]
):
return TeamMemberParameter(**data)

Expand Down Expand Up @@ -1483,7 +1483,7 @@ class TeamMemberSchema(BaseSchema):
incident_permission = fields.Enum(IncidentPermission, by_value=True, required=True)

@post_load
def return_team_membership(self, data: dict[str, Any], **kwargs: dict[str, Any]):
def return_team_membership(self, data: Dict[str, Any], **kwargs: Dict[str, Any]):
return TeamMember(**data)


Expand Down Expand Up @@ -1520,7 +1520,7 @@ class CreateTeamMemberSchema(BaseSchema):

@post_load
def return_create_team_membership(
self, data: dict[str, Any], **kwargs: dict[str, Any]
self, data: Dict[str, Any], **kwargs: Dict[str, Any]
):
return CreateTeamMember(**data)

Expand Down Expand Up @@ -1549,8 +1549,8 @@ class TeamSourceParameters(PaginationParameter, SearchParameter, ToDictMixin):
@dataclass
class UpdateTeamSource(Base, FromDictMixin):
team_id: int
sources_to_add: list[int]
sources_to_remove: list[int]
sources_to_add: List[int]
sources_to_remove: List[int]


UpdateTeamSourceSchema = cast(
Expand Down Expand Up @@ -1595,7 +1595,7 @@ class InvitationSchema(BaseSchema):
date = fields.DateTime(required=True)

@post_load
def return_invitation(self, data: dict[str, Any], **kwargs: dict[str, Any]):
def return_invitation(self, data: Dict[str, Any], **kwargs: Dict[str, Any]):
return Invitation(**data)


Expand Down Expand Up @@ -1627,7 +1627,7 @@ class CreateInvitationSchema(BaseSchema):
access_level = fields.Enum(AccessLevel, by_value=True, required=True)

@post_load
def return_invitation(self, data: dict[str, Any], **kwargs: dict[str, Any]):
def return_invitation(self, data: Dict[str, Any], **kwargs: Dict[str, Any]):
return CreateInvitation(**data)


Expand Down
58 changes: 58 additions & 0 deletions tests/cassettes/test_create_team_member_parameters.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
interactions:
- request:
body: '{"member_id": 12, "is_team_leader": false, "incident_permission": "can_view"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '77'
Content-Type:
- application/json
User-Agent:
- pygitguardian/1.18.0 (Darwin;py3.11.8)
method: POST
uri: https://api.gitguardian.com/v1/teams/9/team_memberships?send_email=False
response:
body:
string: '{"id":11,"team_id":9,"member_id":12,"is_team_leader":false,"team_permission":"cannot_manage","incident_permission":"can_view"}'
headers:
Access-Control-Expose-Headers:
- X-App-Version
Allow:
- GET, POST, HEAD, OPTIONS
Connection:
- keep-alive
Content-Length:
- '126'
Content-Type:
- application/json
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Fri, 06 Dec 2024 14:37:57 GMT
Referrer-Policy:
- same-origin
Server:
- nginx/1.24.0
Vary:
- Cookie
X-App-Version:
- dev
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
X-Request-ID:
- 9bdfa17e97c34bd4496abfdc27eb8553
X-SCA-Engine-Version:
- 2.2.0
X-Secrets-Engine-Version:
- 2.127.0
status:
code: 201
message: Created
version: 1
58 changes: 58 additions & 0 deletions tests/cassettes/test_global_team.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- pygitguardian/1.18.0 (Darwin;py3.11.8)
method: GET
uri: https://api.gitguardian.com/v1/teams?is_global=True
response:
body:
string: '[{"id":6,"is_global":true,"name":"All incidents","description":null,"gitguardian_url":"http://localhost:3000/workspace/6/settings/user/teams/6"}]'
headers:
Access-Control-Expose-Headers:
- X-App-Version
Allow:
- GET, POST, HEAD, OPTIONS
Connection:
- keep-alive
Content-Length:
- '145'
Content-Type:
- application/json
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Fri, 06 Dec 2024 14:26:03 GMT
Link:
- ''
Referrer-Policy:
- same-origin
Server:
- nginx/1.24.0
Vary:
- Cookie
X-App-Version:
- dev
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
X-Per-Page:
- '20'
X-Request-ID:
- 4f67e29113b6a59a311497ba05953fda
X-SCA-Engine-Version:
- 2.2.0
X-Secrets-Engine-Version:
- 2.127.0
status:
code: 200
message: OK
version: 1
64 changes: 64 additions & 0 deletions tests/cassettes/test_search_sources.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- pygitguardian/1.18.0 (Darwin;py3.11.8)
method: GET
uri: https://api.gitguardian.com/v1/sources?type=azure_devops
response:
body:
string: '[{"id":124,"type":"azure_devops","full_name":"gg-integration-test /
gg-test / default_branch","health":"at_risk","source_criticality":"unknown","default_branch":"test","default_branch_head":null,"open_incidents_count":19,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346395Z","status":"finished","failing_reason":"","commits_scanned":23,"duration":"0.437131","branches_scanned":1,"progress":100},"monitored":true,"visibility":"private","external_id":"05b69081-f346-4022-8784-198f50aed182","secret_incidents_breakdown":{"open_secret_incidents":{"total":19,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":19}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/default_branch"},{"id":125,"type":"azure_devops","full_name":"gg-integration-test
/ gg-test / gg-test","health":"at_risk","source_criticality":"unknown","default_branch":"main","default_branch_head":null,"open_incidents_count":19,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346418Z","status":"finished","failing_reason":"","commits_scanned":43,"duration":"0.492489","branches_scanned":1,"progress":100},"monitored":true,"visibility":"private","external_id":"7655868e-bb15-47ab-bd62-abd97212e5e8","secret_incidents_breakdown":{"open_secret_incidents":{"total":19,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":19}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/gg-test"},{"id":126,"type":"azure_devops","full_name":"gg-integration-test
/ gg-test / huge_repo","health":"safe","source_criticality":"unknown","default_branch":"master","default_branch_head":null,"open_incidents_count":0,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346442Z","status":"finished","failing_reason":"","commits_scanned":1007,"duration":"1.102781","branches_scanned":1,"progress":100},"monitored":true,"visibility":"private","external_id":"455c4e0c-6dc3-48ce-a0e7-819d9a8d7523","secret_incidents_breakdown":{"open_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/huge_repo"},{"id":127,"type":"azure_devops","full_name":"gg-integration-test
/ gg-test / new_repo","health":"safe","source_criticality":"unknown","default_branch":"master","default_branch_head":null,"open_incidents_count":0,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346464Z","status":"finished","failing_reason":"","commits_scanned":1,"duration":"0.216094","branches_scanned":1,"progress":100},"monitored":true,"visibility":"private","external_id":"f9b583fb-dcfd-46ec-8938-44b427d3e596","secret_incidents_breakdown":{"open_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/new_repo"},{"id":128,"type":"azure_devops","full_name":"gg-integration-test
/ gg-test / t e s t i n g","health":"at_risk","source_criticality":"unknown","default_branch":"main","default_branch_head":null,"open_incidents_count":110,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346299Z","status":"finished","failing_reason":"","commits_scanned":113,"duration":"7.597231","branches_scanned":2,"progress":100},"monitored":true,"visibility":"private","external_id":"8a132329-0c77-4efc-a18a-882bda6ab28b","secret_incidents_breakdown":{"open_secret_incidents":{"total":110,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":110}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/t%20e%20s%20t%20i%20n%20g"},{"id":129,"type":"azure_devops","full_name":"gg-integration-test
/ gg-test / test abc","health":"at_risk","source_criticality":"unknown","default_branch":"main","default_branch_head":null,"open_incidents_count":28,"closed_incidents_count":0,"last_scan":{"date":"2024-12-06T12:27:52.346367Z","status":"finished","failing_reason":"","commits_scanned":55,"duration":"0.623082","branches_scanned":1,"progress":100},"monitored":true,"visibility":"private","external_id":"2aa16b64-2fb2-4639-afeb-70c0c4e8a267","secret_incidents_breakdown":{"open_secret_incidents":{"total":28,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":28}},"closed_secret_incidents":{"total":0,"severity_breakdown":{"critical":0,"high":0,"medium":0,"low":0,"info":0,"unknown":0}}},"url":"https://dev.azure.com/gg-integration-test/gg-test/_git/test%20abc"}]'
headers:
Access-Control-Expose-Headers:
- X-App-Version
Allow:
- GET, HEAD, OPTIONS
Connection:
- keep-alive
Content-Length:
- '5158'
Content-Type:
- application/json
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Fri, 06 Dec 2024 14:41:54 GMT
Link:
- ''
Referrer-Policy:
- same-origin
Server:
- nginx/1.24.0
Vary:
- Cookie
X-App-Version:
- dev
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
X-Per-Page:
- '20'
X-Request-ID:
- 61df3a3b0044668d310ce7357488d6d8
X-SCA-Engine-Version:
- 2.2.0
X-Secrets-Engine-Version:
- 2.127.0
status:
code: 200
message: OK
version: 1
Loading

0 comments on commit 03648d2

Please sign in to comment.