コード例 #1
0
ファイル: server.py プロジェクト: SudeepSidhu/TCMusicBot
 def __init__(self):
     self.storage = MongoConnection(db='tc_music', collection='server_stats')
コード例 #2
0
 def __init__(self):
     self.storage = MongoConnection(db='tc_music',
                                    collection='server_stats')
コード例 #3
0
ファイル: server.py プロジェクト: SudeepSidhu/TCMusicBot
class ServerDataAccess(object):

    """ DAO for server stat management
    """
    def __init__(self):
        self.storage = MongoConnection(db='tc_music', collection='server_stats')

    def create_server_statistics(self):
        # Rebuild the server stats entry
        self.storage.use_collection('server_stats').update({}, {'$set': {'currently_playing': {}, 'status': 'polling', 'volume': '50', 'radio': ''}},upsert=True)

    def get_radio(self):
        return self.storage.use_collection('server_stats').find_one({}, {'radio': True})

    def set_radio(self, genre):
        return self.storage.use_collection('server_stats').update({}, {'$set': {'radio': genre}}, upsert=True)

    def get_volume(self):
        return self.storage.use_collection('server_stats').find_one({}, {'volume': True})

    def set_volume(self, volume):
        return self.storage.use_collection('server_stats').update({}, {'$set': {'volume': volume}},upsert=False)

    def get_currently_playing(self):
        result = {}
        stats = self.storage.use_collection('server_stats').find_one()

        if stats['status'] == 'playing':
            result = stats['currently_playing']

        return result

    def set_currently_playing(self, song=None):

        if isinstance(song, dict):
            print "Setting server status to playing"
            return self.storage.use_collection('server_stats').update({}, {'$set': {'currently_playing': extract_song_data(song), 'status': 'playing'}}, upsert=False)
        else:
            print "Server polling..."
            return self.storage.use_collection('server_stats').update({}, {'$set': {'currently_playing': {}, 'status': 'polling'}}, upsert=True)

    def get_total_songs_played(self):
        return self.storage.use_collection('server_stats').find_one({}, {'total_songs_played': True})

    def set_total_songs_played(self, total_songs):
        return self.storage.use_collection('server_stats').update({}, {'$set': {'total_songs_played': total_songs}}, upsert=False)

    def increment_total_songs_played(self):
        return self.storage.use_collection('server_stats').update({}, {'$inc': {'total_songs_played': 1}}, upsert=False)

    def get_server_status(self):
        return self.storage.use_collection('server_stats').find_one({}, {'status': True})

    def set_server_status(self, status):
        return self.storage.use_collection('server_stats').update({}, {'$set': {'status': status}}, upsert=False)
コード例 #4
0
class ServerDataAccess(object):
    """ DAO for server stat management
    """
    def __init__(self):
        self.storage = MongoConnection(db='tc_music',
                                       collection='server_stats')

    def create_server_statistics(self):
        # Rebuild the server stats entry
        self.storage.use_collection('server_stats').update({}, {
            '$set': {
                'currently_playing': {},
                'status': 'polling',
                'volume': '50',
                'radio': ''
            }
        },
                                                           upsert=True)

    def get_radio(self):
        return self.storage.use_collection('server_stats').find_one(
            {}, {'radio': True})

    def set_radio(self, genre):
        return self.storage.use_collection('server_stats').update(
            {}, {'$set': {
                'radio': genre
            }}, upsert=True)

    def get_volume(self):
        return self.storage.use_collection('server_stats').find_one(
            {}, {'volume': True})

    def set_volume(self, volume):
        return self.storage.use_collection('server_stats').update(
            {}, {'$set': {
                'volume': volume
            }}, upsert=False)

    def get_currently_playing(self):
        result = {}
        stats = self.storage.use_collection('server_stats').find_one()

        if stats['status'] == 'playing':
            result = stats['currently_playing']

        return result

    def set_currently_playing(self, song=None):

        if isinstance(song, dict):
            print "Setting server status to playing"
            return self.storage.use_collection('server_stats').update(
                {}, {
                    '$set': {
                        'currently_playing': extract_song_data(song),
                        'status': 'playing'
                    }
                },
                upsert=False)
        else:
            print "Server polling..."
            return self.storage.use_collection('server_stats').update(
                {}, {'$set': {
                    'currently_playing': {},
                    'status': 'polling'
                }},
                upsert=True)

    def get_total_songs_played(self):
        return self.storage.use_collection('server_stats').find_one(
            {}, {'total_songs_played': True})

    def set_total_songs_played(self, total_songs):
        return self.storage.use_collection('server_stats').update(
            {}, {'$set': {
                'total_songs_played': total_songs
            }}, upsert=False)

    def increment_total_songs_played(self):
        return self.storage.use_collection('server_stats').update(
            {}, {'$inc': {
                'total_songs_played': 1
            }}, upsert=False)

    def get_server_status(self):
        return self.storage.use_collection('server_stats').find_one(
            {}, {'status': True})

    def set_server_status(self, status):
        return self.storage.use_collection('server_stats').update(
            {}, {'$set': {
                'status': status
            }}, upsert=False)
コード例 #5
0
ファイル: music.py プロジェクト: priestd09/TCMusicBot
class MusicDataAccess(object):

    """ DAO for music management
    """
    def __init__(self):
        self.storage = MongoConnection(db="tc_music", collection="song_queue")

    def queue(self, song, queued_by='User'):
        """ Adds a song object to the queue.

        Args:
            song (grooveshark.classes.Song): song returned from grooveshark api to be added into the music queue.

        Returns:
            self (MusicDataAccess)
        """
        queue_song = extract_song_data(song)

        if queue_song:
            if queued_by == 'Radio':
                queue_song.update({'queued_by_radio': True})
            queue_song.update({"queued_by": queued_by,"queued_at": datetime.now()})
            self.storage.use_collection("song_queue").insert(queue_song)

        return self

    def clear_queue(self):
        """ Clears the music queue.

        Returns:
            self (MusicDataAccess)
        """
        self.storage.use_collection("song_queue").remove({})
        return self

    def get_queue(self):
        """ Retrieves the current music queue.

        Returns:
            queue_list (pymongo.cursor.Cursor[grooveshark.classes.Song]): Returns a mongo cursor collection of songs.
        """
        return self.storage.use_collection("song_queue").find().sort([("queued_by_radio", ASCENDING),("queued_at", ASCENDING)])

    def get_queue_count(self):
        return self.storage.use_collection("song_queue").count()

    def play_next(self):
        """ Retrieves the next song to play from the queue.

        Returns:
            song (None, dict): Will return the song as a dictionary or None if nothing is found.
        """
        try:
            song = self.storage.use_collection("song_queue").find().sort([("queued_by_radio", ASCENDING),("queued_at", ASCENDING)]).limit(1).next()

            self.remove_from_queue(id=song["_id"])
            self.add_to_played(song)
        except StopIteration as e:
            song = None

        return song

    def remove_last_song(self):
        """ Removes the last queued song.

        Returns:
            song (None, dict): Will return the song as a dictionary or None if nothing is found.
        """
        try:
            song = self.storage.use_collection("song_queue").find_one().sort([("queued_at", DESCENDING)]).limit(1)
            self.remove_from_queue(id=song["_id"])
        except StopIteration as e:
            song = None

        return song

    def find_in_queue(self, title=None, id=None):
        """ Searches the queue for a song by title, or id.

        Args:
            title (None, string): song title to be searched, or None when searching by id.
            id (None, string): song object id to be searched, or None when searching by title.

        Returns:
            song (None, pymongo.cursor.Cursor[grooveshark.classes.Song]): Will return the cursor with the song result, or None if not found.
        """
        song = None

        if title:
            song = self.storage.use_collection("song_queue").find({"title": title})
        elif id:
            song = self.storage.use_collection("song_queue").find({"_id": self.storage.get_key(id)})

        return song

    def remove_from_queue(self, title=None, id=None, queued_by=None):
        """ Removes a song from the queue by song title, or id.

        Args:
            title (None, string): song title to be searched, or None when searching by id.
            id (None, string): song object id to be searched, or None when searching by title.

        Returns:
            result (boolean): Will return true when a song is removed, False otherwise.
        """
        result = False

        if title:
            result = self.storage.use_collection("song_queue").remove({"title": title})
        elif id:
            result = self.storage.use_collection("song_queue").remove({"_id": self.storage.get_key(id)})
        elif queued_by:
            result = self.storage.use_collection("song_queue").remove({"queued_by": queued_by})

        return result

    def add_to_played(self, song):
        """ Adds a song which was played from the queue to the played list.

        Args:
            song (dict): song returned from queue that has been played.

        Returns:
            self (MusicDataAccess)
        """
        if song:
            song.update({"played_on": datetime.now()})
            self.storage.use_collection("played_songs").insert(song)

        return self

    def get_play_count(self, title):
        """ Retrieve the playcount for a song title.

        Args:
            title (string): song title to get playcount for.

        Returns:
            (int): the number of plays a song title has.
        """
        return self.storage.use_collection("played_songs").find({"title": title}).count()

    def get_last_played(self):
        """ Retrieve the last played song

        Returns:
            (None, grooveshark.classes.Song)
        """
        try:
            song = self.storage.use_collection("played_songs").find().sort([("played_on", -1)]).limit(1).next()
        except StopIteration as e:
            song = None

            return song
コード例 #6
0
ファイル: music.py プロジェクト: priestd09/TCMusicBot
 def __init__(self):
     self.storage = MongoConnection(db="tc_music", collection="song_queue")
コード例 #7
0
ファイル: music.py プロジェクト: SudeepSidhu/TCMusicBot
class MusicDataAccess(object):

    """ DAO for music management
    """

    def __init__(self):
        self.storage = MongoConnection(db="tc_music", collection="song_queue")

    def queue(self, song, queued_by="User"):
        """ Adds a song object to the queue.

        Args:
            song (grooveshark.classes.Song): song returned from grooveshark api to be added into the music queue.

        Returns:
            self (MusicDataAccess)
        """
        queue_song = extract_song_data(song)

        if queue_song:
            if queued_by == "Radio":
                queue_song.update({"queued_by_radio": True})
            queue_song.update({"queued_by": queued_by, "queued_at": datetime.now()})
            self.storage.use_collection("song_queue").insert(queue_song)

        return self

    def clear_queue(self):
        """ Clears the music queue.

        Returns:
            self (MusicDataAccess)
        """
        self.storage.use_collection("song_queue").remove({})
        return self

    def get_queue(self):
        """ Retrieves the current music queue.

        Returns:
            queue_list (pymongo.cursor.Cursor[grooveshark.classes.Song]): Returns a mongo cursor collection of songs.
        """
        return (
            self.storage.use_collection("song_queue")
            .find()
            .sort([("queued_by_radio", ASCENDING), ("queued_at", ASCENDING)])
        )

    def get_queue_count(self):
        return self.storage.use_collection("song_queue").count()

    def play_next(self):
        """ Retrieves the next song to play from the queue.

        Returns:
            song (None, dict): Will return the song as a dictionary or None if nothing is found.
        """
        try:
            song = (
                self.storage.use_collection("song_queue")
                .find()
                .sort([("queued_by_radio", ASCENDING), ("queued_at", ASCENDING)])
                .limit(1)
                .next()
            )

            self.remove_from_queue(id=song["_id"])
            self.add_to_played(song)
        except StopIteration as e:
            song = None

        return song

    def remove_last_song(self):
        """ Removes the last queued song.

        Returns:
            song (None, dict): Will return the song as a dictionary or None if nothing is found.
        """
        try:
            song = self.storage.use_collection("song_queue").find_one().sort([("queued_at", DESCENDING)]).limit(1)
            self.remove_from_queue(id=song["_id"])
        except StopIteration as e:
            song = None

        return song

    def find_in_queue(self, title=None, id=None):
        """ Searches the queue for a song by title, or id.

        Args:
            title (None, string): song title to be searched, or None when searching by id.
            id (None, string): song object id to be searched, or None when searching by title.

        Returns:
            song (None, pymongo.cursor.Cursor[grooveshark.classes.Song]): Will return the cursor with the song result, or None if not found.
        """
        song = None

        if title:
            song = self.storage.use_collection("song_queue").find({"title": title})
        elif id:
            song = self.storage.use_collection("song_queue").find({"_id": self.storage.get_key(id)})

        return song

    def remove_from_queue(self, title=None, id=None, queued_by=None):
        """ Removes a song from the queue by song title, or id.

        Args:
            title (None, string): song title to be searched, or None when searching by id.
            id (None, string): song object id to be searched, or None when searching by title.

        Returns:
            result (boolean): Will return true when a song is removed, False otherwise.
        """
        result = False

        if title:
            result = self.storage.use_collection("song_queue").remove({"title": title})
        elif id:
            result = self.storage.use_collection("song_queue").remove({"_id": self.storage.get_key(id)})
        elif queued_by:
            result = self.storage.use_collection("song_queue").remove({"queued_by": queued_by})

        return result

    def add_to_played(self, song):
        """ Adds a song which was played from the queue to the played list.

        Args:
            song (dict): song returned from queue that has been played.

        Returns:
            self (MusicDataAccess)
        """
        if song:
            song.update({"played_on": datetime.now()})
            self.storage.use_collection("played_songs").insert(song)

        return self

    def get_play_count(self, title):
        """ Retrieve the playcount for a song title.

        Args:
            title (string): song title to get playcount for.

        Returns:
            (int): the number of plays a song title has.
        """
        return self.storage.use_collection("played_songs").find({"title": title}).count()

    def get_last_played(self):
        """ Retrieve the last played song

        Returns:
            (None, grooveshark.classes.Song)
        """
        try:
            song = self.storage.use_collection("played_songs").find().sort([("played_on", -1)]).limit(1).next()
        except StopIteration as e:
            song = None

            return song
コード例 #8
0
ファイル: music.py プロジェクト: SudeepSidhu/TCMusicBot
 def __init__(self):
     self.storage = MongoConnection(db="tc_music", collection="song_queue")