From f74de53e2aac0c3ce343a0cc74886649f3d2409d Mon Sep 17 00:00:00 2001 From: Luke Pomfrey Date: Wed, 6 Nov 2013 15:25:45 +0000 Subject: [PATCH] Fix slug field handling --- taggit_machinetags/fields.py | 19 +++++++++++++++++++ taggit_machinetags/models.py | 4 +++- taggit_machinetags/tests.py | 5 +++-- tox.ini | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 taggit_machinetags/fields.py diff --git a/taggit_machinetags/fields.py b/taggit_machinetags/fields.py new file mode 100644 index 0000000..fc7608c --- /dev/null +++ b/taggit_machinetags/fields.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import re + +from django.core.validators import RegexValidator +from django.db.models.fields import SlugField + + +slug_re = re.compile(r'^[-a-zA-Z0-9_]+(:[-a-zA-Z0-9_]+)?$') +validate_slug = RegexValidator( + slug_re, + 'Enter a valid slug with an optional colon separator.' +) + + +class MachineSlugField(SlugField): + + default_validators = [validate_slug] diff --git a/taggit_machinetags/models.py b/taggit_machinetags/models.py index 233040b..121bfa9 100644 --- a/taggit_machinetags/models.py +++ b/taggit_machinetags/models.py @@ -6,6 +6,8 @@ from django.template.defaultfilters import slugify from taggit.models import GenericTaggedItemBase +from taggit_machinetags.fields import MachineSlugField + @python_2_unicode_compatible class MachineTagBase(models.Model): @@ -15,7 +17,7 @@ class MachineTagBase(models.Model): namespace = models.CharField(max_length=100, blank=True, default='') namespace_slug = models.SlugField( max_length=100, blank=True, default='', editable=False) - slug = models.SlugField( + slug = MachineSlugField( max_length=201, unique=True, db_index=True, editable=False) class Meta: diff --git a/taggit_machinetags/tests.py b/taggit_machinetags/tests.py index af5a8ed..a4e88d3 100644 --- a/taggit_machinetags/tests.py +++ b/taggit_machinetags/tests.py @@ -5,8 +5,9 @@ from django_any import any_model from mock import Mock -from .managers import _MachineTaggableManager, MachineTaggableManager -from .models import MachineTag +from taggit_machinetags.managers import ( + _MachineTaggableManager, MachineTaggableManager) +from taggit_machinetags.models import MachineTag class TestMachineTagModel(TransactionTestCase): diff --git a/tox.ini b/tox.ini index 34a3a06..8ee31bb 100644 --- a/tox.ini +++ b/tox.ini @@ -4,5 +4,6 @@ envlist = py27, py33, pypy [testenv] PYTHONPATH = {toxinidir}:{toxinidir}/debreach commands = python setup.py test +install_command = pip install {opts} {packages} deps = -r{toxinidir}/requirements.txt