示例#1
0
文件: app.py 项目: dychen/dandora
def update_or_create(model, defaults={}, commit=True, **kwargs):
    """
    Equivalent of Django's update_or_create, with an additional option to
    commit the transaction (commits by default).
    @param model: Model to update, e.g. Song
    @param defaults: Parameters to update, e.g. {
        'playback_count': 1000, 'likes_count': 10
    }
    @param commit: Commit the transaction?
    @param **kwargs: Parameters to check uniqueness on, e.g. {
        'title': 'How We Do', 'artist': '50 Cent'
    }
    """
    model_instance = DB_SESSION.query(model).filter_by(**kwargs).first()
    if model_instance:
        for arg, value in defaults.iteritems():
            setattr(model_instance, arg, value)
        if commit:
            DB_SESSION.commit()
        return model_instance, True
    else:
        params = { k: v for k, v in kwargs.iteritems() }
        params.update(defaults)
        model_instance = model(**params)
        DB_SESSION.add(model_instance)
        if commit:
            DB_SESSION.commit()
        return model_instance, False
示例#2
0
文件: app.py 项目: dychen/dandora
def artists():
    def artist_filter(artist_str):
        stop_words = ['ft.', 'feat', 'featuring', '_', '+', '/', '|']
        artist_str = artist_str.lower()
        for stop_word in stop_words:
            if stop_word in artist_str:
                return False
        return True

    # Result set is a list of tuples [('[Artist]',), ...]
    artists = [s[0] for s in DB_SESSION.query(Song.artist.distinct())
               if artist_filter(s[0])]
    return jsonify({
        'length': len(artists),
        'data': artists
    })