diff --git a/README.md b/README.md index b9f14a33e..fed4ef0a0 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,25 @@ django-wiki News ---- +***News: May 18th, 2014*** + +Django-wiki 0.1 is landing, please see the Release Notes. + +The overall plan is that we'll be supporting Python 2.7, Python 3.3+, and +Django 1.5+ simultaneuously. That actually means a lot under the hood. +Firstly, South is both unnecessary and incompatible with Django 1.7 as the +new django.db.migrations framework has arrived. Secondly, we still need +South migrations for Django installations before 1.7 (and those are still plenty). + +Another big thing in 0.1 is the plugins API which is now freezing as is. This +means that proper documentation for writing plugins will arrive soon. + +If you want to upgrade a system running django-wiki \< 0.1, please make sure to +have an installation of 0.0.24 first and do the migrations in that one! +Otherwise 0.1 will **not** work. Migration trees in 0.1 are reset and most likely, +the same thing will happen in 0.2, each minor number denoting that migrations +trees are squashed. + ***News: November 18th, 2013*** Better late than never! A new release is out with promising support of django 1.6 and Bootstrap 3. Also, jquery, colorbox, and markitup editor have been bumped to newer releases. diff --git a/docs/index.rst b/docs/index.rst index d9f3ba49d..9fd924136 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -16,6 +16,7 @@ Contents: customization settings tips + release_notes Indices and tables diff --git a/docs/installation.rst b/docs/installation.rst index 1dc2b3858..7eaeb6821 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -100,7 +100,6 @@ maintain the order due to database relational constraints: 'django.contrib.sites', # django 1.6.2 'django.contrib.humanize', - 'south', 'django_nyt', 'mptt', 'sekizai', @@ -111,6 +110,26 @@ maintain the order due to database relational constraints: 'wiki.plugins.images', 'wiki.plugins.macros', + +Django < 1.7 +~~~~~~~~~~~~ + +If you run older versions of django, please point south to the correct +migrations modules like so: + +:: + + INSTALLED_APPS.append('south') + SOUTH_MIGRATION_MODULES = { + 'django_nyt': 'django_nyt.south_migrations', + 'wiki': 'wiki.south_migrations', + 'images': 'wiki.plugins.images.south_migrations', + 'notifications': 'wiki.plugins.notifications.south_migrations', + 'attachments': 'wiki.plugins.attachments.south_migrations', + } + + + Database ~~~~~~~~ diff --git a/testproject/testproject/settings/__init__.py b/testproject/testproject/settings/__init__.py index 30ffaa12e..1f38c799b 100644 --- a/testproject/testproject/settings/__init__.py +++ b/testproject/testproject/settings/__init__.py @@ -103,12 +103,15 @@ 'wiki.plugins.notifications', 'mptt', ] - from django import VERSION if VERSION <= (1, 6): INSTALLED_APPS.append('south') SOUTH_MIGRATION_MODULES = { 'django_nyt': 'django_nyt.south_migrations', + 'wiki': 'wiki.south_migrations', + 'images': 'wiki.plugins.images.south_migrations', + 'notifications': 'wiki.plugins.notifications.south_migrations', + 'attachments': 'wiki.plugins.attachments.south_migrations', } else: TEST_RUNNER = 'django.test.runner.DiscoverRunner' diff --git a/wiki/__init__.py b/wiki/__init__.py index 7dc1e8fc2..f24de52b8 100644 --- a/wiki/__init__.py +++ b/wiki/__init__.py @@ -15,4 +15,4 @@ # You should have received a copy of the GNU General Public License # along with django-wiki. If not, see . -VERSION = "0.0.3" +VERSION = "0.0.24dev" diff --git a/wiki/admin.py b/wiki/admin.py index 5c8f5f86a..3e96155df 100644 --- a/wiki/admin.py +++ b/wiki/admin.py @@ -17,6 +17,7 @@ class ArticleRevisionForm(forms.ModelForm): class Meta: model = models.ArticleRevision + exclude = () def __init__(self, *args, **kwargs): super(ArticleRevisionForm, self).__init__(*args, **kwargs) @@ -47,6 +48,7 @@ class ArticleForm(forms.ModelForm): class Meta: model = models.Article + exclude = () def __init__(self, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) diff --git a/wiki/conf/settings.py b/wiki/conf/settings.py index 0ec6d8a5c..588b28fd0 100644 --- a/wiki/conf/settings.py +++ b/wiki/conf/settings.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from django.conf import settings as django_settings from django.core.urlresolvers import reverse_lazy -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ # Should urls be case sensitive? URL_CASE_SENSITIVE = getattr( django_settings, 'WIKI_URL_CASE_SENSITIVE', False ) diff --git a/wiki/models/__init__.py b/wiki/models/__init__.py index 21eb7148b..31465ee1c 100644 --- a/wiki/models/__init__.py +++ b/wiki/models/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from django import VERSION from django.conf import settings as django_settings from django.core.exceptions import ImproperlyConfigured import warnings @@ -41,8 +42,10 @@ # Warnings ###################### -if not 'south' in django_settings.INSTALLED_APPS: - warnings.warn("django-wiki: No south in your INSTALLED_APPS. This is highly discouraged.") + +if VERSION < (1, 7): + if not 'south' in django_settings.INSTALLED_APPS: + warnings.warn("django-wiki: No south in your INSTALLED_APPS. This is highly discouraged.") from django.core import urlresolvers diff --git a/wiki/plugins/attachments/__init__.py b/wiki/plugins/attachments/__init__.py index e69de29bb..1cc33c45e 100644 --- a/wiki/plugins/attachments/__init__.py +++ b/wiki/plugins/attachments/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wiki.apps.AttachmentsConfig' \ No newline at end of file diff --git a/wiki/plugins/attachments/models.py b/wiki/plugins/attachments/models.py index 317f59958..52a235e75 100644 --- a/wiki/plugins/attachments/models.py +++ b/wiki/plugins/attachments/models.py @@ -43,7 +43,8 @@ def can_delete(self, user): class Meta: verbose_name = _('attachment') verbose_name_plural = _('attachments') - app_label = settings.APP_LABEL + if settings.APP_LABEL: + app_label = settings.APP_LABEL def __unicode__(self): return "%s: %s" % (self.article.current_revision.title, self.original_filename) @@ -102,7 +103,8 @@ class Meta: verbose_name_plural = _('attachment revisions') ordering = ('created',) get_latest_by = 'revision_number' - app_label = settings.APP_LABEL + if settings.APP_LABEL: + app_label = settings.APP_LABEL def get_filename(self): """Used to retrieve the filename of a revision. diff --git a/wiki/plugins/attachments/settings.py b/wiki/plugins/attachments/settings.py index 4c195fa20..d0ad9cec5 100644 --- a/wiki/plugins/attachments/settings.py +++ b/wiki/plugins/attachments/settings.py @@ -1,8 +1,10 @@ +from django import VERSION from django.conf import settings as django_settings from wiki.conf import settings as wiki_settings from django.core.exceptions import ImproperlyConfigured -APP_LABEL = 'wiki' +# This is not used in django 1.7+ +APP_LABEL = 'attachments' if VERSION < (1, 7) else None SLUG = "attachments" # Please see this note about support for UTF-8 files on django/apache: diff --git a/wiki/plugins/images/__init__.py b/wiki/plugins/images/__init__.py index e69de29bb..4b81457ab 100644 --- a/wiki/plugins/images/__init__.py +++ b/wiki/plugins/images/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wiki.apps.ImagesConfig' \ No newline at end of file diff --git a/wiki/plugins/images/admin.py b/wiki/plugins/images/admin.py index 79242822a..42d42c99f 100644 --- a/wiki/plugins/images/admin.py +++ b/wiki/plugins/images/admin.py @@ -6,6 +6,7 @@ class ImageForm(forms.ModelForm): class Meta: model = models.Image + exclude = () def __init__(self, *args, **kwargs): super(ImageForm, self).__init__(*args, **kwargs) diff --git a/wiki/plugins/images/models.py b/wiki/plugins/images/models.py index 2409c3710..d43b3d5a9 100644 --- a/wiki/plugins/images/models.py +++ b/wiki/plugins/images/models.py @@ -40,7 +40,8 @@ def can_delete(self, user): class Meta: verbose_name = _('image') verbose_name_plural = _('images') - app_label = settings.APP_LABEL + if settings.APP_LABEL: + app_label = settings.APP_LABEL def __unicode__(self): title = (_('Image: %s') % self.current_revision.imagerevision.get_filename()) if self.current_revision else _('Current revision not set!!') @@ -93,7 +94,8 @@ def inherit_predecessor(self, image, skip_image_file=False): class Meta: verbose_name = _('image revision') verbose_name_plural = _('image revisions') - app_label = settings.APP_LABEL + if settings.APP_LABEL: + app_label = settings.APP_LABEL ordering = ('-created',) def __unicode__(self): diff --git a/wiki/plugins/images/settings.py b/wiki/plugins/images/settings.py index 91485d276..9d0b98df2 100644 --- a/wiki/plugins/images/settings.py +++ b/wiki/plugins/images/settings.py @@ -1,8 +1,11 @@ +from django import VERSION from django.conf import settings as django_settings from wiki.conf import settings as wiki_settings SLUG = 'images' -APP_LABEL = 'wiki' + +# This is deprecated in django 1.7+ +APP_LABEL = 'images' if VERSION < (1, 7) else None # Where to store images IMAGE_PATH = getattr(django_settings, 'WIKI_IMAGES_PATH', "wiki/images/%aid/") diff --git a/wiki/plugins/notifications/__init__.py b/wiki/plugins/notifications/__init__.py index e69de29bb..5465517d6 100644 --- a/wiki/plugins/notifications/__init__.py +++ b/wiki/plugins/notifications/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wiki.apps.NotifcationsConfig' \ No newline at end of file diff --git a/wiki/plugins/notifications/models.py b/wiki/plugins/notifications/models.py index 316db6973..774778280 100644 --- a/wiki/plugins/notifications/models.py +++ b/wiki/plugins/notifications/models.py @@ -3,6 +3,7 @@ from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ from django.db.models import signals +from django.db import models from django_nyt.utils import notify from django_nyt.models import Subscription @@ -13,17 +14,22 @@ from wiki.plugins.notifications import settings from wiki.plugins.notifications.util import get_title -class ArticleSubscription(ArticlePlugin, Subscription): + +class ArticleSubscription(ArticlePlugin): + + subscription_ptr = models.OneToOneField(Subscription, related_name='deprecated_subscriptions') + subscription = models.OneToOneField(Subscription, null=True) def __unicode__(self): - title = (_("%(user)s subscribing to %(article)s (%(type)s)") % + title = (_("%(user)s subscribing to %(article)s (%(type)s)") % {'user': self.settings.user.username, 'article': self.article.current_revision.title, 'type': self.notification_type.label}) return unicode(title) class Meta: - app_label = settings.APP_LABEL + if settings.APP_LABEL: + app_label = settings.APP_LABEL def default_url(article, urlpath=None): diff --git a/wiki/plugins/notifications/settings.py b/wiki/plugins/notifications/settings.py index 51bf6b18e..f12497d33 100644 --- a/wiki/plugins/notifications/settings.py +++ b/wiki/plugins/notifications/settings.py @@ -1,6 +1,7 @@ -#from django.conf import settings as django_settings +from django import VERSION -APP_LABEL = 'wiki' +# This is deprecated in django 1.7+ +APP_LABEL = 'notifications' if VERSION < (1, 7) else None # Key for django_nyt - changing it will break any existing notifications. ARTICLE_EDIT = "article_edit" diff --git a/wiki/plugins/notifications/south_migrations/0002_auto__del_articlesubscription.py b/wiki/plugins/notifications/south_migrations/0002_auto__del_articlesubscription.py deleted file mode 100644 index 9379fa180..000000000 --- a/wiki/plugins/notifications/south_migrations/0002_auto__del_articlesubscription.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting model 'ArticleSubscription' - db.delete_table('notifications_articlesubscription') - - - def backwards(self, orm): - # Adding model 'ArticleSubscription' - db.create_table('notifications_articlesubscription', ( - ('articleplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['wiki.ArticlePlugin'], unique=True, primary_key=True)), - ('subscription_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['django_notify.Subscription'], unique=True)), - )) - db.send_create_signal('notifications', ['ArticleSubscription']) - - - models = { - - } - - complete_apps = ['notifications'] \ No newline at end of file