From 10eaf7017b857227c910cc183289661cf76b89c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20K=C3=BCnzel?= <simonk@fsmpi.rwth-aachen.de> Date: Fri, 18 Oct 2024 13:59:52 +0200 Subject: [PATCH] Use JSONB instead of JSON (B for binary) --- src/videoag_common/database/drift_detector.py | 11 +++++++++++ src/videoag_common/objects/course.py | 4 ++-- src/videoag_common/objects/job.py | 6 +++--- src/videoag_common/objects/medium.py | 5 +++-- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/videoag_common/database/drift_detector.py b/src/videoag_common/database/drift_detector.py index 4025e77..e04c99a 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 3259cb3..5f08fde 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 df45d68..f9a5e17 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 fdcb44b..b103c62 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 ) -- GitLab