syntaxmatrix-core 1.0.5__tar.gz → 1.0.7__tar.gz

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.
Files changed (101) hide show
  1. {syntaxmatrix_core-1.0.5/syntaxmatrix_core.egg-info → syntaxmatrix_core-1.0.7}/PKG-INFO +1 -1
  2. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/setup.py +1 -1
  3. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/core.py +3 -9
  4. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/routes.py +2 -12
  5. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/prompts.py +0 -1
  6. syntaxmatrix_core-1.0.7/syntaxmatrix/static/icons/bot_icon.png +0 -0
  7. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7/syntaxmatrix_core.egg-info}/PKG-INFO +1 -1
  8. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix_core.egg-info/SOURCES.txt +1 -2
  9. syntaxmatrix_core-1.0.5/syntaxmatrix/premium/__init__.py +0 -10
  10. syntaxmatrix_core-1.0.5/syntaxmatrix/premium/gate.py +0 -107
  11. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/MANIFEST.in +0 -0
  12. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/README.md +0 -0
  13. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/pyproject.toml +0 -0
  14. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/setup.cfg +0 -0
  15. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/Rroutes.py +0 -0
  16. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/__init__.py +0 -0
  17. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/__init__.py +0 -0
  18. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/agent_tools.py +0 -0
  19. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/agents.py +0 -0
  20. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/agents_orchestrer.py +0 -0
  21. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/code_tools_registry.py +0 -0
  22. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/agentic/model_templates.py +0 -0
  23. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/auth.py +0 -0
  24. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/bootstrap.py +0 -0
  25. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/client_docs.py +0 -0
  26. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/commentary.py +0 -0
  27. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/dataset_preprocessing.py +0 -0
  28. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/db.py +0 -0
  29. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/db_backends/__init__.py +0 -0
  30. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/db_backends/postgres_backend.py +0 -0
  31. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/db_backends/sqlite_backend.py +0 -0
  32. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/db_contract.py +0 -0
  33. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/display_html.py +0 -0
  34. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/emailer.py +0 -0
  35. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/file_processor.py +0 -0
  36. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/gpt_models_latest.py +0 -0
  37. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/history_store.py +0 -0
  38. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/kernel_manager.py +0 -0
  39. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/llm_store.py +0 -0
  40. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/media/__init__.py +0 -0
  41. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/media/media_pixabay.py +0 -0
  42. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/models.py +0 -0
  43. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/page_builder_defaults.py +0 -0
  44. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/page_builder_generation.py +0 -0
  45. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/page_layout_contract.py +0 -0
  46. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/page_patch_publish.py +0 -0
  47. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/plottings.py +0 -0
  48. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/plugin_manager.py +0 -0
  49. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/preface.py +0 -0
  50. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/profiles.py +0 -0
  51. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/project_root.py +0 -0
  52. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/selftest_page_templates.py +0 -0
  53. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/session.py +0 -0
  54. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/__init__.py +0 -0
  55. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/client_items.py +0 -0
  56. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/logging.py +0 -0
  57. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/model_map.py +0 -0
  58. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/settings/string_navbar.py +0 -0
  59. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/smiv.py +0 -0
  60. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/smpv.py +0 -0
  61. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/assets/hero-default.svg +0 -0
  62. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/css/style.css +0 -0
  63. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/docs.md +0 -0
  64. /syntaxmatrix_core-1.0.5/syntaxmatrix/static/icons/bot_icon.png → /syntaxmatrix_core-1.0.7/syntaxmatrix/static/icons/bot_icon2.png +0 -0
  65. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/icons/favicon.png +0 -0
  66. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/icons/logo.png +0 -0
  67. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/icons/logo2.png +0 -0
  68. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/icons/svg_497526.svg +0 -0
  69. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/icons/svg_497528.svg +0 -0
  70. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/js/chat.js +0 -0
  71. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/js/sidebar.js +0 -0
  72. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/static/js/widgets.js +0 -0
  73. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/admin_billing.html +0 -0
  74. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/admin_branding.html +0 -0
  75. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/admin_features.html +0 -0
  76. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/admin_secretes.html +0 -0
  77. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/change_password.html +0 -0
  78. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/code_cell.html +0 -0
  79. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/dashboard.html +0 -0
  80. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/dataset_resize.html +0 -0
  81. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/docs.html +0 -0
  82. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/edit_page.html +0 -0
  83. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/error.html +0 -0
  84. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/login.html +0 -0
  85. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/templates/register.html +0 -0
  86. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/themes.py +0 -0
  87. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/ui_modes.py +0 -0
  88. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/utils.py +0 -0
  89. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vector_db.py +0 -0
  90. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/__init__.py +0 -0
  91. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/adapters/__init__.py +0 -0
  92. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/adapters/milvus_adapter.py +0 -0
  93. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/adapters/pgvector_adapter.py +0 -0
  94. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/adapters/sqlite_adapter.py +0 -0
  95. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/base.py +0 -0
  96. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectordb/registry.py +0 -0
  97. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/vectorizer.py +0 -0
  98. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix/workspace_db.py +0 -0
  99. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix_core.egg-info/dependency_links.txt +0 -0
  100. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix_core.egg-info/requires.txt +0 -0
  101. {syntaxmatrix_core-1.0.5 → syntaxmatrix_core-1.0.7}/syntaxmatrix_core.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: syntaxmatrix-core
3
- Version: 1.0.5
3
+ Version: 1.0.7
4
4
  Summary: SyntaxMatrix: A Framework for building owned AI Platform.
5
5
  Author: Bob Nti
6
6
  Author-email: info@syntaxmatrix.net
@@ -8,7 +8,7 @@ with open(os.path.join(this_directory, "README.md"), encoding="utf-8") as f:
8
8
 
9
9
  setup(
10
10
  name="syntaxmatrix-core",
11
- version="1.0.5",
11
+ version="1.0.7",
12
12
  license="MIT",
13
13
  classifiers=[
14
14
  "Operating System :: OS Independent",
@@ -34,7 +34,6 @@ from syntaxmatrix.settings.prompts import(
34
34
  )
35
35
  from syntaxmatrix.settings.client_items import read_client_file, getenv_api_key
36
36
 
37
- from .premium import FeatureGate
38
37
  from .plugin_manager import PluginManager
39
38
  from pathlib import Path
40
39
 
@@ -64,9 +63,9 @@ class SyntaxMUI:
64
63
  user_icon="👩🏿‍🦲",
65
64
  bot_icon="<img src='/static/icons/bot_icon.png' width=20' alt='bot'/>",
66
65
  favicon="/static/icons/favicon.png",
67
- site_logo="<img src='/static/icons/logo.png' width='25' alt='logo'/>",
66
+ site_logo="<img src='/static/icons/logo.png' width='45' alt='logo'/>",
68
67
  site_title="SyntaxMatrix",
69
- project_name="smxAI",
68
+ project_name="smx-Asteria",
70
69
  theme_name="light",
71
70
  ui_mode = "default"
72
71
  ):
@@ -147,12 +146,7 @@ class SyntaxMUI:
147
146
  self.is_streaming = False
148
147
  self.stream_args = {}
149
148
  self._apply_feature_flags_from_db()
150
- # Premium (entitlements + plugins). Safe no-op unless configured.
151
- try:
152
- self.feature_gate = FeatureGate(client_dir=_CLIENT_DIR, db=db)
153
- except Exception:
154
- self.feature_gate = FeatureGate(client_dir=_CLIENT_DIR)
155
-
149
+
156
150
  try:
157
151
  self.plugins = PluginManager(self, gate=self.feature_gate, db=db)
158
152
  self.plugins.load_all()
@@ -3930,6 +3930,7 @@ def setup_routes(smx):
3930
3930
  plottings_html = smx.get_plottings()
3931
3931
  return {"system_output_html": plottings_html, "widgets_html": widgets_html}
3932
3932
 
3933
+
3933
3934
  @smx.app.route("/admin", methods=["GET", "POST"])
3934
3935
  # @superadmin_required
3935
3936
  @admin_required
@@ -5588,16 +5589,6 @@ def setup_routes(smx):
5588
5589
  </div>
5589
5590
  </div>
5590
5591
  """
5591
-
5592
- billing_link_card = f"""
5593
- <div class="card span-2 col">
5594
- <h4>Billing & plan</h4>
5595
- <div style="font-size:.72rem;color:#555;margin-top:-6px;margin-bottom:10px;line-height:1.35;">
5596
- Trial status and licence activation (Free, Pro, Enterprise).
5597
- </div>
5598
- <a href="{url_for('admin_billing')}" class="btn">Manage billing</a>
5599
- </div>
5600
- """
5601
5592
  reserved_card = f"""
5602
5593
  <div class="card span-2">
5603
5594
  <h4>Reserved</h4>
@@ -5621,8 +5612,7 @@ def setup_routes(smx):
5621
5612
  <section id="system" class="section">
5622
5613
  <h2>System</h2>
5623
5614
  <div class="admin-grid">
5624
- {branding_link_card}
5625
- {billing_link_card}
5615
+ {branding_link_card}
5626
5616
  {sys_files_card}
5627
5617
  {manage_sys_files_card}
5628
5618
  </div>
@@ -271,7 +271,6 @@ It combines a web UI, role controls, a document ingestion pipeline for RAG, a Ch
271
271
  ## 13) Team (public-facing, truthful)
272
272
 
273
273
  - **Bobga Nti — Founder / AI Engineer**
274
- - **Yvonne Motuba — Company Secretary**
275
274
 
276
275
  ---
277
276
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: syntaxmatrix-core
3
- Version: 1.0.5
3
+ Version: 1.0.7
4
4
  Summary: SyntaxMatrix: A Framework for building owned AI Platform.
5
5
  Author: Bob Nti
6
6
  Author-email: info@syntaxmatrix.net
@@ -51,8 +51,6 @@ syntaxmatrix/db_backends/postgres_backend.py
51
51
  syntaxmatrix/db_backends/sqlite_backend.py
52
52
  syntaxmatrix/media/__init__.py
53
53
  syntaxmatrix/media/media_pixabay.py
54
- syntaxmatrix/premium/__init__.py
55
- syntaxmatrix/premium/gate.py
56
54
  syntaxmatrix/settings/__init__.py
57
55
  syntaxmatrix/settings/client_items.py
58
56
  syntaxmatrix/settings/logging.py
@@ -63,6 +61,7 @@ syntaxmatrix/static/docs.md
63
61
  syntaxmatrix/static/assets/hero-default.svg
64
62
  syntaxmatrix/static/css/style.css
65
63
  syntaxmatrix/static/icons/bot_icon.png
64
+ syntaxmatrix/static/icons/bot_icon2.png
66
65
  syntaxmatrix/static/icons/favicon.png
67
66
  syntaxmatrix/static/icons/logo.png
68
67
  syntaxmatrix/static/icons/logo2.png
@@ -1,10 +0,0 @@
1
- """Premium support.
2
-
3
- This package contains runtime plumbing for premium features (entitlements +
4
- plugin loading). The actual premium implementations should live in separate,
5
- private distributions.
6
- """
7
-
8
- from .gate import FeatureGate
9
-
10
- __all__ = ["FeatureGate"]
@@ -1,107 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import json
4
- import os
5
- from dataclasses import dataclass
6
- from typing import Any, Dict, Optional
7
-
8
-
9
- def _safe_json_loads(raw: str, *, default: Any) -> Any:
10
- try:
11
- return json.loads(raw)
12
- except Exception:
13
- return default
14
-
15
-
16
- @dataclass
17
- class GateSources:
18
- """Where the gate reads entitlements from.
19
-
20
- Precedence (highest first):
21
- 1) env_json
22
- 2) db_setting_key
23
- 3) licence_file
24
- """
25
-
26
- env_json: str = "SMX_PREMIUM_ENTITLEMENTS"
27
- db_setting_key: str = "premium.entitlements"
28
- licence_file_relpath: str = os.path.join("premium", "licence.json")
29
-
30
-
31
- class FeatureGate:
32
- """Runtime entitlement checks for premium features.
33
-
34
- This is intentionally small, dependency-free, and safe:
35
- - If anything fails, it returns 'not entitled' rather than crashing the app.
36
- """
37
-
38
- def __init__(
39
- self,
40
- *,
41
- client_dir: str,
42
- db: Optional[object] = None,
43
- sources: Optional[GateSources] = None,
44
- ):
45
- self._client_dir = client_dir
46
- self._db = db
47
- self._sources = sources or GateSources()
48
- self._cache: Optional[Dict[str, Any]] = None
49
-
50
- def _load_from_env(self) -> Optional[Dict[str, Any]]:
51
- raw = os.environ.get(self._sources.env_json)
52
- if not raw:
53
- return None
54
- data = _safe_json_loads(raw, default=None)
55
- return data if isinstance(data, dict) else None
56
-
57
- def _load_from_db(self) -> Optional[Dict[str, Any]]:
58
- if not self._db:
59
- return None
60
- get_setting = getattr(self._db, "get_setting", None)
61
- if not callable(get_setting):
62
- return None
63
-
64
- raw = get_setting(self._sources.db_setting_key, "{}")
65
- data = _safe_json_loads(str(raw or "{}"), default={})
66
- return data if isinstance(data, dict) else None
67
-
68
- def _load_from_file(self) -> Optional[Dict[str, Any]]:
69
- p = os.path.join(self._client_dir, self._sources.licence_file_relpath)
70
- if not os.path.exists(p):
71
- return None
72
- try:
73
- with open(p, "r", encoding="utf-8") as f:
74
- data = json.load(f)
75
- return data if isinstance(data, dict) else None
76
- except Exception:
77
- return None
78
-
79
- def entitlements(self, *, refresh: bool = False) -> Dict[str, Any]:
80
- """Returns entitlement dict (possibly empty)."""
81
- if self._cache is not None and not refresh:
82
- return self._cache
83
-
84
- ent = self._load_from_env()
85
- if ent is None:
86
- ent = self._load_from_db()
87
- if ent is None:
88
- ent = self._load_from_file()
89
- if ent is None:
90
- ent = {}
91
-
92
- self._cache = ent
93
- return ent
94
-
95
- def enabled(self, key: str) -> bool:
96
- """True if entitlement exists and is truthy."""
97
- key = (key or "").strip()
98
- if not key:
99
- return False
100
- ent = self.entitlements()
101
- return bool(ent.get(key))
102
-
103
- def get(self, key: str, default: Any = None) -> Any:
104
- key = (key or "").strip()
105
- if not key:
106
- return default
107
- return self.entitlements().get(key, default)