From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QfozL-0006E7-Qw for garchives@archives.gentoo.org; Sun, 10 Jul 2011 08:03:40 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 0C7B721C02C; Sun, 10 Jul 2011 08:03:31 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id BFA9021C02C for ; Sun, 10 Jul 2011 08:03:31 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 2E7E61BC002 for ; Sun, 10 Jul 2011 08:03:31 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 669B88003D for ; Sun, 10 Jul 2011 08:03:30 +0000 (UTC) From: "Michał Górny" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Michał Górny" Message-ID: Subject: [gentoo-commits] proj/gentoopm:master commit in: gentoopm/, gentoopm/paludispm/, gentoopm/basepm/ X-VCS-Repository: proj/gentoopm X-VCS-Files: gentoopm/basepm/pkg.py gentoopm/exceptions.py gentoopm/paludispm/pkg.py X-VCS-Directories: gentoopm/ gentoopm/paludispm/ gentoopm/basepm/ X-VCS-Committer: mgorny X-VCS-Committer-Name: Michał Górny X-VCS-Revision: b2514c4e3a7ef40ec636eb04307247356bf3d87b Date: Sun, 10 Jul 2011 08:03:30 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 27a502215f90ba96f38fcce36104706e commit: b2514c4e3a7ef40ec636eb04307247356bf3d87b Author: Micha=C5=82 G=C3=B3rny gentoo org> AuthorDate: Sun Jul 10 07:54:39 2011 +0000 Commit: Micha=C5=82 G=C3=B3rny gentoo org> CommitDate: Sun Jul 10 07:54:39 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoopm.git;= a=3Dcommit;h=3Db2514c4e Start introducing custom exceptions. --- gentoopm/basepm/pkg.py | 17 +++++++++-------- gentoopm/exceptions.py | 23 +++++++++++++++++++++++ gentoopm/paludispm/pkg.py | 5 +++-- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/gentoopm/basepm/pkg.py b/gentoopm/basepm/pkg.py index 5efa45e..b1f8e7d 100644 --- a/gentoopm/basepm/pkg.py +++ b/gentoopm/basepm/pkg.py @@ -6,6 +6,7 @@ from abc import abstractmethod, abstractproperty =20 from gentoopm.basepm.atom import PMAtom +from gentoopm.exceptions import EmptyPackageSetError, AmbiguousPackageSe= tError from gentoopm.util import ABCObject =20 class PMPackageSet(ABCObject): @@ -47,11 +48,11 @@ class PMPackageSet(ABCObject): try: best =3D l[0] except IndexError: - raise TypeError('.best called on an empty set') + raise EmptyPackageSetError('.best called on an empty set') =20 for p in l: if p.key !=3D best.key: - raise KeyError('.best called on a set of differently-named packages'= ) + raise AmbiguousPackageSetError('.best called on a set of differently= -named packages') return best =20 def select(self, *args, **kwargs): @@ -62,10 +63,10 @@ class PMPackageSet(ABCObject): """ try: return self.filter(*args, **kwargs).best - except TypeError: - raise KeyError('No packages match the filters.') - except KeyError: - raise ValueError('Ambiguous filter (matches more than a single packag= e name).') + except EmptyPackageSetError: + raise EmptyPackageSetError('No packages match the filters.') + except AmbiguousPackageSetError: + raise AmbiguousPackageSetError('Ambiguous filter (matches more than a= single package name).') =20 def __getitem__(self, filt): """ @@ -82,13 +83,13 @@ class PMPackageSet(ABCObject): try: ret =3D next(it) except StopIteration: - raise KeyError('No packages match the filter.') + raise EmptyPackageSetError('No packages match the filter.') try: next(it) except StopIteration: pass else: - raise ValueError('Filter matches more than one package.') + raise AmbiguousPackageSetError('Filter matches more than one package.= ') =20 return ret =20 diff --git a/gentoopm/exceptions.py b/gentoopm/exceptions.py new file mode 100644 index 0000000..7aa237f --- /dev/null +++ b/gentoopm/exceptions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# vim:fileencoding=3Dutf-8 +# (c) 2011 Micha=C5=82 G=C3=B3rny +# Released under the terms of the 2-clause BSD license. + +class PMException(Exception): + """ + A base class for exceptions. + """ + pass + +class EmptyPackageSetError(PMException): + """ + Empty set passed to a function requiring a non-empty one. + """ + pass + +class AmbiguousPackageSetError(PMException): + """ + Ambiguous package set passed, e.g. containing multiple package names wh= en + consistenly-named set was expected. + """ + pass diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py index 5f40984..8907c15 100644 --- a/gentoopm/paludispm/pkg.py +++ b/gentoopm/paludispm/pkg.py @@ -8,6 +8,7 @@ import paludis from gentoopm.basepm.metadata import PMPackageMetadata from gentoopm.basepm.pkg import PMPackageSet, PMPackage, \ PMFilteredPackageSet +from gentoopm.exceptions import EmptyPackageSetError, AmbiguousPackageSe= tError =20 class PaludisPackageSet(PMPackageSet): _sorted =3D False @@ -23,10 +24,10 @@ class PaludisPackageSet(PMPackageSet): try: f =3D next(it) except StopIteration: - raise TypeError('.best called on an empty set') + raise EmptyPackageSetError('.best called on an empty set') for p in it: if p.key !=3D f.key: - raise KeyError('.best called on a set of differently-named packages= ') + raise AmbiguousPackageSetError('.best called on a set of differentl= y-named packages') =20 try: return p