Skip to content

Commit

Permalink
Added tests for field_mapping module
Browse files Browse the repository at this point in the history
  • Loading branch information
Relrin committed Nov 15, 2016
1 parent 1bb8eea commit c92eefb
Show file tree
Hide file tree
Showing 3 changed files with 341 additions and 19 deletions.
6 changes: 2 additions & 4 deletions aiorest_ws/db/orm/django/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@
from django.core.exceptions import ImproperlyConfigured
from django.db import models

from django.core.validators import DecimalValidator
from django.contrib.postgres import fields as postgres_fields
from django.contrib.postgres.fields import JSONField


__all__ = [
'DecimalValidator', 'postgres_fields', 'JSONField',
'_resolve_model', 'get_related_model', 'get_remote_field',
'value_from_object'
'postgres_fields', 'JSONField', '_resolve_model',
'get_related_model', 'get_remote_field', 'value_from_object'
]


Expand Down
31 changes: 16 additions & 15 deletions aiorest_ws/db/orm/django/field_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
Helper functions for mapping model fields to a dictionary of default
keyword arguments that should be used for their equivalent serializer fields.
"""
from django.core import validators
from django.core.validators import DecimalValidator, MinLengthValidator, \
MaxLengthValidator, MinValueValidator, MaxValueValidator, URLValidator, \
validate_email, validate_slug, validate_ipv46_address
from django.db import models
from django.utils.text import capfirst

from aiorest_ws.db.orm.django.compat import DecimalValidator

from aiorest_ws.db.orm.django.validators import UniqueValidator
from aiorest_ws.utils.field_mapping import needs_label

Expand Down Expand Up @@ -97,8 +99,7 @@ def get_field_kwargs(field_name, model_field):
return kwargs

# Our decimal validation is handled in the field code, not validator code.
# (In Django 1.9+ this differs from previous style)
if isinstance(model_field, models.DecimalField) and DecimalValidator:
if isinstance(model_field, models.DecimalField):
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, DecimalValidator)
Expand All @@ -112,76 +113,76 @@ def get_field_kwargs(field_name, model_field):
kwargs['max_length'] = max_length
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, validators.MaxLengthValidator)
if not isinstance(validator, MaxLengthValidator)
]

# Ensure that min_length is passed explicitly as a keyword arg,
# rather than as a validator.
min_length = next((
validator.limit_value for validator in validator_kwarg
if isinstance(validator, validators.MinLengthValidator)
if isinstance(validator, MinLengthValidator)
), None)
if min_length is not None and isinstance(model_field, models.CharField):
kwargs['min_length'] = min_length
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, validators.MinLengthValidator)
if not isinstance(validator, MinLengthValidator)
]

# Ensure that max_value is passed explicitly as a keyword arg,
# rather than as a validator.
max_value = next((
validator.limit_value for validator in validator_kwarg
if isinstance(validator, validators.MaxValueValidator)
if isinstance(validator, MaxValueValidator)
), None)
if max_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES):
kwargs['max_value'] = max_value
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, validators.MaxValueValidator)
if not isinstance(validator, MaxValueValidator)
]

# Ensure that max_value is passed explicitly as a keyword arg,
# rather than as a validator.
min_value = next((
validator.limit_value for validator in validator_kwarg
if isinstance(validator, validators.MinValueValidator)
if isinstance(validator, MinValueValidator)
), None)
if min_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES):
kwargs['min_value'] = min_value
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, validators.MinValueValidator)
if not isinstance(validator, MinValueValidator)
]

# URLField does not need to include the URLValidator argument,
# as it is explicitly added in.
if isinstance(model_field, models.URLField):
validator_kwarg = [
validator for validator in validator_kwarg
if not isinstance(validator, validators.URLValidator)
if not isinstance(validator, URLValidator)
]

# EmailField does not need to include the validate_email argument,
# as it is explicitly added in.
if isinstance(model_field, models.EmailField):
validator_kwarg = [
validator for validator in validator_kwarg
if validator is not validators.validate_email
if validator is not validate_email
]

# SlugField do not need to include the 'validate_slug' argument
if isinstance(model_field, models.SlugField):
validator_kwarg = [
validator for validator in validator_kwarg
if validator is not validators.validate_slug
if validator is not validate_slug
]

# for IPAddressField exclude the 'validate_ipv46_address' argument
if isinstance(model_field, models.GenericIPAddressField):
validator_kwarg = [
validator for validator in validator_kwarg
if validator is not validators.validate_ipv46_address
if validator is not validate_ipv46_address
]

if getattr(model_field, 'unique', False):
Expand Down
Loading

0 comments on commit c92eefb

Please sign in to comment.