[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#429658: marked as done (python-apt: DebianDistribution class misses method used by SoftwareProperties)



Your message dated Sat, 10 Jan 2009 00:25:24 +0100
with message-id <20090109232524.GA2485@jak-linux.org>
and subject line Done in 0.7.3
has caused the Debian Bug report #429658,
regarding python-apt: DebianDistribution class misses method used by SoftwareProperties
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
429658: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429658
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: python-apt
Version: 0.7.2
Severity: important

Hello!

I'm packaging SoftwareProperties for Debian, and noticed that it uses a
method called get_server_list in the ${NAME}Distribution class of the
distribution it is running on, and which is in aptsources/distro.py.

I wrote a proposed patch that generalizes get_server_list and also
get_mirrors, but forces the customization of _get_mirror_name. It seems
to work, but notice that I'm not familiar with the code yet. Please consider
applying this patch, or a reworked version, please =).

See you,

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.21-1-686 (SMP w/2 CPU cores)
Locale: LANG=pt_BR.UTF-8, LC_CTYPE=pt_BR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages python-apt depends on:
ii  apt [libapt-pkg-libc6.5 0.7.2            Advanced front-end for dpkg
ii  apt-utils [libapt-inst- 0.7.2            APT utility programs
ii  libc6                   2.5-11           GNU C Library: Shared libraries
ii  libgcc1                 1:4.2-20070609-1 GCC support library
ii  libstdc++6              4.2-20070609-1   The GNU Standard C++ Library v3
ii  lsb-release             3.1-23.1         Linux Standard Base version report
ii  python                  2.4.4-6          An interactive high-level object-o
ii  python-central          0.5.14           register and build utility for Pyt

python-apt recommends no packages.

-- no debconf information
diff -Nru --exclude '*.mo' --exclude '*.po' --exclude '*.pot' /tmp/KKyGU72DhZ/python-apt-0.7.2/aptsources/distro.py /tmp/cEKADQ0COl/python-apt-0.7.2.1/aptsources/distro.py
--- /tmp/KKyGU72DhZ/python-apt-0.7.2/aptsources/distro.py	2007-06-10 23:21:25.000000000 +0100
+++ /tmp/cEKADQ0COl/python-apt-0.7.2.1/aptsources/distro.py	2007-06-19 12:16:52.000000000 +0100
@@ -131,7 +131,7 @@
 
     self.get_mirrors()
   
-  def get_mirrors(self):
+  def get_mirrors(self, mirror_template=None):
     """
     Provide a set of mirrors where you can get the distribution from
     """
@@ -149,6 +149,97 @@
     else:
         self.default_server = self.main_sources[0].uri
 
+    # get a list of country codes and real names
+    self.countries = {}
+    try:
+        f = open("/usr/share/iso-codes/iso_3166.tab", "r")
+        lines = f.readlines()
+        for line in lines:
+            parts = line.split("\t")
+            self.countries[parts[0].lower()] = parts[1].strip()
+    except:
+        print "could not open file '%s'" % file
+    else:
+        f.close()
+
+    # try to guess the nearest mirror from the locale
+    self.country = None
+    self.country_code = None
+    locale = os.getenv("LANG", default="en.UK")
+    a = locale.find("_")
+    z = locale.find(".")
+    if z == -1:
+        z = len(locale)
+    country_code = locale[a+1:z].lower()
+
+    if mirror_template:
+      self.nearest_server = mirror_template % country_code
+
+    if self.countries.has_key(country_code):
+        self.country = self.countries[country_code]
+        self.country_code = country_code
+
+  def _get_mirror_name(self, server):
+      ''' Try to get a human readable name for the main mirror of a country
+          Customize for different distributions '''
+      country = None
+      i = server.find("://")
+      l = server.find(".archive.ubuntu.com")
+      if i != -1 and l != -1:
+          country = server[i+len("://"):l]
+      if self.countries.has_key(country):
+          # TRANSLATORS: %s is a country
+          return _("Server for %s") % \
+                 gettext.dgettext("iso_3166",
+                                  self.countries[country].rstrip()).rstrip()
+      else:
+          return("%s" % server.rstrip("/ "))
+
+  def get_server_list(self):
+    ''' Return a list of used and suggested servers '''
+    def compare_mirrors(mir1, mir2):
+        '''Helper function that handles comaprision of mirror urls
+           that could contain trailing slashes'''
+        return re.match(mir1.strip("/ "), mir2.rstrip("/ "))
+    
+    # Store all available servers:
+    # Name, URI, active
+    mirrors = []
+    if len(self.used_servers) < 1 or \
+       (len(self.used_servers) == 1 and \
+        compare_mirrors(self.used_servers[0], self.main_server)):
+        mirrors.append([_("Main server"), self.main_server, True]) 
+        mirrors.append([self._get_mirror_name(self.nearest_server), 
+                       self.nearest_server, False])
+    elif len(self.used_servers) == 1 and not \
+         compare_mirrors(self.used_servers[0], self.main_server):
+        mirrors.append([_("Main server"), self.main_server, False]) 
+        # Only one server is used
+        server = self.used_servers[0]
+
+        # Append the nearest server if it's not already used            
+        if not compare_mirrors(server, self.nearest_server):
+            mirrors.append([self._get_mirror_name(self.nearest_server), 
+                           self.nearest_server, False])
+        mirrors.append([self._get_mirror_name(server), server, True])
+
+    elif len(self.used_servers) > 1:
+        # More than one server is used. Since we don't handle this case
+        # in the user interface we set "custom servers" to true and 
+        # append a list of all used servers 
+        mirrors.append([_("Main server"), self.main_server, False])
+        mirrors.append([self._get_mirror_name(self.nearest_server), 
+                                        self.nearest_server, False])
+        mirrors.append([_("Custom servers"), None, True])
+        for server in self.used_servers:
+            if compare_mirrors(server, self.nearest_server) or\
+               compare_mirrors(server, self.main_server):
+                continue
+            elif not [self._get_mirror_name(server), server, False] in mirrors:
+                mirrors.append([self._get_mirror_name(server), server, False])
+
+    return mirrors
+
   def add_source(self, type=None, 
                  uri=None, dist=None, comps=None, comment=""):
     """
@@ -295,96 +386,31 @@
     else:
         return False
 
+  def _get_mirror_name(self, server):
+      ''' Try to get a human readable name for the main mirror of a country
+          Debian specific '''
+      country = None
+      i = server.find("://ftp.")
+      l = server.find(".debian.org")
+      if i != -1 and l != -1:
+          country = server[i+len("://ftp."):l]
+      if self.countries.has_key(country):
+          # TRANSLATORS: %s is a country
+          return _("Server for %s") % \
+                 gettext.dgettext("iso_3166",
+                                  self.countries[country].rstrip()).rstrip()
+      else:
+          return("%s" % server.rstrip("/ "))
+
+  def get_mirrors(self):
+    Distribution.get_mirrors(self,
+                             mirror_template="http://ftp.%s.debian.org/debian/";)
+
 class UbuntuDistribution(Distribution):
   ''' Class to support specific Ubuntu features '''
   def get_mirrors(self):
-    Distribution.get_mirrors(self)
-    # get a list of country codes and real names
-    self.countries = {}
-    try:
-        f = open("/usr/share/iso-codes/iso_3166.tab", "r")
-        lines = f.readlines()
-        for line in lines:
-            parts = line.split("\t")
-            self.countries[parts[0].lower()] = parts[1].strip()
-    except:
-        print "could not open file '%s'" % file
-    else:
-        f.close()
-
-    # try to guess the nearest mirror from the locale
-    self.country = None
-    self.country_code = None
-    locale = os.getenv("LANG", default="en.UK")
-    a = locale.find("_")
-    z = locale.find(".")
-    if z == -1:
-        z = len(locale)
-    country_code = locale[a+1:z].lower()
-    self.nearest_server = "http://%s.archive.ubuntu.com/ubuntu/"; % \
-                          country_code
-    if self.countries.has_key(country_code):
-        self.country = self.countries[country_code]
-        self.country_code = country_code
-
-  def get_server_list(self):
-    ''' Return a list of used and suggested servers '''
-    def compare_mirrors(mir1, mir2):
-        '''Helper function that handles comaprision of mirror urls
-           that could contain trailing slashes'''
-        return re.match(mir1.strip("/ "), mir2.rstrip("/ "))
-    def get_mirror_name(server):
-        ''' Try to get a human readable name for the main mirror of a country'''
-        country = None
-        i = server.find("://")
-        l = server.find(".archive.ubuntu.com")
-        if i != -1 and l != -1:
-            country = server[i+len("://"):l]
-        if self.countries.has_key(country):
-            # TRANSLATORS: %s is a country
-            return _("Server for %s") % \
-                   gettext.dgettext("iso_3166",
-                                    self.countries[country].rstrip()).rstrip()
-        else:
-            return("%s" % server.rstrip("/ "))
-    
-    # Store all available servers:
-    # Name, URI, active
-    mirrors = []
-    if len(self.used_servers) < 1 or \
-       (len(self.used_servers) == 1 and \
-        compare_mirrors(self.used_servers[0], self.main_server)):
-        mirrors.append([_("Main server"), self.main_server, True]) 
-        mirrors.append([get_mirror_name(self.nearest_server), 
-                       self.nearest_server, False])
-    elif len(self.used_servers) == 1 and not \
-         compare_mirrors(self.used_servers[0], self.main_server):
-        mirrors.append([_("Main server"), self.main_server, False]) 
-        # Only one server is used
-        server = self.used_servers[0]
-
-        # Append the nearest server if it's not already used            
-        if not compare_mirrors(server, self.nearest_server):
-            mirrors.append([get_mirror_name(self.nearest_server), 
-                           self.nearest_server, False])
-        mirrors.append([get_mirror_name(server), server, True])
-
-    elif len(self.used_servers) > 1:
-        # More than one server is used. Since we don't handle this case
-        # in the user interface we set "custom servers" to true and 
-        # append a list of all used servers 
-        mirrors.append([_("Main server"), self.main_server, False])
-        mirrors.append([get_mirror_name(self.nearest_server), 
-                                        self.nearest_server, False])
-        mirrors.append([_("Custom servers"), None, True])
-        for server in self.used_servers:
-            if compare_mirrors(server, self.nearest_server) or\
-               compare_mirrors(server, self.main_server):
-                continue
-            elif not [get_mirror_name(server), server, False] in mirrors:
-                mirrors.append([get_mirror_name(server), server, False])
-
-    return mirrors
+    Distribution.get_mirrors(self,
+                             mirror_template="http://%s.archive.ubuntu.com/ubuntu/";)
 
 def get_distro():
     ''' Check the currently used distribution and return the corresponding
diff -Nru --exclude '*.mo' --exclude '*.po' --exclude '*.pot' /tmp/KKyGU72DhZ/python-apt-0.7.2/debian/changelog /tmp/cEKADQ0COl/python-apt-0.7.2.1/debian/changelog
--- /tmp/KKyGU72DhZ/python-apt-0.7.2/debian/changelog	2007-06-10 23:32:27.000000000 +0100
+++ /tmp/cEKADQ0COl/python-apt-0.7.2.1/debian/changelog	2007-06-19 11:55:37.000000000 +0100
@@ -1,3 +1,12 @@
+python-apt (0.7.2.1) unstable; urgency=low
+
+  * aptsources/distro.py:
+  - generalized some code, bringing it into the Distribution
+    class, and wrote some missing methods for the DebianDistribution
+    one
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 19 Jun 2007 11:55:37 +0100
+
 python-apt (0.7.2) unstable; urgency=low
 
   * build against the new apt

--- End Message ---
--- Begin Message ---
Version: 0.7.3


python-apt (0.7.3) unstable; urgency=low

  * apt/package.py:
    - added Record class that can be accessed like a dictionary
      and return it in candidateRecord and installedRecord
      (thanks to Alexander Sack for discussing this with me)
  * doc/examples/records.py:
    - added example how to use the new Records class
  * apt/cache.py:
    - throw FetchCancelleException, FetchFailedException, 
      LockFailedException exceptions when something goes wrong
  * aptsources/distro.py:
    - generalized some code, bringing it into the Distribution
      class, and wrote some missing methods for the DebianDistribution
      one (thanks to Gustavo Noronha Silva)
  * debian/control:
    - updated for python-distutils-extra (>= 1.9.0)
  * debian/python-apt.install:
    - fix i18n files
  * python/indexfile.cc:
    - increase str buffer in PackageIndexFileRepr

 -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 27 Jul 2007 16:57:28 +0200
-- 
Julian Andres Klode  - Free Software Developer
   Debian Developer  - Contributing Member of SPI
   Ubuntu Member     - Fellow of FSFE

Website: http://jak-linux.org/   XMPP: juliank@jabber.org
Debian:  http://www.debian.org/  SPI:  http://www.spi-inc.org/
Ubuntu:  http://www.ubuntu.com/  FSFE: http://www.fsfe.org/

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply to: