Commit c991db413947d36d71f2969687b3631c625b8b88
1 parent
6ec2c956
django 1.7 compatibility, tox, travis
Showing
8 changed files
with
110 additions
and
8 deletions
| @@ -7,5 +7,14 @@ python: | @@ -7,5 +7,14 @@ python: | ||
| 7 | env: | 7 | env: |
| 8 | - DJANGO_PACKAGE="Django>=1.5,<1.6" | 8 | - DJANGO_PACKAGE="Django>=1.5,<1.6" |
| 9 | - DJANGO_PACKAGE="Django>=1.6,<1.7" | 9 | - DJANGO_PACKAGE="Django>=1.6,<1.7" |
| 10 | -install: pip install $DJANGO_PACKAGE --use-mirrors | 10 | + - DJANGO_PACKAGE="Django>=1.7,<1.8" |
| 11 | + | ||
| 12 | +matrix: | ||
| 13 | + exclude: | ||
| 14 | + - python: "2.6" | ||
| 15 | + env: DJANGO_PACKAGE="Django>=1.7,<1.8" | ||
| 16 | + | ||
| 17 | +install: | ||
| 18 | + - pip install $DJANGO_PACKAGE --use-mirrors | ||
| 19 | + - if [[ $TRAVIS_PYTHON_VERSION == 2.6 ]]; then pip install --use-mirrors unittest2; fi | ||
| 11 | script: python setup.py test | 20 | script: python setup.py test |
django_comments/migrations/0001_initial.py
0 → 100644
| 1 | +# -*- coding: utf-8 -*- | ||
| 2 | +from __future__ import unicode_literals | ||
| 3 | + | ||
| 4 | +from django.db import models, migrations | ||
| 5 | +from django.conf import settings | ||
| 6 | + | ||
| 7 | + | ||
| 8 | +class Migration(migrations.Migration): | ||
| 9 | + | ||
| 10 | + dependencies = [ | ||
| 11 | + ('sites', '0001_initial'), | ||
| 12 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
| 13 | + ('contenttypes', '0001_initial'), | ||
| 14 | + ] | ||
| 15 | + | ||
| 16 | + operations = [ | ||
| 17 | + migrations.CreateModel( | ||
| 18 | + name='Comment', | ||
| 19 | + fields=[ | ||
| 20 | + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), | ||
| 21 | + ('object_pk', models.TextField(verbose_name='object ID')), | ||
| 22 | + ('user_name', models.CharField(max_length=50, verbose_name="user's name", blank=True)), | ||
| 23 | + ('user_email', models.EmailField(max_length=75, verbose_name="user's email address", blank=True)), | ||
| 24 | + ('user_url', models.URLField(verbose_name="user's URL", blank=True)), | ||
| 25 | + ('comment', models.TextField(max_length=3000, verbose_name='comment')), | ||
| 26 | + ('submit_date', models.DateTimeField(default=None, verbose_name='date/time submitted')), | ||
| 27 | + ('ip_address', models.GenericIPAddressField(unpack_ipv4=True, null=True, verbose_name='IP address', blank=True)), | ||
| 28 | + ('is_public', models.BooleanField(default=True, help_text='Uncheck this box to make the comment effectively disappear from the site.', verbose_name='is public')), | ||
| 29 | + ('is_removed', models.BooleanField(default=False, help_text='Check this box if the comment is inappropriate. A "This comment has been removed" message will be displayed instead.', verbose_name='is removed')), | ||
| 30 | + ('content_type', models.ForeignKey(related_name='content_type_set_for_comment', verbose_name='content type', to='contenttypes.ContentType')), | ||
| 31 | + ('site', models.ForeignKey(to='sites.Site')), | ||
| 32 | + ('user', models.ForeignKey(related_name='comment_comments', verbose_name='user', blank=True, to=settings.AUTH_USER_MODEL, null=True)), | ||
| 33 | + ], | ||
| 34 | + options={ | ||
| 35 | + 'ordering': ('submit_date',), | ||
| 36 | + 'db_table': 'django_comments', | ||
| 37 | + 'verbose_name': 'comment', | ||
| 38 | + 'verbose_name_plural': 'comments', | ||
| 39 | + 'permissions': [('can_moderate', 'Can moderate comments')], | ||
| 40 | + }, | ||
| 41 | + bases=(models.Model,), | ||
| 42 | + ), | ||
| 43 | + migrations.CreateModel( | ||
| 44 | + name='CommentFlag', | ||
| 45 | + fields=[ | ||
| 46 | + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), | ||
| 47 | + ('flag', models.CharField(max_length=30, verbose_name='flag', db_index=True)), | ||
| 48 | + ('flag_date', models.DateTimeField(default=None, verbose_name='date')), | ||
| 49 | + ('comment', models.ForeignKey(related_name='flags', verbose_name='comment', to='django_comments.Comment')), | ||
| 50 | + ('user', models.ForeignKey(related_name='comment_flags', verbose_name='user', to=settings.AUTH_USER_MODEL)), | ||
| 51 | + ], | ||
| 52 | + options={ | ||
| 53 | + 'db_table': 'django_comment_flags', | ||
| 54 | + 'verbose_name': 'comment flag', | ||
| 55 | + 'verbose_name_plural': 'comment flags', | ||
| 56 | + }, | ||
| 57 | + bases=(models.Model,), | ||
| 58 | + ), | ||
| 59 | + migrations.AlterUniqueTogether( | ||
| 60 | + name='commentflag', | ||
| 61 | + unique_together=set([('user', 'comment', 'flag')]), | ||
| 62 | + ), | ||
| 63 | + ] |
django_comments/migrations/__init__.py
0 → 100644
| @@ -10,7 +10,7 @@ except IOError: | @@ -10,7 +10,7 @@ except IOError: | ||
| 10 | 10 | ||
| 11 | setup( | 11 | setup( |
| 12 | name='django-contrib-comments', | 12 | name='django-contrib-comments', |
| 13 | - version='1.5', | 13 | + version='1.5.1', |
| 14 | url="http://github.com/django/django-contrib-comments", | 14 | url="http://github.com/django/django-contrib-comments", |
| 15 | description='The code formerly known as django.contrib.comments.', | 15 | description='The code formerly known as django.contrib.comments.', |
| 16 | long_description=long_description, | 16 | long_description=long_description, |
| @@ -6,6 +6,7 @@ Adapted from django-constance, which itself was adapted from django-adminfiles. | @@ -6,6 +6,7 @@ Adapted from django-constance, which itself was adapted from django-adminfiles. | ||
| 6 | 6 | ||
| 7 | import os | 7 | import os |
| 8 | import sys | 8 | import sys |
| 9 | +import django | ||
| 9 | 10 | ||
| 10 | here = os.path.dirname(os.path.abspath(__file__)) | 11 | here = os.path.dirname(os.path.abspath(__file__)) |
| 11 | parent = os.path.dirname(here) | 12 | parent = os.path.dirname(here) |
| @@ -24,6 +25,11 @@ settings.configure( | @@ -24,6 +25,11 @@ settings.configure( | ||
| 24 | "testapp", | 25 | "testapp", |
| 25 | "custom_comments", | 26 | "custom_comments", |
| 26 | ], | 27 | ], |
| 28 | + MIDDLEWARE_CLASSES=( | ||
| 29 | + 'django.contrib.sessions.middleware.SessionMiddleware', | ||
| 30 | + 'django.contrib.auth.middleware.AuthenticationMiddleware', | ||
| 31 | + 'django.contrib.messages.middleware.MessageMiddleware', | ||
| 32 | + ), | ||
| 27 | ROOT_URLCONF = 'testapp.urls', | 33 | ROOT_URLCONF = 'testapp.urls', |
| 28 | SECRET_KEY = "it's a secret to everyone", | 34 | SECRET_KEY = "it's a secret to everyone", |
| 29 | SITE_ID = 1, | 35 | SITE_ID = 1, |
| @@ -32,6 +38,8 @@ settings.configure( | @@ -32,6 +38,8 @@ settings.configure( | ||
| 32 | from django.test.simple import DjangoTestSuiteRunner | 38 | from django.test.simple import DjangoTestSuiteRunner |
| 33 | 39 | ||
| 34 | def main(): | 40 | def main(): |
| 41 | + if django.VERSION >= (1, 7): | ||
| 42 | + django.setup() | ||
| 35 | runner = DjangoTestSuiteRunner(failfast=True, verbosity=1) | 43 | runner = DjangoTestSuiteRunner(failfast=True, verbosity=1) |
| 36 | failures = runner.run_tests(['testapp'], interactive=True) | 44 | failures = runner.run_tests(['testapp'], interactive=True) |
| 37 | sys.exit(failures) | 45 | sys.exit(failures) |
| @@ -30,7 +30,7 @@ class Entry(models.Model): | @@ -30,7 +30,7 @@ class Entry(models.Model): | ||
| 30 | title = models.CharField(max_length=250) | 30 | title = models.CharField(max_length=250) |
| 31 | body = models.TextField() | 31 | body = models.TextField() |
| 32 | pub_date = models.DateField() | 32 | pub_date = models.DateField() |
| 33 | - enable_comments = models.BooleanField() | 33 | + enable_comments = models.BooleanField(default=False) |
| 34 | 34 | ||
| 35 | def __str__(self): | 35 | def __str__(self): |
| 36 | return self.title | 36 | return self.title |
| 1 | from __future__ import absolute_import | 1 | from __future__ import absolute_import |
| 2 | 2 | ||
| 3 | +try: | ||
| 4 | + import unittest2 as unittest | ||
| 5 | +except ImportError: | ||
| 6 | + import unittest | ||
| 7 | + | ||
| 8 | + | ||
| 9 | +import django | ||
| 3 | from django.conf import settings | 10 | from django.conf import settings |
| 4 | from django.core.exceptions import ImproperlyConfigured | 11 | from django.core.exceptions import ImproperlyConfigured |
| 5 | from django.test.utils import override_settings | 12 | from django.test.utils import override_settings |
| @@ -18,6 +25,7 @@ class CommentAppAPITests(CommentTestCase): | @@ -18,6 +25,7 @@ class CommentAppAPITests(CommentTestCase): | ||
| 18 | def testGetCommentApp(self): | 25 | def testGetCommentApp(self): |
| 19 | self.assertEqual(django_comments.get_comment_app(), django_comments) | 26 | self.assertEqual(django_comments.get_comment_app(), django_comments) |
| 20 | 27 | ||
| 28 | + @unittest.skipIf(django.VERSION >= (1, 7), "Missing apps raise ImportError with django 1.7") | ||
| 21 | @override_settings( | 29 | @override_settings( |
| 22 | COMMENTS_APP='missing_app', | 30 | COMMENTS_APP='missing_app', |
| 23 | INSTALLED_APPS=list(settings.INSTALLED_APPS) + ['missing_app'], | 31 | INSTALLED_APPS=list(settings.INSTALLED_APPS) + ['missing_app'], |
| @@ -47,8 +55,6 @@ class CommentAppAPITests(CommentTestCase): | @@ -47,8 +55,6 @@ class CommentAppAPITests(CommentTestCase): | ||
| 47 | 55 | ||
| 48 | @override_settings( | 56 | @override_settings( |
| 49 | COMMENTS_APP='custom_comments', | 57 | COMMENTS_APP='custom_comments', |
| 50 | - INSTALLED_APPS=list(settings.INSTALLED_APPS) + [ | ||
| 51 | - 'custom_comments'], | ||
| 52 | ) | 58 | ) |
| 53 | class CustomCommentTest(CommentTestCase): | 59 | class CustomCommentTest(CommentTestCase): |
| 54 | urls = 'testapp.urls' | 60 | urls = 'testapp.urls' |
| 1 | [tox] | 1 | [tox] |
| 2 | envlist = py26-django15, py27-django15, py32-django15, py33-django15, | 2 | envlist = py26-django15, py27-django15, py32-django15, py33-django15, |
| 3 | - py26-django16, py27-django16, py32-django16, py33-django16 | 3 | + py26-django16, py27-django16, py32-django16, py33-django16, |
| 4 | + py27-django17, py32-django17, py33-django17 | ||
| 4 | 5 | ||
| 5 | [testenv] | 6 | [testenv] |
| 6 | commands = {envpython} setup.py test | 7 | commands = {envpython} setup.py test |
| 7 | 8 | ||
| 8 | [testenv:py26-django15] | 9 | [testenv:py26-django15] |
| 9 | basepython = python2.6 | 10 | basepython = python2.6 |
| 10 | -deps = Django>=1.5,<1.6 | 11 | +deps = |
| 12 | + Django>=1.5,<1.6 | ||
| 13 | + unittest2 | ||
| 11 | 14 | ||
| 12 | [testenv:py27-django15] | 15 | [testenv:py27-django15] |
| 13 | basepython = python2.7 | 16 | basepython = python2.7 |
| @@ -23,7 +26,9 @@ deps = Django>=1.5,<1.6 | @@ -23,7 +26,9 @@ deps = Django>=1.5,<1.6 | ||
| 23 | 26 | ||
| 24 | [testenv:py26-django16] | 27 | [testenv:py26-django16] |
| 25 | basepython = python2.6 | 28 | basepython = python2.6 |
| 26 | -deps = Django>=1.6,<1.7 | 29 | +deps = |
| 30 | + Django>=1.6,<1.7 | ||
| 31 | + unittest2 | ||
| 27 | 32 | ||
| 28 | [testenv:py27-django16] | 33 | [testenv:py27-django16] |
| 29 | basepython = python2.7 | 34 | basepython = python2.7 |
| @@ -37,3 +42,14 @@ deps = Django>=1.6,<1.7 | @@ -37,3 +42,14 @@ deps = Django>=1.6,<1.7 | ||
| 37 | basepython = python3.3 | 42 | basepython = python3.3 |
| 38 | deps = Django>=1.6,<1.7 | 43 | deps = Django>=1.6,<1.7 |
| 39 | 44 | ||
| 45 | +[testenv:py27-django17] | ||
| 46 | +basepython = python2.7 | ||
| 47 | +deps = Django>=1.7,<1.8 | ||
| 48 | + | ||
| 49 | +[testenv:py32-django17] | ||
| 50 | +basepython = python3.2 | ||
| 51 | +deps = Django>=1.7,<1.8 | ||
| 52 | + | ||
| 53 | +[testenv:py33-django17] | ||
| 54 | +basepython = python3.3 | ||
| 55 | +deps = Django>=1.7,<1.8 |
Please
register
or
login
to post a comment