-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathconfig.py
More file actions
149 lines (118 loc) · 4.92 KB
/
config.py
File metadata and controls
149 lines (118 loc) · 4.92 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from typing import Dict, List, Optional, Type
from dataclasses import dataclass
from reviews.interfaces import ReviewStrategy, ScoringSystem, ReviewWorkflow
# Configuration for default review types
from reviews.strategies import ProposalReviewStrategy, GrantReviewStrategy
from reviews.scoring import StandardScoringSystem
from reviews.workflows import StandardReviewWorkflow
@dataclass
class ReviewSessionConfig:
"""Configuration for a review session type."""
name: str
strategy_class: Type[ReviewStrategy]
scoring_system_class: Type[ScoringSystem]
workflow_class: Type[ReviewWorkflow]
# Permission settings
review_permission: str = "reviews.review_reviewsession"
decision_permission: str = "reviews.decision_reviewsession"
# Template overrides
review_template: Optional[str] = None
recap_template: Optional[str] = None
# Workflow settings
allow_skip: bool = True
allow_private_comments: bool = True
require_comments: bool = False
# Scoring settings
default_score_options: Optional[List[tuple]] = None
allow_custom_scores: bool = True
class ReviewSystemRegistry:
"""Registry for review session configurations."""
def __init__(self):
self._configs: Dict[str, ReviewSessionConfig] = {}
self._strategies: Dict[str, Type[ReviewStrategy]] = {}
self._scoring_systems: Dict[str, Type[ScoringSystem]] = {}
self._workflows: Dict[str, Type[ReviewWorkflow]] = {}
def register_config(self, session_type: str, config: ReviewSessionConfig) -> None:
"""Register a configuration for a session type."""
self._configs[session_type] = config
def register_strategy(
self, name: str, strategy_class: Type[ReviewStrategy]
) -> None:
"""Register a review strategy."""
self._strategies[name] = strategy_class
def register_scoring_system(
self, name: str, scoring_class: Type[ScoringSystem]
) -> None:
"""Register a scoring system."""
self._scoring_systems[name] = scoring_class
def register_workflow(
self, name: str, workflow_class: Type[ReviewWorkflow]
) -> None:
"""Register a workflow."""
self._workflows[name] = workflow_class
def get_config(self, session_type: str) -> Optional[ReviewSessionConfig]:
"""Get configuration for a session type."""
return self._configs.get(session_type)
def get_strategy(self, name: str) -> Optional[Type[ReviewStrategy]]:
"""Get a strategy class by name."""
return self._strategies.get(name)
def get_scoring_system(self, name: str) -> Optional[Type[ScoringSystem]]:
"""Get a scoring system class by name."""
return self._scoring_systems.get(name)
def get_workflow(self, name: str) -> Optional[Type[ReviewWorkflow]]:
"""Get a workflow class by name."""
return self._workflows.get(name)
def list_session_types(self) -> List[str]:
"""List all registered session types."""
return list(self._configs.keys())
# Global registry instance
registry = ReviewSystemRegistry()
def setup_default_configurations():
"""Set up default configurations for built-in review types."""
# Register default components
registry.register_strategy("proposal", ProposalReviewStrategy)
registry.register_strategy("grant", GrantReviewStrategy)
registry.register_scoring_system("standard", StandardScoringSystem)
registry.register_workflow("standard", StandardReviewWorkflow)
# Proposals configuration
proposals_config = ReviewSessionConfig(
name="Proposals Review",
strategy_class=ProposalReviewStrategy,
scoring_system_class=StandardScoringSystem,
workflow_class=StandardReviewWorkflow,
review_permission="reviews.review_reviewsession",
decision_permission="reviews.decision_reviewsession",
allow_skip=True,
allow_private_comments=True,
require_comments=False,
default_score_options=[
(-2, "Rejected"),
(-1, "Not Convinced"),
(0, "Maybe"),
(1, "Good"),
(2, "Excellent"),
],
)
# Grants configuration
grants_config = ReviewSessionConfig(
name="Grants Review",
strategy_class=GrantReviewStrategy,
scoring_system_class=StandardScoringSystem,
workflow_class=StandardReviewWorkflow,
review_permission="reviews.review_reviewsession",
decision_permission="reviews.decision_reviewsession",
allow_skip=True,
allow_private_comments=True,
require_comments=False,
default_score_options=[
(-2, "Rejected"),
(-1, "Not Convinced"),
(0, "Maybe"),
(1, "Yes"),
(2, "Absolutely"),
],
)
registry.register_config("proposals", proposals_config)
registry.register_config("grants", grants_config)
# Auto-setup when module is imported
setup_default_configurations()