Source code for smarter.lib.django.waffle.switches

"""SmarterWaffleSwitches - Predefined, centrally managed Waffle switches for the Smarter Platform."""

from dataclasses import dataclass


# pylint: disable=C0115
[docs] @dataclass(frozen=True) class SmarterWaffleSwitch: name: str comment: str default: bool
[docs] def to_json(self) -> dict[str, str | bool]: return { "name": self.name, "comment": self.comment, "default": self.default, }
[docs] class SmarterWaffleSwitches: """ Enumerated data type for predefined, managed Smarter waffle switches. This class defines the fixed set of feature flags (Waffle switches) used by the Smarter Platform. Each class attribute represents a unique, centrally managed switch. These switches are automatically verified and created (if missing) during deployments, ensuring consistency and preventing runtime errors due to missing flags. .. note:: Only switches defined in this class are considered valid for use in the Smarter codebase. To add a new feature flag, declare it as a class attribute here. Example usage: .. code-block:: python from smarter.lib.django.waffle import SmarterWaffleSwitches, switch_is_active if switch_is_active(SmarterWaffleSwitches.API_LOGGING): print("API logging is enabled.") """ _all: list[str] = [] # Internal list to track all switch names ALLOW_API_GET = "allow_api_get" """Allows GET requests to the API endpoints, which are normally restricted to POST requests.""" ACCOUNT_LOGGING = "log_account" """Enables logging throughout the smarter.app.account namespace.""" ACCOUNT_MIXIN_LOGGING = "log_account_mixin" """Enables logging within the smarter.apps.account.mixins.AccountMixin class.""" API_LOGGING = "log_api" """Enables logging throughout the smarter.api namespace.""" CACHE_LOGGING = "log_caching" """Enables detailed logging for caching operations including cache hits, misses, and errors.""" CONNECTION_LOGGING = "log_connection" """Enables logging throughout the smarter.app.connection namespace.""" PROMPT_LOGGING = "log_prompt" """Enables logging throughout the smarter.app.prompt namespace.""" CHATAPP_LOGGING = "log_chatapp" """For the React Prompt UI component. Enables debug-level javascript console logging inside the browser """ LLM_CLIENT_LOGGING = "log_llm_client" """Enables logging throughout the smarter.app.llm_client namespace.""" LLM_CLIENT_HELPER_LOGGING = "log_llm_clienthelper" """Enables logging within the smarter.apps.llm_client.model.LLMClientHelper class.""" SECRET_LOGGING = "log_secret" """Enables logging throughout the smarter.app.secret namespace.""" VECTORSTORE_LOGGING = "log_vectorstore" """Enables logging throughout the smarter.app.vectorstore namespace.""" CSRF_SUPPRESS_FOR_LLM_CLIENTS = "disable_csrf_middleware_for_llm_clients" """Disables CSRF middleware checks for prompt completion endpoints.""" ENABLE_DEBUG_MODE = "enable_debug_mode" """Enables debug mode for the entire Smarter application, which may include additional logging and diagnostic information.""" ENABLE_JOURNAL = "enable_journal" """Enables the Smarter Journal feature.""" ENABLE_OAUTH2 = "enable_oauth2" """Enables OAuth2 authentication support.""" ENABLE_ACCOUNT_REGISTRATION = "enable_account_registration" """Enables account registration link.""" ENABLE_LOGIN_FOOTER_LINKS = "enable_login_footer_links" """Enables additional links in the login page footer, such as 'Legal' and 'Contact'.""" ENABLE_MULTITENANT_AUTHENTICATION = "enable_multitenant_authentication" """Enables multi-tenant authentication support for hosted Smarter platforms.""" ENABLE_MIDDLEWARE_SENSITIVE_FILES = "enable_middleware_block_sensitive_files" """Enables SmarterBlockSensitiveFilesMiddleware.""" ENABLE_MIDDLEWARE_EXCESSIVE_404 = "enable_middleware_block_excessive_404" """Enables SmarterBlockExcessive404Middleware.""" ENABLE_MIDDLEWARE_CORS = "enable_middleware_cors" """Enables SmarterCorsMiddleware.""" ENABLE_MIDDLEWARE_CSRF = "enable_middleware_csrf" """Enables Django's built-in CSRF middleware for enhanced security against cross-site request forgery attacks.""" ENABLE_MIDDLEWARE_HTML_MINIFY = "enable_middleware_html_minify" """Enables HTML minification for responses with 'text/html' content type using BeautifulSoup, while skipping minification for certain paths and content types to avoid issues with non-HTML responses.""" ENABLE_MIDDLEWARE_REQUEST_LOG_CONTEXT = "enable_middleware_request_log_context" """Enables SmarterRequestLogContextMiddleware, which adds request-specific context to log records for enhanced logging capabilities.""" ENABLE_MIDDLEWARE_SMARTER_JSON_ERROR = "enable_middleware_smarter_json_error" """Enables SmarterJsonErrorMiddleware, which converts error responses to JSON format when the client expects JSON.""" ENABLE_MIDDLEWARE_SMARTER_TOKEN_AUTH = "enable_middleware_smarter_token_auth" """Enables SmarterTokenAuthenticationMiddleware, which provides token-based authentication for API endpoints.""" ENABLE_MIDDLEWARE_SECURITY = "enable_middleware_security" """Enables SmarterSecurityMiddleware.""" ENABLE_REACTAPP_DEBUG_MODE = "enable_reactapp_debug_mode" """Enables React app debug mode within the Smarter React Prompt component.""" ENABLE_NEW_USER_PASSWORD_EMAIL = "enable_new_user_password_email" """Enables sending textemail with password to new users.""" ENABLE_SMARTER_PAGE_CACHING = "enable_smarter_page_caching" """Enables the Smarter user-based page caching decorator for user-facing pages to improve performance.""" ENABLE_FORMATTED_LOGGING = "enable_formatted_logging" """Enables formatted logging with ANSI color codes for enhanced readability in logs.""" MANIFEST_LOGGING = "log_manifest_brokers" """Enables detailed diagnostic logging for manifest initialization, validation and brokered operations.""" MIDDLEWARE_LOGGING = "log_middleware" """Enables detailed diagnostic logging for all middleware operations.""" PLUGIN_LOGGING = "log_plugin" """Enables logging throughout the smarter.app.plugin namespace.""" PROVIDER_LOGGING = "log_provider" """Enables logging throughout the smarter.app.provider namespace.""" REQUEST_MIXIN_LOGGING = "log_request_mixin" """Enables detailed diagnostic logging for the SmarterRequestMixin class.""" RECEIVER_LOGGING = "log_receivers" """Enables logging in all Django signal receivers throughout the Smarter codebase.""" TASK_LOGGING = "log_tasks" """Enables logging in all Celery tasks throughout the Smarter codebase.""" VALIDATOR_LOGGING = "log_validators" """Enables logging in all Django model field validators throughout the Smarter codebase.""" VIEW_LOGGING = "log_views" """Enables logging in all Django views throughout the Smarter codebase.""" switches = { ALLOW_API_GET: SmarterWaffleSwitch( name=ALLOW_API_GET, comment="Allows GET requests to the API endpoints, which are normally restricted to POST requests.", default=False, ), ACCOUNT_LOGGING: SmarterWaffleSwitch( name=ACCOUNT_LOGGING, comment="Enables logging throughout the smarter.app.account namespace.", default=True, ), ACCOUNT_MIXIN_LOGGING: SmarterWaffleSwitch( name=ACCOUNT_MIXIN_LOGGING, comment="Enables logging within the smarter.apps.account.mixins.AccountMixin class.", default=False, ), API_LOGGING: SmarterWaffleSwitch( name=API_LOGGING, comment="Enables logging throughout the smarter.api namespace.", default=True, ), CACHE_LOGGING: SmarterWaffleSwitch( name=CACHE_LOGGING, comment="Enables detailed logging for caching operations including cache hits, misses, and errors.", default=True, ), PROMPT_LOGGING: SmarterWaffleSwitch( name=PROMPT_LOGGING, comment="Enables logging throughout the smarter.app.prompt namespace.", default=True, ), CHATAPP_LOGGING: SmarterWaffleSwitch( name=CHATAPP_LOGGING, comment="For the React Prompt UI component. Enables debug-level javascript console logging inside the browser", default=True, ), LLM_CLIENT_LOGGING: SmarterWaffleSwitch( name=LLM_CLIENT_LOGGING, comment="Enables logging throughout the smarter.app.llm_client namespace.", default=True, ), CONNECTION_LOGGING: SmarterWaffleSwitch( name=CONNECTION_LOGGING, comment="Enables logging throughout the smarter.app.connection namespace.", default=True, ), SECRET_LOGGING: SmarterWaffleSwitch( name=SECRET_LOGGING, comment="Enables logging throughout the smarter.app.secret namespace.", default=True, ), VECTORSTORE_LOGGING: SmarterWaffleSwitch( name=VECTORSTORE_LOGGING, comment="Enables logging throughout the smarter.app.vectorstore namespace.", default=True, ), LLM_CLIENT_HELPER_LOGGING: SmarterWaffleSwitch( name=LLM_CLIENT_HELPER_LOGGING, comment="Enables logging within the smarter.apps.llm_client.model.LLMClientHelper class.", default=True, ), CSRF_SUPPRESS_FOR_LLM_CLIENTS: SmarterWaffleSwitch( name=CSRF_SUPPRESS_FOR_LLM_CLIENTS, comment="Disables CSRF middleware checks for prompt completion endpoints.", default=False, ), ENABLE_DEBUG_MODE: SmarterWaffleSwitch( name=ENABLE_DEBUG_MODE, comment="Enables debug mode for the entire Smarter application, which may include additional logging and diagnostic information.", default=False, ), ENABLE_JOURNAL: SmarterWaffleSwitch( name=ENABLE_JOURNAL, comment="Enables the Smarter Journal feature.", default=False, ), ENABLE_OAUTH2: SmarterWaffleSwitch( name=ENABLE_OAUTH2, comment="Enables OAuth2 authentication support.", default=False, ), ENABLE_SMARTER_PAGE_CACHING: SmarterWaffleSwitch( name="enable_smarter_page_caching", comment="Enables the Smarter user-based page caching decorator for user-facing pages to improve performance.", default=True, ), ENABLE_ACCOUNT_REGISTRATION: SmarterWaffleSwitch( name=ENABLE_ACCOUNT_REGISTRATION, comment="Enables account registration link.", default=False, ), ENABLE_LOGIN_FOOTER_LINKS: SmarterWaffleSwitch( name=ENABLE_LOGIN_FOOTER_LINKS, comment="Enables additional links in the login page footer, such as 'Legal' and 'Contact'.", default=False, ), ENABLE_MULTITENANT_AUTHENTICATION: SmarterWaffleSwitch( name=ENABLE_MULTITENANT_AUTHENTICATION, comment="Enables multi-tenant authentication support for hosted Smarter platforms.", default=False, ), ENABLE_MIDDLEWARE_SENSITIVE_FILES: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_SENSITIVE_FILES, comment="Enables SmarterBlockSensitiveFilesMiddleware", default=False, ), ENABLE_MIDDLEWARE_EXCESSIVE_404: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_EXCESSIVE_404, comment="Enables SmarterBlockExcessive404Middleware", default=False, ), ENABLE_MIDDLEWARE_SMARTER_TOKEN_AUTH: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_SMARTER_TOKEN_AUTH, comment="Enables SmarterTokenAuthenticationMiddleware, which provides token-based authentication for API endpoints.", default=True, ), ENABLE_MIDDLEWARE_CORS: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_CORS, comment="Enables SmarterCorsMiddleware", default=True, ), ENABLE_MIDDLEWARE_CSRF: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_CSRF, comment="Enables Django's built-in CSRF middleware for enhanced security against cross-site request forgery attacks.", default=True, ), ENABLE_MIDDLEWARE_HTML_MINIFY: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_HTML_MINIFY, comment="Enables HTML minification for responses with 'text/html' content type using BeautifulSoup, while skipping minification for certain paths and content types to avoid issues with non-HTML responses.", default=True, ), ENABLE_MIDDLEWARE_REQUEST_LOG_CONTEXT: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_REQUEST_LOG_CONTEXT, comment="Enables SmarterRequestLogContextMiddleware, which adds request-specific context to log records for enhanced logging capabilities.", default=True, ), ENABLE_MIDDLEWARE_SMARTER_JSON_ERROR: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_SMARTER_JSON_ERROR, comment="Enables SmarterJsonErrorMiddleware, which converts error responses to JSON format when the client expects JSON.", default=True, ), ENABLE_MIDDLEWARE_SECURITY: SmarterWaffleSwitch( name=ENABLE_MIDDLEWARE_SECURITY, comment="Enables SmarterSecurityMiddleware", default=False, ), ENABLE_REACTAPP_DEBUG_MODE: SmarterWaffleSwitch( name=ENABLE_REACTAPP_DEBUG_MODE, comment="Enables React app debug mode within the Smarter React Prompt component.", default=True, ), ENABLE_NEW_USER_PASSWORD_EMAIL: SmarterWaffleSwitch( name=ENABLE_NEW_USER_PASSWORD_EMAIL, comment="Enables sending textemail with password to new users.", default=False, ), ENABLE_FORMATTED_LOGGING: SmarterWaffleSwitch( name=ENABLE_FORMATTED_LOGGING, comment="Enables formatted logging with ANSI color codes for enhanced readability in logs.", default=True, ), MANIFEST_LOGGING: SmarterWaffleSwitch( name=MANIFEST_LOGGING, comment="Enables detailed diagnostic logging for manifest initialization, validation and brokered operations.", default=True, ), MIDDLEWARE_LOGGING: SmarterWaffleSwitch( name=MIDDLEWARE_LOGGING, comment="Enables detailed diagnostic logging for all middleware operations.", default=False, ), PLUGIN_LOGGING: SmarterWaffleSwitch( name=PLUGIN_LOGGING, comment="Enables logging throughout the smarter.app.plugin namespace.", default=True, ), PROVIDER_LOGGING: SmarterWaffleSwitch( name=PROVIDER_LOGGING, comment="Enables logging throughout the smarter.app.provider namespace.", default=True, ), REQUEST_MIXIN_LOGGING: SmarterWaffleSwitch( name=REQUEST_MIXIN_LOGGING, comment="Enables detailed diagnostic logging for the SmarterRequestMixin class.", default=False, ), RECEIVER_LOGGING: SmarterWaffleSwitch( name=RECEIVER_LOGGING, comment="Enables logging in all Django signal receivers throughout the Smarter codebase.", default=True, ), TASK_LOGGING: SmarterWaffleSwitch( name=TASK_LOGGING, comment="Enables logging in all Celery tasks throughout the Smarter codebase.", default=True, ), VALIDATOR_LOGGING: SmarterWaffleSwitch( name=VALIDATOR_LOGGING, comment="Enables logging in all Django model field validators throughout the Smarter codebase.", default=False, ), VIEW_LOGGING: SmarterWaffleSwitch( name=VIEW_LOGGING, comment="Enables logging in all Django views throughout the Smarter codebase.", default=True, ), } @property def all(self): """Return all switches.""" if not self._all: self._all = [ getattr(self, attr) for attr in dir(self) if attr.isupper() and isinstance(getattr(self, attr), str) ] return self._all
smarter_waffle_switches = SmarterWaffleSwitches() """Singleton instance of SmarterWaffleSwitches to be used throughout the codebase.""" __all__ = ["SmarterWaffleSwitches", "smarter_waffle_switches"]