Skip to content

Commit

Permalink
Merge pull request coagulant#56 from ivelum/py3
Browse files Browse the repository at this point in the history
add python3 compatibility
  • Loading branch information
GeyseR committed Dec 7, 2016
2 parents 368a8ae + 88f4c08 commit a139bc4
Show file tree
Hide file tree
Showing 13 changed files with 226 additions and 204 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ language: python
sudo: false
python:
- "2.7"
- "3.4"
- "3.5"
env:
- DJANGO="Django>=1.7,<1.8" DB=sqlite
- DJANGO="Django>=1.8,<1.9" DB=sqlite
Expand Down
4 changes: 2 additions & 2 deletions django_any/contrib/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import auth
import default
from . import auth
from . import default
any_user = auth.any_user
any_model_with_defaults = default.any_model_with_defaults
16 changes: 9 additions & 7 deletions django_any/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@
Django forms data generators
"""
from __future__ import division
import random
from datetime import date, datetime, time
from string import hexdigits

import six
from django import forms
from django.core.validators import validate_ipv4_address
from django.utils import formats

from django_any import compat
from django_any import xunit
from django_any.functions import valid_choices, split_model_kwargs, \
ExtensionMethod
from django.core.validators import validate_ipv4_address
from string import hexdigits

try:
from django.core.validators import validate_ipv6_address, validate_ipv46_address
Expand All @@ -37,7 +39,7 @@ def any_form_default(form_cls, **kwargs):

form_fields, fields_args = split_model_kwargs(kwargs)

for name, field in form_cls.base_fields.iteritems():
for name, field in six.iteritems(form_cls.base_fields):
if name in form_fields:
form_data[name] = kwargs[name]
else:
Expand Down Expand Up @@ -156,10 +158,10 @@ def email_field_data(field, **kwargs):
"""
max_length = 10
if field.max_length:
max_length = (field.max_length -5) / 2
max_length = (field.max_length - 5) // 2
min_length = 10
if field.min_length:
min_length = (field.min_length-4) / 2
min_length = (field.min_length - 4) // 2
return "%s@%s.%s" % (
xunit.any_string(min_length=min_length, max_length=max_length),
xunit.any_string(min_length=min_length, max_length=max_length),
Expand Down Expand Up @@ -310,7 +312,7 @@ def generic_ipaddress_field_data(field, **kwargs):
if protocol == 'ipv4':
return ipaddress_field_data(field)
if protocol == 'ipv6':
nums = [str(xunit.any_string(hexdigits, min_length=4, max_length=4)) for _ in xrange(0, 8)]
nums = [str(xunit.any_string(hexdigits, min_length=4, max_length=4)) for _ in six.moves.range(0, 8)]
return ":".join(nums)


Expand Down Expand Up @@ -426,7 +428,7 @@ def multiple_choice_field_data(field, **kwargs):
random.shuffle(l)
choices = []
count = xunit.any_int(min_value=1, max_value=len(field.choices))
for i in xrange(0, count):
for i in six.moves.range(0, count):
choices.append(l[i])
return ' '.join(choices)
return 'None'
Expand Down
38 changes: 22 additions & 16 deletions django_any/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
"""
Values generators for common Django Fields
"""
import re, os, random
from __future__ import division
import random
import re
import os
from decimal import Decimal
from datetime import date, datetime, time
from string import ascii_letters, digits, hexdigits
from random import choice

import six
from django.conf import settings
from django.core import validators
from django.core.exceptions import ValidationError
Expand All @@ -18,7 +21,6 @@
from django.db.models import Q
from django.db.models.fields.files import FieldFile


try:
from django.core.validators import validate_ipv6_address, validate_ipv46_address
except ImportError:
Expand Down Expand Up @@ -85,7 +87,11 @@ def any_biginteger_field(field, **kwargs):
"""
min_value = kwargs.get('min_value', 1)
max_value = kwargs.get('max_value', 10**10)
return long(xunit.any_int(min_value=min_value, max_value=max_value))
if six.PY3:
long_type = int
else:
long_type = long
return long_type(xunit.any_int(min_value=min_value, max_value=max_value))


@any_field.register(models.BooleanField)
Expand Down Expand Up @@ -141,8 +147,8 @@ def any_commaseparatedinteger_field(field, **kwargs):
>>> [int(num) for num in result.split(',')] and 'OK'
'OK'
"""
nums_count = field.max_length/2
nums = [str(xunit.any_int(min_value=0, max_value=9)) for _ in xrange(0, nums_count)]
nums_count = field.max_length // 2
nums = [str(xunit.any_int(min_value=0, max_value=9)) for _ in six.moves.range(0, nums_count)]
return ",".join(nums)


Expand Down Expand Up @@ -309,7 +315,7 @@ def any_ipaddress_field(field, **kwargs):
>>> re.match(ipv4_re, result) is not None
True
"""
nums = [str(xunit.any_int(min_value=0, max_value=255)) for _ in xrange(0, 4)]
nums = [str(xunit.any_int(min_value=0, max_value=255)) for _ in six.moves.range(0, 4)]
return ".".join(nums)

if validate_ipv6_address:
Expand Down Expand Up @@ -351,7 +357,7 @@ def any_genericipaddress_field(field, **kwargs):
else:
return any_genericipaddress_field(field)
if protocol == 'ipv6':
nums = [str(xunit.any_string(hexdigits, min_length=4, max_length=4)) for _ in xrange(0, 8)]
nums = [str(xunit.any_string(hexdigits, min_length=4, max_length=4)) for _ in six.moves.range(0, 8)]
return ":".join(nums)


Expand Down Expand Up @@ -451,14 +457,14 @@ def any_url_field(field, **kwargs):
if isinstance(validator, validators.URLValidator) and \
getattr(validator, 'verify_exists', False) == True]
if verified:
url = choice(['http://news.yandex.ru/society.html',
'http://video.google.com/?hl=en&tab=wv',
'http://www.microsoft.com/en/us/default.aspx',
'http://habrahabr.ru/company/opera/',
'http://www.apple.com/support/hardware/',
'http://ya.ru',
'http://google.com',
'http://fr.wikipedia.org/wiki/France'])
url = random.choice(['http://news.yandex.ru/society.html',
'http://video.google.com/?hl=en&tab=wv',
'http://www.microsoft.com/en/us/default.aspx',
'http://habrahabr.ru/company/opera/',
'http://www.apple.com/support/hardware/',
'http://ya.ru',
'http://google.com',
'http://fr.wikipedia.org/wiki/France'])
else:
url = "http://%s.%s/%s" % (
xunit.any_string(max_length=10),
Expand Down
6 changes: 4 additions & 2 deletions django_any/test.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
import time, random
import random
import time

try:
from unittest import _strclass
except ImportError:
_strclass = str

import six
from django import forms
from django_any import any_form
from django.test.client import Client as DjangoClient
Expand All @@ -16,7 +18,7 @@

def _context_keys_iterator(context):
for container_or_key in context:
if isinstance(container_or_key, basestring):
if isinstance(container_or_key, six.string_types):
yield container_or_key
else:
for key in _context_keys_iterator(container_or_key):
Expand Down
2 changes: 1 addition & 1 deletion django_any/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def test_login_as_super_user(self):
self.assertTrue(self.client.login_as(is_superuser=True, is_staff=True))

response = self.client.get('/admin/')
self.assertEquals(200, response.status_code)
self.assertEqual(200, response.status_code)

def test_login_as_custom_user(self):
user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
Expand Down
4 changes: 3 additions & 1 deletion django_any/tests/test_model_customfield.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
"""
Test model creation with custom fields
"""
import six
from django.db import models
from django.test import TestCase
from django_any.models import any_model


class MySlugField(models.SlugField):
pass

Expand All @@ -26,4 +28,4 @@ def test_created_model_with_custom_field(self):
self.assertEqual(len(model._meta.fields), len(ModelWithCustomField._meta.local_fields))

self.assertTrue(model.slug)
self.assertTrue(isinstance(model.slug, basestring))
self.assertTrue(isinstance(model.slug, six.string_types))
2 changes: 1 addition & 1 deletion django_any/tests/test_model_field_validatiors.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

def validate_even(value):
if value % 2 != 0:
raise ValidationError(u'%s is not an even number' % value)
raise ValidationError('%s is not an even number' % value)


class ModelWithValidatedField(models.Model):
Expand Down

0 comments on commit a139bc4

Please sign in to comment.