This commit is contained in:
Kenneth Kehl
2023-08-29 14:54:30 -07:00
parent 19dcd7a48b
commit 1ecb747c6d
588 changed files with 34100 additions and 23589 deletions

View File

@@ -19,6 +19,7 @@ def autocommit(func):
except Exception:
db.session.rollback()
raise
return commit_or_rollback
@@ -36,8 +37,7 @@ def transaction():
raise
class VersionOptions():
class VersionOptions:
def __init__(self, model_class, history_class=None, must_write_history=True):
self.model_class = model_class
self.history_class = history_class
@@ -45,38 +45,34 @@ class VersionOptions():
def version_class(*version_options):
if len(version_options) == 1 and not isinstance(version_options[0], VersionOptions):
version_options = (VersionOptions(version_options[0]),)
def versioned(func):
@wraps(func)
def record_version(*args, **kwargs):
func(*args, **kwargs)
session_objects = []
for version_option in version_options:
tmp_session_objects = [
(
session_object, version_option.history_class
)
(session_object, version_option.history_class)
for session_object in itertools.chain(
db.session.new, db.session.dirty
)
if isinstance(
session_object, version_option.model_class
)
if isinstance(session_object, version_option.model_class)
]
if tmp_session_objects == [] and version_option.must_write_history:
raise RuntimeError((
'Can\'t record history for {} '
'(something in your code has casued the database to '
'flush the session early so there\'s nothing to '
'copy into the history table)'
).format(version_option.model_class.__name__))
raise RuntimeError(
(
"Can't record history for {} "
"(something in your code has casued the database to "
"flush the session early so there's nothing to "
"copy into the history table)"
).format(version_option.model_class.__name__)
)
session_objects += tmp_session_objects
@@ -86,6 +82,7 @@ def version_class(*version_options):
)
return record_version
return versioned