diff --git a/README.rst b/README.rst
index 4993989..2d063cc 100644
--- a/README.rst
+++ b/README.rst
@@ -12,9 +12,9 @@ django-inspectional-registration
:target: https://requires.io/github/lambdalisue/django-inspectional-registration/requirements/?branch=master
:alt: Requirements Status
-.. image:: https://landscape.io/github/lambdalisue/django-inspectional-registration/master/landscape.png
- :target: https://landscape.io/github/lambdalisue/django-inspectional-registration/master
- :alt: Code Health
+.. image:: https://landscape.io/github/lambdalisue/django-inspectional-registration/master/landscape.svg?style=flat
+ :target: https://landscape.io/github/lambdalisue/django-inspectional-registration/master
+ :alt: Code Health
.. image:: https://scrutinizer-ci.com/g/lambdalisue/django-inspectional-registration/badges/quality-score.png?b=master
:target: https://scrutinizer-ci.com/g/lambdalisue/django-inspectional-registration/inspections
diff --git a/docs/about_registration_supplement.rst b/docs/about_registration_supplement.rst
index 5d39549..95f4168 100644
--- a/docs/about_registration_supplement.rst
+++ b/docs/about_registration_supplement.rst
@@ -21,7 +21,9 @@ Quick tutorial to create your own Registration Supplement
2. Create new registration supplement model in your ``models.py`` as::
+ from __future__ import unicode_literals
from django.db import models
+ from django.utils.encoding import python_2_unicode_compatible
from registration.supplements import RegistrationSupplementBase
class MyRegistrationSupplement(RegistrationSupplementBase):
@@ -30,7 +32,7 @@ Quick tutorial to create your own Registration Supplement
age = models.IntegerField("Age")
remarks = models.TextField("Remarks", blank=True)
- def __unicode__(self):
+ def __str__(self):
# a summary of this supplement
return "%s (%s)" % (self.realname, self.age)
diff --git a/docs/conf.py b/docs/conf.py
index c58f5ff..84c8fab 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -19,6 +19,10 @@
sys.path.insert(0, os.path.join(BASE_DIR, 'tests'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
+import django
+if django.VERSION >= (1, 7):
+ django.setup()
+
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
diff --git a/docs/registration.migrations.rst b/docs/registration.migrations.rst
index 06e217e..6b9c86a 100644
--- a/docs/registration.migrations.rst
+++ b/docs/registration.migrations.rst
@@ -12,30 +12,6 @@ registration.migrations.0001_initial module
:undoc-members:
:show-inheritance:
-registration.migrations.0002_auto__add_field_registrationprofile__status__chg_field_registrationpro module
-----------------------------------------------------------------------------------------------------------
-
-.. automodule:: registration.migrations.0002_auto__add_field_registrationprofile__status__chg_field_registrationpro
- :members:
- :undoc-members:
- :show-inheritance:
-
-registration.migrations.0003_status module
-------------------------------------------
-
-.. automodule:: registration.migrations.0003_status
- :members:
- :undoc-members:
- :show-inheritance:
-
-registration.migrations.0004_activation_keys module
----------------------------------------------------
-
-.. automodule:: registration.migrations.0004_activation_keys
- :members:
- :undoc-members:
- :show-inheritance:
-
Module contents
---------------
diff --git a/docs/registration.rst b/docs/registration.rst
index 14377dd..4d99433 100644
--- a/docs/registration.rst
+++ b/docs/registration.rst
@@ -11,6 +11,7 @@ Subpackages
registration.contrib
registration.management
registration.migrations
+ registration.south_migrations
registration.supplements
registration.tests
diff --git a/docs/registration.south_migrations.rst b/docs/registration.south_migrations.rst
new file mode 100644
index 0000000..3bde41a
--- /dev/null
+++ b/docs/registration.south_migrations.rst
@@ -0,0 +1,46 @@
+registration.south_migrations package
+=====================================
+
+Submodules
+----------
+
+registration.south_migrations.0001_initial module
+-------------------------------------------------
+
+.. automodule:: registration.south_migrations.0001_initial
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+registration.south_migrations.0002_auto__add_field_registrationprofile__status__chg_field_registrationpro module
+----------------------------------------------------------------------------------------------------------------
+
+.. automodule:: registration.south_migrations.0002_auto__add_field_registrationprofile__status__chg_field_registrationpro
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+registration.south_migrations.0003_status module
+------------------------------------------------
+
+.. automodule:: registration.south_migrations.0003_status
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+registration.south_migrations.0004_activation_keys module
+---------------------------------------------------------
+
+.. automodule:: registration.south_migrations.0004_activation_keys
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: registration.south_migrations
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/manage.py b/manage.py
index 3b53be6..ce50ede 100644
--- a/manage.py
+++ b/manage.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Django 1.2 - 1.6 compatible manage.py
Modify this script to make your own manage.py
diff --git a/src/registration/__init__.py b/src/registration/__init__.py
index 8280c89..381a2d8 100644
--- a/src/registration/__init__.py
+++ b/src/registration/__init__.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
from app_version import get_versions
__version__, VERSION = get_versions('django-inspectional-registration',
allow_ambiguous=True)
diff --git a/src/registration/admin/__init__.py b/src/registration/admin/__init__.py
index eb66460..26275f4 100644
--- a/src/registration/admin/__init__.py
+++ b/src/registration/admin/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Admins of django-inspectional-registration
@@ -55,6 +56,7 @@
from django.utils.safestring import mark_safe
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext_lazy as _
+from django.utils.encoding import force_text
from registration.conf import settings
from registration.backends import get_backend
@@ -62,7 +64,6 @@
from registration.utils import get_site
from registration.admin.forms import RegistrationAdminForm
from registration.compat import import_module
-from registration.compat import force_unicode
from registration.compat import transaction_atomic
from registration.compat import unquote
@@ -87,7 +88,7 @@ def get_supplement_admin_inline_base_class(path=None):
module, attr = path[:i], path[i+1:]
try:
mod = import_module(module)
- except ImportError, e:
+ except ImportError as e:
raise ImproperlyConfigured((
'Error loading admin inline class for registration supplement '
'%s: "%s"'
@@ -306,7 +307,7 @@ def display_supplement_summary(self, obj):
"""
if obj.supplement:
- return force_unicode(obj.supplement)
+ return force_text(obj.supplement)
return _('Not available')
display_supplement_summary.short_description = _(
'A summary of supplemental information'
@@ -329,7 +330,7 @@ def display_activation_key(self, obj):
activation_url = reverse('registration_activate',
kwargs={
'activation_key': obj.activation_key})
- return mark_safe(u'%s' % (
+ return mark_safe('%s' % (
activation_url, obj.activation_key))
return _('Not available')
display_activation_key.short_description = _('Activation key')
diff --git a/src/registration/admin/forms.py b/src/registration/admin/forms.py
index 115bac9..acb7714 100644
--- a/src/registration/admin/forms.py
+++ b/src/registration/admin/forms.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A forms used in RegistrationAdmin
"""
diff --git a/src/registration/backends/__init__.py b/src/registration/backends/__init__.py
index 2cc547c..02ca52c 100644
--- a/src/registration/backends/__init__.py
+++ b/src/registration/backends/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Backend
@@ -64,7 +65,7 @@ def get_backend_class(path=None):
module, attr = path[:i], path[i+1:]
try:
mod = import_module(module)
- except ImportError, e:
+ except ImportError as e:
raise ImproperlyConfigured(
'Error loading registration backend %s: "%s"' % (module, e))
try:
diff --git a/src/registration/backends/base.py b/src/registration/backends/base.py
index 1752545..c9af07a 100644
--- a/src/registration/backends/base.py
+++ b/src/registration/backends/base.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Base class of registration backend
diff --git a/src/registration/backends/default/__init__.py b/src/registration/backends/default/__init__.py
index ddc1d8f..c7b7299 100644
--- a/src/registration/backends/default/__init__.py
+++ b/src/registration/backends/default/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Default registration backend class
diff --git a/src/registration/compat.py b/src/registration/compat.py
index 8b17733..ceb0139 100644
--- a/src/registration/compat.py
+++ b/src/registration/compat.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Compatibility module
"""
@@ -39,12 +40,6 @@
except ImportError:
from django.utils.hashcompat import sha_constructor as sha1
-try:
- # only available in python 2
- from django.utils.encoding import force_unicode
-except ImportError:
- from django.utils.encoding import force_text as force_unicode
-
#
# Django change the transaction strategy from Django 1.6
# https://docs.djangoproject.com/en/1.6/topics/db/transactions/
diff --git a/src/registration/conf.py b/src/registration/conf.py
index ff5b78d..429c74b 100644
--- a/src/registration/conf.py
+++ b/src/registration/conf.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Confiurations of django-inspectional-registration
"""
diff --git a/src/registration/contrib/__init__.py b/src/registration/contrib/__init__.py
index ef58eb5..3bf7901 100644
--- a/src/registration/contrib/__init__.py
+++ b/src/registration/contrib/__init__.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Contributions of django-inspectional-registration
diff --git a/src/registration/contrib/autologin/__init__.py b/src/registration/contrib/autologin/__init__.py
index fddd05c..8d5aa14 100644
--- a/src/registration/contrib/autologin/__init__.py
+++ b/src/registration/contrib/autologin/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Automatically log activated user in when they have activated with their activation
link. This doesn't happen when the user was activated programatically with Django
diff --git a/src/registration/contrib/autologin/conf.py b/src/registration/contrib/autologin/conf.py
index 73e1756..b7ed537 100644
--- a/src/registration/contrib/autologin/conf.py
+++ b/src/registration/contrib/autologin/conf.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/contrib/autologin/tests.py b/src/registration/contrib/autologin/tests.py
index c459f49..e0d4c24 100644
--- a/src/registration/contrib/autologin/tests.py
+++ b/src/registration/contrib/autologin/tests.py
@@ -1,4 +1,5 @@
-# coding: utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/contrib/notification/__init__.py b/src/registration/contrib/notification/__init__.py
index 996879c..e840ff0 100644
--- a/src/registration/contrib/notification/__init__.py
+++ b/src/registration/contrib/notification/__init__.py
@@ -1,4 +1,5 @@
-# coding: utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Send notification emails to admins, managers or particular recipients
when new user has registered in the site
diff --git a/src/registration/contrib/notification/conf.py b/src/registration/contrib/notification/conf.py
index 52b384a..7ef5897 100644
--- a/src/registration/contrib/notification/conf.py
+++ b/src/registration/contrib/notification/conf.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/contrib/notification/tests/__init__.py b/src/registration/contrib/notification/tests/__init__.py
index 00b87e0..407397c 100644
--- a/src/registration/contrib/notification/tests/__init__.py
+++ b/src/registration/contrib/notification/tests/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/contrib/notification/tests/urls.py b/src/registration/contrib/notification/tests/urls.py
index aba690b..642f9f1 100644
--- a/src/registration/contrib/notification/tests/urls.py
+++ b/src/registration/contrib/notification/tests/urls.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
from registration.compat import url
from registration.compat import patterns
from registration.compat import include
diff --git a/src/registration/forms.py b/src/registration/forms.py
index 375b033..2ecd595 100644
--- a/src/registration/forms.py
+++ b/src/registration/forms.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Forms of django-inspectional-registration
@@ -143,8 +144,8 @@ class RegistrationFormTermsOfService(RegistrationForm):
"""
tos = forms.BooleanField(widget=forms.CheckboxInput(attrs=attrs_dict),
- label=_(u'I have read and agree to the Terms '
- u'of Service'),
+ label=_('I have read and agree to the Terms '
+ 'of Service'),
error_messages={'required': _(
"You must agree to the terms to register")})
diff --git a/src/registration/management/commands/cleanup_expired_registrations.py b/src/registration/management/commands/cleanup_expired_registrations.py
index ed443a1..d385179 100644
--- a/src/registration/management/commands/cleanup_expired_registrations.py
+++ b/src/registration/management/commands/cleanup_expired_registrations.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A management command which deletes expired or rejected accounts (e.g.,
accounts which signed up but never activated) from the database.
diff --git a/src/registration/management/commands/cleanup_registrations.py b/src/registration/management/commands/cleanup_registrations.py
index a1618a9..84ae096 100644
--- a/src/registration/management/commands/cleanup_registrations.py
+++ b/src/registration/management/commands/cleanup_registrations.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A management command which deletes expired or rejected accounts (e.g.,
accounts which signed up but never activated) from the database.
diff --git a/src/registration/management/commands/cleanup_rejected_registrations.py b/src/registration/management/commands/cleanup_rejected_registrations.py
index 627567f..e0a0b7c 100644
--- a/src/registration/management/commands/cleanup_rejected_registrations.py
+++ b/src/registration/management/commands/cleanup_rejected_registrations.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A management command which deletes expired or rejected accounts (e.g.,
accounts which signed up but never activated) from the database.
diff --git a/src/registration/management/commands/cleanupregistration.py b/src/registration/management/commands/cleanupregistration.py
index e131628..1534744 100644
--- a/src/registration/management/commands/cleanupregistration.py
+++ b/src/registration/management/commands/cleanupregistration.py
@@ -1,2 +1,4 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
# This is for compatibility to django-registration
-from cleanup_registrations import *
+from registration.management.commands.cleanup_registrations import *
diff --git a/src/registration/migrations/0001_initial.py b/src/registration/migrations/0001_initial.py
index 39f32cb..6b008a0 100644
--- a/src/registration/migrations/0001_initial.py
+++ b/src/registration/migrations/0001_initial.py
@@ -1,71 +1,46 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
-class Migration(SchemaMigration):
+from django.db import models, migrations
+from django.conf import settings
- def forwards(self, orm):
-
- # Adding model 'RegistrationProfile'
- db.create_table('registration_registrationprofile', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True)),
- ('activation_key', self.gf('django.db.models.fields.CharField')(max_length=40)),
- ))
- db.send_create_signal('registration', ['RegistrationProfile'])
+class Migration(migrations.Migration):
- def backwards(self, orm):
-
- # Deleting model 'RegistrationProfile'
- db.delete_table('registration_registrationprofile')
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'registration.registrationprofile': {
- 'Meta': {'object_name': 'RegistrationProfile'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- }
- }
-
- complete_apps = ['registration']
+ operations = [
+ migrations.CreateModel(
+ name='DefaultRegistrationSupplement',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
+ ('remarks', models.TextField(verbose_name='remarks')),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='RegistrationProfile',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
+ ('_status', models.CharField(editable=False, default='untreated', max_length=10, choices=[('untreated', 'Untreated yet'), ('accepted', 'Registration has accepted'), ('rejected', 'Registration has rejected')], verbose_name='status', db_column='status')),
+ ('activation_key', models.CharField(null=True, default=None, verbose_name='activation key', max_length=40, editable=False)),
+ ('user', models.OneToOneField(editable=False, related_name='registration_profile', verbose_name='user', to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'permissions': (('accept_registration', 'Can accept registration'), ('reject_registration', 'Can reject registration'), ('activate_user', 'Can activate user in admin site')),
+ 'verbose_name': 'registration profile',
+ 'verbose_name_plural': 'registration profiles',
+ },
+ bases=(models.Model,),
+ ),
+ migrations.AddField(
+ model_name='defaultregistrationsupplement',
+ name='registration_profile',
+ field=models.OneToOneField(editable=False, related_name='_registration_defaultregistrationsupplement_supplement', verbose_name='registration profile', to='registration.RegistrationProfile'),
+ preserve_default=True,
+ ),
+ ]
diff --git a/src/registration/models.py b/src/registration/models.py
index b637c2a..195c658 100644
--- a/src/registration/models.py
+++ b/src/registration/models.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Models of django-inspectional-registration
@@ -55,6 +56,7 @@
from django.template.loader import render_to_string
from django.core.exceptions import ObjectDoesNotExist
from django.utils.text import ugettext_lazy as _
+from django.utils.encoding import python_2_unicode_compatible
from registration.conf import settings
from registration.compat import get_user_model
@@ -340,6 +342,7 @@ def delete_rejected_users(self):
profile.delete()
+@python_2_unicode_compatible
class RegistrationProfile(models.Model):
"""Registration profile model class
@@ -438,9 +441,6 @@ def get_status_display(self):
return sl.get(self.status)
get_status_display.short_description = _("status")
- def __unicode__(self):
- return u"Registration information for %s" % self.user
-
def __str__(self):
return "Registration information for %s" % self.user
diff --git a/src/registration/signals.py b/src/registration/signals.py
index 0c53b3d..572fbf6 100644
--- a/src/registration/signals.py
+++ b/src/registration/signals.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Django custom signals used in django-inspectional-registration
diff --git a/src/registration/south_migrations/0001_initial.py b/src/registration/south_migrations/0001_initial.py
new file mode 100644
index 0000000..68d1db0
--- /dev/null
+++ b/src/registration/south_migrations/0001_initial.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'RegistrationProfile'
+ db.create_table('registration_registrationprofile', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True)),
+ ('activation_key', self.gf('django.db.models.fields.CharField')(max_length=40)),
+ ))
+ db.send_create_signal('registration', ['RegistrationProfile'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'RegistrationProfile'
+ db.delete_table('registration_registrationprofile')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'registration.registrationprofile': {
+ 'Meta': {'object_name': 'RegistrationProfile'},
+ 'activation_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ }
+ }
+
+ complete_apps = ['registration']
diff --git a/src/registration/migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py b/src/registration/south_migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py
similarity index 98%
rename from src/registration/migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py
rename to src/registration/south_migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py
index 48726e5..ff38097 100644
--- a/src/registration/migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py
+++ b/src/registration/south_migrations/0002_auto__add_field_registrationprofile__status__chg_field_registrationpro.py
@@ -1,4 +1,5 @@
-# encoding: utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
import datetime
from south.db import db
from south.v2 import SchemaMigration
diff --git a/src/registration/migrations/0003_status.py b/src/registration/south_migrations/0003_status.py
similarity index 98%
rename from src/registration/migrations/0003_status.py
rename to src/registration/south_migrations/0003_status.py
index 8be72d7..7e4249c 100644
--- a/src/registration/migrations/0003_status.py
+++ b/src/registration/south_migrations/0003_status.py
@@ -1,4 +1,5 @@
-# encoding: utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
import datetime
from south.db import db
from south.v2 import DataMigration
diff --git a/src/registration/migrations/0004_activation_keys.py b/src/registration/south_migrations/0004_activation_keys.py
similarity index 98%
rename from src/registration/migrations/0004_activation_keys.py
rename to src/registration/south_migrations/0004_activation_keys.py
index 854a3e6..0701268 100644
--- a/src/registration/migrations/0004_activation_keys.py
+++ b/src/registration/south_migrations/0004_activation_keys.py
@@ -1,4 +1,5 @@
-# encoding: utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
import datetime
from south.db import db
from south.v2 import DataMigration
diff --git a/src/registration/south_migrations/__init__.py b/src/registration/south_migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/registration/supplements/__init__.py b/src/registration/supplements/__init__.py
index 063c810..ab7dc51 100644
--- a/src/registration/supplements/__init__.py
+++ b/src/registration/supplements/__init__.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Registration Supplement
"""
@@ -29,7 +30,7 @@ def get_supplement_class(path=None):
module, attr = path[:i], path[i+1:]
try:
mod = import_module(module)
- except ImportError, e:
+ except ImportError as e:
raise ImproperlyConfigured(
'Error loading registration addition %s: "%s"' % (module, e))
try:
diff --git a/src/registration/supplements/base.py b/src/registration/supplements/base.py
index 44c0232..bf4516d 100644
--- a/src/registration/supplements/base.py
+++ b/src/registration/supplements/base.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A registration supplemental abstract model
"""
@@ -6,8 +7,10 @@
from django.db import models
from django.forms.models import modelform_factory
from django.utils.text import ugettext_lazy as _
+from django.utils.encoding import python_2_unicode_compatible
+@python_2_unicode_compatible
class RegistrationSupplementBase(models.Model):
"""A registration supplement abstract model
@@ -16,9 +19,9 @@ class RegistrationSupplementBase(models.Model):
user who tried to register the site and displaied in django admin page to
help determine the acceptance/rejection of the registration
- The ``__unicode__()`` method is used to display the summary of the
+ The ``__str__()`` method is used to display the summary of the
supplemental information in django admin's change list view. Thus subclasses
- must define them own ``__unicode__()`` method.
+ must define them own ``__str__()`` method.
The ``get_form_class()`` is a class method return a value of ``form_class``
attribute to determine the form class used for filling up the supplemental
@@ -52,13 +55,13 @@ class RegistrationSupplementBase(models.Model):
class Meta:
abstract = True
- def __unicode__(self):
+ def __str__(self):
"""return the summary of this supplemental information
Subclasses must define them own method
"""
raise NotImplementedError(
- "You must define '__unicode__' method and return summary of "
+ "You must define '__str__' method and return summary of "
"the supplement")
@classmethod
diff --git a/src/registration/supplements/default/models.py b/src/registration/supplements/default/models.py
index c51f096..f773ed4 100644
--- a/src/registration/supplements/default/models.py
+++ b/src/registration/supplements/default/models.py
@@ -1,18 +1,21 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
A simple registration supplement model which requires ``remarks``
"""
__author__ = 'Alisue '
from django.db import models
from django.utils.text import ugettext_lazy as _
+from django.utils.encoding import python_2_unicode_compatible
from registration.supplements import RegistrationSupplementBase
+@python_2_unicode_compatible
class DefaultRegistrationSupplement(RegistrationSupplementBase):
"""A simple registration supplement model which requires remarks"""
remarks = models.TextField(_('remarks'))
- def __unicode__(self):
+ def __str__(self):
"""return a summary of this addition"""
return self.remarks
diff --git a/src/registration/tests/__init__.py b/src/registration/tests/__init__.py
index 5948f89..fe29db3 100644
--- a/src/registration/tests/__init__.py
+++ b/src/registration/tests/__init__.py
@@ -1,10 +1,12 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
import django
if django.VERSION < (1, 6):
- from test_admin import *
- from test_models import *
- from test_forms import *
- from test_views import *
- from test_backends import *
- from test_supplements import *
+ from registration.tests.test_admin import *
+ from registration.tests.test_models import *
+ from registration.tests.test_forms import *
+ from registration.tests.test_views import *
+ from registration.tests.test_backends import *
+ from registration.tests.test_supplements import *
diff --git a/src/registration/tests/compat.py b/src/registration/tests/compat.py
index 298d1b6..c47b4e1 100644
--- a/src/registration/tests/compat.py
+++ b/src/registration/tests/compat.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/tests/mock.py b/src/registration/tests/mock.py
index 879840a..c059902 100644
--- a/src/registration/tests/mock.py
+++ b/src/registration/tests/mock.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Mock request for unittest
diff --git a/src/registration/tests/test_admin.py b/src/registration/tests/test_admin.py
index fbdc504..56efbb2 100644
--- a/src/registration/tests/test_admin.py
+++ b/src/registration/tests/test_admin.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
@@ -177,8 +178,8 @@ def test_change_view_post_invalid_reject_from_accepted(self):
self.failIf(response.context['adminform'].form.is_valid())
self.assertEqual(
response.context['adminform'].form.errors['action_name'],
- [u"Select a valid choice. "
- u"reject is not one of the available choices."])
+ ["Select a valid choice. "
+ "reject is not one of the available choices."])
profile = RegistrationProfile.objects.get(user__pk=new_user.pk)
self.assertEqual(profile.status, 'accepted')
@@ -207,8 +208,8 @@ def test_change_view_post_invalid_reject_from_rejected(self):
self.failIf(response.context['adminform'].form.is_valid())
self.assertEqual(
response.context['adminform'].form.errors['action_name'],
- [u"Select a valid choice. "
- u"reject is not one of the available choices."])
+ ["Select a valid choice. "
+ "reject is not one of the available choices."])
profile = RegistrationProfile.objects.get(user__pk=new_user.pk)
self.assertEqual(profile.status, 'rejected')
@@ -234,8 +235,8 @@ def test_change_view_post_invalid_activate_from_untreated(self):
self.failIf(response.context['adminform'].form.is_valid())
self.assertEqual(
response.context['adminform'].form.errors['action_name'],
- [u"Select a valid choice. "
- u"activate is not one of the available choices."])
+ ["Select a valid choice. "
+ "activate is not one of the available choices."])
profile = RegistrationProfile.objects.get(user__pk=new_user.pk)
self.assertEqual(profile.status, 'untreated')
@@ -287,8 +288,8 @@ def test_change_view_post_invalid_activate_from_rejected(self):
self.failIf(response.context['adminform'].form.is_valid())
self.assertEqual(
response.context['adminform'].form.errors['action_name'],
- [u"Select a valid choice. "
- u"activate is not one of the available choices."])
+ ["Select a valid choice. "
+ "activate is not one of the available choices."])
profile = RegistrationProfile.objects.get(user__pk=new_user.pk)
self.assertEqual(profile.status, 'rejected')
@@ -337,8 +338,8 @@ def test_change_view_post_invalid_force_activate_from_accepted(self):
self.failIf(response.context['adminform'].form.is_valid())
self.assertEqual(
response.context['adminform'].form.errors['action_name'],
- [u"Select a valid choice. "
- u"force_activate is not one of the available choices."])
+ ["Select a valid choice. "
+ "force_activate is not one of the available choices."])
profile = RegistrationProfile.objects.get(user__pk=new_user.pk)
self.assertEqual(profile.status, 'accepted')
diff --git a/src/registration/tests/test_backends.py b/src/registration/tests/test_backends.py
index 22eb6de..cef8695 100644
--- a/src/registration/tests/test_backends.py
+++ b/src/registration/tests/test_backends.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/tests/test_forms.py b/src/registration/tests/test_forms.py
index 3ce0490..3428734 100644
--- a/src/registration/tests/test_forms.py
+++ b/src/registration/tests/test_forms.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
@@ -27,7 +28,7 @@ def test_activation_form(self):
# Mismatched passwords.
{'data': {'password1': 'foo',
'password2': 'bar'},
- 'error': ('__all__', [u"The two password fields didn't match."])},
+ 'error': ('__all__', ["The two password fields didn't match."])},
]
for invalid_dict in invalid_data_dicts:
@@ -62,17 +63,17 @@ def test_registration_form(self):
{'data': {'username': 'foo/bar',
'email1': 'foo@example.com',
'email2': 'foo@example.com'},
- 'error': ('username', [u"This value must contain only letters, numbers and underscores."])},
+ 'error': ('username', ["This value must contain only letters, numbers and underscores."])},
# Already-existing username.
{'data': {'username': 'alice',
'email1': 'alice@example.com',
'email2': 'alice@example.com'},
- 'error': ('username', [u"A user with that username already exists."])},
+ 'error': ('username', ["A user with that username already exists."])},
# Mismatched email.
{'data': {'username': 'foo',
'email1': 'foo@example.com',
'email2': 'bar@example.com'},
- 'error': ('__all__', [u"The two email fields didn't match."])},
+ 'error': ('__all__', ["The two email fields didn't match."])},
]
for invalid_dict in invalid_data_dicts:
@@ -97,7 +98,7 @@ def test_registration_form_tos(self):
'email2': 'foo@example.com'})
self.failIf(form.is_valid())
self.assertEqual(form.errors['tos'],
- [u"You must agree to the terms to register"])
+ ["You must agree to the terms to register"])
form = forms.RegistrationFormTermsOfService(data={'username': 'foofoohogehoge',
'email1': 'foo@example.com',
@@ -121,7 +122,7 @@ def test_registration_form_unique_email(self):
'email2': 'alice@example.com'})
self.failIf(form.is_valid())
self.assertEqual(form.errors['email1'],
- [u"This email address is already in use. Please supply a different email address."])
+ ["This email address is already in use. Please supply a different email address."])
form = forms.RegistrationFormUniqueEmail(data={'username': 'foofoohogehoge',
'email1': 'foo@example.com',
@@ -137,12 +138,12 @@ def test_registration_form_no_free_email(self):
base_data = {'username': 'foofoohogehoge'}
for domain in forms.RegistrationFormNoFreeEmail.bad_domains:
invalid_data = base_data.copy()
- invalid_data['email1'] = u"foo@%s" % domain
+ invalid_data['email1'] = "foo@%s" % domain
invalid_data['email2'] = invalid_data['email1']
form = forms.RegistrationFormNoFreeEmail(data=invalid_data)
self.failIf(form.is_valid())
self.assertEqual(form.errors['email1'],
- [u"Registration using free email addresses is prohibited. Please supply a different email address."])
+ ["Registration using free email addresses is prohibited. Please supply a different email address."])
base_data['email1'] = 'foo@example.com'
base_data['email2'] = base_data['email1']
diff --git a/src/registration/tests/test_models.py b/src/registration/tests/test_models.py
index da03902..c35f39c 100644
--- a/src/registration/tests/test_models.py
+++ b/src/registration/tests/test_models.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
@@ -47,7 +48,7 @@ def test_profile_creation(self):
self.assertEqual(profile.user.id, new_user.id)
self.assertEqual(profile.status, 'untreated')
self.assertEqual(profile.activation_key, None)
- self.assertEqual(unicode(profile),
+ self.assertEqual(str(profile),
"Registration information for alice")
def test_profile_status_modification(self):
diff --git a/src/registration/tests/test_supplements.py b/src/registration/tests/test_supplements.py
index 7035a62..767d8cb 100644
--- a/src/registration/tests/test_supplements.py
+++ b/src/registration/tests/test_supplements.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
@@ -116,7 +117,7 @@ def test_registration_view_post_failure(self):
self.failIf(response.context['form'].is_valid())
self.failUnless(response.context['supplement_form'].is_valid())
self.assertFormError(response, 'form', field=None,
- errors=u"The two email fields didn't match.")
+ errors="The two email fields didn't match.")
self.assertEqual(len(mail.outbox), 0)
def test_registration_view_post_no_remarks_failure(self):
@@ -133,5 +134,5 @@ def test_registration_view_post_no_remarks_failure(self):
self.failUnless(response.context['form'].is_valid())
self.failIf(response.context['supplement_form'].is_valid())
self.assertFormError(response, 'supplement_form', field='remarks',
- errors=u"This field is required.")
+ errors="This field is required.")
self.assertEqual(len(mail.outbox), 0)
diff --git a/src/registration/tests/test_views.py b/src/registration/tests/test_views.py
index 324878e..229094a 100644
--- a/src/registration/tests/test_views.py
+++ b/src/registration/tests/test_views.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
@@ -72,7 +73,7 @@ def test_registration_view_post_failure(self):
self.assertEqual(response.status_code, 200)
self.failIf(response.context['form'].is_valid())
self.assertFormError(response, 'form', field=None,
- errors=u"The two email fields didn't match.")
+ errors="The two email fields didn't match.")
self.assertEqual(len(mail.outbox), 0)
def test_registration_complete_view_get(self):
diff --git a/src/registration/tests/utils.py b/src/registration/tests/utils.py
index 00326c2..6814005 100644
--- a/src/registration/tests/utils.py
+++ b/src/registration/tests/utils.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
"""
__author__ = 'Alisue '
diff --git a/src/registration/urls.py b/src/registration/urls.py
index ac889db..69e77a1 100644
--- a/src/registration/urls.py
+++ b/src/registration/urls.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
URLconf for django-inspectional-registration
"""
diff --git a/src/registration/utils.py b/src/registration/utils.py
index 179dc8b..dea2502 100644
--- a/src/registration/utils.py
+++ b/src/registration/utils.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Utilities for django-inspectional-registration
"""
@@ -7,6 +8,8 @@
from django.contrib.sites.models import Site
from django.contrib.sites.models import RequestSite
+from django.utils.encoding import force_text
+from django.utils.six.moves import range
from registration.compat import sha1
@@ -30,9 +33,8 @@ def generate_activation_key(username):
.. _django-registration: https://bitbucket.org/ubernostrum/django-registration
"""
- if not isinstance(username, unicode):
- username = username.decode('utf-8')
- seed = unicode(random.random())
+ username = force_text(username)
+ seed = force_text(random.random())
salt = sha1(seed.encode('utf-8')).hexdigest()[:5]
activation_key = sha1((salt+username).encode('utf-8')).hexdigest()
return activation_key
@@ -43,7 +45,7 @@ def generate_random_password(length=10):
# Without 1, l, O, 0 because those character are hard to tell
# the difference between in same fonts
chars = '23456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
- password = "".join([random.choice(chars) for i in xrange(length)])
+ password = "".join([random.choice(chars) for i in range(length)])
return password
diff --git a/src/registration/views.py b/src/registration/views.py
index 13253f5..734972c 100644
--- a/src/registration/views.py
+++ b/src/registration/views.py
@@ -1,4 +1,5 @@
-# coding=utf-8
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
"""
Class based views for django-inspectional-registration
"""
diff --git a/tests/settings.py b/tests/settings.py
index 10d183c..fd1a95d 100644
--- a/tests/settings.py
+++ b/tests/settings.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
# Django settings for tests project.
import os
import sys
diff --git a/tests/urls.py b/tests/urls.py
index 944766d..bb83d09 100644
--- a/tests/urls.py
+++ b/tests/urls.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
try:
from django.conf.urls import url, patterns, include
except ImportError:
diff --git a/tox.ini b/tox.ini
index a7e21fe..71e894d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -20,19 +20,8 @@ deps=
-rrequirements-test.txt
coverage
commands=
- py26,py27: {envbindir}/coverage run --source=src/registration runtests.py []
- py32,py33,py34: mkdir -p {envdir}/build
- py32,py33,py34: cp -rf src {envdir}/build
- py32,py33,py34: cp -rf tests {envdir}/build
- py32,py33,py34: 2to3 -p --no-diffs --output-dir={envdir}/build/src -W -n src
- py32,py33,py34: 2to3 -p --no-diffs --output-dir={envdir}/build/tests -W -n tests
- py32,py33,py34: {envbindir}/coverage run --source={envdir}/build/src/registration runtests.py --where={envdir}/build []
+ {envbindir}/coverage run --source=src/registration runtests.py []
coverage report
-whitelist_externals=
- py32,py33,py34: make
- py32,py33,py34: mkdir
- py32,py33,py34: cp
- py32,py33,py34: 2to3
[testenv:docs]
basepython=python
@@ -41,3 +30,5 @@ deps=-rrequirements-docs.txt
commands=
make clean
make html
+whitelist_externals=
+ make