Пример #1
0
class Interpretation(BaseModel):
    def __init__(self, database):
        self.song = Song(database)
        self.database = database

    def create_interpretation(self, data):
        data['wave_file'] = 'storage/wave_files/' + md5(
            str(data['song_id']) + data['registry'] +
            list_to_csv(data['effects'])) + '.wav'

        rtttl = self.song.get_song_rtttl_by_id(data['song_id'])
        wav_generator = WavGenerator(data['song_id'], data['registry'], rtttl,
                                     data['effects'])
        wav_generator.save()

        data['effects'] = list_to_csv(data['effects'])

        self.database.query(
            'INSERT INTO interpretations(song_id, registry, effects, wave_file, votes) VALUES(?, ?, ?, ?, ?)',
            (data['song_id'], data['registry'], data['effects'],
             data['wave_file'], 0))

        data['id'] = self.database.cursor.lastrowid

        return data

    def get_all_interpretations(self):
        interpretations = self.database.fetch('SELECT * FROM interpretations')
        return interpretations

    def get_interpretation_by_id(self, id):
        interpretation = self.database.fetch(
            'SELECT * FROM interpretations WHERE id=?', (id, ))
        return interpretation[0]

    def get_interpretation_votes_by_id(self, id):
        interpretation = self.database.fetch(
            'SELECT votes FROM interpretations WHERE id=?', (id, ))
        return interpretation[0]['votes']

    def get_interpretations_by_song_id(self, song_id):
        interpretations = self.database.fetch(
            'SELECT * FROM interpretations WHERE song_id=?', (song_id, ))
        return interpretations

    def get_interpretations_wave_files_by_song_id(self, song_id):
        wave_files = self.database.fetch(
            'SELECT * FROM interpretations WHERE song_id=?', (song_id, ))
        return wave_files

    def upvote_interpretation_by_id(self, id):
        self.database.query(
            'UPDATE interpretations SET votes = votes + 1 WHERE id=?', (id, ))

    def downvote_interpretation_by_id(self, id):
        self.database.query(
            'UPDATE interpretations SET votes = votes - 1 WHERE id=?', (id, ))
Пример #2
0
class Interpretation(BaseModel):
    def __init__(self, database):
        self.song     = Song(database)
        self.database = database

    def create_interpretation(self, data):
        data['wave_file'] = 'storage/wave_files/' + md5(str(data['song_id']) + data['registry'] + list_to_csv(data['effects'])) + '.wav'

        rtttl = self.song.get_song_rtttl_by_id(data['song_id'])
        wav_generator = WavGenerator(data['song_id'], data['registry'], rtttl, data['effects'])
        wav_generator.save()

        data['effects'] = list_to_csv(data['effects'])

        self.database.query('INSERT INTO interpretations(song_id, registry, effects, wave_file, votes) VALUES(?, ?, ?, ?, ?)', (data['song_id'], data['registry'], data['effects'], data['wave_file'], 0))

        data['id'] = self.database.cursor.lastrowid

        return data

    def get_all_interpretations(self):
        interpretations = self.database.fetch('SELECT * FROM interpretations')
        return interpretations

    def get_interpretation_by_id(self, id):
        interpretation = self.database.fetch('SELECT * FROM interpretations WHERE id=?', (id,))
        return interpretation[0]

    def get_interpretation_votes_by_id(self, id):
        interpretation = self.database.fetch('SELECT votes FROM interpretations WHERE id=?', (id,))
        return interpretation[0]['votes']

    def get_interpretations_by_song_id(self, song_id):
        interpretations = self.database.fetch('SELECT * FROM interpretations WHERE song_id=?', (song_id,))
        return interpretations

    def get_interpretations_wave_files_by_song_id(self, song_id):
        wave_files = self.database.fetch('SELECT * FROM interpretations WHERE song_id=?', (song_id,))
        return wave_files

    def upvote_interpretation_by_id(self, id):
        self.database.query('UPDATE interpretations SET votes = votes + 1 WHERE id=?', (id,))

    def downvote_interpretation_by_id(self, id):
        self.database.query('UPDATE interpretations SET votes = votes - 1 WHERE id=?', (id,))
Пример #3
0
class ApiController(object):
    def __init__(self, database):
        self.song           = Song(database)
        self.interpretation = Interpretation(database)

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def index(self):
        return self.respond_failure('The API root has no resources.')

    @cherrypy.tools.json_out()
    @cherrypy.expose
    def create_song(self, rtttl):
        try:
            if len(rtttl) == 0:
                raise Exception('Empty RTTTL string.')

            data = {
                'rtttl': str(rtttl)
            }

            data = self.song.create_song(data)

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.tools.json_out()
    @cherrypy.expose
    def create_interpretation(self, song_id, registry, effects):
        try:
            if len(song_id) == 0:
                raise Exception('Empty song ID.')

            if len(registry) == 0:
                raise Exception('Empty registry.')

            if len(effects) == 0:
                effects = []
            else:
                effects = effects.split(',')

            data = {
                'song_id':  int(song_id),
                'registry': str(registry),
                'effects':  list(effects)
            }

            data = self.interpretation.create_interpretation(data)

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def list_songs(self):
        try:
            songs = self.song.get_all_songs()

            data = {
                'songs': list(songs)
            }

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def list_song_files(self, id):
        try:
            wave_form_file = self.song.get_song_wave_form_file_by_id(id)
            wave_files = self.interpretation.get_interpretations_wave_files_by_song_id(id)

            data = {
                'wave_form_file': str(wave_form_file),
                'wave_files': list(wave_files)
            }

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_notes(self, id):
        try:
            notes = self.song.get_song_rtttl_by_id(id)

            data = {
                'notes': str(notes)
            }

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_wave_file(self, id):
        try:
            interpretation = self.interpretation.get_interpretation_by_id(id)

            data = {
                'wave_file': str(interpretation['wave_file'])
            }

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_wave_form(self, id):
        try:
            wave_form_file = self.song.get_song_wave_form_file_by_id(id)

            data = {
                'wave_form_file': str(wave_form_file)
            }

            return self.respond_success(data = data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def submit_vote(self, id, vote):
        try:
            if int(vote) > 0:
                self.interpretation.upvote_interpretation_by_id(id)
            else:
                self.interpretation.downvote_interpretation_by_id(id)
            return self.respond_success()
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.tools.json_out()
    def respond(self, success = True, message = '', data = []):
        output = {
            'success': success,
            'message': message,
            'data': data
        }

        return output

    @cherrypy.tools.json_out()
    def respond_success(self, message = 'Your request was successful.', data = []):
        return self.respond(True, message, data)

    @cherrypy.tools.json_out()
    def respond_failure(self, message = 'Your request was a failure.', data = []):
        return self.respond(False, message, data)
Пример #4
0
class ApiController(object):
    def __init__(self, database):
        self.song = Song(database)
        self.interpretation = Interpretation(database)

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def index(self):
        return self.respond_failure('The API root has no resources.')

    @cherrypy.tools.json_out()
    @cherrypy.expose
    def create_song(self, rtttl):
        try:
            if len(rtttl) == 0:
                raise Exception('Empty RTTTL string.')

            data = {'rtttl': str(rtttl)}

            data = self.song.create_song(data)

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.tools.json_out()
    @cherrypy.expose
    def create_interpretation(self, song_id, registry, effects):
        try:
            if len(song_id) == 0:
                raise Exception('Empty song ID.')

            if len(registry) == 0:
                raise Exception('Empty registry.')

            if len(effects) == 0:
                effects = []
            else:
                effects = effects.split(',')

            data = {
                'song_id': int(song_id),
                'registry': str(registry),
                'effects': list(effects)
            }

            data = self.interpretation.create_interpretation(data)

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def list_songs(self):
        try:
            songs = self.song.get_all_songs()

            data = {'songs': list(songs)}

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def list_song_files(self, id):
        try:
            wave_form_file = self.song.get_song_wave_form_file_by_id(id)
            wave_files = self.interpretation.get_interpretations_wave_files_by_song_id(
                id)

            data = {
                'wave_form_file': str(wave_form_file),
                'wave_files': list(wave_files)
            }

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_notes(self, id):
        try:
            notes = self.song.get_song_rtttl_by_id(id)

            data = {'notes': str(notes)}

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_wave_file(self, id):
        try:
            interpretation = self.interpretation.get_interpretation_by_id(id)

            data = {'wave_file': str(interpretation['wave_file'])}

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def get_wave_form(self, id):
        try:
            wave_form_file = self.song.get_song_wave_form_file_by_id(id)

            data = {'wave_form_file': str(wave_form_file)}

            return self.respond_success(data=data)
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.expose
    @cherrypy.tools.json_out()
    def submit_vote(self, id, vote):
        try:
            if int(vote) > 0:
                self.interpretation.upvote_interpretation_by_id(id)
            else:
                self.interpretation.downvote_interpretation_by_id(id)
            return self.respond_success()
        except Exception as e:
            return self.respond_failure(str(e))

    @cherrypy.tools.json_out()
    def respond(self, success=True, message='', data=[]):
        output = {'success': success, 'message': message, 'data': data}

        return output

    @cherrypy.tools.json_out()
    def respond_success(self, message='Your request was successful.', data=[]):
        return self.respond(True, message, data)

    @cherrypy.tools.json_out()
    def respond_failure(self, message='Your request was a failure.', data=[]):
        return self.respond(False, message, data)