velocity-python 0.0.183__tar.gz → 0.0.185__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.
- {velocity_python-0.0.183 → velocity_python-0.0.185}/PKG-INFO +1 -1
- {velocity_python-0.0.183 → velocity_python-0.0.185}/pyproject.toml +1 -1
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/__init__.py +1 -1
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/lambda_handler.py +15 -12
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/__init__.py +3 -2
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/web_handler.py +111 -1
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/PKG-INFO +1 -1
- {velocity_python-0.0.183 → velocity_python-0.0.185}/LICENSE +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/README.md +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/setup.cfg +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/invoices.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/orders.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/payments.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/purchase_orders.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/tests/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/tests/test_email_processing.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/context.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/sql.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/logging.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/__init__.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/braintree_adapter.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/router.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/stripe_adapter.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/SOURCES.txt +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_decorators.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_table_alter.py +0 -0
- {velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_where_clause_validation.py +0 -0
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
@@ -24,13 +24,15 @@ class LambdaHandler(BaseHandler):
|
|
|
24
24
|
):
|
|
25
25
|
self.start = time.time()
|
|
26
26
|
super().__init__(aws_event, aws_context, context_class)
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
self.session = self.create_session(aws_event, aws_context)
|
|
28
|
+
|
|
29
|
+
def create_session(self, aws_event, aws_context):
|
|
30
|
+
# LambdaHandler-specific initialization
|
|
29
31
|
requestContext = aws_event.get("requestContext") or {}
|
|
30
32
|
identity = requestContext.get("identity") or {}
|
|
31
33
|
headers = aws_event.get("headers") or {}
|
|
32
34
|
auth = identity.get("cognitoAuthenticationProvider")
|
|
33
|
-
|
|
35
|
+
session = {
|
|
34
36
|
"authentication_provider": identity.get("cognitoAuthenticationProvider"),
|
|
35
37
|
"authentication_type": identity.get("cognitoAuthenticationType"),
|
|
36
38
|
"cognito_user": identity.get("user"),
|
|
@@ -45,16 +47,17 @@ class LambdaHandler(BaseHandler):
|
|
|
45
47
|
"user_agent": identity.get("userAgent"),
|
|
46
48
|
"sub": auth.split(":")[-1] if auth else None,
|
|
47
49
|
}
|
|
48
|
-
if
|
|
49
|
-
|
|
50
|
-
elif
|
|
51
|
-
|
|
52
|
-
elif
|
|
53
|
-
|
|
54
|
-
elif
|
|
55
|
-
|
|
50
|
+
if session.get("is_mobile"):
|
|
51
|
+
session["device_type"] = "mobile"
|
|
52
|
+
elif session.get("is_desktop"):
|
|
53
|
+
session["device_type"] = "desktop"
|
|
54
|
+
elif session.get("is_tablet"):
|
|
55
|
+
session["device_type"] = "tablet"
|
|
56
|
+
elif session.get("is_smart_tv"):
|
|
57
|
+
session["device_type"] = "smart_tv"
|
|
56
58
|
else:
|
|
57
|
-
|
|
59
|
+
session["device_type"] = "unknown"
|
|
60
|
+
return session
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
def beforeAction(self, tx, context):
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
@@ -3,10 +3,11 @@ Mixins for AWS Lambda handlers.
|
|
|
3
3
|
|
|
4
4
|
This package provides mixins for common Lambda handler patterns:
|
|
5
5
|
- WebHandler: Activity tracking, logging, and error handling
|
|
6
|
+
- ButtonHandler: Dynamic button action handler loading
|
|
6
7
|
- DataServiceMixin: Generic CRUD operations for database-backed APIs
|
|
7
8
|
"""
|
|
8
9
|
|
|
9
|
-
from .web_handler import WebHandler
|
|
10
|
+
from .web_handler import WebHandler, ButtonHandler
|
|
10
11
|
from .data_service import DataServiceMixin, RWXHookSystem, apply_sys_modified_by
|
|
11
12
|
|
|
12
|
-
__all__ = ['WebHandler', 'DataServiceMixin', 'RWXHookSystem', 'apply_sys_modified_by']
|
|
13
|
+
__all__ = ['WebHandler', 'ButtonHandler', 'DataServiceMixin', 'RWXHookSystem', 'apply_sys_modified_by']
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/web_handler.py
RENAMED
|
@@ -7,6 +7,7 @@ onError implementations in handlers.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import copy
|
|
10
|
+
import importlib
|
|
10
11
|
import json
|
|
11
12
|
import os
|
|
12
13
|
import pprint
|
|
@@ -15,6 +16,7 @@ from abc import ABC
|
|
|
15
16
|
from datetime import date, datetime
|
|
16
17
|
from typing import Any, Dict, List
|
|
17
18
|
|
|
19
|
+
from velocity.aws.handlers.exceptions import AlertError
|
|
18
20
|
|
|
19
21
|
class WebHandler(ABC):
|
|
20
22
|
"""
|
|
@@ -380,4 +382,112 @@ Request Details:
|
|
|
380
382
|
|
|
381
383
|
if not getattr(self, "_handles_own_error_notifications", False):
|
|
382
384
|
if self._should_notify_error(exc):
|
|
383
|
-
self.send_error_notification(tx, context, exc, tb)
|
|
385
|
+
self.send_error_notification(tx, context, exc, tb)
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
class ButtonHandler:
|
|
390
|
+
"""
|
|
391
|
+
Button handler mixin for dynamically loading and executing button action handlers.
|
|
392
|
+
|
|
393
|
+
This class provides a way to dynamically load button handler modules and execute
|
|
394
|
+
actions defined within them, similar to the RWXHookSystem pattern.
|
|
395
|
+
|
|
396
|
+
Usage:
|
|
397
|
+
from velocity.aws.handlers.mixins import ButtonHandler
|
|
398
|
+
|
|
399
|
+
class LocalButtonHandler(ButtonHandler):
|
|
400
|
+
module_name = 'buttons' # Your buttons package
|
|
401
|
+
|
|
402
|
+
class HttpEventHandler(LocalButtonHandler, WebHandler, LambdaHandler):
|
|
403
|
+
# Handler will automatically have OnActionButtonClick available
|
|
404
|
+
pass
|
|
405
|
+
|
|
406
|
+
The OnActionButtonClick method expects the context.dataset() to contain:
|
|
407
|
+
- handler: Name of the module in the buttons package
|
|
408
|
+
- action: Action name (e.g., "refresh-data" becomes "RefreshData")
|
|
409
|
+
"""
|
|
410
|
+
|
|
411
|
+
module_name = None # Override in subclass (e.g., 'buttons')
|
|
412
|
+
|
|
413
|
+
@classmethod
|
|
414
|
+
def _get_button_module(cls, handler):
|
|
415
|
+
"""
|
|
416
|
+
Load button-specific handler module if it exists.
|
|
417
|
+
|
|
418
|
+
Args:
|
|
419
|
+
handler: Name of the handler module to load
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
The loaded module or None if not found
|
|
423
|
+
"""
|
|
424
|
+
if not cls.module_name:
|
|
425
|
+
raise AlertError("ButtonHandler.module_name not set in subclass. This is a configuration issue that needs to be handled by the developer.")
|
|
426
|
+
try:
|
|
427
|
+
return importlib.import_module(f".{handler}", cls.module_name)
|
|
428
|
+
except ImportError:
|
|
429
|
+
raise AlertError(f"Unable to import ButtonHandler module `{handler}`. Please ensure the code has been deployed.")
|
|
430
|
+
|
|
431
|
+
@classmethod
|
|
432
|
+
def _get_button_function(cls, handler, action):
|
|
433
|
+
"""
|
|
434
|
+
Get a specific function from a button handler module.
|
|
435
|
+
|
|
436
|
+
Args:
|
|
437
|
+
handler: Name of the handler module
|
|
438
|
+
action: Action name to convert to function name
|
|
439
|
+
|
|
440
|
+
Returns:
|
|
441
|
+
The function object or None if not found
|
|
442
|
+
"""
|
|
443
|
+
module = cls._get_button_module(handler)
|
|
444
|
+
|
|
445
|
+
# Convert action name: "refresh-data" -> "RefreshData"
|
|
446
|
+
func_name = action.replace("-", " ").title().replace(" ", "")
|
|
447
|
+
|
|
448
|
+
if hasattr(module, func_name):
|
|
449
|
+
return getattr(module, func_name)
|
|
450
|
+
|
|
451
|
+
raise AlertError(f"Function `{func_name}` not found in handler `{handler}`. Please ensure the code has been deployed.")
|
|
452
|
+
|
|
453
|
+
def OnActionButtonClick(self, tx, context):
|
|
454
|
+
"""
|
|
455
|
+
Handle button click actions by dynamically loading and executing handlers.
|
|
456
|
+
|
|
457
|
+
This method:
|
|
458
|
+
1. Extracts handler and action from the dataset
|
|
459
|
+
2. Dynamically loads the appropriate button handler module
|
|
460
|
+
3. Converts the action name to a function name
|
|
461
|
+
4. Executes the function with proper error handling
|
|
462
|
+
|
|
463
|
+
The button handler functions should modify context.response() directly
|
|
464
|
+
and should not return values (to avoid triggering base handler warnings).
|
|
465
|
+
|
|
466
|
+
Args:
|
|
467
|
+
tx: Database transaction
|
|
468
|
+
context: Request context containing dataset with 'handler' and 'action'
|
|
469
|
+
|
|
470
|
+
Raises:
|
|
471
|
+
AlertError: If handler or action not found, or if module/function missing
|
|
472
|
+
"""
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
dataset = context.dataset()
|
|
476
|
+
|
|
477
|
+
# Validate required fields
|
|
478
|
+
if "handler" not in dataset:
|
|
479
|
+
raise AlertError("Handler not found in payload")
|
|
480
|
+
if "action" not in dataset:
|
|
481
|
+
raise AlertError("Action not found in payload")
|
|
482
|
+
|
|
483
|
+
handler = dataset["handler"]
|
|
484
|
+
action = dataset["action"]
|
|
485
|
+
|
|
486
|
+
# Resolve the function using the helper
|
|
487
|
+
func = self._get_button_function(handler, action)
|
|
488
|
+
|
|
489
|
+
# Execute the button handler
|
|
490
|
+
# Don't return its result to avoid triggering base handler warnings
|
|
491
|
+
func(self, tx, context)
|
|
492
|
+
|
|
493
|
+
# Handler methods should modify context.response() directly
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/app/tests/test_email_processing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/base_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/mixins/data_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/aws/handlers/sqs_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/initializer.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/base/operators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/mysql/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/postgres/types.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlite/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/sql.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/servers/sqlserver/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/common.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_row.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/postgres/test_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_result_sql_aware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_sql_builder.py
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/db/tests/test_tablehelper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/misc/tests/test_original_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity/payment/braintree_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/requires.txt
RENAMED
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/src/velocity_python.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.183 → velocity_python-0.0.185}/tests/test_sys_modified_count_postgres_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|