# HG changeset patch # User Marcin Kuzminski # Date 2017-04-11 20:20:10 # Node ID e353283cd2e51ddea6f8aed1fb46b94e2ce9ef53 # Parent cfb5e8aeac02aa7b9e0b8e1dc92203fa49420c0e user-journal: prepare new datastructure for v2 of user logs. - fixes #5259 diff --git a/rhodecode/__init__.py b/rhodecode/__init__.py --- a/rhodecode/__init__.py +++ b/rhodecode/__init__.py @@ -51,7 +51,7 @@ PYRAMID_SETTINGS = {} EXTENSIONS = {} __version__ = ('.'.join((str(each) for each in VERSION[:3]))) -__dbversion__ = 71 # defines current db version for migrations +__dbversion__ = 72 # defines current db version for migrations __platform__ = platform.system() __license__ = 'AGPLv3, and Commercial License' __author__ = 'RhodeCode GmbH' diff --git a/rhodecode/lib/dbmigrate/versions/072_version_4_8_0.py b/rhodecode/lib/dbmigrate/versions/072_version_4_8_0.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/dbmigrate/versions/072_version_4_8_0.py @@ -0,0 +1,61 @@ +import os +import logging +import datetime + +from sqlalchemy import * +from sqlalchemy.exc import DatabaseError +from sqlalchemy.orm import relation, backref, class_mapper, joinedload +from sqlalchemy.orm.session import Session +from sqlalchemy.ext.declarative import declarative_base + +from rhodecode.lib.dbmigrate.migrate import * +from rhodecode.lib.dbmigrate.migrate.changeset import * +from rhodecode.lib.utils2 import str2bool + +from rhodecode.model.meta import Base +from rhodecode.model import meta +from rhodecode.lib.dbmigrate.versions import _reset_base, notify + +log = logging.getLogger(__name__) + + +def get_by_key(cls, key): + return cls.query().filter(cls.ui_key == key).scalar() + + +def get_repos_location(cls): + return get_by_key(cls, '/').ui_value + + +def upgrade(migrate_engine): + """ + Upgrade operations go here. + Don't create your own engine; bind migrate_engine to your metadata + """ + _reset_base(migrate_engine) + from rhodecode.lib.dbmigrate.schema import db_4_7_0_1 as db + + # add last_activity + user_log_table = db.UserLog.__table__ + + user_data = Column('user_data_json', db.JsonType(dialect_map=dict(mysql=UnicodeText(16384)))) + user_data.create(table=user_log_table) + + version = Column("version", String(255), nullable=True, default='v2') + version.create(table=user_log_table) + + action_data = Column('action_data_json', db.JsonType(dialect_map=dict(mysql=UnicodeText(16384)))) + action_data.create(table=user_log_table) + + # issue fixups + fixups(db, meta.Session) + + +def downgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + + +def fixups(models, _SESSION): + pass + diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1107,6 +1107,10 @@ class UserLog(Base, BaseModel): action = Column("action", Text().with_variant(Text(1200000), 'mysql'), nullable=True, unique=None, default=None) action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None) + version = Column("version", String(255), nullable=True, default='v2') + user_data = Column('user_data_json', MutationObj.as_mutable(JsonType(dialect_map=dict(mysql=UnicodeText(16384))))) + action_data = Column('action_data_json', MutationObj.as_mutable(JsonType(dialect_map=dict(mysql=UnicodeText(16384))))) + def __unicode__(self): return u"<%s('id:%s:%s')>" % ( self.__class__.__name__, self.repository_name, self.action)