updated sqlalchemy to 2.0 due to safety complaints w/ burnettk

This commit is contained in:
jasquat 2023-03-28 15:56:00 -04:00
parent 891cae52f1
commit f6f0677d34
No known key found for this signature in database
9 changed files with 996 additions and 928 deletions

View File

@ -45,8 +45,8 @@ def app() -> Flask:
def with_db_and_bpmn_file_cleanup() -> None: def with_db_and_bpmn_file_cleanup() -> None:
"""Do it cleanly!""" """Do it cleanly!"""
meta = db.metadata meta = db.metadata
db.session.execute(db.update(BpmnProcessModel, values={"top_level_process_id": None})) db.session.execute(db.update(BpmnProcessModel).values(top_level_process_id=None))
db.session.execute(db.update(BpmnProcessModel, values={"direct_parent_process_id": None})) db.session.execute(db.update(BpmnProcessModel).values(direct_parent_process_id=None))
for table in reversed(meta.sorted_tables): for table in reversed(meta.sorted_tables):
db.session.execute(table.delete()) db.session.execute(table.delete())

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,6 @@ setuptools = "^65.5.1"
connexion = {extras = [ "swagger-ui",], version = "^2"} connexion = {extras = [ "swagger-ui",], version = "^2"}
lxml = "^4.9.1" lxml = "^4.9.1"
marshmallow-enum = "^1.5.1" marshmallow-enum = "^1.5.1"
marshmallow-sqlalchemy = "^0.28.0"
PyJWT = "^2.6.0" PyJWT = "^2.6.0"
gunicorn = "^20.1.0" gunicorn = "^20.1.0"
APScheduler = "*" APScheduler = "*"
@ -73,7 +72,7 @@ types-pytz = "^2022.1.1"
# sqlalchemy-stubs = { git = "https://github.com/dropbox/sqlalchemy-stubs.git", rev = "master" } # sqlalchemy-stubs = { git = "https://github.com/dropbox/sqlalchemy-stubs.git", rev = "master" }
# sqlalchemy-stubs = {develop = true, path = "/Users/kevin/projects/github/sqlalchemy-stubs"} # sqlalchemy-stubs = {develop = true, path = "/Users/kevin/projects/github/sqlalchemy-stubs"}
# for now use my fork # for now use my fork
sqlalchemy-stubs = { git = "https://github.com/burnettk/sqlalchemy-stubs.git", rev = "scoped-session-delete" } # sqlalchemy-stubs = { git = "https://github.com/burnettk/sqlalchemy-stubs.git", rev = "scoped-session-delete" }
simplejson = "^3.17.6" simplejson = "^3.17.6"
pytz = "^2022.6" pytz = "^2022.6"
dateparser = "^1.1.2" dateparser = "^1.1.2"
@ -83,6 +82,7 @@ pylint = "^2.15.10"
flask-simple-crypt = "^0.3.3" flask-simple-crypt = "^0.3.3"
cryptography = "^39.0.2" cryptography = "^39.0.2"
safety = "^2.3.5" safety = "^2.3.5"
sqlalchemy = "^2.0.7"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]

View File

@ -44,8 +44,9 @@ class MyJSONEncoder(DefaultJSONProvider):
return obj.serialized return obj.serialized
elif isinstance(obj, sqlalchemy.engine.row.Row): # type: ignore elif isinstance(obj, sqlalchemy.engine.row.Row): # type: ignore
return_dict = {} return_dict = {}
for row_key in obj.keys(): row_mapping = obj._mapping
row_value = obj[row_key] for row_key in row_mapping.keys():
row_value = row_mapping[row_key]
if hasattr(row_value, "serialized"): if hasattr(row_value, "serialized"):
return_dict.update(row_value.serialized) return_dict.update(row_value.serialized)
elif hasattr(row_value, "__dict__"): elif hasattr(row_value, "__dict__"):

View File

@ -53,6 +53,7 @@ class ProcessInstanceModel(SpiffworkflowBaseDBModel):
"""ProcessInstanceModel.""" """ProcessInstanceModel."""
__tablename__ = "process_instance" __tablename__ = "process_instance"
__allow_unmapped__ = True
id: int = db.Column(db.Integer, primary_key=True) id: int = db.Column(db.Integer, primary_key=True)
process_model_identifier: str = db.Column(db.String(255), nullable=False, index=True) process_model_identifier: str = db.Column(db.String(255), nullable=False, index=True)
process_model_display_name: str = db.Column(db.String(255), nullable=False, index=True) process_model_display_name: str = db.Column(db.String(255), nullable=False, index=True)

View File

@ -8,7 +8,6 @@ from typing import Optional
from typing import TypedDict from typing import TypedDict
from sqlalchemy import ForeignKey from sqlalchemy import ForeignKey
from sqlalchemy.orm import deferred
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from spiffworkflow_backend.exceptions.process_entity_not_found_error import ( from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
@ -69,7 +68,7 @@ class ProcessInstanceReportModel(SpiffworkflowBaseDBModel):
id: int = db.Column(db.Integer, primary_key=True) id: int = db.Column(db.Integer, primary_key=True)
identifier: str = db.Column(db.String(50), nullable=False, index=True) identifier: str = db.Column(db.String(50), nullable=False, index=True)
report_metadata: dict = deferred(db.Column(db.JSON)) # type: ignore report_metadata: dict = db.Column(db.JSON)
created_by_id = db.Column(ForeignKey(UserModel.id), nullable=False, index=True) # type: ignore created_by_id = db.Column(ForeignKey(UserModel.id), nullable=False, index=True) # type: ignore
created_by = relationship("UserModel") created_by = relationship("UserModel")
created_at_in_seconds = db.Column(db.Integer) created_at_in_seconds = db.Column(db.Integer)

View File

@ -47,6 +47,7 @@ class MultiInstanceType(enum.Enum):
@dataclass @dataclass
class TaskModel(SpiffworkflowBaseDBModel): class TaskModel(SpiffworkflowBaseDBModel):
__tablename__ = "task" __tablename__ = "task"
__allow_unmapped__ = True
id: int = db.Column(db.Integer, primary_key=True) id: int = db.Column(db.Integer, primary_key=True)
guid: str = db.Column(db.String(36), nullable=False, unique=True) guid: str = db.Column(db.String(36), nullable=False, unique=True)
bpmn_process_id: int = db.Column(ForeignKey(BpmnProcessModel.id), nullable=False, index=True) # type: ignore bpmn_process_id: int = db.Column(ForeignKey(BpmnProcessModel.id), nullable=False, index=True) # type: ignore

View File

@ -309,11 +309,14 @@ class ProcessInstanceReportService:
) -> list[dict]: ) -> list[dict]:
"""Add_metadata_columns_to_process_instance.""" """Add_metadata_columns_to_process_instance."""
results = [] results = []
for process_instance in process_instance_sqlalchemy_rows: for process_instance_row in process_instance_sqlalchemy_rows:
process_instance_dict = process_instance["ProcessInstanceModel"].serialized process_instance_mapping = process_instance_row._mapping
process_instance_dict = process_instance_row[0].serialized
for metadata_column in metadata_columns: for metadata_column in metadata_columns:
if metadata_column["accessor"] not in process_instance_dict: if metadata_column["accessor"] not in process_instance_dict:
process_instance_dict[metadata_column["accessor"]] = process_instance[metadata_column["accessor"]] process_instance_dict[metadata_column["accessor"]] = process_instance_mapping[
metadata_column["accessor"]
]
results.append(process_instance_dict) results.append(process_instance_dict)
return results return results

View File

@ -1,4 +1,3 @@
import logging
import time import time
from typing import Callable from typing import Callable
from typing import Optional from typing import Optional
@ -280,10 +279,6 @@ class WorkflowExecutionService:
finally: finally:
self.execution_strategy.save() self.execution_strategy.save()
spiff_logger = logging.getLogger("spiff")
for handler in spiff_logger.handlers:
if hasattr(handler, "bulk_insert_logs"):
handler.bulk_insert_logs() # type: ignore
db.session.commit() db.session.commit()
if save: if save: