Esempio n. 1
0
    def test_addTorrentsToQueue_torrentExists_deleteTorrent(self):

        self.removeDatabase()

        testTorrent = Torrents.TV(
            torrentTitle='some.show.s01e01.720p.junk.here',
            url='http://testurl.com/test')
        testTorrent2 = Torrents.TV(
            torrentTitle='some.show.s01e02.720p.junk.here',
            url='http://testurl.com/test2')

        torrentQueue = Queue()
        torrentQueue.append(testTorrent)

        dbObject = Databases(
            dbType="SQLITE3",
            databaseSettings={'databaseLocation': self.testDatabaseFile})

        dbObject.addTorrentsToQueue(torrentQueue)
        self.assertTrue(dbObject.torrentExists(testTorrent))

        dbObject.updateHashString({'hashString': 'abc123'},
                                  {'url': 'http://testurl.com/test'})

        self.assertTrue(
            len(
                dbObject.getTorrentInfo(hashString='abc123',
                                        selectors=['torrentTitle', 'url'])) ==
            1)

        torrentQueue = Queue()
        torrentQueue.append(testTorrent2)

        dbObject.addTorrentsToQueue(torrentQueue)

        self.assertTrue(dbObject.getQueuedTorrentsCount() == 2)

        self.assertTrue(len(dbObject.getQueuedTorrents()) == 2)

        dbObject.deleteTorrent(url='http://testurl.com/test')
        self.assertFalse(dbObject.torrentExists(testTorrent))

        self.assertTrue(dbObject.getQueuedTorrentsCount() == 1)

        dbObject.deleteTorrent(url='http://testurl.com/test2')
        self.assertFalse(dbObject.torrentExists(testTorrent))

        self.assertTrue(dbObject.getQueuedTorrentsCount() == 0)

        self.removeDatabase()
Esempio n. 2
0
class Queue():
    '''
	Used to Track a list of torrents and interact with the torrent database
	'''

    # Setup the database object
    database = None
    defaultDatabaseType = settings['database']['defaultDatabaseEngine']

    def __init__(self, *args):
        self.elements = list(*args)
        self.database = Databases(dbType=self.defaultDatabaseType)

    def __getitem__(self, idx):
        # Ensure the index is in the correct range
        if idx < 0 or idx >= len(self.elements):
            raise IndexError('Index out of range')

        return self.elements[idx]

    def __setitem__(self, idx, torrent):
        self.elements[idx] = torrent

        # Ensure the value was taken
        if self.elements[idx] == torrent:
            return 0
        else:
            return -1

    def __len__(self):
        return len(self.elements)

    def __iter__(self):
        return iter(self.elements)

    def __contains__(self, element):
        return element in self.elements

    def databaseTorrentExists(self, torrent):
        return self.database.torrentExists(torrent=torrent)
        #return False

    def databaseTorrentBlacklisted(self, torrent):
        return self.database.torrentBlacklisted(torrent.get('url', ''))
        #return False

    def append(self, torrent):

        # Check and see if the value already exists in elements
        if torrent in self.elements:
            return -1

        # Check and see if the value already exists in DB
        elif self.databaseTorrentExists(torrent):
            return -1

        # Ensure it is not Blacklisted
        elif self.databaseTorrentBlacklisted(torrent):
            return -1

        # Append the value to elements
        else:
            self.elements.append(torrent)

            # Ensure the value was taken
            if torrent in self.elements:
                return 0
            else:
                return -1

    def writeToDB(self):
        self.database.addTorrentsToQueue(self.elements)

    def __str__(self):
        out = ''
        for element in self.elements:
            out += u'{0}\n'.format(element)
        return out