Skip to content

Commit

Permalink
chore: remove south
Browse files Browse the repository at this point in the history
  • Loading branch information
thoas committed Sep 30, 2024
1 parent 750d212 commit c565f77
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 138 deletions.
6 changes: 4 additions & 2 deletions manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import sys

if __name__ == "__main__":
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'separatedvaluesfield.tests.settings')
os.environ.setdefault('DJANGO_CONFIGURATION', 'Test')
os.environ.setdefault(
"DJANGO_SETTINGS_MODULE", "separatedvaluesfield.tests.settings"
)
os.environ.setdefault("DJANGO_CONFIGURATION", "Test")

from django.core.management import execute_from_command_line

Expand Down
2 changes: 1 addition & 1 deletion separatedvaluesfield/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version = (0, 6, 0)

__version__ = '.'.join(map(str, version))
__version__ = ".".join(map(str, version))
66 changes: 37 additions & 29 deletions separatedvaluesfield/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.core import validators
from django.core import exceptions
from django.db import models
Expand All @@ -12,6 +9,7 @@ class Creator(object):
"""
A placeholder class that provides a way to set the attribute on the model.
"""

def __init__(self, field):
self.field = field

Expand All @@ -26,8 +24,8 @@ def __set__(self, obj, value):

class BaseSeparatedValuesField(object):
def __init__(self, *args, **kwargs):
self.token = kwargs.pop('token', ',')
self.cast = kwargs.pop('cast', str)
self.token = kwargs.pop("token", ",")
self.cast = kwargs.pop("cast", str)
super(BaseSeparatedValuesField, self).__init__(*args, **kwargs)

def contribute_to_class(self, cls, name, **kwargs):
Expand Down Expand Up @@ -58,13 +56,15 @@ def validate(self, value, model_instance):

for val in value:
if val and val not in choices:
raise exceptions.ValidationError(self.error_messages['invalid_choice'] % val)
raise exceptions.ValidationError(
self.error_messages["invalid_choice"] % val
)

if value is None and not self.null:
raise exceptions.ValidationError(self.error_messages['null'])
raise exceptions.ValidationError(self.error_messages["null"])

if not self.blank and value in validators.EMPTY_VALUES:
raise exceptions.ValidationError(self.error_messages['blank'])
raise exceptions.ValidationError(self.error_messages["blank"])

def to_python(self, value):
if not value:
Expand All @@ -80,34 +80,48 @@ def get_db_prep_value(self, value, *args, **kwargs):
if not value:
return value

assert(isinstance(value, list) or isinstance(value, tuple))
assert isinstance(value, list) or isinstance(value, tuple)

return self.token.join(['%s' % s for s in value])
return self.token.join(["%s" % s for s in value])

def value_to_string(self, obj):
value = (self._get_val_from_obj(obj) if hasattr(self, "_get_val_from_obj") else self.value_from_object(obj))
value = (
self._get_val_from_obj(obj)
if hasattr(self, "_get_val_from_obj")
else self.value_from_object(obj)
)
return self.get_db_prep_value(value)

def formfield(self, form_class=MultipleChoiceField, **kwargs):
defaults = {'required': not self.blank,
'label': capfirst(self.verbose_name),
'help_text': self.help_text}
defaults = {
"required": not self.blank,
"label": capfirst(self.verbose_name),
"help_text": self.help_text,
}
if self.has_default():
if callable(self.default):
defaults['initial'] = self.default
defaults['show_hidden_initial'] = True
defaults["initial"] = self.default
defaults["show_hidden_initial"] = True
else:
defaults['initial'] = self.get_default()
defaults["initial"] = self.get_default()

if self.choices:
include_blank = (self.blank or
not (self.has_default() or 'initial' in kwargs))
defaults['choices'] = self.get_choices(include_blank=include_blank)
include_blank = self.blank or not (
self.has_default() or "initial" in kwargs
)
defaults["choices"] = self.get_choices(include_blank=include_blank)

for k in list(kwargs):
if k not in ('choices', 'required',
'widget', 'label', 'initial', 'help_text',
'error_messages', 'show_hidden_initial'):
if k not in (
"choices",
"required",
"widget",
"label",
"initial",
"help_text",
"error_messages",
"show_hidden_initial",
):
del kwargs[k]
defaults.update(kwargs)
return form_class(**defaults)
Expand All @@ -119,9 +133,3 @@ class SeparatedValuesField(BaseSeparatedValuesField, models.CharField):

class TextSeparatedValuesField(BaseSeparatedValuesField, models.TextField):
pass

try:
from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^separatedvaluesfield\.models\.SeparatedValuesField"])
except ImportError:
pass
28 changes: 13 additions & 15 deletions separatedvaluesfield/tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,34 @@

class Project(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(max_length=150, choices=(('en', 'English'),
('fr', 'French')), blank=True)
languages = SeparatedValuesField(
max_length=150, choices=(("en", "English"), ("fr", "French")), blank=True
)


class RequiredProject(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(max_length=150, choices=(('en', 'English'),
('fr', 'French')))
languages = SeparatedValuesField(
max_length=150, choices=(("en", "English"), ("fr", "French"))
)


class ProjectCastInt(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(
max_length=150,
cast=int,
choices=(
(1, 'English'),
(2, 'French')))
max_length=150, cast=int, choices=((1, "English"), (2, "French"))
)


class ProjectCastString(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(
max_length=150,
choices=(
('1', 'English'),
('2', 'French')))
max_length=150, choices=(("1", "English"), ("2", "French"))
)


class ProjectText(models.Model):
name = models.CharField(max_length=150)
languages = TextSeparatedValuesField(choices=(('en', 'English'),
('fr', 'French')), blank=True)
languages = TextSeparatedValuesField(
choices=(("en", "English"), ("fr", "French")), blank=True
)
30 changes: 15 additions & 15 deletions separatedvaluesfield/tests/settings.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "",
"USER": "",
"PASSWORD": "",
"HOST": "",
"PORT": "",
}
}

SITE_ID = 1
DEBUG = True

INSTALLED_APPS = [
'separatedvaluesfield.tests',
"separatedvaluesfield.tests",
]

SECRET_KEY = 'blabla'
SECRET_KEY = "blabla"

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
)
Loading

0 comments on commit c565f77

Please sign in to comment.