velocity-python 0.0.141__tar.gz → 0.0.143__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.141 → velocity_python-0.0.143}/PKG-INFO +1 -1
- {velocity_python-0.0.141 → velocity_python-0.0.143}/pyproject.toml +1 -1
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/__init__.py +1 -1
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/sql.py +12 -5
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/sql.py +9 -4
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/PKG-INFO +1 -1
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/SOURCES.txt +1 -0
- velocity_python-0.0.143/tests/test_sys_modified_count_postgres_demo.py +77 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/LICENSE +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/README.md +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/setup.cfg +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/invoices.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/orders.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/payments.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/purchase_orders.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/tests/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/tests/test_email_processing.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/app/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/context.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/lambda_handler.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/activity_tracker.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/error_handler.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/legacy_mixin.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/standard_mixin.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.0.141 → velocity_python-0.0.143}/tests/test_where_clause_validation.py +0 -0
|
@@ -794,7 +794,7 @@ class SQL(BaseSQLDialect):
|
|
|
794
794
|
return sql, tuple()
|
|
795
795
|
|
|
796
796
|
@classmethod
|
|
797
|
-
def ensure_sys_modified_count(cls, name):
|
|
797
|
+
def ensure_sys_modified_count(cls, name, has_column=False):
|
|
798
798
|
"""Return SQL to backfill sys_modified_count and refresh the on_sys_modified trigger."""
|
|
799
799
|
if "." in name:
|
|
800
800
|
fqtn = TableHelper.quote(name)
|
|
@@ -804,8 +804,13 @@ class SQL(BaseSQLDialect):
|
|
|
804
804
|
trigger_name = f"on_update_row_{fqtn.replace('.', '_')}"
|
|
805
805
|
column_name = TableHelper.quote("sys_modified_count")
|
|
806
806
|
|
|
807
|
-
|
|
808
|
-
|
|
807
|
+
statements = []
|
|
808
|
+
if not has_column:
|
|
809
|
+
statements.append(
|
|
810
|
+
f"ALTER TABLE {fqtn} ADD COLUMN {column_name} INTEGER NOT NULL DEFAULT 0;"
|
|
811
|
+
)
|
|
812
|
+
|
|
813
|
+
statements.extend([
|
|
809
814
|
f"UPDATE {fqtn} SET {column_name} = 0 WHERE {column_name} IS NULL;",
|
|
810
815
|
f"""
|
|
811
816
|
CREATE OR REPLACE FUNCTION {schema}.on_sys_modified()
|
|
@@ -843,9 +848,11 @@ class SQL(BaseSQLDialect):
|
|
|
843
848
|
BEFORE INSERT OR UPDATE ON {fqtn}
|
|
844
849
|
FOR EACH ROW EXECUTE PROCEDURE {schema}.on_sys_modified();
|
|
845
850
|
""",
|
|
846
|
-
|
|
851
|
+
])
|
|
847
852
|
|
|
848
|
-
sql = sqlparse.format(
|
|
853
|
+
sql = sqlparse.format(
|
|
854
|
+
" ".join(statements), reindent=True, keyword_case="upper"
|
|
855
|
+
)
|
|
849
856
|
return sql, tuple()
|
|
850
857
|
|
|
851
858
|
@classmethod
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/sql.py
RENAMED
|
@@ -485,7 +485,7 @@ END;
|
|
|
485
485
|
return "\n".join(statements), tuple()
|
|
486
486
|
|
|
487
487
|
@classmethod
|
|
488
|
-
def ensure_sys_modified_count(cls, name):
|
|
488
|
+
def ensure_sys_modified_count(cls, name, has_column=False):
|
|
489
489
|
"""Ensure sys_modified_count exists for SQL Server tables along with maintenance triggers."""
|
|
490
490
|
if "." in name:
|
|
491
491
|
schema, table_name = name.split(".", 1)
|
|
@@ -499,8 +499,13 @@ END;
|
|
|
499
499
|
table_name_sql = table_name.replace("'", "''")
|
|
500
500
|
trigger_prefix = re.sub(r"[^0-9A-Za-z_]+", "_", f"CC_SYS_MOD_{table_name}")
|
|
501
501
|
|
|
502
|
-
statements = [
|
|
503
|
-
|
|
502
|
+
statements = []
|
|
503
|
+
if not has_column:
|
|
504
|
+
statements.append(
|
|
505
|
+
f"IF COL_LENGTH(N'{object_name}', 'sys_modified_count') IS NULL BEGIN ALTER TABLE {table_identifier} ADD sys_modified_count INT NOT NULL CONSTRAINT DF_{trigger_prefix}_COUNT DEFAULT (0); END;"
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
statements.extend([
|
|
504
509
|
f"UPDATE {table_identifier} SET sys_modified_count = 0 WHERE sys_modified_count IS NULL;",
|
|
505
510
|
f"IF OBJECT_ID(N'{schema_identifier}.{trigger_prefix}_insert', N'TR') IS NOT NULL DROP TRIGGER {schema_identifier}.{trigger_prefix}_insert;",
|
|
506
511
|
f"IF OBJECT_ID(N'{schema_identifier}.{trigger_prefix}_update', N'TR') IS NOT NULL DROP TRIGGER {schema_identifier}.{trigger_prefix}_update;",
|
|
@@ -539,7 +544,7 @@ BEGIN
|
|
|
539
544
|
INNER JOIN deleted AS d ON d.sys_id = i.sys_id;
|
|
540
545
|
END;
|
|
541
546
|
""".strip(),
|
|
542
|
-
]
|
|
547
|
+
])
|
|
543
548
|
|
|
544
549
|
return "\n".join(statements), tuple()
|
|
545
550
|
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/SOURCES.txt
RENAMED
|
@@ -129,4 +129,5 @@ src/velocity_python.egg-info/SOURCES.txt
|
|
|
129
129
|
src/velocity_python.egg-info/dependency_links.txt
|
|
130
130
|
src/velocity_python.egg-info/requires.txt
|
|
131
131
|
src/velocity_python.egg-info/top_level.txt
|
|
132
|
+
tests/test_sys_modified_count_postgres_demo.py
|
|
132
133
|
tests/test_where_clause_validation.py
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Integration test for sys_modified_count triggers against the demo PostgreSQL database."""
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
import unittest
|
|
6
|
+
import uuid
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
# Ensure the shared secrets package (contains env.py) is on the path.
|
|
10
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
11
|
+
SECRETS_PATH = REPO_ROOT.parent / "caringcent" / "secrets"
|
|
12
|
+
if str(SECRETS_PATH) not in sys.path:
|
|
13
|
+
sys.path.append(str(SECRETS_PATH))
|
|
14
|
+
|
|
15
|
+
import env
|
|
16
|
+
from velocity.db.servers import postgres
|
|
17
|
+
|
|
18
|
+
# Ensure we are pointed at the demo environment before opening any connections.
|
|
19
|
+
env.set("demo")
|
|
20
|
+
|
|
21
|
+
engine = postgres.initialize()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TestSysModifiedCountDemo(unittest.TestCase):
|
|
25
|
+
"""Exercises the new sys_modified_count wiring against the demo PostgreSQL database."""
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def setUpClass(cls):
|
|
29
|
+
cls.table_name = f"tmp_sys_mod_{uuid.uuid4().hex[:12]}"
|
|
30
|
+
|
|
31
|
+
@engine.transaction
|
|
32
|
+
def setup(tx):
|
|
33
|
+
table = tx.table(cls.table_name)
|
|
34
|
+
table.drop()
|
|
35
|
+
table.create(columns={"custom_value": "sample"})
|
|
36
|
+
|
|
37
|
+
setup()
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def tearDownClass(cls):
|
|
41
|
+
@engine.transaction
|
|
42
|
+
def cleanup(tx):
|
|
43
|
+
tx.table(cls.table_name).drop()
|
|
44
|
+
|
|
45
|
+
cleanup()
|
|
46
|
+
|
|
47
|
+
def test_sys_modified_count_triggers_increment(self):
|
|
48
|
+
table_name = self.table_name
|
|
49
|
+
|
|
50
|
+
@engine.transaction
|
|
51
|
+
def run(tx):
|
|
52
|
+
table = tx.table(table_name)
|
|
53
|
+
row = table.new({"custom_value": "initial"})
|
|
54
|
+
|
|
55
|
+
row_data = row.to_dict()
|
|
56
|
+
self.assertEqual(row_data["sys_modified_count"], 0, "insert should reset modified count")
|
|
57
|
+
self.assertFalse(row_data["sys_dirty"], "insert should start clean")
|
|
58
|
+
self.assertEqual(row_data["sys_table"], table_name)
|
|
59
|
+
|
|
60
|
+
row["custom_value"] = "updated"
|
|
61
|
+
updated = row.to_dict()
|
|
62
|
+
self.assertEqual(updated["sys_modified_count"], 1)
|
|
63
|
+
self.assertTrue(updated["sys_dirty"])
|
|
64
|
+
|
|
65
|
+
# Ensure the helper no-ops when the column already exists.
|
|
66
|
+
self.assertIsNone(table.ensure_sys_modified_count())
|
|
67
|
+
|
|
68
|
+
row["custom_value"] = "final"
|
|
69
|
+
final = row.to_dict()
|
|
70
|
+
self.assertEqual(final["sys_modified_count"], 2)
|
|
71
|
+
self.assertTrue(final["sys_dirty"])
|
|
72
|
+
|
|
73
|
+
run()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == "__main__":
|
|
77
|
+
unittest.main()
|
|
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.141 → velocity_python-0.0.143}/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.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/base_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/aws/handlers/mixins/legacy_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/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.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/initializer.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/base/operators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/mysql/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/reserved.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/postgres/types.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlite/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/servers/sqlserver/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/common.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/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.141 → velocity_python-0.0.143}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/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.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/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.141 → velocity_python-0.0.143}/src/velocity/db/tests/test_sql_builder.py
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/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
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity/misc/tests/test_original_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/requires.txt
RENAMED
|
File without changes
|
{velocity_python-0.0.141 → velocity_python-0.0.143}/src/velocity_python.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|