From c408693549f7e3dde3ea0bf2961752f6e6c015ee Mon Sep 17 00:00:00 2001 From: ThrawnCA Date: Mon, 3 Feb 2025 13:13:19 +1000 Subject: [PATCH] [QOLDEV-1011] update database setup to handle SQLAlchemy 2.0 --- ckanext/datarequests/db.py | 100 ++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/ckanext/datarequests/db.py b/ckanext/datarequests/db.py index d50e971..a28aecc 100644 --- a/ckanext/datarequests/db.py +++ b/ckanext/datarequests/db.py @@ -22,22 +22,64 @@ import logging from ckan import model -from ckan.model.meta import mapper, metadata +from ckan.model.meta import metadata from ckanext.datarequests import constants from sqlalchemy import func, DDL +from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.sql.expression import or_ from . import common log = logging.getLogger(__name__) +Base = declarative_base(metadata=metadata) + def uuid4(): return str(uuid.uuid4()) -class DataRequest(model.DomainObject): +closing_circumstances_enabled = common.get_config_bool_value('ckan.datarequests.enable_closing_circumstances', False) + +datarequests_table = sa.Table('datarequests', metadata, + sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), + sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), + sa.Column('title', sa.types.Unicode(constants.NAME_MAX_LENGTH), primary_key=True, default=u''), + sa.Column('description', sa.types.Unicode(constants.DESCRIPTION_MAX_LENGTH), primary_key=False, default=u''), + sa.Column('organization_id', sa.types.UnicodeText, primary_key=False, default=None), + sa.Column('open_time', sa.types.DateTime, primary_key=False, default=None), + sa.Column('accepted_dataset_id', sa.types.UnicodeText, primary_key=False, default=None), + sa.Column('close_time', sa.types.DateTime, primary_key=False, default=None), + sa.Column('closed', sa.types.Boolean, primary_key=False, default=False), + sa.Column('close_circumstance', sa.types.Unicode(constants.CLOSE_CIRCUMSTANCE_MAX_LENGTH), primary_key=False, default=u'') + if closing_circumstances_enabled else None, + sa.Column('approx_publishing_date', sa.types.DateTime, primary_key=False, default=None) + if closing_circumstances_enabled else None, + extend_existing=True, + ) + +comments_table = sa.Table('datarequests_comments', metadata, + sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), + sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), + sa.Column('datarequest_id', sa.types.UnicodeText, primary_key=True, default=uuid4), + sa.Column('time', sa.types.DateTime, primary_key=True, default=u''), + sa.Column('comment', sa.types.Unicode(constants.COMMENT_MAX_LENGTH), primary_key=False, default=u''), + extend_existing=True + ) + +followers_table = sa.Table('datarequests_followers', metadata, + sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), + sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), + sa.Column('datarequest_id', sa.types.UnicodeText, primary_key=True, default=uuid4), + sa.Column('time', sa.types.DateTime, primary_key=True, default=u''), + extend_existing=True + ) + + +class DataRequest(model.DomainObject, Base): + + __table__ = datarequests_table @classmethod def get(cls, **kw): @@ -81,7 +123,9 @@ def get_open_datarequests_number(cls): return model.Session.query(func.count(cls.id)).filter_by(closed=False).scalar() -class Comment(model.DomainObject): +class Comment(model.DomainObject, Base): + + __table__ = comments_table @classmethod def get(cls, **kw): @@ -104,7 +148,9 @@ def get_comment_datarequests_number(cls, **kw): return model.Session.query(func.count(cls.id)).filter_by(**kw).scalar() -class DataRequestFollower(model.DomainObject): +class DataRequestFollower(model.DomainObject, Base): + + __table__ = followers_table @classmethod def get(cls, **kw): @@ -120,52 +166,6 @@ def get_datarequest_followers_number(cls, **kw): return model.Session.query(func.count(cls.id)).filter_by(**kw).scalar() -closing_circumstances_enabled = common.get_config_bool_value('ckan.datarequests.enable_closing_circumstances', False) - -# FIXME: References to the other tables... -datarequests_table = sa.Table('datarequests', metadata, - sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), - sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), - sa.Column('title', sa.types.Unicode(constants.NAME_MAX_LENGTH), primary_key=True, default=u''), - sa.Column('description', sa.types.Unicode(constants.DESCRIPTION_MAX_LENGTH), primary_key=False, default=u''), - sa.Column('organization_id', sa.types.UnicodeText, primary_key=False, default=None), - sa.Column('open_time', sa.types.DateTime, primary_key=False, default=None), - sa.Column('accepted_dataset_id', sa.types.UnicodeText, primary_key=False, default=None), - sa.Column('close_time', sa.types.DateTime, primary_key=False, default=None), - sa.Column('closed', sa.types.Boolean, primary_key=False, default=False), - sa.Column('close_circumstance', sa.types.Unicode(constants.CLOSE_CIRCUMSTANCE_MAX_LENGTH), primary_key=False, default=u'') - if closing_circumstances_enabled else None, - sa.Column('approx_publishing_date', sa.types.DateTime, primary_key=False, default=None) - if closing_circumstances_enabled else None, - extend_existing=True, - ) - -mapper(DataRequest, datarequests_table) - -# FIXME: References to the other tables... -comments_table = sa.Table('datarequests_comments', metadata, - sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), - sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), - sa.Column('datarequest_id', sa.types.UnicodeText, primary_key=True, default=uuid4), - sa.Column('time', sa.types.DateTime, primary_key=True, default=u''), - sa.Column('comment', sa.types.Unicode(constants.COMMENT_MAX_LENGTH), primary_key=False, default=u''), - extend_existing=True - ) - -mapper(Comment, comments_table,) - -# FIXME: References to the other tables... -followers_table = sa.Table('datarequests_followers', metadata, - sa.Column('id', sa.types.UnicodeText, primary_key=True, default=uuid4), - sa.Column('user_id', sa.types.UnicodeText, primary_key=False, default=u''), - sa.Column('datarequest_id', sa.types.UnicodeText, primary_key=True, default=uuid4), - sa.Column('time', sa.types.DateTime, primary_key=True, default=u''), - extend_existing=True - ) - -mapper(DataRequestFollower, followers_table,) - - def init_db(deprecated_model=None): metadata.create_all(model.meta.engine)