From 85542995c1f6b07c7c3d842f8017293dde898226 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Mon, 19 Oct 2015 09:07:20 +0530 Subject: [PATCH] Add compatibility fixes for django 1.8 - remove `app_label` required warning - `normalize_fieldsets` is no longer required[1] - use new replace `get_queryset` with a fallback to `get_query_set` - fix test runner [1] https://github.com/django/django/commit/65faa84de3fd3f42e938301574cccdec1578657d --- django_options/compat.py | 4 ++++ django_options/formset.py | 6 +++++- django_options/managers.py | 33 ++++++++++++++++++--------------- django_options/models.py | 1 + requirements.txt | 3 ++- runtests.py | 19 ++++++++++++------- 6 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 django_options/compat.py mode change 100644 => 100755 runtests.py diff --git a/django_options/compat.py b/django_options/compat.py new file mode 100644 index 0000000..26d2320 --- /dev/null +++ b/django_options/compat.py @@ -0,0 +1,4 @@ +try: + from django.contrib.admin.helpers import normalize_fieldsets +except ImportError: + normalize_fieldsets = lambda x: x diff --git a/django_options/formset.py b/django_options/formset.py index da67975..5a6d600 100644 --- a/django_options/formset.py +++ b/django_options/formset.py @@ -1,10 +1,14 @@ from django import forms from django.conf import settings -from django.contrib.admin.helpers import normalize_fieldsets, AdminReadonlyField, AdminField +from django.contrib.admin.helpers import AdminReadonlyField, AdminField from django.contrib.admin.templatetags.admin_static import static from django.utils.safestring import mark_safe +from .compat import normalize_fieldsets + + class AdminForm(object): + def __init__(self, form, fieldsets, readonly_fields=None): self.form, self.fieldsets = form, normalize_fieldsets(fieldsets) if readonly_fields is None: diff --git a/django_options/managers.py b/django_options/managers.py index d1895e4..7317c53 100644 --- a/django_options/managers.py +++ b/django_options/managers.py @@ -18,14 +18,19 @@ def __init__(self, **kwargs): self.__is_validated = False super(OptionManager, self).__init__(**kwargs) - def get_queryset(self): + def _get_queryset(self): # monkey patch for CurrentSiteManage # that allows to change site_id + try: + qs = super(OptionManager, self).get_queryset() + except AttributeError: + qs = super(OptionManager, self).get_query_set() + if not self.site_id: - return super(OptionManager, self).get_query_set() - return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': self.site_id}) + return qs + return qs.filter(**{self.__field_name + '__id__exact': self.site_id}) - get_query_set = get_queryset + get_queryset = _get_queryset def clear(self): self.all_options = None @@ -41,11 +46,11 @@ def fetch_all_options(self): """ if self.all_options is None: - all_options_db = self.get_query_set().filter(autoload=True).values() + all_options_db = self.get_queryset().filter(autoload=True).values() if not any(all_options_db): # try to load all - all_options_db = self.get_query_set().all().values() + all_options_db = self.get_queryset().all().values() self.all_options = {} @@ -82,26 +87,25 @@ def get_option(self, key, default= None): value = self.single_options[key] elif key in self.all_options: - value = self.get_query_set().model( value=self.all_options[key] ).value + value = self.get_queryset().model(value=self.all_options[key]).value # to prevent double decoding self.single_options[key] = value else: try: - opt = self.get_query_set().get( key=key ) + opt = self.get_queryset().get(key=key) # already deserialized value = opt.value # remember that - self.single_options[ key ] = value + self.single_options[key] = value - except self.get_query_set().model.DoesNotExist: + except self.get_queryset().model.DoesNotExist: self.not_options[key] = True return default # maybe deserialize json return value - def update_option(self, key, new_value, **kwargs): """ Update the value of an option that was already added. @@ -148,8 +152,7 @@ def update_option(self, key, new_value, **kwargs): option_value_changed.send(self, old_value=old_value, new_value=new_value, option=key) - return self.get_query_set().filter(key=key).update(value=new_value) == 1 - + return self.get_queryset().filter(key=key).update(value=new_value) == 1 def add_option(self, key, value, autoload=True): """ @@ -187,7 +190,7 @@ def add_option(self, key, value, autoload=True): return False try: - option = self.get_query_set().create(key=key, site_id=self.get_site_id(), value=value, autoload=autoload) + option = self.get_queryset().create(key=key, site_id=self.get_site_id(), value=value, autoload=autoload) except IntegrityError: return False @@ -220,7 +223,7 @@ def delete_option(self, key): key = key.strip() if not key: return None - OptionQuery = self.get_query_set() + OptionQuery = self.get_queryset() try: opt = OptionQuery.get( key=key ) diff --git a/django_options/models.py b/django_options/models.py index ad0a283..c3756b9 100644 --- a/django_options/models.py +++ b/django_options/models.py @@ -42,3 +42,4 @@ class Meta: unique_together = ('site', 'key',) verbose_name = _('Option') verbose_name_plural = _('Options') + app_label = 'django_options' diff --git a/requirements.txt b/requirements.txt index 862803f..fe4d422 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ django -django-picklefield \ No newline at end of file +django-picklefield +django-faker diff --git a/runtests.py b/runtests.py old mode 100644 new mode 100755 index a2166a5..cdcd353 --- a/runtests.py +++ b/runtests.py @@ -1,8 +1,10 @@ #!/usr/bin/env python import sys +import django from django.conf import settings + def configure(): settings.configure( @@ -10,19 +12,25 @@ def configure(): 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', - } + } }, INSTALLED_APPS=( 'django.contrib.sites', 'django_faker', 'django_options', 'picklefield', - 'django_extensions', - ), + # 'django_extensions', + ), SITE_ID=1, ) -if not settings.configured: configure() +if not settings.configured: + configure() + +try: + django.setup() +except Exception: + pass def runtests(app_labels=None, verbosity=1): @@ -34,7 +42,6 @@ def runtests(app_labels=None, verbosity=1): if __name__ == '__main__': - import sys verbosity = 1 args = sys.argv[1:] idx = args.index('-v') if '-v' in args else -1 @@ -43,5 +50,3 @@ def runtests(app_labels=None, verbosity=1): verbosity = int(args.pop(idx)) if len(args) > idx else 2 runtests(args, verbosity=verbosity) - -