Skip to content

Commit e055b37

Browse files
committed
feat: light and black mode
1 parent 7265740 commit e055b37

23 files changed

+295
-83
lines changed

src/riskmatrix/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
from riskmatrix.route_factories import root_factory
1313
from riskmatrix.security import authenticated_user
1414
from riskmatrix.security_policy import SessionSecurityPolicy
15-
from openai import OpenAI
16-
from anthropic import Anthropic
1715
from langchain_openai import ChatOpenAI
1816
from langchain_anthropic import ChatAnthropic
1917

@@ -95,7 +93,7 @@ def main(
9593
if openai_apikey := settings.get('openai_api_key'):
9694
openai_client = ChatOpenAI(
9795
api_key=openai_apikey,
98-
model = "gpt-4o-mini",
96+
model="gpt-4o-mini",
9997
temperature=0.7
10098
)
10199
config.add_request_method(
@@ -114,7 +112,7 @@ def main(
114112
'llm',
115113
reify=True
116114
)
117-
115+
118116
if langfuse_host := settings.get("langfuse_host"):
119117
from langfuse.callback import CallbackHandler
120118
langfuse_handler = CallbackHandler(
@@ -127,7 +125,6 @@ def main(
127125
'langfuse',
128126
reify=True
129127
)
130-
131128

132129
app = config.make_wsgi_app()
133130
return Fanstatic(app, versioning=True)

src/riskmatrix/layouts/layout.pt

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,45 @@
55
i18n:domain="riskmatrix"
66
lang="${layout.locale_name()}"
77
class="h-100"
8-
data_sentry_dsn="${layout.sentry_dsn()}">
8+
data_sentry_dsn="${layout.sentry_dsn()}"
9+
data-bs-theme="dark">
910

1011
<head>
11-
1212
<meta charset="utf-8" />
1313
<meta name="viewport" content="width=device-width, initial-scale=1" />
1414

1515
<tal:block tal:condition="layout.sentry_dsn()">
16-
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/bundle.min.js')}"></script>
17-
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/sentry.js')}"></script>
16+
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/bundle.min.js')}" nonce="${request.csp_nonce}"></script>
17+
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/sentry.js')}" nonce="${request.csp_nonce}"></script>
1818
</tal:block>
19-
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/plotly.min.js')}"></script>
20-
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/marked.min.js')}"></script>
21-
22-
<title>RiskMatrix<tal:b tal:condition="exists:title"> — ${title}</tal:b></title>
19+
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/plotly.min.js')}" nonce="${request.csp_nonce}"></script>
20+
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/marked.min.js')}" nonce="${request.csp_nonce}"></script>
21+
<script type="text/javascript" src="${layout.static_url('riskmatrix:static/js/plotly_theme.js')}" nonce="${request.csp_nonce}"></script>
2322

23+
<title>RiskMatrix<tal:b tal:condition="exists:title"> — ${title}</tal:b></title>
2424
</head>
2525

2626
<body class="d-flex flex-column h-100">
27-
27+
2828
${panel('navbar')}
2929

3030
<!-- Begin page content -->
3131
<main class="flex-shrink-0">
32-
3332
${panel('flash')}
34-
3533
<div class="container">
36-
3734
<div class="row" tal:omit-tag="not:layout.show_steps()">
38-
3935
<div class="col-md-auto" tal:condition="layout.show_steps()">
4036
${panel('steps')}
4137
</div>
42-
4338
<div class="col" tal:omit-tag="not:layout.show_steps()">
4439
<tal:block metal:define-slot="content" />
4540
</div>
4641
</div>
47-
4842
</div>
49-
5043
<tal:block metal:define-slot="modals" />
51-
5244
</main>
5345

46+
<!-- Footer Content -->
5447
<footer class="footer mt-auto py-3 bg-dark">
5548
<div class="container">
5649
<div class="row">
@@ -108,7 +101,5 @@
108101
</div>
109102
</div>
110103
</footer>
111-
112104
</body>
113-
114105
</html>

src/riskmatrix/layouts/navbar.pt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,36 @@
1212
</li>
1313
</ul>
1414
<a class="btn btn-outline-light" href="${request.route_url('logout')}"><i class="fad fa-sign-out"></i> <tal:b i18n:translate>Logout</tal:b></a>
15+
&nbsp;
16+
<div class="dropdown">
17+
<button class="btn btn-link nav-link py-2 px-0 px-lg-2 dropdown-toggle d-flex align-items-center" id="bd-theme" type="button" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Toggle theme (light)">
18+
<i class="fa fa-sun theme-icon-active" aria-hidden="true"></i>
19+
<span class="d-lg-none ms-2" id="bd-theme-text">Toggle theme</span>
20+
</button>
21+
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="bd-theme-text">
22+
<li>
23+
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="true">
24+
<i class="fa fa-sun" aria-hidden="true"></i>
25+
&nbsp;
26+
Light
27+
</button>
28+
</li>
29+
<li>
30+
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false">
31+
<i class="fa fa-moon" aria-hidden="true"></i>
32+
&nbsp;
33+
Dark
34+
</button>
35+
</li>
36+
<li>
37+
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="false">
38+
<i class="fa fa-laptop" aria-hidden="true"></i>
39+
&nbsp;
40+
Auto
41+
</button>
42+
</li>
43+
</ul>
44+
</div>
1545
</div>
1646
</div>
1747
</nav>

src/riskmatrix/layouts/navbar.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ def navbar(context: object, request: 'IRequest') -> 'RenderData':
6767
request,
6868
_('Risk Catalog'),
6969
request.route_url('risk_catalog'),
70-
lambda request, url: request.path_url.startswith(request.route_url('risk_catalog'))
70+
lambda request, url: request.path_url.startswith(
71+
request.route_url('risk_catalog')
72+
)
7173
),
7274
NavbarEntry(
7375
request,

src/riskmatrix/layouts/steps.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
from typing import NamedTuple
55
from typing import TYPE_CHECKING
66

7-
from riskmatrix.models.risk_assessment import RiskAssessment
8-
from riskmatrix.models.risk_assessment_info import RiskAssessmentInfo, RiskAssessmentState
97
if TYPE_CHECKING:
108
from pyramid.interfaces import IRequest
119

@@ -20,12 +18,6 @@ class Step(NamedTuple):
2018

2119

2220
def steps(context: 'Organization', request: 'IRequest') -> 'RenderData':
23-
assessments = request.dbsession.query(RiskAssessmentInfo).filter(
24-
RiskAssessmentInfo.organization_id == context.id,
25-
RiskAssessmentInfo.state == RiskAssessmentState.OPEN,
26-
).all()
27-
28-
t = request.dbsession.query(RiskAssessment).filter(RiskAssessment.risk_assessment_info_id.in_([a.id for a in assessments]), RiskAssessment.likelihood == None, RiskAssessment.impact == None).count()
2921
return {
3022
'steps': [
3123
Step(
@@ -49,7 +41,7 @@ def steps(context: 'Organization', request: 'IRequest') -> 'RenderData':
4941
'#',
5042
disabled=True
5143
),
52-
Step(_("Finish Assessment"), request.route_url('finish_assessment'), disabled=False),#t > 0 or len(assessments) == 0),
44+
Step(_("Finish Assessment"), request.route_url('finish_assessment'), disabled=False),
5345
]
5446
}
5547

src/riskmatrix/mail/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
'MailError',
1313
'MailState',
1414
'PostmarkMailer',
15-
)
15+
)

src/riskmatrix/mail/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ class MailConnectionError(MailError, ConnectionError):
77

88

99
class InactiveRecipient(MailError):
10-
pass
10+
pass

src/riskmatrix/mail/interfaces.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,4 @@ def delete_template(template: 'ITemplate') -> list[str]:
8888
Deletes a mailer template based on a certificate template.
8989
9090
Returns a list of errors. If the list is empty, it was successful.
91-
"""
91+
"""

src/riskmatrix/mail/mailer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,4 +622,4 @@ def delete_template(self, template: 'ITemplate') -> list[str]:
622622
'Transient': 0, # Needs to have lower priority than hard bounce
623623
'Bounced': MailState.failed, # This is a hard bounce
624624
'Opened': MailState.read,
625-
}
625+
}

src/riskmatrix/models/asset.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
from sqlalchemy_serializer import SerializerMixin
3030

31+
3132
class Asset(Base, SoftDeleteMixin, SerializerMixin):
3233

3334
__tablename__ = 'asset'

0 commit comments

Comments
 (0)