* lpapiwrapper.py:

- Rename Distribution.getMainArchive() to getArchive() and let it also fetch
    other archives besides the main one.
* udtexceptions.py:
  - Add ArchiveNotFoundException
This commit is contained in:
Michael Bienia 2009-07-23 14:19:21 +02:00
parent ddab40c44f
commit d062a2f8a6
2 changed files with 33 additions and 9 deletions

View File

@ -27,7 +27,7 @@
import libsupport
from launchpadlib.errors import HTTPError
from launchpadlib.resource import Entry
from udtexceptions import PackageNotFoundException, SeriesNotFoundException, PocketDoesNotExist
from udtexceptions import *
__all__ = ['LpApiWrapper']
@ -85,7 +85,7 @@ class LpApiWrapper(object):
Returns a wrapped LP representation of the source package.
If the package does not exist: raise PackageNotFoundException
'''
return cls.getUbuntuDistribution().getMainArchive().getSourcePackage(name, series, pocket)
return cls.getUbuntuDistribution().getArchive().getSourcePackage(name, series, pocket)
@classmethod
def canUploadPackage(cls, package, series = None):
@ -115,7 +115,7 @@ class LpApiWrapper(object):
if component not in cls._upload_comp and package not in cls._upload_pkg:
me = cls.getMe()
archive = cls.getUbuntuDistribution().getMainArchive()
archive = cls.getUbuntuDistribution().getArchive()
for perm in archive.getPermissionsForPerson(person = me()):
if perm.permission != 'Archive Upload Rights':
continue
@ -217,9 +217,11 @@ class Distribution(BaseWrapper):
resource_type = 'https://api.edge.launchpad.net/beta/#distribution'
def __init__(self, *args):
# Don't share _series between different Distributions
# Don't share _series and _archives between different Distributions
if '_series' not in self.__dict__:
self._series = dict()
if '_archives' not in self.__dict__:
self._archives = dict()
def cache(self):
self._cache[self.name] = self
@ -236,13 +238,31 @@ class Distribution(BaseWrapper):
cached = Distribution(Launchpad.distributions[dist])
return cached
def getMainArchive(self):
def getArchive(self, archive = None):
'''
Returns the LP representation for the Ubuntu main archive.
Returns an Archive object for the requested archive.
Raises a ArchiveNotFoundException if the archive doesn't exist.
If 'archive' is None, return the main archive.
'''
if not '_archive' in self.__dict__:
self._archive = Archive(self.main_archive_link)
return self._archive
if archive:
res = self._archives.get(archive)
if not res:
for a in self.archives:
if a.name == archive:
res = Archive(a)
self._archives[res.name] = res
break
if res:
return res
else:
raise ArchiveNotFoundException("The Archive '%s' doesn't exist in %s" % (archive, self.display_name))
else:
if not '_main_archive' in self.__dict__:
self._main_archive = Archive(self.main_archive_link)
return self._main_archive
def getSeries(self, name_or_version):
'''

View File

@ -9,3 +9,7 @@ class SeriesNotFoundException(BaseException):
class PocketDoesNotExist(BaseException):
""" Thrown when a invalid pocket is passed """
pass
class ArchiveNotFoundException(BaseException):
""" Thrown when an archive for a distibution is not found """
pass