Skip to content

Commit e0cd8c4

Browse files
committed
chore(types): fix type errors add version information
1 parent b3c6afe commit e0cd8c4

File tree

13 files changed

+127
-83
lines changed

13 files changed

+127
-83
lines changed

fossology/__init__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,16 @@ def __init__(self, url, token, version="v1"):
130130
self.token = token
131131
self.users = list()
132132
self.folders = list()
133+
self.version = version
133134
self.api = f"{self.host}/api/{version}"
134135
self.session = requests.Session()
135136
self.session.headers.update({"Authorization": f"Bearer {self.token}"})
136137
self.info = self.get_info()
137138
self.health = self.get_health()
138-
self.user = self.get_self()
139+
self.user: User = self.get_self()
139140
self.name = self.user.name
140-
self.rootFolder = self.detail_folder(self.user.rootFolderId)
141+
if self.user.rootFolderId is not None:
142+
self.rootFolder = self.detail_folder(self.user.rootFolderId)
141143
self.folders = self.list_folders()
142144

143145
logger.info(
@@ -186,7 +188,7 @@ def get_info(self) -> ApiInfo:
186188
description = "Error while getting API info"
187189
raise FossologyApiError(description, response)
188190

189-
def get_health(self) -> ApiInfo:
191+
def get_health(self) -> HealthInfo:
190192
"""Get health from the server
191193
192194
API endpoint: GET /health

fossology/items.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ def item_info(
3838
:rtype: FileInfo
3939
:raises FossologyApiError: if the REST call failed
4040
"""
41-
response = self.session.get(
42-
f"{self.api}/uploads/{upload.id}/item/{item_id}/info"
41+
response = self.session.get( # type: ignore
42+
f"{self.api}/uploads/{upload.id}/item/{item_id}/info" # type: ignore
4343
)
4444

4545
if response.status_code == 200:
@@ -71,8 +71,8 @@ def item_copyrights(
7171
:rtype: int
7272
:raises FossologyApiError: if the REST call failed
7373
"""
74-
response = self.session.get(
75-
f"{self.api}/uploads/{upload.id}/item/{item_id}/totalcopyrights?status={status.value}"
74+
response = self.session.get( # type: ignore
75+
f"{self.api}/uploads/{upload.id}/item/{item_id}/totalcopyrights?status={status.value}" # type: ignore
7676
)
7777

7878
if response.status_code == 200:
@@ -103,8 +103,8 @@ def get_clearing_history(
103103
:raises FossologyApiError: if the REST call failed
104104
:raises AuthorizationError: if the REST call is not authorized
105105
"""
106-
response = self.session.get(
107-
f"{self.api}/uploads/{upload.id}/item/{item_id}/clearing-history"
106+
response = self.session.get( # type: ignore
107+
f"{self.api}/uploads/{upload.id}/item/{item_id}/clearing-history" # type: ignore
108108
)
109109

110110
if response.status_code == 200:
@@ -142,8 +142,9 @@ def get_prev_next(
142142
if selection:
143143
params["selection"] = selection
144144

145-
response = self.session.get(
146-
f"{self.api}/uploads/{upload.id}/item/{item_id}/prev-next", params=params
145+
response = self.session.get( # type: ignore
146+
f"{self.api}/uploads/{upload.id}/item/{item_id}/prev-next", # type: ignore
147+
params=params, # type: ignore
147148
)
148149

149150
if response.status_code == 200:
@@ -174,8 +175,8 @@ def get_bulk_history(
174175
:raises FossologyApiError: if the REST call failed
175176
:raises AuthorizationError: if the REST call is not authorized
176177
"""
177-
response = self.session.get(
178-
f"{self.api}/uploads/{upload.id}/item/{item_id}/bulk-history"
178+
response = self.session.get( # type: ignore
179+
f"{self.api}/uploads/{upload.id}/item/{item_id}/bulk-history" # type: ignore
179180
)
180181

181182
if response.status_code == 200:
@@ -231,8 +232,8 @@ def schedule_bulk_scan(
231232
:raises AuthorizationError: if the REST call is not authorized
232233
"""
233234
headers = {"Content-Type": "application/json"}
234-
response = self.session.post(
235-
f"{self.api}/uploads/{upload.id}/item/{item_id}/bulk-scan",
235+
response = self.session.post( # type: ignore
236+
f"{self.api}/uploads/{upload.id}/item/{item_id}/bulk-scan", # type: ignore
236237
headers=headers,
237238
data=json.dumps(spec),
238239
)

fossology/obj.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def __init__(
131131
rootFolderId: int | None = None,
132132
emailNotification: str | None = None,
133133
default_group: str | None = None,
134-
agents: dict | None = None,
134+
agents: Agents | None = None,
135135
**kwargs: dict,
136136
):
137137
self.id = id
@@ -252,9 +252,10 @@ def __init__(
252252
self.additional_info = kwargs
253253

254254
def __str__(self):
255+
len_copyright = len(self.copyright) if self.copyright else 0
255256
return (
256257
f"Licenses found by scanners: {self.scanner}, concluded licenses: {self.conclusion}, "
257-
f"{len(self.copyright)} copyrights"
258+
f"{len_copyright} copyrights"
258259
)
259260

260261
@classmethod
@@ -699,7 +700,11 @@ def __init__(
699700
self.additional_info = kwargs
700701

701702
def __str__(self):
702-
return f"File {self.filepath} has {len(self.findings.conclusion)} license and {len(self.findings.copyright)}matches"
703+
len_conclusion = (
704+
len(self.findings.conclusion) if self.findings.conclusion else 0
705+
)
706+
len_copyright = len(self.findings.copyright) if self.findings.copyright else 0
707+
return f"File {self.filepath} has {len_conclusion} license and {len_copyright} copyrights found."
703708

704709
@classmethod
705710
def from_json(cls, json_dict):

fossology/search.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def search(
116116
x_total_pages = page
117117
while page <= x_total_pages:
118118
headers["page"] = str(page)
119-
response = self.session.get(f"{self.api}/search", headers=headers)
119+
response = self.session.get(f"{self.api}/search", headers=headers) # type: ignore
120120

121121
if response.status_code == 200:
122122
for result in response.json():
@@ -161,8 +161,8 @@ def filesearch(
161161
if group:
162162
headers["groupName"] = group
163163

164-
response = self.session.post(
165-
f"{self.api}/filesearch", headers=headers, json=filelist
164+
response = self.session.post( # type: ignore
165+
f"{self.api}/filesearch", headers=headers, json=filelist # type: ignore
166166
)
167167

168168
if response.status_code == 200:

fossology/uploads.py

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def detail_upload(
107107
headers = {}
108108
if group:
109109
headers["groupName"] = group
110-
response = self.session.get(f"{self.api}/uploads/{upload_id}", headers=headers)
110+
response = self.session.get(f"{self.api}/uploads/{upload_id}", headers=headers) # type: ignore
111111

112112
if response.status_code == 200:
113113
logger.debug(f"Got details for upload {upload_id}")
@@ -119,7 +119,7 @@ def detail_upload(
119119

120120
elif response.status_code == 503:
121121
if not wait_time:
122-
wait_time = response.headers["Retry-After"]
122+
wait_time = int(response.headers["Retry-After"])
123123
logger.debug(
124124
f"Retry GET upload {upload_id} after {wait_time} seconds: {response.json()['message']}"
125125
)
@@ -249,23 +249,23 @@ def upload_file(
249249
}
250250

251251
headers = {}
252-
if "v1" in self.api:
252+
if "v1" in self.api: # type: ignore
253253
headers = {
254254
k: str(v).lower() if isinstance(v, bool) else v for k, v in data.items()
255255
} # Needed for API v1.x
256256
headers["groupName"] = group
257-
endpoint = f"{self.api}/uploads"
257+
endpoint = f"{self.api}/uploads" # type: ignore
258258
else:
259259
if group:
260-
endpoint = f"{self.api}/uploads?groupName={group}"
260+
endpoint = f"{self.api}/uploads?groupName={group}" # type: ignore
261261
else:
262-
endpoint = f"{self.api}/uploads"
262+
endpoint = f"{self.api}/uploads" # type: ignore
263263

264264
if file:
265265
data["uploadType"] = headers["uploadType"] = "file"
266266
with open(file, "rb") as fp:
267267
files = {"fileInput": fp}
268-
response = self.session.post(
268+
response = self.session.post( # type: ignore
269269
endpoint, files=files, headers=headers, data=data
270270
)
271271
elif vcs or url or server:
@@ -279,7 +279,7 @@ def upload_file(
279279
data["location"] = server # type: ignore
280280
data["uploadType"] = headers["uploadType"] = "server"
281281
headers["Content-Type"] = "application/json"
282-
response = self.session.post(
282+
response = self.session.post( # type: ignore
283283
endpoint,
284284
data=json.dumps(data),
285285
headers=headers,
@@ -301,7 +301,7 @@ def upload_file(
301301

302302
if response.status_code == 201:
303303
try:
304-
upload = self.detail_upload(
304+
upload = self.detail_upload( # type: ignore
305305
response.json()["message"], group, wait_time
306306
)
307307
logger.info(
@@ -339,8 +339,9 @@ def upload_summary(self, upload: Upload, group=None):
339339
headers = {}
340340
if group:
341341
headers["groupName"] = group
342-
response = self.session.get(
343-
f"{self.api}/uploads/{upload.id}/summary", headers=headers
342+
response = self.session.get( # type: ignore
343+
f"{self.api}/uploads/{upload.id}/summary", # type: ignore
344+
headers=headers, # type: ignore
344345
)
345346

346347
if response.status_code == 200:
@@ -406,8 +407,10 @@ def upload_licenses(
406407
headers["groupName"] = group
407408
params["groupName"] = group # type: ignore
408409

409-
response = self.session.get(
410-
f"{self.api}/uploads/{upload.id}/licenses", params=params, headers=headers
410+
response = self.session.get( # type: ignore
411+
f"{self.api}/uploads/{upload.id}/licenses", # type: ignore
412+
params=params,
413+
headers=headers, # type: ignore
411414
)
412415

413416
if response.status_code == 200:
@@ -451,7 +454,7 @@ def upload_copyrights(
451454
:raises FossologyApiError: if the REST call failed
452455
:raises AuthorizationError: if the REST call is not authorized
453456
"""
454-
response = self.session.get(f"{self.api}/uploads/{upload.id}/copyrights")
457+
response = self.session.get(f"{self.api}/uploads/{upload.id}/copyrights") # type: ignore
455458

456459
if response.status_code == 200:
457460
all_copyrights = []
@@ -491,8 +494,10 @@ def delete_upload(self, upload, group=None):
491494
headers = {}
492495
if group:
493496
headers["groupName"] = group
494-
response = self.session.delete(
495-
f"{self.api}/uploads/{upload.id}", headers=headers, timeout=5
497+
response = self.session.delete( # type: ignore
498+
f"{self.api}/uploads/{upload.id}", # type: ignore
499+
headers=headers,
500+
timeout=5, # type: ignore
496501
)
497502

498503
if response.status_code == 202:
@@ -560,7 +565,7 @@ def list_uploads(
560565
assignee=assignee,
561566
since=since,
562567
group=group,
563-
limit=page_size,
568+
limit=str(page_size),
564569
)
565570
uploads_list = list()
566571
if all_pages:
@@ -571,8 +576,10 @@ def list_uploads(
571576
while page <= x_total_pages:
572577
headers["page"] = str(page)
573578
params["page"] = str(page)
574-
response = self.session.get(
575-
f"{self.api}/uploads", headers=headers, params=params
579+
response = self.session.get( # type: ignore
580+
f"{self.api}/uploads", # type: ignore
581+
headers=headers,
582+
params=params, # type: ignore
576583
)
577584
if response.status_code == 200:
578585
for upload in response.json():
@@ -628,8 +635,8 @@ def update_upload(
628635
params["assignee"] = assignee.id # type: ignore
629636
if group:
630637
headers["groupName"] = group
631-
response = self.session.patch(
632-
f"{self.api}/uploads/{upload.id}",
638+
response = self.session.patch( # type: ignore
639+
f"{self.api}/uploads/{upload.id}", # type: ignore
633640
headers=headers,
634641
params=params,
635642
data=comment,
@@ -661,8 +668,10 @@ def move_upload(self, upload: Upload, folder: Folder, action: str):
661668
:raises AuthorizationError: if the REST call is not authorized
662669
"""
663670
params = {"folderId": str(folder.id), "action": action}
664-
response = self.session.put(
665-
f"{self.api}/uploads/{upload.id}", headers=params, params=params
671+
response = self.session.put( # type: ignore
672+
f"{self.api}/uploads/{upload.id}", # type: ignore
673+
headers=params,
674+
params=params, # type: ignore
666675
)
667676

668677
if response.status_code == 202:
@@ -680,7 +689,7 @@ def move_upload(self, upload: Upload, folder: Folder, action: str):
680689
)
681690
raise FossologyApiError(description, response)
682691

683-
def download_upload(self, upload: Upload) -> Tuple[str, str]:
692+
def download_upload(self, upload: Upload) -> Tuple[bytes, str]:
684693
"""Download an upload by its id
685694
686695
API Endpoint: GET /uploads/{id}/download
@@ -692,7 +701,7 @@ def download_upload(self, upload: Upload) -> Tuple[str, str]:
692701
:raises FossologyApiError: if the REST call failed
693702
:raises AuthorizationError: if the REST call is not authorized
694703
"""
695-
response = self.session.get(f"{self.api}/uploads/{upload.id}/download")
704+
response = self.session.get(f"{self.api}/uploads/{upload.id}/download") # type: ignore
696705

697706
if response.status_code == 200:
698707
content = response.headers["Content-Disposition"]
@@ -743,8 +752,9 @@ def change_upload_permissions(
743752
if public_permission
744753
else "none",
745754
}
746-
response: requests.Response = self.session.put(
747-
f"{self.api}/uploads/{upload.id}/permissions", json=data
755+
response: requests.Response = self.session.put( # type: ignore
756+
f"{self.api}/uploads/{upload.id}/permissions", # type: ignore
757+
json=data, # type: ignore
748758
)
749759

750760
if response.status_code == 202:
@@ -789,7 +799,7 @@ def upload_permissions(
789799
:raises FossologyApiError: if the REST call failed
790800
:raises AuthorizationError: if the REST call is not authorized
791801
"""
792-
response = self.session.get(f"{self.api}/uploads/{upload.id}/perm-groups")
802+
response = self.session.get(f"{self.api}/uploads/{upload.id}/perm-groups") # type: ignore
793803
if response.status_code == 200:
794804
return UploadPermGroups.from_json(response.json())
795805

0 commit comments

Comments
 (0)