-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathbuilders.py
More file actions
88 lines (78 loc) · 2.69 KB
/
builders.py
File metadata and controls
88 lines (78 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from shared.models.linkage import CVEDerivationClusterProposal
from webview.suggestions.context.types import (
MaintainerAddContext,
MaintainerContext,
MaintainerListContext,
MaintainerStatus,
PackageListContext,
)
def get_package_list_context(
suggestion: CVEDerivationClusterProposal,
can_edit: bool,
) -> PackageListContext:
# Split packages into active and ignored
all_packages = suggestion.cached.payload["original_packages"]
active_packages = suggestion.cached.payload["packages"]
ignored_packages = {
k: v for k, v in all_packages.items() if k not in active_packages
}
return PackageListContext(
active=active_packages,
ignored=ignored_packages,
editable=suggestion.is_editable,
can_edit=can_edit,
suggestion_id=suggestion.pk,
)
def get_maintainer_list_context(
suggestion: CVEDerivationClusterProposal,
can_edit: bool,
maintainer_add_error_message: str | None = None,
) -> MaintainerListContext:
# FIXME(@florent): There is a pydantic model for cached suggestions and
# categorized maintainers. I'd be nice to use it rather than browse untyped
# dictionaries.
# Access categorized maintainers from cached payload dictionary
categorized_maintainers = suggestion.cached.payload["categorized_maintainers"]
editable = suggestion.is_editable
# Create MaintainerContext objects for each category
active_contexts = [
MaintainerContext(
maintainer=maintainer,
editable=editable,
can_edit=can_edit,
status=MaintainerStatus.IGNORABLE,
suggestion_id=suggestion.pk,
)
for maintainer in categorized_maintainers["active"]
]
ignored_contexts = [
MaintainerContext(
maintainer=maintainer,
editable=editable,
can_edit=can_edit,
status=MaintainerStatus.RESTORABLE,
suggestion_id=suggestion.pk,
)
for maintainer in categorized_maintainers["ignored"]
]
additional_contexts = [
MaintainerContext(
maintainer=maintainer,
editable=editable,
can_edit=can_edit,
status=MaintainerStatus.DELETABLE,
suggestion_id=suggestion.pk,
)
for maintainer in categorized_maintainers["added"]
]
return MaintainerListContext(
active=active_contexts,
ignored=ignored_contexts,
additional=additional_contexts,
editable=editable,
can_edit=can_edit,
suggestion_id=suggestion.pk,
maintainer_add_context=MaintainerAddContext(
suggestion.pk, maintainer_add_error_message
),
)