diff --git a/src/videoag_common/database/drift_detector.py b/src/videoag_common/database/drift_detector.py index 4025e774e65045241cf9781e4fefd2c6559a9461..e04c99adc8b82d3e9dd32ca75e0e5c33c7af773e 100644 --- a/src/videoag_common/database/drift_detector.py +++ b/src/videoag_common/database/drift_detector.py @@ -7,6 +7,7 @@ from sqlalchemy import Engine, Table, MetaData, Column, types, DefaultClause, Te from sqlalchemy.exc import * from sqlalchemy.sql.base import _NoneName, ReadOnlyColumnCollection from sqlalchemy.sql.schema import ColumnCollectionConstraint, ForeignKey +from sqlalchemy.dialects import postgresql as postgresql # @@ -185,6 +186,16 @@ def _check_types_equal(actual: types.TypeEngine, schema: types.TypeEngine) -> bo return (isinstance(actual, types.JSON) and schema.none_as_null == actual.none_as_null) + if type(schema) is postgresql.JSON: + assert isinstance(schema, postgresql.JSON) + return (isinstance(actual, postgresql.JSON) + and schema.none_as_null == actual.none_as_null) + + if type(schema) is postgresql.JSONB: + assert isinstance(schema, postgresql.JSONB) + return (isinstance(actual, postgresql.JSONB) + and schema.none_as_null == actual.none_as_null) + if type(schema) is types.DateTime: assert isinstance(schema, types.DateTime) # For pycharm return (isinstance(actual, types.DateTime) diff --git a/src/videoag_common/objects/course.py b/src/videoag_common/objects/course.py index 3259cb32597879e1dadc65afd5caf71e3c30bedf..5f08fdefaa59a60ec4dc4055edf3b43cae227e6a 100644 --- a/src/videoag_common/objects/course.py +++ b/src/videoag_common/objects/course.py @@ -138,7 +138,7 @@ class Lecture(DeletableApiObject, VisibilityApiObject, ApiViewPermissionsObject, ) ) media_process: Mapped[dict] = api_mapped( - mapped_column(sql.JSON, nullable=True), # Null indicates, inherit from course + mapped_column(postgresql.JSONB, nullable=True), # Null indicates, inherit from course ApiMediaProcessField( include_in_config=True ) @@ -441,7 +441,7 @@ class Course(DeletableApiObject, VisibilityApiObject, ApiViewPermissionsObject, ) ) media_process: Mapped[dict] = api_mapped( - mapped_column(sql.JSON, nullable=False), + mapped_column(postgresql.JSONB, nullable=False), ApiMediaProcessField( include_in_config=True ) diff --git a/src/videoag_common/objects/job.py b/src/videoag_common/objects/job.py index df45d68ad0e3b415feb22a8998b444f5ca9b2dae..f9a5e178c6a3e98c217dcdb4191c78acc49859c7 100644 --- a/src/videoag_common/objects/job.py +++ b/src/videoag_common/objects/job.py @@ -50,13 +50,13 @@ class Job(ApiObject, Base): ) ) input_data: Mapped[JsonTypes] = api_mapped( - mapped_column(sql.JSON, nullable=False), + mapped_column(postgresql.JSONB, nullable=False), ApiJsonField( include_in_data=True ) ) output_data: Mapped[JsonTypes] = api_mapped( - mapped_column(sql.JSON, nullable=True), + mapped_column(postgresql.JSONB, nullable=True), ApiJsonField( include_in_data=True ) @@ -69,7 +69,7 @@ class Job(ApiObject, Base): ) ) on_end_event_data: Mapped[JsonTypes] = api_mapped( - mapped_column(sql.JSON, nullable=True), + mapped_column(postgresql.JSONB, nullable=True), ApiJsonField( include_in_data=True ) diff --git a/src/videoag_common/objects/medium.py b/src/videoag_common/objects/medium.py index fdcb44b9b1f80dda89984c0ca27676446f857312..b103c62ce967f385cd7d7118ff7821082514c2ab 100644 --- a/src/videoag_common/objects/medium.py +++ b/src/videoag_common/objects/medium.py @@ -108,7 +108,7 @@ class SourceMedium(DeletableApiObject, Base): ) # metadata is reserved file_metadata: Mapped[JsonTypes] = api_mapped( - mapped_column(sql.JSON, nullable=True), + mapped_column(postgresql.JSONB, nullable=True), ApiJsonField( include_in_data=True, # See source file sorter for contents @@ -340,6 +340,7 @@ class TargetMedium(DeletableApiObject, Base): class FileMedium(ApiObject): file_path: Mapped[str] = mapped_column(String(collation=STRING_COLLATION), nullable=True, use_existing_column=True, index=True) # TODO move? + # TODO size field @api_include_in_data( type_id="string", @@ -561,7 +562,7 @@ class MediaProcessTemplate(ApiObject, Base): ) ) process: Mapped[dict] = api_mapped( - mapped_column(sql.JSON, nullable=False), + mapped_column(postgresql.JSONB, nullable=False), ApiMediaProcessField( include_in_config=True )