public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/
Date: Tue, 12 Jun 2012 18:34:47 +0000 (UTC)	[thread overview]
Message-ID: <1339461222.845b3a856ce22a1b11da72b8acf3d5acc12253e1.bacher09@gentoo> (raw)

commit:     845b3a856ce22a1b11da72b8acf3d5acc12253e1
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jun 12 00:33:42 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jun 12 00:33:42 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=845b3a85

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
 
+from django.core.validators import URLValidator, validate_email 
+from django.core.exceptions import ValidationError
+
+validate_url = URLValidator()
+
 class AbstractDateTimeModel(models.Model):
     created_datetime = models.DateTimeField(auto_now_add = True)
     updated_datetime = models.DateTimeField(auto_now = True)
@@ -12,7 +17,7 @@ class AbstractDateTimeModel(models.Model):
         abstract = True
 
 class HomepageModel(models.Model):
-    url = models.URLField(max_length=255, unique = True)
+    url = models.URLField(max_length=255, unique = True, validators = [validate_url])
 
     def __unicode__(self):
         return self.url
@@ -47,7 +52,7 @@ class MaintainerModel(AbstractDateTimeModel):
             self.init_by_maintainer(maintainer)
         
     name = models.CharField(max_length = 255, blank = True, null = True)
-    email = models.EmailField(unique = True)
+    email = models.EmailField(unique = True, validators = [validate_email])
 
     objects = managers.MaintainerManager()
 
@@ -74,7 +79,7 @@ class HerdsModel(AbstractDateTimeModel):
             self.init_by_herd(herd)
 
     name = models.CharField(unique = True, max_length = 150)
-    email = models.EmailField()
+    email = models.EmailField(validators = [validate_email])
     description = models.TextField(blank = True, null = True)
     maintainers = models.ManyToManyField(MaintainerModel, blank = True)
 

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 != unicode(other).lower()
 
+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
 
+# Validators
+from django.core.validators import URLValidator, validate_email 
+from django.core.exceptions import ValidationError
+
+validate_url = URLValidator()
+
 __all__ = ('Portage','PortTree', 'Category', 'Package', 'Ebuild')
 
 BINDB = portage.db[portage.root]["bintree"].dbapi
@@ -473,34 +479,39 @@ class Ebuild(ToStrMixin):
                            name = 'slot')
 
     @cached_property
-    def homepages(self):
-        "List of homepages"
-        ho_list = self.homepage_val.split()
-        ret_list = []
-        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 = []
+        for homepage in self.homepages_splited:
+            try:
+                validate_url(homepage)
+            except ValidationError:
+                pass
+            else:
+                ret.append(homepage)
+        return ret
+        
 
-    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)))
 
     @cached_property
     def homepage(self):
         "First homepage in list"
-        return self.homepages[0] if len(self.homepages)>=1 else ''
+        return self.homepages_validated[0] if len(self.homepages)>=1 else ''
 
+    @cached_property
+    def _licenses(self):
+        return filter(_license_filter, self.license.split())
 
     @cached_property
     def licenses(self):
-        "List of licenses used in ebuild"
-        license_list = filter(_license_filter, self.license.split())
-        ret_list = []
-        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)))
 
     sha1 = cached_property(_file_hash("ebuild_path"), name = 'sha1')
     mtime = cached_property(_file_mtime("ebuild_path"), name = 'mtime')



             reply	other threads:[~2012-06-12 18:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-12 18:34 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-06-18 21:26 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/ Slava Bacherikov
2012-06-12 18:34 Slava Bacherikov
2012-06-12 18:34 Slava Bacherikov
2012-06-07 22:48 Slava Bacherikov
2012-06-06 22:48 Slava Bacherikov
2012-06-05 20:48 Slava Bacherikov
2012-06-05 15:49 Slava Bacherikov
2012-06-03 19:34 Slava Bacherikov
2012-05-29 21:34 Slava Bacherikov
2012-05-28 20:32 Slava Bacherikov
2012-05-28 17:00 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1339461222.845b3a856ce22a1b11da72b8acf3d5acc12253e1.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox