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>
This commit is contained in:
Alexandru DAMIAN
2014-10-09 12:37:30 +01:00
committed by Richard Purdie
parent a1f7a09801
commit 97c0beb0eb
2 changed files with 45 additions and 5 deletions

View File

@@ -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)

View File

@@ -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)