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')
next 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