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 1SeVw7-0001U8-Oy for garchives@archives.gentoo.org; Tue, 12 Jun 2012 18:35:28 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E54B1E050E; Tue, 12 Jun 2012 18:34:50 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id A8662E0587 for ; Tue, 12 Jun 2012 18:34:50 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id BE59A1B4031 for ; Tue, 12 Jun 2012 18:34:49 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 75ADDE5438 for ; Tue, 12 Jun 2012 18:34:47 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1339461222.845b3a856ce22a1b11da72b8acf3d5acc12253e1.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/packages/models.py gpackages/libs/generic.py gpackages/libs/porttree.py X-VCS-Directories: gpackages/apps/packages/ gpackages/libs/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: 845b3a856ce22a1b11da72b8acf3d5acc12253e1 X-VCS-Branch: master Date: Tue, 12 Jun 2012 18:34:47 +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: 5ff0e7f2-44ec-442a-a698-54e055dea9fd X-Archives-Hash: ee67e17e920686942270011d6e8df62e commit: 845b3a856ce22a1b11da72b8acf3d5acc12253e1 Author: Slava Bacherikov bacher09 org> AuthorDate: Tue Jun 12 00:33:42 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Tue Jun 12 00:33:42 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3D845b3a85 Add validation for homepages --- gpackages/apps/packages/models.py | 11 ++++++-- gpackages/libs/generic.py | 3 ++ gpackages/libs/porttree.py | 51 ++++++++++++++++++++++---------= ----- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/= models.py index e9a43b4..77519bc 100644 --- a/gpackages/apps/packages/models.py +++ b/gpackages/apps/packages/models.py @@ -4,6 +4,11 @@ from porttree import Category, Package, Ebuild import managers from generic import get_from_kwargs_and_del =20 +from django.core.validators import URLValidator, validate_email=20 +from django.core.exceptions import ValidationError + +validate_url =3D URLValidator() + class AbstractDateTimeModel(models.Model): created_datetime =3D models.DateTimeField(auto_now_add =3D True) updated_datetime =3D models.DateTimeField(auto_now =3D True) @@ -12,7 +17,7 @@ class AbstractDateTimeModel(models.Model): abstract =3D True =20 class HomepageModel(models.Model): - url =3D models.URLField(max_length=3D255, unique =3D True) + url =3D models.URLField(max_length=3D255, unique =3D True, validator= s =3D [validate_url]) =20 def __unicode__(self): return self.url @@ -47,7 +52,7 @@ class MaintainerModel(AbstractDateTimeModel): self.init_by_maintainer(maintainer) =20 name =3D models.CharField(max_length =3D 255, blank =3D True, null =3D= True) - email =3D models.EmailField(unique =3D True) + email =3D models.EmailField(unique =3D True, validators =3D [validat= e_email]) =20 objects =3D managers.MaintainerManager() =20 @@ -74,7 +79,7 @@ class HerdsModel(AbstractDateTimeModel): self.init_by_herd(herd) =20 name =3D models.CharField(unique =3D True, max_length =3D 150) - email =3D models.EmailField() + email =3D models.EmailField(validators =3D [validate_email]) description =3D models.TextField(blank =3D True, null =3D True) maintainers =3D models.ManyToManyField(MaintainerModel, blank =3D Tr= ue) =20 diff --git a/gpackages/libs/generic.py b/gpackages/libs/generic.py index f1751b0..409ec09 100644 --- a/gpackages/libs/generic.py +++ b/gpackages/libs/generic.py @@ -44,6 +44,9 @@ class StrThatIgnoreCase(unicode): def __ne__(self, other): return self._forcmp !=3D unicode(other).lower() =20 +def lofstr_to_ig(list_obj): + return [ StrThatIgnoreCase(item) for item in list_obj] + class ToStrMixin(object): """Abstract class for inheritence, allow add simple `__str__` and `_= _repr__` methods diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py index b5b90d8..6beac52 100644 --- a/gpackages/libs/porttree.py +++ b/gpackages/libs/porttree.py @@ -10,10 +10,16 @@ from gentoolkit.package import Package as PackageInfo from gentoolkit.metadata import MetaData from gentoolkit import errors from generic import ToStrMixin, file_sha1, file_mtime, cached_property, = \ - file_get_content, StrThatIgnoreCase + file_get_content, StrThatIgnoreCase, lofstr_to_ig from use_info import get_uses_info, get_local_uses_info import os =20 +# Validators +from django.core.validators import URLValidator, validate_email=20 +from django.core.exceptions import ValidationError + +validate_url =3D URLValidator() + __all__ =3D ('Portage','PortTree', 'Category', 'Package', 'Ebuild') =20 BINDB =3D portage.db[portage.root]["bintree"].dbapi @@ -473,34 +479,39 @@ class Ebuild(ToStrMixin): name =3D 'slot') =20 @cached_property - def homepages(self): - "List of homepages" - ho_list =3D self.homepage_val.split() - ret_list =3D [] - for ho in ho_list: - ret_list.append(StrThatIgnoreCase(ho)) - return ret_list + def homepages_splited(self): + return self.homepage_val.split() + + @cached_property + def homepages_validated(self): + ret =3D [] + for homepage in self.homepages_splited: + try: + validate_url(homepage) + except ValidationError: + pass + else: + ret.append(homepage) + return ret + =20 =20 - def get_uniq_homepages(self): - return frozenset(self.homepages) + @cached_property + def homepages(self): + "Tuple of homepages" + return tuple(set(lofstr_to_ig(self.homepages_validated))) =20 @cached_property def homepage(self): "First homepage in list" - return self.homepages[0] if len(self.homepages)>=3D1 else '' + return self.homepages_validated[0] if len(self.homepages)>=3D1 e= lse '' =20 + @cached_property + def _licenses(self): + return filter(_license_filter, self.license.split()) =20 @cached_property def licenses(self): - "List of licenses used in ebuild" - license_list =3D filter(_license_filter, self.license.split()) - ret_list =3D [] - for lic in license_list: - ret_list.append(StrThatIgnoreCase(lic)) - return ret_list - - def get_uniq_licenses(self): - return frozenset(self.licenses) + return tuple(set(lofstr_to_ig(self._licenses))) =20 sha1 =3D cached_property(_file_hash("ebuild_path"), name =3D 'sha1') mtime =3D cached_property(_file_mtime("ebuild_path"), name =3D 'mtim= e')