Skip to content

Commit fe2af4d

Browse files
committed
Pass write Q as parameter of export
1 parent dd350a4 commit fe2af4d

File tree

10 files changed

+77
-51
lines changed

10 files changed

+77
-51
lines changed

migration/migration.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ def write_objects(queue: Queue, fd, object_type: str) -> None:
118118
log.info("Writing %s key '%s'", object_type, key)
119119
print(f'{prefix}"{key}": {utilities.json_dump(obj_json)}', end="", file=fd)
120120
else:
121-
log.info("Writing %s global", object_type)
122-
print(f"{prefix}{utilities.json_dump(obj_json)[1:-1]}", end="", file=fd)
121+
log.info("Writing %s", object_type)
122+
print(f"{prefix}{utilities.json_dump(obj_json)[2:-1]}", end="", file=fd)
123123
prefix = ",\n"
124124
queue.task_done()
125125
print("\n}", file=fd, end="")
@@ -172,10 +172,9 @@ def __export_config(endpoint: platform.Platform, what: list[str], **kwargs) -> N
172172
is_first = False
173173
worker = Thread(target=write_objects, args=(q, fd, ndx))
174174
worker.daemon = True
175-
worker.name = f"Write{ndx}"
175+
worker.name = f"Write{ndx[:1].upper()}{ndx[1:10]}"
176176
worker.start()
177-
export_settings["WRITE_QUEUE"] = q
178-
sq_settings[ndx] = func(endpoint, export_settings=export_settings, key_list=key_list)
177+
sq_settings[ndx] = func(endpoint, export_settings=export_settings, key_list=key_list, write_q=q)
179178
q.join()
180179
except exceptions.UnsupportedOperation as e:
181180
log.warning(e.message)

sonar/applications.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#
2020

2121
from __future__ import annotations
22+
from queue import Queue
2223
from typing import Union
2324

2425
import json
@@ -498,7 +499,9 @@ def exists(endpoint: pf.Platform, key: str) -> bool:
498499
return False
499500

500501

501-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
502+
def export(
503+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None, write_q: Queue = None
504+
) -> types.ObjectJsonRepr:
502505
"""Exports applications as JSON
503506
504507
:param Platform endpoint: Reference to the Sonar platform
@@ -514,12 +517,13 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
514517
apps_settings = {}
515518
for k, app in sorted(get_list(endpoint, key_list).items()):
516519
app_json = app.export(export_settings)
517-
if export_settings.get("WRITE_QUEUE", None):
518-
export_settings["WRITE_QUEUE"].put(app_json)
520+
if write_q:
521+
write_q.put(app_json)
519522
else:
520523
app_json.pop("key")
521524
apps_settings[k] = app_json
522-
export_settings["WRITE_QUEUE"].put(None)
525+
if write_q:
526+
write_q.put(None)
523527
return apps_settings
524528

525529

sonar/groups.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#
2020

2121
from __future__ import annotations
22+
from queue import Queue
2223
from typing import Optional
2324
import sonar.logging as log
2425
import sonar.platform as pf
@@ -256,7 +257,9 @@ def get_list(endpoint: pf.Platform) -> dict[str, Group]:
256257
return search(endpoint)
257258

258259

259-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
260+
def export(
261+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
262+
) -> types.ObjectJsonRepr:
260263
"""Exports groups representation in JSON
261264
262265
:param Platform endpoint: reference to the SonarQube platform
@@ -272,9 +275,9 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
272275
if not export_settings["FULL_EXPORT"] and g_obj.is_default():
273276
continue
274277
g_list[g_name] = "" if g_obj.description is None else g_obj.description
275-
if export_settings.get("WRITE_QUEUE", None):
276-
export_settings["WRITE_QUEUE"].put(g_list)
277-
export_settings["WRITE_QUEUE"].put(None)
278+
if write_q:
279+
write_q.put(g_list)
280+
write_q.put(None)
278281
return g_list
279282

280283

sonar/platform.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from http import HTTPStatus
2828
import sys
2929
import os
30+
from queue import Queue
3031
from typing import Optional
3132
import time
3233
import datetime
@@ -869,7 +870,9 @@ def convert_for_yaml(original_json: types.ObjectJsonRepr) -> types.ObjectJsonRep
869870
return original_json
870871

871872

872-
def export(endpoint: Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
873+
def export(
874+
endpoint: Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
875+
) -> types.ObjectJsonRepr:
873876
"""Exports all or a list of projects configuration as dict
874877
875878
:param Platform endpoint: reference to the SonarQube platform
@@ -879,7 +882,7 @@ def export(endpoint: Platform, export_settings: types.ConfigSettings, key_list:
879882
:rtype: ObjectJsonRepr
880883
"""
881884
exp = endpoint.export(export_settings)
882-
if export_settings.get("WRITE_QUEUE", None):
883-
export_settings["WRITE_QUEUE"].put(exp)
884-
export_settings["WRITE_QUEUE"].put(None)
885+
if write_q:
886+
write_q.put(exp)
887+
write_q.put(None)
885888
return exp

sonar/portfolios.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"""
2525

2626
from __future__ import annotations
27+
from queue import Queue
2728
from typing import Union, Optional
2829
import json
2930
import datetime
@@ -727,7 +728,9 @@ def search_by_key(endpoint: pf.Platform, key: str) -> types.ApiPayload:
727728
return util.search_by_key(endpoint, key, Portfolio.SEARCH_API, "components")
728729

729730

730-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
731+
def export(
732+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
733+
) -> types.ObjectJsonRepr:
731734
"""Exports portfolios as JSON
732735
733736
:param Platform endpoint: Reference to the SonarQube platform
@@ -749,8 +752,8 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
749752
try:
750753
if not p.is_sub_portfolio:
751754
exp = p.export(export_settings)
752-
if export_settings.get("WRITE_QUEUE", None):
753-
export_settings["WRITE_QUEUE"].put(exp)
755+
if write_q:
756+
write_q.put(exp)
754757
else:
755758
exp.pop("key")
756759
exported_portfolios[k] = exp
@@ -763,7 +766,8 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
763766
i += 1
764767
if i % 10 == 0 or i == nb_portfolios:
765768
log.info("Exported %d/%d portfolios (%d%%)", i, nb_portfolios, (i * 100) // nb_portfolios)
766-
export_settings["WRITE_QUEUE"].put(None)
769+
if write_q:
770+
write_q.put(None)
767771
return exported_portfolios
768772

769773

sonar/projects.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from __future__ import annotations
2727

2828
import os
29+
from queue import Queue
2930
import re
3031
import json
3132
from datetime import datetime
@@ -1473,14 +1474,13 @@ def audit(endpoint: pf.Platform, audit_settings: types.ConfigSettings, key_list:
14731474
return problems
14741475

14751476

1476-
def __export_thread(queue: Queue[Project], results: dict[str, str], export_settings: types.ConfigSettings) -> None:
1477+
def __export_thread(queue: Queue[Project], results: dict[str, str], export_settings: types.ConfigSettings, write_q: Optional[Queue] = None) -> None:
14771478
"""Project export callback function for multitheaded export"""
14781479
while not queue.empty():
14791480
project = queue.get()
14801481
exp_json = project.export(export_settings=export_settings)
1481-
if export_settings.get("WRITE_QUEUE", None):
1482-
log.info("Putting %s in queue %s", project.key, str(export_settings["WRITE_QUEUE"]))
1483-
export_settings["WRITE_QUEUE"].put(exp_json)
1482+
if write_q:
1483+
write_q.put(exp_json)
14841484
else:
14851485
results[project.key] = exp_json
14861486
results[project.key].pop("key", None)
@@ -1490,10 +1490,11 @@ def __export_thread(queue: Queue[Project], results: dict[str, str], export_setti
14901490
if nb % 10 == 0 or nb == tot:
14911491
log.info("%d/%d projects exported (%d%%)", nb, tot, (nb * 100) // tot)
14921492
queue.task_done()
1493-
log.info("Putting DONE in queue %s", str(export_settings["WRITE_QUEUE"]))
14941493

14951494

1496-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
1495+
def export(
1496+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
1497+
) -> types.ObjectJsonRepr:
14971498
"""Exports all or a list of projects configuration as dict
14981499
14991500
:param Platform endpoint: reference to the SonarQube platform
@@ -1515,12 +1516,13 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
15151516
project_settings = {}
15161517
for i in range(export_settings.get("THREADS", 8)):
15171518
log.debug("Starting project export thread %d", i)
1518-
worker = Thread(target=__export_thread, args=(q, project_settings, export_settings))
1519-
worker.setDaemon(True)
1520-
worker.setName(f"ProjectExport{i}")
1519+
worker = Thread(target=__export_thread, args=(q, project_settings, export_settings, write_q))
1520+
worker.daemon = True
1521+
worker.name = f"ProjectExport{i}"
15211522
worker.start()
15221523
q.join()
1523-
export_settings["WRITE_QUEUE"].put(None)
1524+
if write_q:
1525+
write_q.put(None)
15241526
return dict(sorted(project_settings.items()))
15251527

15261528

sonar/qualitygates.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
"""
2525

2626
from __future__ import annotations
27-
28-
from typing import Union
27+
from queue import Queue
28+
from typing import Union, Optional
2929

3030
from http import HTTPStatus
3131
import json
@@ -380,7 +380,9 @@ def get_list(endpoint: pf.Platform) -> dict[str, QualityGate]:
380380
return qg_list
381381

382382

383-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
383+
def export(
384+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
385+
) -> types.ObjectJsonRepr:
384386
"""Exports quality gates as JSON
385387
386388
:param Platform endpoint: Reference to the Sonar platform
@@ -391,9 +393,9 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
391393
"""
392394
log.info("Exporting quality gates")
393395
qg_list = {k: qg.to_json(export_settings) for k, qg in sorted(get_list(endpoint).items())}
394-
if export_settings.get("WRITE_QUEUE", None):
395-
export_settings["WRITE_QUEUE"].put(qg_list)
396-
export_settings["WRITE_QUEUE"].put(None)
396+
if write_q:
397+
write_q.put(qg_list)
398+
write_q.put(None)
397399
return qg_list
398400

399401

sonar/qualityprofiles.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
#
2020

2121
from __future__ import annotations
22-
from typing import Union
22+
from queue import Queue
23+
from typing import Union, Optional
2324
import json
2425
from datetime import datetime
2526

@@ -578,7 +579,9 @@ def hierarchize(qp_list: dict[str, str], endpoint: pf.Platform) -> types.ObjectJ
578579
return qp_list
579580

580581

581-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
582+
def export(
583+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
584+
) -> types.ObjectJsonRepr:
582585
"""Exports all or a list of quality profiles configuration as dict
583586
584587
:param Platform endpoint: reference to the SonarQube platform
@@ -598,9 +601,9 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
598601
qp_list[lang] = {}
599602
qp_list[lang][name] = json_data
600603
qp_list = hierarchize(qp_list, endpoint)
601-
if export_settings.get("WRITE_QUEUE", None):
602-
export_settings["WRITE_QUEUE"].put(qp_list)
603-
export_settings["WRITE_QUEUE"].put(None)
604+
if write_q:
605+
write_q.put(qp_list)
606+
write_q.put(None)
604607
return dict(sorted(qp_list.items()))
605608

606609

sonar/rules.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
2424
"""
2525
from __future__ import annotations
26+
from queue import Queue
2627
import json
2728
from typing import Optional
2829
from http import HTTPStatus
@@ -271,7 +272,9 @@ def get_object(endpoint: platform.Platform, key: str) -> Optional[Rule]:
271272
return None
272273

273274

274-
def export(endpoint: platform.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
275+
def export(
276+
endpoint: platform.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
277+
) -> types.ObjectJsonRepr:
275278
"""Returns a JSON export of all rules"""
276279
log.info("Exporting rules")
277280
full = export_settings.get("FULL_EXPORT", False)
@@ -299,9 +302,9 @@ def export(endpoint: platform.Platform, export_settings: types.ConfigSettings, k
299302
rule_list["standard"] = other_rules
300303
if export_settings.get("MODE", "") == "MIGRATION":
301304
rule_list["thirdParty"] = {r.key: r.export() for r in third_party(endpoint=endpoint)}
302-
if export_settings.get("WRITE_QUEUE", None):
303-
export_settings["WRITE_QUEUE"].put(rule_list)
304-
export_settings["WRITE_QUEUE"].put(None)
305+
if write_q:
306+
write_q.put(rule_list)
307+
write_q.put(None)
305308
return rule_list
306309

307310

sonar/users.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#
2020

2121
from __future__ import annotations
22-
22+
from queue import Queue
2323
from typing import Union, Optional
2424
import datetime as dt
2525
import json
@@ -404,7 +404,9 @@ def search(endpoint: pf.Platform, params: types.ApiParams = None) -> dict[str, U
404404
return sqobject.search_objects(endpoint=endpoint, object_class=User, params=params)
405405

406406

407-
def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: types.KeyList = None) -> types.ObjectJsonRepr:
407+
def export(
408+
endpoint: pf.Platform, export_settings: types.ConfigSettings, key_list: Optional[types.KeyList] = None, write_q: Optional[Queue] = None
409+
) -> types.ObjectJsonRepr:
408410
"""Exports all users in JSON representation
409411
410412
:param Platform endpoint: reference to the SonarQube platform
@@ -417,11 +419,12 @@ def export(endpoint: pf.Platform, export_settings: types.ConfigSettings, key_lis
417419
u_list = {}
418420
for u_login, u_obj in sorted(search(endpoint=endpoint).items()):
419421
u_list[u_login] = u_obj.to_json(export_settings)
420-
if export_settings.get("WRITE_QUEUE", None):
421-
export_settings["WRITE_QUEUE"].put(u_list[u_login])
422+
if write_q:
423+
write_q.put(u_list[u_login])
422424
else:
423425
u_list[u_login].pop("login", None)
424-
export_settings["WRITE_QUEUE"].put(None)
426+
if write_q:
427+
write_q.put(None)
425428
return u_list
426429

427430

0 commit comments

Comments
 (0)