extras-repoclosure PackageOwners.py,1.12,1.13

Michael Schwendt (mschwendt) fedora-extras-commits at redhat.com
Wed Aug 29 20:48:12 UTC 2007


Author: mschwendt

Update of /cvs/fedora/extras-repoclosure
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv3481

Modified Files:
	PackageOwners.py 
Log Message:
Apply https authentication patch from Todd Zullinger and make the repoid another arg


Index: PackageOwners.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/PackageOwners.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- PackageOwners.py	21 Aug 2007 00:21:47 -0000	1.12
+++ PackageOwners.py	29 Aug 2007 20:48:10 -0000	1.13
@@ -20,7 +20,19 @@
 import os, sys, time
 import shutil
 import tempfile
-import urllib
+from urllib import FancyURLopener
+
+
+class AccountsURLopener(FancyURLopener):
+    """Subclass of urllib.FancyURLopener to allow passing http basic auth info"""
+    def __init__(self, username, password):
+        FancyURLopener.__init__(self)
+        self.username = username
+        self.password = password
+
+    def prompt_user_passwd(self, host, realm):
+        return (self.username, self.password)
+
 
 class PackageOwners:
     """interface to Fedora package owners list (and Fedora Extras owners/owners.list file)"""
@@ -30,21 +42,26 @@
         self.how = 'unknown'
 
 
-    def FromURL(self, retries=3, retrysecs=300, url='https://admin.fedoraproject.org/pkgdb/acls/bugzilla?tg_format=plain',pkgdb=True):
+    def FromURL(self, retries=3, retrysecs=300, url='https://admin.fedoraproject.org/pkgdb/acls/bugzilla?tg_format=plain',
+                pkgdb=True, repoid='Fedora', username=None, password=None):
         # old url='http://cvs.fedora.redhat.com/viewcvs/*checkout*/owners/owners.list?root=extras'
         if pkgdb:
             self.how = 'pkgdb'
         else:
             self.how = 'url'
         self.url = url
+        self.repoid = repoid
         self.retries = retries
         self.retrysecs = retrysecs
+        self.username = username
+        self.password = password
         return self._refresh()
-    
-    
-    def FromCVS(self, retries=3, retrysecs=300, command='LC_ALL=C CVS_RSH=ssh cvs -f -d :pserver:anonymous at cvs.fedora.redhat.com:/cvs/extras co owners', workdir=''):
+
+
+    def FromCVS(self, retries=3, retrysecs=300, command='LC_ALL=C CVS_RSH=ssh cvs -f -d :pserver:anonymous at cvs.fedora.redhat.com:/cvs/extras co owners', workdir='',repoid='Fedora'):
         self.how = 'cvs'
         self.command = command
+        self.repoid = repoid
         self.retries = retries
         self.retrysecs = retrysecs
         self.workdir = workdir
@@ -56,7 +73,7 @@
     def __getitem__(self,rpmname):
         """return e-mail address from initialowner field"""
         return self.GetOwner(rpmname)
-    
+
 
     def GetOwner(self,rpmname):
         """return e-mail address from initialowner field"""
@@ -95,7 +112,7 @@
         if len(self.cwdstack):
             os.chdir( self.cwdstack.pop() )
 
-    
+
     def _refresh(self):
         self.dict = {}  # map package name to email address, dict[name]
         return self._download()
@@ -107,6 +124,10 @@
                 continue
             try:
                 (repo,pkgname,summary,emails,qacontact,cc) = line.rstrip().split('|')
+                # The PkgDb includes repo's other than Fedora (Fedora EPEL,
+                # Fedora OLPC, and Red Hat Linux, for example).  Skip them.
+                if repo != self.repoid:
+                    continue
                 def fixaddr(a):
                     # Old Fedora CVS owners.list contains e-mail addresses.
                     # PkgDb plain output contains usernames only.
@@ -115,7 +136,7 @@
                     if not self.usermap.has_key(a):
                         return a
                     return self.usermap[a]
-                
+
                 addrs = []
                 mailto = '' # primary pkg owner
                 if len(emails):
@@ -195,8 +216,12 @@
             if count != 0:
                 time.sleep(self.retrysecs)
             try:
-                f = urllib.urlopen(url)
+                opener = AccountsURLopener(self.username, self.password)
+                f = opener.open(url)
                 rc = 0
+                if 'www-authenticate' in f.headers:
+                    rc = 1
+                    strerr = 'Authentication is required to access %s' % url
                 break
             except IOError, (_err, _strerr):
                 rc = 1
@@ -210,7 +235,7 @@
             f.close()
             return l
 
-    
+
     def _downloadfromurl(self):
         self._parse(self._getlinesfromurl(self.url))
         return True




More information about the fedora-extras-commits mailing list