Ejemplo n.º 1
0
class Tag(db.Model):
    '''finger-style, classic songs, etude, new hot songs'''
    __tablename__ = 'tag'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    name = db.Column(db.String, nullable=False)
    update_time = db.Column(db.String(20))

    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.update_time = time.strftime('%Y-%m-%d %H:%M:%S')

    def __repr__(self):
        return '<Tag %r>' % self.name
Ejemplo n.º 2
0
class TabFile(db.Model):
    __tablename__ = 'tabfile'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    filename = db.Column(db.String(200), nullable=False)
    update_time = db.Column(db.String(20), nullable=False)
    tab_id = db.Column(db.String(50),
                       db.ForeignKey('tab.id', ondelete='CASCADE'))

    def __init__(self, id, tab_id, filename):
        self.id = id
        self.tab_id = tab_id
        self.filename = filename
        self.update_time = strftime('%Y-%m-%d %H:%M:%S')

    def __repr__(self):
        return '<TabFile %r %r>' % (self.id, self.file_basename)

    @property
    def file_relpath(self):
        return os.path.join(current_app.config['TAB_FILE_FOLDER'], self.tab_id,
                            self.filename)

    @property
    def file_abspath(self):
        return os.path.join(get_tabfile_upload_abspath(), self.tab_id,
                            self.filename)

    @property
    def file_basename(self):
        return self.filename.split('/')[-1]

    @property
    def serialize(self):
        """Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'tab_id': self.tab_id,
            'update_time': self.update_time,
            'file_basename': self.file_basename,
            'file_relpath': self.file_relpath
        }
Ejemplo n.º 3
0
class Administrator(db.Model):
    __tablename__ = 'administrator'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    status = db.Column(db.Integer, nullable=False, default=1)

    def __init__(self, id, name, email, password, status):
        self.id = id
        self.name = name
        self.email = email
        self.password = password
        self.status = status

    def check_password(self, password):
        return check_password_hash(self.password, password)

    def update_password(self, new_password):
        self.password = generate_password_hash(new_password, salt_length=8)

    def is_authenticated(self):
        return True

    def is_active(self):
        return self.status

    def is_anonymous(self):
        return False

    def get_id(self):
        return self.id

    def __repr__(self):
        return '<AdminUser %r>' % self.name
Ejemplo n.º 4
0
class Artist(db.Model):
    __tablename__ = 'artist'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    name = db.Column(db.String(50), nullable=False)
    letter = db.Column(db.String(5), nullable=False, index=True)
    photo = db.Column(db.String)
    region_id = db.Column(db.Integer, nullable=False, default=1)
    category_id = db.Column(db.Integer, nullable=False, default=1)
    update_time = db.Column(db.String(20), nullable=False, index=True)
    tabs = db.relationship('Tab',
                           backref='artist',
                           cascade='all,delete-orphan',
                           lazy='dynamic')

    def __init__(self, id, name, letter, photo, region_id, category_id):
        self.id = id
        self.name = name
        self.letter = letter
        self.photo = photo
        self.category_id = category_id
        self.region_id = region_id
        self.update_time = time.strftime('%Y-%m-%d %H:%M:%S')

    def __repr__(self):
        return '<Artist %r>' % self.name

    @property
    def region_text(self):
        return ArtistRegion.get_item_text(self.region_id)

    @property
    def category_text(self):
        return ArtistCategory.get_item_text(self.category_id)

    @property
    def photo_relative_path(self):
        nophoto_path = url_for('static', filename='images/nophoto.png')

        if self.photo == '':
            return nophoto_path

        photo_path = os.path.join(current_app.config['ARTIST_PHOTO_FOLDER'],
                                  self.photo)
        if os.path.isfile(oshelper.get_abspath(photo_path)):
            return photo_path
        else:
            return nophoto_path

    @property
    def serialize(self):
        """Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'name': self.name,
            'letter': self.letter,
            'category_id': self.category_id,
            'category_text': self.category_text,
            'region_id': self.region_id,
            'region_text': self.region_text,
            'photo_relative_path': self.photo_relative_path,
            'update_time': self.update_time
        }
Ejemplo n.º 5
0
class Tab(db.Model):
    __tablename__ = 'tab'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    title = db.Column(db.String(50), nullable=False)
    audio_url = db.Column(db.String)
    format_id = db.Column(db.Integer, nullable=False)
    difficulty_id = db.Column(db.Integer, nullable=False, default=1)
    style_id = db.Column(db.Integer, nullable=False, default=1)
    artist_id = db.Column(db.String(50),
                          db.ForeignKey('artist.id'),
                          index=True)
    hits = db.Column(db.Integer, nullable=False, index=True, default=0)
    update_time = db.Column(db.String(20), nullable=False, index=True)
    tags = db.relationship('Tag',
                           secondary=tag_tab,
                           backref='tabs',
                           lazy='dynamic',
                           passive_deletes=True)
    tabfiles = db.relationship('TabFile',
                               backref='tab',
                               cascade='all,delete-orphan',
                               lazy='dynamic',
                               passive_deletes=True)

    def __init__(self, id, title, format_id, artist_id, difficulty_id,
                 style_id, audio_url, tags):
        self.id = id
        self.title = title
        self.format_id = format_id
        self.artist_id = artist_id
        self.difficulty_id = difficulty_id
        self.style_id = style_id
        self.audio_url = audio_url
        self.hit = 0
        self.update_time = time.strftime('%Y-%m-%d %H:%M:%S')
        if tags:
            self.set_tags(tags)

    def __repr__(self):
        return '<Tab %r>' % self.title

    @property
    def difficulty_text(self):
        return DifficultyDegree.get_item_text(self.difficulty_id)

    @property
    def style_text(self):
        return MusicStyle.get_item_text(self.style_id)

    @property
    def format_text(self):
        return TabFormat.get_item_text(self.format_id)

    def set_tags(self, value):
        if self.tags:
            for tag in self.tags:
                self.tags.remove(tag)
            if value:
                for tag in value:
                    self.append_tag(tag)

    def append_tag(self, tag):
        if tag and isinstance(tag, Tag):
            # reload tag by id to void error that <object xxx is already attached in session>
            renew_tag = Tag.query.get(tag.id)
            if tag:
                self.tags.append(renew_tag)
Ejemplo n.º 6
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from guitarfan.extensions.flasksqlalchemy import db
from guitarfan.models.tag import Tag
from enums import *

# tag-tab link table
tag_tab = db.Table(
    'tag_tab',
    db.Column('tag_id',
              db.Integer,
              db.ForeignKey('tag.id', ondelete='CASCADE'),
              index=True),
    db.Column('tab_id',
              db.Integer,
              db.ForeignKey('tab.id', ondelete='CASCADE'),
              index=True))


class Tab(db.Model):
    __tablename__ = 'tab'

    id = db.Column(db.String(50), primary_key=True, unique=True)
    title = db.Column(db.String(50), nullable=False)
    audio_url = db.Column(db.String)
    format_id = db.Column(db.Integer, nullable=False)
    difficulty_id = db.Column(db.Integer, nullable=False, default=1)
    style_id = db.Column(db.Integer, nullable=False, default=1)
    artist_id = db.Column(db.String(50),