Ejemplo n.º 1
0
    def test_auto_recycle(self):
        # very small value for auto_recycle, don't do this in real code
        q = MultiQueue(weights=[1, 10], auto_recycle=100)

        # fill queues with some data
        q.put((0, 1))
        q.put((1, 1))

        # forces cycle to grow over auto_recycle value
        for i in xrange(20):
            q.put((0, 1))
            q.put((1, 1))
            q.get()
            q.get()

        # extract rest of items
        while not q.empty():
            q.get()
Ejemplo n.º 2
0
 def test_normal(self):
     q = MultiQueue()
     q.put((1, 2))
     self.assertEqual(q.get(), (1, 2))
     q.put((2, 4))
     self.assertEqual(q.get(), (2, 4))
     q.put((1, 1))
     self.assertEqual(q.get(), (1, 1))
Ejemplo n.º 3
0
    def test_order(self):
        q = MultiQueue(weights=[1, 5, 3])
        for i in xrange(10):
            q.put((0, i))
        for i in xrange(10):
            q.put((1, i))
        for i in xrange(10):
            q.put((2, i))

        # check first in, first out
        self.assertEqual(q.get(), (0, 0))
        self.assertEqual(q.get(), (1, 0))
        self.assertEqual(q.get(), (2, 0))

        # now weights start to affect results
        self.assertEqual(q.get(), (1, 1))
        self.assertEqual(q.get(), (1, 2))
        self.assertEqual(q.get(), (1, 3))
        self.assertEqual(q.get(), (2, 1))
        self.assertEqual(q.get(), (1, 4))
        self.assertEqual(q.get(), (0, 1))
        self.assertEqual(q.get(), (1, 5))
        self.assertEqual(q.get(), (1, 6))
        self.assertEqual(q.get(), (2, 2))
        self.assertEqual(q.get(), (1, 7))
        self.assertEqual(q.get(), (1, 8))
        self.assertEqual(q.get(), (1, 9))

        # no more items from queue 1
        self.assertEqual(q.get(), (2, 3))
        self.assertEqual(q.get(), (0, 2))
        self.assertEqual(q.get(), (2, 4))
        self.assertEqual(q.get(), (0, 3))
        self.assertEqual(q.get(), (2, 5))
        self.assertEqual(q.get(), (2, 6))
        self.assertEqual(q.get(), (0, 4))
        self.assertEqual(q.get(), (2, 7))
        self.assertEqual(q.get(), (2, 8))
        self.assertEqual(q.get(), (0, 5))
        self.assertEqual(q.get(), (2, 9))

        # no more items from queue 2
        self.assertEqual(q.get(), (0, 6))
        self.assertEqual(q.get(), (0, 7))
        self.assertEqual(q.get(), (0, 8))
        self.assertEqual(q.get(), (0, 9))
Ejemplo n.º 4
0
class rTorrentView(wx.NotebookPage):
    _columns = [
        ColumnDefn("Name", valueGetter="name", isSpaceFilling=True, 
                   minimumWidth=100, maximumWidth=300),
        ColumnDefn("Up", "right", 70, "up_rate", stringConverter=format_speed),
        ColumnDefn("Down", "right", 70, "down_rate", 
                   stringConverter=format_speed),
        ColumnDefn("Size", "right", 70, "size_bytes", 
                   stringConverter=format_bytes),
        ColumnDefn("Up Total", "right", 80, "up_total", 
                   stringConverter=format_bytes),
        ColumnDefn("Down Total", "right", 80, "bytes_done", 
                   stringConverter=format_bytes),
        ColumnDefn("Ratio", "right", fixedWidth=40, valueGetter="ratio", 
                   stringConverter="%s%%"),
        #ColumnDefn("S", "center", 25, "peers_complete"),
        #ColumnDefn("P", "center", 25, "peers_accounted"),
    ]
    def __init__(self, parent, title="default"):
        self.title = title
        self.torrents = []
        self.joblist = MultiQueue()
        wx.NotebookPage.__init__(self, parent)

        self.olv = ObjectListView(self, style=wx.LC_REPORT)
        self.olv.SetEmptyListMsg("No torrents")
        self.olv.SetColumns(self._columns)
        self.joblist.put(2, ("download_list", self.title, self.set_list))

    def __repr__(self):
        return "<rTorrentView '%s'>" % self.title.capitalize()

    def get_list(self):
        ''' Clear the queue and update the current page. 
        Called on page change '''
        self.joblist.put(0, ("download_list", self.title, self.set_list))

    def set_list(self, hashlist):
        ''' Given a list of infohashes, add and remove torrents 
        from the torrents list as necessary '''
        self.torrents = [self.find_torrent(ih) for ih in hashlist]
        self.olv.AddObjects(filter(lambda to: to not in self.olv.GetObjects(),
                            self.torrents))
        self.olv.RemoveObjects(filter(lambda to: to not in self.torrents,
                               self.olv.GetObjects()))
        
    def find_torrent(self, infohash):
        for t in self.torrents:
            if t.infohash == infohash:
                return t
        # else make a new torrent object
        t = Torrent(self, infohash)
        for k in t.properties:
            self.joblist.put(t.properties[k][2], t.properties[k][1])
        return t
                
    def on_erase(self, e):
        dlg = wx.MessageDialog(self, "Remove this torrent?", "Delete torrent", 
                               wx.OK | wx.CANCEL | wx.ICON_QUESTION)
        if dlg.ShowModal() == wx.ID_OK:
            print 'on_erase Not implemented'
        dlg.Destroy()