r319 - in branches/rewrite: . src

Otavio Salvador partial-mirror-devel@lists.alioth.debian.org
Tue, 16 Nov 2004 11:26:26 -0700


Author: otavio
Date: Tue Nov 16 11:26:25 2004
New Revision: 319

Modified:
   branches/rewrite/   (props changed)
   branches/rewrite/src/Dists.py
   branches/rewrite/src/Download.py
Log:
 r277@nurf:  otavio | 2004-11-16T18:26:51.565051Z
 Change to handle threads and allow to do next tasks locking the systems to wait while all needed downloads finish.


Modified: branches/rewrite/src/Dists.py
==============================================================================
--- branches/rewrite/src/Dists.py	(original)
+++ branches/rewrite/src/Dists.py	Tue Nov 16 11:26:25 2004
@@ -31,10 +31,10 @@
 
     def __init__ (self, backend):
         self._backend = backend
-        self.__files = []
+        self._files = []
         self._dir = FileSystem(backend["mirror_dir"], backend["name"])
 
-    def __fill_files(self):
+    def _fill_files(self):
         for c in self._backend["components"]:
             for d in self._backend["distributions"]:
                 for a in self._backend["architectures"]:
@@ -43,30 +43,24 @@
                              % (self._backend["server"], d, c, a)
                     filename = "%s/dists/%s/%s/binary-%s/Packages.gz" \
                                % (self._backend["mirror_dir"] + self._backend["name"], d, c, a)
-                    self.__files.append((server, filename))
+                    self._files.append((server, filename))
 
                     server = "%s/dists/%s/%s/Release" \
                              % (self._backend["server"], d, c,)
                     filename = "%s/dists/%s/%s/Release" \
                                % (self._backend["mirror_dir"] + self._backend["name"], d, c)
-                    self.__files.append((server, filename))
+                    self._files.append((server, filename))
                     
                     if self._backend["get_sources"]:
                         server = "%s/dists/%s/%s/source/Sources.gz" \
                                  % (self._backend["server"], d, c,)
                         filename = "%s/dists/%s/%s/source/Sources.gz" \
                                    % (self._backend["mirror_dir"] + self._backend["name"], d, c)
-                        self.__files.append((server, filename))
+                        self._files.append((server, filename))
 
     def create (self):
         """ Get all files """
-        for f in self.__files:
-            self._get(f)
-
-    def update (self):
-        """ Get only files that need updates """
-        self.__fill_files()
-        for f in self.__files:
+        for f in self._files:
             self._get(f)
 
     def get_index(self):
@@ -76,8 +70,8 @@
         """
         # TODO: Put checking using Release file when available.
         files = []
-        self.__fill_files()
-        for url, f in self.__files:
+        self._fill_files()
+        for url, f in self._files:
             if os.path.basename(str(f)) != "Release":
                 self._dir.uncompress(f)
                 files.append(str(f.split('.gz')[0]))
@@ -90,11 +84,19 @@
     def __init__(self, backend):
         Dists.__init__(self, backend)
 
-    def _get(self, file):
-        server, filename = file
-        self._dir.create(os.path.dirname(filename))
-        Download(server, filename)
-        
+    def update (self):
+        """ Get only files that need updates """
+        self._fill_files()
+        for f in self._files:
+            server, filename = f
+            self._dir.create(os.path.dirname(filename))
+            Download().get(server, filename)
+
+        for d in Download().fetchers:
+            d.join()
+
+        print "ACABOU!"
+            
 class LocalDists (Dists):
     """
     This class provides methods to fill dists dir downloading local files
@@ -102,7 +104,12 @@
     def __init__(self, backend):
         Dists.__init__(self, backend)
 
-    def _get(self, file):
-        orig, filename = file
-        self._dir.create(os.path.dirname(filename))
-        os.link (orig.lstrip('file://'), filename)
+    def update (self):
+        """ Get only files that need updates """
+        self._fill_files()
+        for f in self._files:
+            server, filename = f
+            orig, filename = file
+            self._dir.create(os.path.dirname(filename))
+            os.link (orig.lstrip('file://'), filename)
+

Modified: branches/rewrite/src/Download.py
==============================================================================
--- branches/rewrite/src/Download.py	(original)
+++ branches/rewrite/src/Download.py	Tue Nov 16 11:26:25 2004
@@ -52,7 +52,7 @@
             except Empty:
                 # Doesn't have any other file to download so exit.
                 return 
-                
+
             f = open(filename, "wb")
             curl = pycurl.Curl()
             curl.setopt(pycurl.FOLLOWLOCATION, 1)
@@ -102,7 +102,7 @@
     """ Fetcher to use """
     fetchers = []
 
-    def __init__(self, uri, destine, max_threads=3):
+    def get(self, uri, destine, max_threads=3):
         self.queue.put((uri, destine))
 
         # Alloc all needed threads.
@@ -111,3 +111,7 @@
                 t = DownloadThread()
                 self.fetchers.append(t)
                 t.start()
+            
+    def join(self):
+        for t in self.fetchers:
+            t.join()