thenetcircle/dino

View on GitHub
dino/db/rdbms/models.py

Summary

Maintainability
C
1 day
Test Coverage
#!/usr/bin/env python

# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an 'AS IS' BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Boolean, Text, text
from sqlalchemy.orm import relationship

from dino.db.rdbms import DeclarativeBase
from dino.db.rdbms import rooms_users_association_table
from dino.config import UserKeys, SessionKeys

__author__ = 'Oscar Eriksson <oscar.eriks@gmail.com>'


class UserStatus(DeclarativeBase):
    __tablename__ = 'user_status'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True, unique=True)
    status = Column('status', Integer, nullable=False, default=UserKeys.STATUS_UNKNOWN)


class UserInfo(DeclarativeBase):
    __tablename__ = 'user_info'

    id = Column(Integer, primary_key=True)
    user_id = Column('user_id', String(128), nullable=False, index=True, unique=True)
    avatar = Column('avatar', String(1024), nullable=True, index=False, unique=False)
    app_avatar = Column('app_avatar', String(1024), nullable=True, index=False, unique=False)
    app_avatar_safe = Column('app_avatar_safe', String(1024), nullable=True, index=False, unique=False)

    age = Column('age', String(256), nullable=True, index=False, unique=False)
    gender = Column('gender', String(256), nullable=True, index=False, unique=False)
    membership = Column('membership', String(256), nullable=True, index=False, unique=False)
    group = Column('group', String(256), nullable=True, index=False, unique=False)
    country = Column('country', String(256), nullable=True, index=False, unique=False)
    city = Column('city', String(256), nullable=True, index=False, unique=False)
    image = Column('image', String(1024), nullable=True, index=False, unique=False)
    has_webcam = Column('has_webcam', String(256), nullable=True, index=False, unique=False)
    fake_checked = Column('fake_checked', String(256), nullable=True, index=False, unique=False)
    is_streaming = Column('is_streaming', String(256), nullable=True, index=False, unique=False)
    enabled_safe = Column('enabled_safe', String(256), nullable=True, index=False, unique=False)
    last_login = Column('last_login', DateTime, nullable=False)

    def to_dict(self):
        return {
            SessionKeys.user_id.value: self.user_id,
            SessionKeys.avatar.value: self.avatar or '',
            SessionKeys.app_avatar.value: self.app_avatar or '',
            SessionKeys.app_avatar_safe.value: self.app_avatar_safe or '',
            SessionKeys.age.value: self.age or '',
            SessionKeys.gender.value: self.gender or '',
            SessionKeys.membership.value: self.membership or '',
            SessionKeys.group.value: self.group or '',
            SessionKeys.city.value: self.city or '',
            SessionKeys.has_webcam.value: self.has_webcam or '',
            SessionKeys.fake_checked.value: self.fake_checked or '',
            SessionKeys.is_streaming.value: self.is_streaming or '',
            SessionKeys.enabled_safe.value: self.enabled_safe or ''
        }


class Channels(DeclarativeBase):
    __tablename__ = 'channels'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True)
    name = Column('name', String(128), nullable=False)
    created = Column('created', DateTime, nullable=False)
    sort_order = Column('sort_order', Integer, nullable=False, default=1)
    tags = Column('tags', String(128), nullable=True)

    rooms = relationship('Rooms', back_populates='channel')
    roles = relationship('ChannelRoles', back_populates='channel')
    bans = relationship('Bans', back_populates='channel')
    acls = relationship('Acls', back_populates='channel')


class Rooms(DeclarativeBase):
    __tablename__ = 'rooms'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True)
    name = Column('name', String(128), nullable=False, index=True)
    created = Column('created', DateTime, nullable=False)
    admin = Column('admin', Boolean, nullable=False, default=True, index=True)
    ephemeral = Column('ephemeral', Boolean, nullable=False, default=True, index=False)
    sort_order = Column('sort_order', Integer, nullable=False, default=1)

    channel_id = Column('channel_id', Integer, ForeignKey('channels.id'), nullable=False)
    channel = relationship('Channels', back_populates='rooms')

    roles = relationship('RoomRoles', back_populates='room')
    bans = relationship('Bans', back_populates='room')
    acls = relationship('Acls', back_populates='room')

    users = relationship(
        'Users',
        secondary=rooms_users_association_table,
        back_populates='rooms')


class RoomSids(DeclarativeBase):
    __tablename__ = 'roomsids'

    user_id = Column('user_id', String(128), nullable=False, index=True, primary_key=True)
    room_id = Column('room_id', String(128), nullable=False, index=True, primary_key=True)
    session_id = Column('session_id', String(128), nullable=False, index=True, primary_key=True)


class DefaultRooms(DeclarativeBase):
    __tablename__ = 'defaultrooms'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True)


class Mutes(DeclarativeBase):
    __tablename__ = 'mutes'

    id = Column(Integer, primary_key=True)
    user_id = Column('user_id', String(128), nullable=False, index=True)
    duration = Column('duration', String(128), nullable=False)
    timestamp = Column('time_stamp', DateTime, nullable=False)

    reason = Column('reason', Text(), nullable=True)
    muter_id = Column('muter_id', String(128), nullable=True)

    room_id = Column('room_id', String(128), nullable=False, index=True)
    room_name = Column('room_name', String(128), nullable=True)


class Bans(DeclarativeBase):
    __tablename__ = 'bans'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True, unique=True)
    user_id = Column('user_id', String(128), nullable=False, index=True)
    user_name = Column('user_name', String(128), nullable=True, index=False)
    duration = Column('duration', String(128), nullable=False)
    timestamp = Column('time_stamp', DateTime, nullable=False)

    reason = Column('reason', String(256), nullable=True)
    banner_id = Column('banner_id', String(128), nullable=True)

    room_id = Column('room_id', Integer, ForeignKey('rooms.id'), nullable=True)
    room = relationship('Rooms', back_populates='bans')

    channel_id = Column('channel_id', Integer, ForeignKey('channels.id'), nullable=True)
    channel = relationship('Channels', back_populates='bans')

    is_global = Column('is_global', Boolean, nullable=False, index=True, default=False)


class Users(DeclarativeBase):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    uuid = Column('uuid', String(128), nullable=False, index=True)
    name = Column('name', String(128), nullable=False)

    # deprecated
    sid = Column('session_id', String(128), nullable=True)

    rooms = relationship(
        'Rooms',
        secondary=rooms_users_association_table,
        back_populates='users')


class Sids(DeclarativeBase):
    __tablename__ = 'sids'

    user_uuid = Column('user_uuid', String(128), nullable=False, index=True, primary_key=True)
    sid = Column('session_id', String(128), nullable=False, index=True, primary_key=True)


class LastReads(DeclarativeBase):
    __tablename__ = 'lastreads'

    id = Column(Integer, primary_key=True)

    room_uuid = Column('room_uuid', String(128), nullable=False, index=True)
    user_id = Column('user_id', String(128), nullable=False, index=True)
    time_stamp = Column('time_stamp', Integer, nullable=False)


class LastOnline(DeclarativeBase):
    __tablename__ = 'lastonline'

    id = Column(Integer, primary_key=True)

    uuid = Column('uuid', String(128), nullable=False, index=True)
    at = Column('at', Integer, nullable=False, index=True)


class Config(DeclarativeBase):
    __tablename__ = 'service_config'

    id = Column(Integer, primary_key=True)
    spam_enabled = Column('spam_enabled', Boolean, nullable=False, default=True)
    spam_should_delete = Column('spam_should_delete', Boolean, nullable=False, default=False)
    spam_should_save = Column('spam_should_save', Boolean, nullable=False, default=False)
    spam_min_length = Column('spam_min_length', Integer, nullable=False, default=10)
    spam_max_length = Column('spam_max_length', Integer, nullable=False, default=250)
    spam_threshold = Column('spam_threshold', Integer, nullable=False, default=80)
    spam_ignore_emoji = Column('spam_ignore_emoji', Boolean, nullable=False, default=True)


class Spams(DeclarativeBase):
    __tablename__ = 'spams'
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}

    id = Column(Integer, primary_key=True)

    message = Column('message', Text, nullable=False)
    message_id = Column('message_id', String(128), nullable=True)
    message_deleted = Column('message_deleted', Boolean, nullable=False, default=False)

    from_uid = Column('from_uid', String(128), nullable=False, index=True)
    from_name = Column('from_name', String(128), nullable=False, index=True)
    to_uid = Column('to_uid', String(128), nullable=False)
    to_name = Column('to_name', String(128), nullable=False)
    object_type = Column('object_type', String(128), nullable=False)
    probability = Column('probability', String(128), nullable=False)
    correct = Column('is_correct', Boolean, nullable=False, default=True)
    time_stamp = Column('time_stamp', Integer, nullable=False)


class Acls(DeclarativeBase):
    __tablename__ = 'acls'

    id = Column(Integer, primary_key=True)

    room_id = Column('room_id', Integer, ForeignKey('rooms.id'), nullable=True)
    room = relationship('Rooms', back_populates='acls')

    channel_id = Column('channel_id', Integer, ForeignKey('channels.id'), nullable=True)
    channel = relationship('Channels', back_populates='acls')

    # action: join/create/kick etc.
    action = Column('action', String(128), nullable=False)

    # acl_type: gender/age/city etc.
    acl_type = Column('acl_type', String(128), nullable=False)
    acl_value = Column('acl_value', String(128), nullable=False)


class AclConfigs(DeclarativeBase):
    __tablename__ = 'aclconfigs'

    id = Column(Integer, primary_key=True)

    # method: str_in_csv/range etc.
    method = Column('method', String(128), nullable=False)

    # acl_type: gender/age/city etc.
    acl_type = Column('acl_type', String(128), nullable=False)

    # acl_value: the configured value, e.g. 'm,f' for an acl_type 'gender'
    acl_value = Column('acl_value', String(128), nullable=False)


class Joins(DeclarativeBase):
    __tablename__ = 'joins'

    room_id = Column(String(36), primary_key=True)
    room_name = Column(String(128), nullable=True, index=True)
    amount = Column(Integer, nullable=False, default=0)


class BlackList(DeclarativeBase):
    __tablename__ = 'blacklist'

    id = Column(Integer, primary_key=True)
    word = Column('word', String(128), nullable=False)


class RoomRoles(DeclarativeBase):
    __tablename__ = 'room_roles'

    id = Column(Integer, primary_key=True)

    room_id = Column('room_id', Integer, ForeignKey('rooms.id'), nullable=False)
    room = relationship('Rooms', back_populates='roles')

    user_id = Column('user_id', String(128), nullable=False, index=True)
    roles = Column('roles', String(256), nullable=False)


class GlobalRoles(DeclarativeBase):
    __tablename__ = 'global_roles'

    id = Column(Integer, primary_key=True)
    user_id = Column('user_id', String(128), nullable=False, index=True)
    roles = Column('roles', String(256), nullable=False)


class ChannelRoles(DeclarativeBase):
    __tablename__ = 'channel_roles'

    id = Column(Integer, primary_key=True)

    channel_id = Column('channel_id', Integer, ForeignKey('channels.id'), nullable=False)
    channel = relationship('Channels', back_populates='roles')

    user_id = Column('user_id', String(128), nullable=False, index=True)
    roles = Column('roles', String(256), nullable=False)