kinto 23.0.3__py3-none-any.whl → 23.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinto might be problematic. Click here for more details.
- kinto/core/cache/__init__.py +35 -0
- kinto/core/cache/memcached.py +2 -0
- kinto/core/cache/memory.py +6 -1
- kinto/core/cache/postgresql/__init__.py +3 -0
- kinto/core/initialization.py +11 -3
- kinto/plugins/admin/VERSION +1 -1
- kinto/plugins/admin/build/VERSION +1 -1
- kinto/plugins/admin/build/assets/{index-DnaKeFLX.css → index-B_zMxEpZ.css} +1 -1
- kinto/plugins/admin/build/assets/index-DBxDgrMX.js +154 -0
- kinto/plugins/admin/build/index.html +2 -2
- kinto/plugins/history/__init__.py +24 -0
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/METADATA +2 -1
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/RECORD +17 -17
- kinto/plugins/admin/build/assets/index-Dt2_17Gx.js +0 -145
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/WHEEL +0 -0
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/entry_points.txt +0 -0
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/licenses/LICENSE +0 -0
- {kinto-23.0.3.dist-info → kinto-23.1.0.dist-info}/top_level.txt +0 -0
kinto/core/cache/__init__.py
CHANGED
|
@@ -10,10 +10,15 @@ _HEARTBEAT_KEY = "__heartbeat__"
|
|
|
10
10
|
_HEARTBEAT_TTL_SECONDS = 3600
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
_CACHE_HIT_METRIC_KEY = "cache_hits"
|
|
14
|
+
_CACHE_MISS_METRIC_KEY = "cache_misses"
|
|
15
|
+
|
|
16
|
+
|
|
13
17
|
class CacheBase:
|
|
14
18
|
def __init__(self, *args, **kwargs):
|
|
15
19
|
self.prefix = kwargs["cache_prefix"]
|
|
16
20
|
self.max_size_bytes = kwargs.get("cache_max_size_bytes")
|
|
21
|
+
self.set_metrics_backend(kwargs.get("metrics_backend"))
|
|
17
22
|
|
|
18
23
|
def initialize_schema(self, dry_run=False):
|
|
19
24
|
"""Create every necessary objects (like tables or indices) in the
|
|
@@ -71,6 +76,36 @@ class CacheBase:
|
|
|
71
76
|
"""
|
|
72
77
|
raise NotImplementedError
|
|
73
78
|
|
|
79
|
+
def set_metrics_backend(self, metrics_backend):
|
|
80
|
+
"""Set a metrics backend via the `CacheMetricsBackend` adapter.
|
|
81
|
+
|
|
82
|
+
:param metrics_backend: A metrics backend implementing the IMetricsService interface.
|
|
83
|
+
"""
|
|
84
|
+
self.metrics_backend = CacheMetricsBackend(metrics_backend)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class CacheMetricsBackend:
|
|
88
|
+
"""
|
|
89
|
+
A simple adapter for tracking cache-related metrics.
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
def __init__(self, metrics_backend, *args, **kwargs):
|
|
93
|
+
"""Initialize with a given metrics backend.
|
|
94
|
+
|
|
95
|
+
:param metrics_backend: A metrics backend implementing the IMetricsService interface.
|
|
96
|
+
"""
|
|
97
|
+
self._backend = metrics_backend
|
|
98
|
+
|
|
99
|
+
def count_hit(self):
|
|
100
|
+
"""Increment the cache hit counter."""
|
|
101
|
+
if self._backend:
|
|
102
|
+
self._backend.count(key=_CACHE_HIT_METRIC_KEY)
|
|
103
|
+
|
|
104
|
+
def count_miss(self):
|
|
105
|
+
"""Increment the cache miss counter."""
|
|
106
|
+
if self._backend:
|
|
107
|
+
self._backend.count(key=_CACHE_MISS_METRIC_KEY)
|
|
108
|
+
|
|
74
109
|
|
|
75
110
|
def heartbeat(backend):
|
|
76
111
|
def ping(request):
|
kinto/core/cache/memcached.py
CHANGED
|
@@ -68,7 +68,9 @@ class Cache(CacheBase):
|
|
|
68
68
|
def _get(self, key):
|
|
69
69
|
value = self._client.get(self.prefix + key)
|
|
70
70
|
if not value:
|
|
71
|
+
self.metrics_backend.count_miss()
|
|
71
72
|
return None, 0
|
|
73
|
+
self.metrics_backend.count_hit()
|
|
72
74
|
data = json.loads(value)
|
|
73
75
|
return data["value"], data["ttl"]
|
|
74
76
|
|
kinto/core/cache/memory.py
CHANGED
|
@@ -73,7 +73,12 @@ class Cache(CacheBase):
|
|
|
73
73
|
@synchronized
|
|
74
74
|
def get(self, key):
|
|
75
75
|
self._clean_expired()
|
|
76
|
-
|
|
76
|
+
value = self._store.get(self.prefix + key)
|
|
77
|
+
if value is None:
|
|
78
|
+
self.metrics_backend.count_miss()
|
|
79
|
+
return None
|
|
80
|
+
self.metrics_backend.count_hit()
|
|
81
|
+
return value
|
|
77
82
|
|
|
78
83
|
@synchronized
|
|
79
84
|
def delete(self, key):
|
|
@@ -156,8 +156,11 @@ class Cache(CacheBase):
|
|
|
156
156
|
conn.execute(sa.text(purge))
|
|
157
157
|
result = conn.execute(sa.text(query), dict(key=self.prefix + key))
|
|
158
158
|
if result.rowcount > 0:
|
|
159
|
+
self.metrics_backend.count_hit()
|
|
159
160
|
value = result.fetchone().value
|
|
160
161
|
return json.loads(value)
|
|
162
|
+
self.metrics_backend.count_miss()
|
|
163
|
+
return None
|
|
161
164
|
|
|
162
165
|
def delete(self, key):
|
|
163
166
|
query = "DELETE FROM cache WHERE key = :key RETURNING value;"
|
kinto/core/initialization.py
CHANGED
|
@@ -228,7 +228,9 @@ def _end_of_life_tween_factory(handler, registry):
|
|
|
228
228
|
else:
|
|
229
229
|
code = "hard-eol"
|
|
230
230
|
request.response = errors.http_error(
|
|
231
|
-
HTTPGone(),
|
|
231
|
+
HTTPGone(),
|
|
232
|
+
errno=errors.ERRORS.SERVICE_DEPRECATED,
|
|
233
|
+
message=deprecation_msg,
|
|
232
234
|
)
|
|
233
235
|
|
|
234
236
|
errors.send_alert(request, eos_message, url=eos_url, code=code)
|
|
@@ -459,6 +461,11 @@ def setup_metrics(config):
|
|
|
459
461
|
else:
|
|
460
462
|
metrics.watch_execution_time(metrics_service, policy, prefix="authentication")
|
|
461
463
|
|
|
464
|
+
# Set cache metrics backend
|
|
465
|
+
cache_backend = config.registry.cache
|
|
466
|
+
if isinstance(cache_backend, cache.CacheBase):
|
|
467
|
+
cache_backend.set_metrics_backend(metrics_service)
|
|
468
|
+
|
|
462
469
|
config.add_subscriber(on_app_created, ApplicationCreated)
|
|
463
470
|
|
|
464
471
|
def on_new_response(event):
|
|
@@ -468,8 +475,9 @@ def setup_metrics(config):
|
|
|
468
475
|
# Count unique users.
|
|
469
476
|
user_id = request.prefixed_userid
|
|
470
477
|
if user_id:
|
|
471
|
-
|
|
472
|
-
|
|
478
|
+
auth, user_id = user_id.split(":", 1)
|
|
479
|
+
# Get rid of colons in metric packet (see #1282 and #3571).
|
|
480
|
+
user_id = user_id.replace(":", ".")
|
|
473
481
|
metrics_service.count("users", unique=[("auth", auth), ("userid", user_id)])
|
|
474
482
|
|
|
475
483
|
status = event.response.status_code
|
kinto/plugins/admin/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.0
|
|
1
|
+
4.3.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
4.0
|
|
1
|
+
4.3.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
html,body{background:#fafbfc}h1{font-family:Ubuntu,Calibri,Arial,sans-serif;font-size:2.2em}.icon{vertical-align:-.125em;margin-bottom:-.0625em}.iconLarge{width:50px;height:50px;color:#000;display:block}.main{padding-top:2.8em}.sidebar{padding-top:1em}.sidebar .card{margin-bottom:20px}.card.panel-info .card-header{background-color:#cce5ff;border-color:#b8daff}.card-header span{margin-right:1em;max-width:26em;display:inline-block;height:1.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-header span label{font-weight:700}.card>.card-body{position:relative}.sidebar-filters>.card-body{padding:15px 15px 0}.sidebar-filters a.clear{color:#777}.list-group-item .glyphicon.glyphicon-lock{color:#888}.content .list-actions{margin-bottom:.4em}.content .list-actions a{margin-right:.5em}.content .list-actions a>.glyphicon{margin-right:.3em}.content .edit-coll-props .btn{margin-right:0;margin-left:.3em}.kinto-admin-title{display:inline-block;font-size:2em;margin-top:0;margin-bottom:0;padding-left:100px;background:transparent url(/v1/admin/assets/logo-VBRiKSPX.png) no-repeat left;background-size:contain}.user-info{float:right;padding-top:.3em;font-size:14px}.user-info a.spaced{margin-left:1em}.server-url input:invalid,.server-url input:focus:invalid{box-shadow:0 0 5px 1px red}.session-info-bar{position:fixed;top:0;left:0;right:0;background:#24292e;color:#fff;padding:.2em 1.15em;z-index:999}.session-info-bar>a{margin-left:.5em}.server-info-panel table{margin:0}.server-info-panel .table-condensed>tbody>tr>th,.server-info-panel .table-condensed>tbody>tr>td{padding:.3em;overflow:hidden;text-overflow:ellipsis;max-width:300px}.server-info-panel tr:first-child th,.server-info-panel tr:first-child td{border:none}.alert h4 small{margin-left:.5em}.list-page .alert{margin-top:1.5em;margin-right:.5em}.tabs-container .panel-default{border-top:none}.tabs-container .panel-danger{margin-top:2em}table.record-list{margin-top:1em}table.record-list th{background:#00000014}table.record-list tbody.loading td{background:#dcdcdc26;color:#777}table.record-list td:not(.actions){max-width:8vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:.8em .5em}table.record-list td.lastmod{white-space:nowrap;width:120px}table.record-list td.status{white-space:nowrap;width:80px}table.record-list td.actions{min-width:150px;width:150px;padding:.5em 0;white-space:nowrap;text-align:center}table.record-list td.actions .btn-group{margin:0 .5em}table.record-list>tbody+tbody{border-top:none}.load-more>a{display:block;width:100%}table.record-list td.load-more{padding:0;line-height:2.5em}.load-more>a:hover,.load-more>a:active{background:#d9edf7;text-decoration:none}.card-body>.spinner{position:absolute;inset:0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.load-more .spinner{margin-top:.25em}.history-row-details{display:table-row}.table>tbody>tr.history-row-details>td{padding:0;margin:0}.history-row-details td pre{border:none;margin:0}.history-row-details .alert{margin:0;border-radius:0}.sort-link{float:right;margin-top:.1em;color:#444}.sort-link.active{color:#fff}.json-record>div{padding:1px 0 1px 4px}.json-record>div.added{background:#cbeecb;color:green}.json-record>div.removed{background:#f0c9c9;color:red}.json-record-simple-review{white-space:pre-wrap}.card-header>.icon,.list-group-item .icon,.nav-tabs li .icon{margin-right:.5em}.nav-tabs.nav-justified>li>a{color:#333}.collections-menu-entry{display:flex}.collections-menu-entry a:first-child{display:inline-block;width:95%;color:#555;text-decoration:none}.collections-menu-entry.active>a{color:#fff}.home-menu i,.home-menu .icon{float:right;margin:.15em -.5em 0 0}.bucket-menu-entry-edit{float:right;color:#555;text-decoration:none}.bucket-menu-entry-edit:hover{color:inherit}.collections-menu-entry-edit{position:absolute;margin-right:-.5em;color:#888}.collections-menu-entry-edit:hover{color:inherit}.CodeMirror{border:1px solid #ccc;height:auto;border-radius:.3em}.attachment-icon{width:16px}.attachment-action{margin:0;padding:0}.attachment-info .attachment-attributes{display:flex;align-content:stretch;align-items:end}.attachment-info table{margin-bottom:0;flex-grow:1;display:block}.attachment-info .table-condensed>tbody>tr>td{overflow:hidden;text-overflow:ellipsis}.attachment-img{display:flex;align-items:center;justify-content:center;max-width:150px;max-height:150px;text-align:center;background:#fff;border:1px solid #ddd;margin:10px}.attachment-img img{max-width:100%;max-height:100%}form button[type=submit].btn-primary{font-size:1.2em;padding:12px;box-shadow:inset 0 0 0 1px #fff}.record-form-buttons .delete{margin-top:12px}.permissions-form .array-item:not(:last-child) fieldset{border-bottom:1px solid #eee}.permissions-form .field-principal{float:left;width:60%;padding-right:1em}.permissions-form .field-permissions{float:left;width:30%;padding-left:1em}.permissions-form .field-anonymous,.permissions-form .field-authenticated{width:100%;float:left;clear:both}.permissions-form .field-anonymous{border-bottom:1px solid #eee}.permissions-form .field-anonymous p,.permissions-form .field-authenticated p{width:50%}.permissions-form .field-anonymous .checkboxes,.permissions-form .field-authenticated .checkboxes{float:right;width:50%;padding-left:1em;margin-top:-60px}.permissions-form .field-groups fieldset{clear:left}.permissions-form .field-groups .checkboxes{float:right;width:50%;padding-left:1em;margin-top:-60px}.permissions-form .field-groups fieldset>.field.field-array{clear:right}.permissions-form .field-principals .checkboxes{margin-top:-35px}.permissions-form .field-principal>label{display:none}.quickFilter{margin-bottom:-.5em}.spinner{margin:30px auto 0;width:70px;text-align:center}.spinner>div{width:18px;height:18px;background-color:#337ab7;border-radius:100%;display:inline-block;-webkit-animation:sk-bouncedelay 1.4s infinite ease-in-out both;animation:sk-bouncedelay 1.4s infinite ease-in-out both}.spinner .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.spinner .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.notifications>div{top:3em}i.fa{position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;line-height:1}i.fa:before{display:inline-block;content:"";background-repeat:no-repeat;background-size:24px 24px;width:24px;height:24px}.fa.fa-check:before{background-image:url(~bootstrap-icons/icons/check.svg)}.fa-exclamation-circle:before{background-image:url(~bootstrap-icons/icons/exclamation-circle-fill.svg)}.fa-info:before{background-image:url(~bootstrap-icons/icons/info-circle-fill.svg)}.fa-warning:before{background-image:url(~bootstrap-icons/icons/exclamation-triangle-fill.svg)}.rjsf{margin-bottom:1.25rem}.rjsf pre{padding:9.5px;margin:0 0 10px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.rjsf input[type=radio],.rjsf input[type=checkbox]{margin-right:10px}.rjsf .form-label{font-weight:700}.rjsf h5{font-size:18pt;margin:0 0 0 1pt}.rjsf hr{margin:1px 0 .5em;background-color:#ccc!important}.rjsf .row .align-items-center{align-items:flex-start!important;border-bottom:1px solid #eee}.rjsf .align-items-center button.btn{font-size:14pt}.rjsf .input-group-append button.dropdown-toggle{font-size:12pt}.rjsf .b64-thumb{display:block;max-width:250px;max-height:250px;min-width:50px;min-height:50px}.formWrapper{position:relative}.formWrapper>.spinner{position:absolute;inset:-1.5em -1.25em -2.5em;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.interactive>.spinner{position:absolute;inset:-.5em -1.25em 0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.modal{background-color:#0000004d}.modal-dialog>.spinner{position:absolute;inset:0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.informative{filter:grayscale(.8)}.interactive{position:relative}.bs-wizard{margin-top:40px}.progress-steps .row.bs-wizard{border-bottom:0}.bs-wizard{border-bottom:solid 1px #e0e0e0;padding:0 0 10px}.bs-wizard>.bs-wizard-step{padding:0;position:relative}.bs-wizard>.bs-wizard-step .bs-wizard-stepnum{color:#595959;font-size:16px;margin-bottom:5px}.bs-wizard>.bs-wizard-step .bs-wizard-info{color:#999;font-size:14px}.bs-wizard>.bs-wizard-step>.bs-wizard-dot{position:absolute;width:30px;height:30px;display:block;background:#fbe8aa;top:45px;left:50%;margin-top:-15px;margin-left:-15px;border-radius:50%}.bs-wizard>.bs-wizard-step>.bs-wizard-dot:after{content:" ";width:14px;height:14px;background:#fbbd19;border-radius:50px;position:absolute;top:8px;left:8px}.bs-wizard>.bs-wizard-step>.progress{position:relative;border-radius:0;height:8px;box-shadow:none;margin:20px 0}.bs-wizard>.bs-wizard-step>.progress>.progress-bar{width:0px;box-shadow:none;background:#fbe8aa}.bs-wizard>.bs-wizard-step.complete>.progress>.progress-bar{width:100%}.bs-wizard>.bs-wizard-step.active>.progress>.progress-bar{width:50%}.bs-wizard>.bs-wizard-step:first-child.active>.progress>.progress-bar{width:0%}.bs-wizard>.bs-wizard-step:last-child.active>.progress>.progress-bar{width:100%}.bs-wizard>.bs-wizard-step.disabled>.bs-wizard-dot{background-color:#f5f5f5}.bs-wizard>.bs-wizard-step.disabled>.bs-wizard-dot:after{opacity:0}.bs-wizard>.bs-wizard-step:first-child>.progress{left:50%;width:50%}.bs-wizard>.bs-wizard-step:last-child>.progress{width:50%}.bs-wizard>.bs-wizard-step.disabled a.bs-wizard-dot{pointer-events:none}.bs-wizard>.bs-wizard-step .bs-wizard-info li{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:250px;text-align:left}.diffstats{font-weight:600}.diffstats .text-green{color:#55a532}.diffstats .text-red{color:#bd2c00;padding-left:4px;padding-right:4px}.signoff-comment{display:block;overflow:auto;max-height:4em;white-space:pre-line}.rollback-changes{position:absolute;top:152px;right:30px}.breadcrumbs{padding-top:.5em;font-size:1.2em;text-transform:lowercase}/*!
|
|
1
|
+
html,body{background:#fafbfc}h1{font-family:Ubuntu,Calibri,Arial,sans-serif;font-size:2.2em}.icon{vertical-align:-.125em;margin-bottom:-.0625em}.iconLarge{width:50px;height:50px;color:#000;display:block}.main{padding-top:2.8em}.sidebar{padding-top:1em}.sidebar .card{margin-bottom:20px}.btn.toggle-sidebar{padding-left:0;padding-top:0;padding-right:.2rem;vertical-align:unset;font-size:1.4em}.btn.toggle-sidebar:focus{box-shadow:none}nav.breadcrumbs{display:inline-block}.card.panel-info .card-header{background-color:#cce5ff;border-color:#b8daff}.card-header span{margin-right:1em;max-width:26em;display:inline-block;height:1.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-header span label{font-weight:700}.card>.card-body{position:relative}.sidebar-filters>.card-body{padding:15px 15px 0}.sidebar-filters a.clear{color:#777}.list-group-item .glyphicon.glyphicon-lock{color:#888}.content .list-actions{margin-bottom:.4em}.content .list-actions a{margin-right:.5em}.content .list-actions a>.glyphicon{margin-right:.3em}.content .edit-coll-props .btn{margin-right:0;margin-left:.3em}.kinto-admin-title{margin:0;font-size:2em;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;background:transparent url(/v1/admin/assets/logo-VBRiKSPX.png) no-repeat left center;background-size:contain;padding-left:3.5em;min-width:0}.user-info{display:flex;align-items:center;gap:.5em;flex:0 1 auto;overflow:hidden;min-width:0;font-size:14px}.user-info>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}.user-info a{flex-shrink:0}.server-url input:invalid,.server-url input:focus:invalid{box-shadow:0 0 5px 1px red}.info-actions{display:flex;align-items:center;gap:.5em;flex-shrink:0}.top-info-bar{position:fixed;top:0;left:0;right:0;background:#24292e;color:#fff;padding:.2em 1.15em;z-index:999;display:flex;align-items:center;gap:1em;white-space:nowrap;overflow:hidden}.server-info-panel table{margin:0}.server-info-panel .table-condensed>tbody>tr>th,.server-info-panel .table-condensed>tbody>tr>td{padding:.3em;overflow:hidden;text-overflow:ellipsis;max-width:300px}.server-info-panel tr:first-child th,.server-info-panel tr:first-child td{border:none}.alert h4 small{margin-left:.5em}.list-page .alert{margin-top:1.5em;margin-right:.5em}.tabs-container .panel-default{border-top:none}.tabs-container .panel-danger{margin-top:2em}.table-wrapper{overflow-x:auto;width:100%}table.record-list{margin-top:1em;border-collapse:collapse;table-layout:auto;width:max-content;min-width:100%}table.record-list th{background:#00000014;position:sticky;top:0;z-index:2;white-space:nowrap;padding:.8em .5em}table.record-list tbody.loading td{background:#dcdcdc26;color:#777}table.record-list th,table.record-list td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:.8em .5em;max-width:300px}table.record-list td.lastmod{width:120px;max-width:120px}table.record-list td.actions{min-width:110px;width:110px;padding:.5em 0;text-align:center;overflow:visible}table.record-list td.actions .btn-group{margin:0 .5em}table.record-list>tbody+tbody{border-top:none}.load-more>a{display:block;width:100%}table.record-list td.load-more{padding:0;line-height:2.5em}.load-more>a:hover,.load-more>a:active{background:#d9edf7;text-decoration:none}.card-body>.spinner{position:absolute;inset:0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.load-more .spinner{margin-top:.25em}.history-row-details{display:table-row}.table>tbody>tr.history-row-details>td{padding:0;margin:0}.history-row-details td pre{border:none;margin:0}.history-row-details .alert{margin:0;border-radius:0}.sort-link{margin-top:.1em;margin-left:.5em;color:#444}.sort-link.active{color:#fff}.json-record>div{padding:1px 0 1px 4px}.json-record>div.added{background:#cbeecb;color:green}.json-record>div.removed{background:#f0c9c9;color:red}.json-record-simple-review{white-space:pre-wrap}.card-header>.icon,.list-group-item .icon,.nav-tabs li .icon{margin-right:.5em}.nav-tabs.nav-justified>li>a{color:#333}.collections-menu-entry{display:flex}.collections-menu-entry a:first-child{display:inline-block;width:95%;color:#555;text-decoration:none}.collections-menu-entry.active>a{color:#fff}.home-menu i,.home-menu .icon{float:right;margin:.15em -.5em 0 0}.bucket-menu-entry-edit{float:right;color:#555;text-decoration:none}.bucket-menu-entry-edit:hover{color:inherit}.collections-menu-entry-edit{position:absolute;margin-right:-.5em;color:#888}.collections-menu-entry-edit:hover{color:inherit}.CodeMirror{border:1px solid #ccc;height:auto;border-radius:.3em}.attachment-icon{width:16px}.attachment-action{margin:0;padding:0}.attachment-info .attachment-attributes{display:flex;align-content:stretch;align-items:end}.attachment-info table{margin-bottom:0;flex-grow:1;display:block}.attachment-info .table-condensed>tbody>tr>td{overflow:hidden;text-overflow:ellipsis}.attachment-img{display:flex;align-items:center;justify-content:center;max-width:150px;max-height:150px;text-align:center;background:#fff;border:1px solid #ddd;margin:10px}.attachment-img img{max-width:100%;max-height:100%}form button[type=submit].btn-primary{font-size:1.2em;padding:12px;box-shadow:inset 0 0 0 1px #fff}.record-form-buttons .delete{margin-top:12px}.permissions-form .array-item:not(:last-child) fieldset{border-bottom:1px solid #eee}.permissions-form .field-principal{float:left;width:60%;padding-right:1em}.permissions-form .field-permissions{float:left;width:30%;padding-left:1em}.permissions-form .field-anonymous,.permissions-form .field-authenticated{width:100%;float:left;clear:both}.permissions-form .field-anonymous{border-bottom:1px solid #eee}.permissions-form .field-anonymous p,.permissions-form .field-authenticated p{width:50%}.permissions-form .field-anonymous .checkboxes,.permissions-form .field-authenticated .checkboxes{float:right;width:50%;padding-left:1em;margin-top:-60px}.permissions-form .form-group.field-groups .container-fluid{min-height:150px;height:50vh;max-height:max-content;overflow-y:scroll;overflow-x:hidden}.permissions-form .field-groups fieldset{clear:left}.permissions-form .field-groups .checkboxes{float:right;width:50%;padding-left:1em;margin-top:-60px}.permissions-form .field-groups fieldset>.field.field-array{clear:right}.permissions-form .field-principals .checkboxes{margin-top:-35px}.permissions-form .field-principal>label{display:none}.quickFilter{margin-bottom:-.5em}.spinner{margin:30px auto 0;width:70px;text-align:center}.spinner>div{width:18px;height:18px;background-color:#337ab7;border-radius:100%;display:inline-block;-webkit-animation:sk-bouncedelay 1.4s infinite ease-in-out both;animation:sk-bouncedelay 1.4s infinite ease-in-out both}.spinner .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.spinner .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes sk-bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.notifications>div{top:3em}i.fa{position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;line-height:1}i.fa:before{display:inline-block;content:"";background-repeat:no-repeat;background-size:24px 24px;width:24px;height:24px}.fa.fa-check:before{background-image:url(~bootstrap-icons/icons/check.svg)}.fa-exclamation-circle:before{background-image:url(~bootstrap-icons/icons/exclamation-circle-fill.svg)}.fa-info:before{background-image:url(~bootstrap-icons/icons/info-circle-fill.svg)}.fa-warning:before{background-image:url(~bootstrap-icons/icons/exclamation-triangle-fill.svg)}.rjsf{margin-bottom:1.25rem}.rjsf pre{padding:9.5px;margin:0 0 10px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.rjsf input[type=radio],.rjsf input[type=checkbox]{margin-right:10px}.rjsf .form-label{font-weight:700}.rjsf h5{font-size:18pt;margin:0 0 0 1pt}.rjsf hr{margin:1px 0 .5em;background-color:#ccc!important}.rjsf .row .align-items-center{align-items:flex-start!important;border-bottom:1px solid #eee}.rjsf .align-items-center button.btn{font-size:14pt}.rjsf .input-group-append button.dropdown-toggle{font-size:12pt}.rjsf .b64-thumb{display:block;max-width:250px;max-height:250px;min-width:50px;min-height:50px}.formWrapper{position:relative}.formWrapper>.spinner{position:absolute;inset:-1.5em -1.25em -2.5em;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.interactive>.spinner{position:absolute;inset:-.5em -1.25em 0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.modal{background-color:#0000004d}.modal-dialog>.spinner{position:absolute;inset:0;background-color:#0003;z-index:1;display:flex;justify-content:center;align-items:center;width:auto;margin:0;border-radius:3px}.informative{filter:grayscale(.8)}.interactive{position:relative}.bs-wizard{margin-top:40px}.progress-steps .row.bs-wizard{border-bottom:0}.bs-wizard{border-bottom:solid 1px #e0e0e0;padding:0 0 10px}.bs-wizard>.bs-wizard-step{padding:0;position:relative}.bs-wizard>.bs-wizard-step .bs-wizard-stepnum{color:#595959;font-size:16px;margin-bottom:5px}.bs-wizard>.bs-wizard-step .bs-wizard-info{color:#999;font-size:14px}.bs-wizard>.bs-wizard-step>.bs-wizard-dot{position:absolute;width:30px;height:30px;display:block;background:#fbe8aa;top:45px;left:50%;margin-top:-15px;margin-left:-15px;border-radius:50%}.bs-wizard>.bs-wizard-step>.bs-wizard-dot:after{content:" ";width:14px;height:14px;background:#fbbd19;border-radius:50px;position:absolute;top:8px;left:8px}.bs-wizard>.bs-wizard-step>.progress{position:relative;border-radius:0;height:8px;box-shadow:none;margin:20px 0}.bs-wizard>.bs-wizard-step>.progress>.progress-bar{width:0px;box-shadow:none;background:#fbe8aa}.bs-wizard>.bs-wizard-step.complete>.progress>.progress-bar{width:100%}.bs-wizard>.bs-wizard-step.active>.progress>.progress-bar{width:50%}.bs-wizard>.bs-wizard-step:first-child.active>.progress>.progress-bar{width:0%}.bs-wizard>.bs-wizard-step:last-child.active>.progress>.progress-bar{width:100%}.bs-wizard>.bs-wizard-step.disabled>.bs-wizard-dot{background-color:#f5f5f5}.bs-wizard>.bs-wizard-step.disabled>.bs-wizard-dot:after{opacity:0}.bs-wizard>.bs-wizard-step:first-child>.progress{left:50%;width:50%}.bs-wizard>.bs-wizard-step:last-child>.progress{width:50%}.bs-wizard>.bs-wizard-step.disabled a.bs-wizard-dot{pointer-events:none}.bs-wizard>.bs-wizard-step .bs-wizard-info li{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:250px;text-align:left}.diffstats{font-weight:600}.diffstats .text-green{color:#55a532}.diffstats .text-red{color:#bd2c00;padding-left:4px;padding-right:4px}.signoff-comment{display:block;overflow:auto;max-height:4em;white-space:pre-line}.rollback-changes{position:absolute;top:152px;right:30px}.breadcrumbs{padding-top:.5em;font-size:1.2em;text-transform:lowercase}/*!
|
|
2
2
|
* Bootstrap v4.6.2 (https://getbootstrap.com/)
|
|
3
3
|
* Copyright 2011-2022 The Bootstrap Authors
|
|
4
4
|
* Copyright 2011-2022 Twitter, Inc.
|