aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2014-10-09 12:37:30 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-10-30 13:39:51 +0000
commit97c0beb0eb127f05e70a9c3a7202b0cba16d7152 (patch)
treec5cffbe87a84d8b118a60ca1ea29c02b9cf46280
parenta1f7a09801c2240b5f9a29683a2b538fcb9991d6 (diff)
downloadopenembedded-core-contrib-97c0beb0eb127f05e70a9c3a7202b0cba16d7152.tar.gz
bitbake: toaster: use modified validators for git url fields
The default django URL validator marks git URLs as not valid, so we change the default validators to a URLValidator-derived that adds git and ssh protocol schemas and inhibits the frontend URL validator. (Bitbake rev: 7223619505c0939358287e5baf84da0a91cb8d34) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/toaster/orm/admin.py23
-rw-r--r--bitbake/lib/toaster/orm/models.py27
2 files changed, 45 insertions, 5 deletions
diff --git a/bitbake/lib/toaster/orm/admin.py b/bitbake/lib/toaster/orm/admin.py
index 9383630486..6739980bfc 100644
--- a/bitbake/lib/toaster/orm/admin.py
+++ b/bitbake/lib/toaster/orm/admin.py
@@ -1,17 +1,34 @@
from django.contrib import admin
from django.contrib.admin.filters import RelatedFieldListFilter
-from .models import Branch, LayerSource, ToasterSetting
+from .models import BitbakeVersion, Release, LayerSource, ToasterSetting
+from django.forms.widgets import Textarea
+from django import forms
+import django.db.models as models
+
+from django.contrib.admin import widgets, helpers
class LayerSourceAdmin(admin.ModelAdmin):
pass
-class BranchAdmin(admin.ModelAdmin):
+class BitbakeVersionAdmin(admin.ModelAdmin):
+
+ # we override the formfield for db URLField because of broken URL validation
+
+ def formfield_for_dbfield(self, db_field, **kwargs):
+ if isinstance(db_field, models.fields.URLField):
+ return forms.fields.CharField()
+ return super(BitbakeVersionAdmin, self).formfield_for_dbfield(db_field, **kwargs)
+
+
+
+class ReleaseAdmin(admin.ModelAdmin):
pass
class ToasterSettingAdmin(admin.ModelAdmin):
pass
admin.site.register(LayerSource, LayerSourceAdmin)
-admin.site.register(Branch, BranchAdmin)
+admin.site.register(BitbakeVersion, BitbakeVersionAdmin)
+admin.site.register(Release, ReleaseAdmin)
admin.site.register(ToasterSetting, ToasterSettingAdmin)
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index 3c7f6611dc..309f8ea5be 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -24,6 +24,28 @@ from django.db.models import F
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
+
+from django.core import validators
+
+class GitURLValidator(validators.URLValidator):
+ import re
+ regex = re.compile(
+ r'^(?:ssh|git|http|ftp)s?://' # http:// or https://
+ r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
+ r'localhost|' # localhost...
+ r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
+ r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
+ r'(?::\d+)?' # optional port
+ r'(?:/?|[/?]\S+)$', re.IGNORECASE)
+
+def GitURLField(**kwargs):
+ r = models.URLField(**kwargs)
+ for i in xrange(len(r.validators)):
+ if isinstance(r.validators[i], validators.URLValidator):
+ r.validators[i] = GitURLValidator()
+ return r
+
+
class ToasterSetting(models.Model):
name = models.CharField(max_length=63)
helptext = models.TextField()
@@ -663,8 +685,9 @@ class LayerIndexLayerSource(LayerSource):
pass
class BitbakeVersion(models.Model):
+
name = models.CharField(max_length=32, unique = True)
- giturl = models.URLField()
+ giturl = GitURLField()
branch = models.CharField(max_length=32)
dirpath = models.CharField(max_length=255)
@@ -708,7 +731,7 @@ class Layer(models.Model):
name = models.CharField(max_length=100)
local_path = models.FilePathField(max_length=255, null = True, default = None)
layer_index_url = models.URLField()
- vcs_url = models.URLField(default = None, null = True)
+ vcs_url = GitURLField(default = None, null = True)
vcs_web_file_base_url = models.URLField(null = True, default = None)
summary = models.CharField(max_length=200, help_text='One-line description of the layer', null = True, default = None)