summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/orm/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/orm/models.py')
-rw-r--r--bitbake/lib/toaster/orm/models.py27
1 files changed, 25 insertions, 2 deletions
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
24from django.utils.encoding import python_2_unicode_compatible 24from django.utils.encoding import python_2_unicode_compatible
25from django.utils import timezone 25from django.utils import timezone
26 26
27
28from django.core import validators
29
30class GitURLValidator(validators.URLValidator):
31 import re
32 regex = re.compile(
33 r'^(?:ssh|git|http|ftp)s?://' # http:// or https://
34 r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
35 r'localhost|' # localhost...
36 r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
37 r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
38 r'(?::\d+)?' # optional port
39 r'(?:/?|[/?]\S+)$', re.IGNORECASE)
40
41def GitURLField(**kwargs):
42 r = models.URLField(**kwargs)
43 for i in xrange(len(r.validators)):
44 if isinstance(r.validators[i], validators.URLValidator):
45 r.validators[i] = GitURLValidator()
46 return r
47
48
27class ToasterSetting(models.Model): 49class ToasterSetting(models.Model):
28 name = models.CharField(max_length=63) 50 name = models.CharField(max_length=63)
29 helptext = models.TextField() 51 helptext = models.TextField()
@@ -663,8 +685,9 @@ class LayerIndexLayerSource(LayerSource):
663 pass 685 pass
664 686
665class BitbakeVersion(models.Model): 687class BitbakeVersion(models.Model):
688
666 name = models.CharField(max_length=32, unique = True) 689 name = models.CharField(max_length=32, unique = True)
667 giturl = models.URLField() 690 giturl = GitURLField()
668 branch = models.CharField(max_length=32) 691 branch = models.CharField(max_length=32)
669 dirpath = models.CharField(max_length=255) 692 dirpath = models.CharField(max_length=255)
670 693
@@ -708,7 +731,7 @@ class Layer(models.Model):
708 name = models.CharField(max_length=100) 731 name = models.CharField(max_length=100)
709 local_path = models.FilePathField(max_length=255, null = True, default = None) 732 local_path = models.FilePathField(max_length=255, null = True, default = None)
710 layer_index_url = models.URLField() 733 layer_index_url = models.URLField()
711 vcs_url = models.URLField(default = None, null = True) 734 vcs_url = GitURLField(default = None, null = True)
712 vcs_web_file_base_url = models.URLField(null = True, default = None) 735 vcs_web_file_base_url = models.URLField(null = True, default = None)
713 736
714 summary = models.CharField(max_length=200, help_text='One-line description of the layer', null = True, default = None) 737 summary = models.CharField(max_length=200, help_text='One-line description of the layer', null = True, default = None)