Skip to content

Commit 857d464

Browse files
Jeremy DesanlisJguer
authored andcommitted
feat(client): save app and secrets engine version
1 parent 1a670c4 commit 857d464

15 files changed

+230
-10
lines changed

pygitguardian/client.py

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,22 @@
1010
DEFAULT_TIMEOUT,
1111
MULTI_DOCUMENT_LIMIT,
1212
)
13-
from .models import Detail, Document, MultiScanResult, QuotaResponse, ScanResult
13+
from .models import (
14+
Detail,
15+
Document,
16+
HealthCheckResponse,
17+
MultiScanResult,
18+
QuotaResponse,
19+
ScanResult,
20+
)
21+
22+
23+
class Versions:
24+
app_version: Optional[str] = None
25+
secrets_engine_version: Optional[str] = None
26+
27+
28+
VERSIONS = Versions()
1429

1530

1631
def load_detail(resp: Response) -> Detail:
@@ -111,16 +126,47 @@ def request(
111126
if extra_headers
112127
else self.session.headers
113128
)
114-
return self.session.request(
129+
response: Response = self.session.request(
115130
method=method, url=url, timeout=self.timeout, headers=headers, **kwargs
116131
)
117132

133+
self.app_version = response.headers.get("X-App-Version", self.app_version)
134+
self.secrets_engine_version = response.headers.get(
135+
"X-Secrets-Engine-Version", self.secrets_engine_version
136+
)
137+
138+
return response
139+
118140
def _url_from_endpoint(self, endpoint: str, version: Optional[str]) -> str:
119141
if version:
120142
endpoint = urllib.parse.urljoin(version + "/", endpoint)
121143

122144
return urllib.parse.urljoin(self.base_uri + "/", endpoint)
123145

146+
@property
147+
def app_version(self) -> Optional[str]:
148+
global VERSIONS
149+
150+
return VERSIONS.app_version
151+
152+
@app_version.setter
153+
def app_version(self, value: Optional[str]):
154+
global VERSIONS
155+
156+
VERSIONS.app_version = value
157+
158+
@property
159+
def secrets_engine_version(self) -> Optional[str]:
160+
global VERSIONS
161+
162+
return VERSIONS.secrets_engine_version
163+
164+
@secrets_engine_version.setter
165+
def secrets_engine_version(self, value: Optional[str]):
166+
global VERSIONS
167+
168+
VERSIONS.secrets_engine_version = value
169+
124170
def get(
125171
self,
126172
endpoint: str,
@@ -153,7 +199,7 @@ def post(
153199
**kwargs,
154200
)
155201

156-
def health_check(self) -> Detail:
202+
def health_check(self) -> HealthCheckResponse:
157203
"""
158204
health_check handles the /health endpoint of the API
159205
@@ -164,10 +210,12 @@ def health_check(self) -> Detail:
164210
"""
165211
resp = self.get(endpoint="health")
166212

167-
obj = load_detail(resp)
168-
obj.status_code = resp.status_code
169-
170-
return obj
213+
return HealthCheckResponse(
214+
detail=load_detail(resp).detail,
215+
status_code=resp.status_code,
216+
app_version=self.app_version,
217+
secrets_engine_version=self.secrets_engine_version,
218+
)
171219

172220
def content_scan(
173221
self,

pygitguardian/models.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,9 @@ def __repr__(self):
420420
"count:{0}, "
421421
"limit:{1}, "
422422
"remaining:{2}, "
423-
"since:{3}".format(self.count, self.limit, self.remaining, self.since.isoformat())
423+
"since:{3}".format(
424+
self.count, self.limit, self.remaining, self.since.isoformat()
425+
)
424426
)
425427

426428

@@ -452,3 +454,41 @@ def __init__(self, content: Quota, **kwargs):
452454

453455
def __repr__(self):
454456
return "content:{0}".format(repr(self.content))
457+
458+
459+
class HealthCheckResponseSchema(BaseSchema):
460+
detail = fields.String(allow_none=False)
461+
status_code = fields.Int(allow_none=False)
462+
app_version = fields.String(allow_none=True)
463+
secrets_engine_version = fields.String(allow_none=True)
464+
465+
466+
class HealthCheckResponse(Base):
467+
SCHEMA = HealthCheckResponseSchema()
468+
469+
def __init__(
470+
self,
471+
detail: str,
472+
status_code: int,
473+
app_version: Optional[str],
474+
secrets_engine_version: Optional[str],
475+
**kwargs,
476+
):
477+
super().__init__()
478+
self.detail = detail
479+
self.status_code = status_code
480+
self.app_version = app_version
481+
self.secrets_engine_version = secrets_engine_version
482+
483+
def __repr__(self):
484+
return (
485+
"detail:{0}, "
486+
"status_code:{1}, "
487+
"app version:{2}, "
488+
"secrets engine version:{3}".format(
489+
self.detail,
490+
self.status_code,
491+
self.app_version or "",
492+
self.secrets_engine_version or "",
493+
)
494+
)

tests/cassettes/filename.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ interactions:
3838
- nosniff
3939
X-Frame-Options:
4040
- DENY
41+
X-App-Version:
42+
- 1.26.0-rc.4
43+
X-Secrets-Engine-Version:
44+
- 2.43.0
4145
status:
4246
code: 200
4347
message: OK
@@ -80,6 +84,10 @@ interactions:
8084
- nosniff
8185
X-Frame-Options:
8286
- DENY
87+
X-App-Version:
88+
- 1.26.0-rc.4
89+
X-Secrets-Engine-Version:
90+
- 2.43.0
8391
status:
8492
code: 200
8593
message: OK

tests/cassettes/filename_secret.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ interactions:
4343
- nosniff
4444
X-Frame-Options:
4545
- DENY
46+
X-App-Version:
47+
- 1.26.0-rc.4
48+
X-Secrets-Engine-Version:
49+
- 2.43.0
4650
status:
4751
code: 200
4852
message: OK
@@ -90,6 +94,10 @@ interactions:
9094
- nosniff
9195
X-Frame-Options:
9296
- DENY
97+
X-App-Version:
98+
- 1.26.0-rc.4
99+
X-Secrets-Engine-Version:
100+
- 2.43.0
93101
status:
94102
code: 200
95103
message: OK

tests/cassettes/max_size_array.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ interactions:
6767
- DENY
6868
content-length:
6969
- "2141"
70+
X-App-Version:
71+
- 1.26.0-rc.4
72+
X-Secrets-Engine-Version:
73+
- 2.43.0
7074
status:
7175
code: 200
7276
message: OK
@@ -138,6 +142,10 @@ interactions:
138142
- DENY
139143
content-length:
140144
- "2141"
145+
X-App-Version:
146+
- 1.26.0-rc.4
147+
X-Secrets-Engine-Version:
148+
- 2.43.0
141149
status:
142150
code: 200
143151
message: OK

tests/cassettes/no_breaks.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ interactions:
3838
- nosniff
3939
X-Frame-Options:
4040
- DENY
41+
X-App-Version:
42+
- 1.26.0-rc.4
43+
X-Secrets-Engine-Version:
44+
- 2.43.0
4145
status:
4246
code: 200
4347
message: OK
@@ -80,6 +84,10 @@ interactions:
8084
- nosniff
8185
X-Frame-Options:
8286
- DENY
87+
X-App-Version:
88+
- 1.26.0-rc.4
89+
X-Secrets-Engine-Version:
90+
- 2.43.0
8391
status:
8492
code: 200
8593
message: OK

tests/cassettes/quota.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ interactions:
3232
- nginx
3333
Strict-Transport-Security:
3434
- max-age=31536000; includeSubDomains
35+
X-App-Version:
36+
- 1.26.0-rc.4
37+
X-Secrets-Engine-Version:
38+
- 2.43.0
3539
status:
3640
code: 200
3741
message: OK

tests/cassettes/secret.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ interactions:
4242
- nosniff
4343
X-Frame-Options:
4444
- DENY
45+
X-App-Version:
46+
- 1.26.0-rc.4
47+
X-Secrets-Engine-Version:
48+
- 2.43.0
4549
status:
4650
code: 200
4751
message: OK
@@ -88,6 +92,10 @@ interactions:
8892
- nosniff
8993
X-Frame-Options:
9094
- DENY
95+
X-App-Version:
96+
- 1.26.0-rc.4
97+
X-Secrets-Engine-Version:
98+
- 2.43.0
9199
status:
92100
code: 200
93101
message: OK

tests/cassettes/test_assert_content_type.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@ interactions:
309309
- Tue, 16 Jun 2020 12:37:49 GMT
310310
Server:
311311
- nginx
312+
X-App-Version:
313+
- 1.26.0-rc.4
314+
X-Secrets-Engine-Version:
315+
- 2.43.0
312316
status:
313317
code: 200
314318
message: OK
@@ -622,6 +626,10 @@ interactions:
622626
- Tue, 16 Jun 2020 12:37:49 GMT
623627
Server:
624628
- nginx
629+
X-App-Version:
630+
- 1.26.0-rc.4
631+
X-Secrets-Engine-Version:
632+
- 2.43.0
625633
status:
626634
code: 200
627635
message: OK

tests/cassettes/test_content_not_ok.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ interactions:
4040
- nosniff
4141
X-Frame-Options:
4242
- DENY
43+
X-App-Version:
44+
- 1.26.0-rc.4
45+
X-Secrets-Engine-Version:
46+
- 2.43.0
4347
status:
4448
code: 401
4549
message: Unauthorized
@@ -84,6 +88,10 @@ interactions:
8488
- nosniff
8589
X-Frame-Options:
8690
- DENY
91+
X-App-Version:
92+
- 1.26.0-rc.4
93+
X-Secrets-Engine-Version:
94+
- 2.43.0
8795
status:
8896
code: 401
8997
message: Unauthorized

0 commit comments

Comments
 (0)