Hello community,
here is the log from the commit of package python-django-tastypie for
openSUSE:Factory checked in at 2018-08-24 17:10:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-tastypie (Old)
and /work/SRC/openSUSE:Factory/.python-django-tastypie.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-tastypie"
Fri Aug 24 17:10:59 2018 rev:12 rq:631083 version:0.14.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-django-tastypie/python-django-tastypie.changes
2016-03-07 13:23:34.000000000 +0100
+++
/work/SRC/openSUSE:Factory/.python-django-tastypie.new/python-django-tastypie.changes
2018-08-24 17:11:01.270564722 +0200
@@ -1,0 +2,14 @@
+Thu Aug 16 11:13:09 UTC 2018 - [email protected]
+
+- Replace useless description.
+
+-------------------------------------------------------------------
+Tue Aug 14 07:19:58 UTC 2018 - [email protected]
+
+- Version update to 0.14.1:
+ * Fixes to support latest django
+- Run tests
+- Add patch for django 2.1:
+ * django-tastypie-django21.patch
+
+-------------------------------------------------------------------
Old:
----
django-tastypie-0.12.1.tar.gz
New:
----
django-tastypie-django21.patch
v0.14.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-tastypie.spec ++++++
--- /var/tmp/diff_new_pack.EiWWTM/_old 2018-08-24 17:11:01.726565265 +0200
+++ /var/tmp/diff_new_pack.EiWWTM/_new 2018-08-24 17:11:01.726565265 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-django-tastypie
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,45 +16,71 @@
#
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-django-tastypie
-Version: 0.12.1
+Version: 0.14.1
Release: 0
-Url: http://github.com/toastdriven/django-tastypie/
-Summary: A flexible & capable API layer for Django
+Summary: A webservice API framework layer for Django
License: BSD-3-Clause
Group: Development/Languages/Python
-Source:
http://pypi.python.org/packages/source/d/django-tastypie/django-tastypie-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-BuildRequires: python-devel
-BuildRequires: python-setuptools
-Requires: python-django >= 1.2
-Requires: python-mimeparse >= 0.1.3
-Requires: python-python-dateutil >= 1.5
-Recommends: python-lxml
+URL: https://github.com/django-tastypie/django-tastypie
+Source:
https://github.com/django-tastypie/django-tastypie/archive/v%{version}.tar.gz
+# https://github.com/django-tastypie/django-tastypie/pull/1562
+Patch0: django-tastypie-django21.patch
+BuildRequires: %{python_module Django >= 1.8}
+BuildRequires: %{python_module PyYAML}
+BuildRequires: %{python_module biplist}
+BuildRequires: %{python_module defusedxml}
+BuildRequires: %{python_module lxml}
+BuildRequires: %{python_module mock}
+BuildRequires: %{python_module python-dateutil >= 2.1}
+BuildRequires: %{python_module python-mimeparse >= 0.1.4}
+BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
+BuildRequires: python-rpm-macros
+Requires: python-Django >= 1.8
+Requires: python-python-dateutil >= 2.1
+Requires: python-python-mimeparse >= 0.1.4
Recommends: python-PyYAML
Recommends: python-biplist
-Recommends: python-python-digest
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from
distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
+Recommends: python-defusedxml
+Recommends: python-lxml
BuildArch: noarch
-%endif
+%python_subpackages
%description
-Creating delicious APIs for Django apps since 2010.
+Tastypie is a webservice API framework for Django. It provides a
+customizable abstraction for creating REST-style interfaces.
%prep
%setup -q -n django-tastypie-%{version}
+%patch0 -p1
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
-%files
-%defattr(-,root,root,-)
-%doc AUTHORS LICENSE README.rst docs/_build/html
+%check
+# The tests are doing what is specified in tox.ini
+%{python_expand export PYTHONPATH=./tests/
+$python -m django test -p '*' core.tests --settings=settings_core
+$python -m django test basic.tests --settings=settings_basic
+$python -m django test related_resource.tests --settings=settings_related
+$python -m django test alphanumeric.tests --settings=settings_alphanumeric
+$python -m django test authorization.tests --settings=settings_authorization
+$python -m django test content_gfk.tests --settings=settings_content_gfk
+$python -m django test customuser.tests --settings=settings_customuser
+$python -m django test namespaced.tests --settings=settings_namespaced
+$python -m django test slashless.tests --settings=settings_slashless
+$python -m django test validation.tests --settings=settings_validation
+}
+
+%files %{python_files}
+%license LICENSE
+%doc README.rst
%{python_sitelib}/*
%changelog
++++++ django-tastypie-django21.patch ++++++
>From 8bf1c5e0541b9f0ba90ab7c9df0a39e4e8ae967b Mon Sep 17 00:00:00 2001
From: Sam Thompson <[email protected]>
Date: Mon, 13 Aug 2018 07:40:55 -0700
Subject: [PATCH 2/4] Django 2.1: fix missing QUERY_TERMS (#1564)
* Isolate failing assertion in separate test
* query_terms: try interrogating the django field directly
* Replace class_lookups with get_lookups() which is a more complete list
---
tastypie/resources.py | 20 ++++++++++++++------
tests/core/tests/resources.py | 12 +++++++++---
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/tastypie/resources.py b/tastypie/resources.py
index 607975cf..0ad0d921 100644
--- a/tastypie/resources.py
+++ b/tastypie/resources.py
@@ -13,11 +13,12 @@
from django.conf import settings
from django.conf.urls import url
from django.core.exceptions import (
- ObjectDoesNotExist, MultipleObjectsReturned, ValidationError,
+ ObjectDoesNotExist, MultipleObjectsReturned, ValidationError,
FieldDoesNotExist
)
from django.core.signals import got_request_exception
from django.core.exceptions import ImproperlyConfigured
from django.db.models.fields.related import ForeignKey
+from django.db import models
try:
from django.contrib.gis.db.models.fields import GeometryField
except (ImproperlyConfigured, ImportError):
@@ -29,7 +30,7 @@
except ImportError:
from django.db.models.fields.related_descriptors import\
ReverseOneToOneDescriptor
-from django.db.models.sql.constants import QUERY_TERMS
+
from django.http import HttpResponse, HttpResponseNotFound, Http404
from django.utils import six
from django.utils.cache import patch_cache_control, patch_vary_headers
@@ -2018,6 +2019,7 @@ def check_filtering(self, field_name,
filter_type='exact', filter_bits=None):
# Check to see if it's a relational lookup and if that's allowed.
if len(filter_bits):
if not getattr(self.fields[field_name], 'is_related', False):
+ print(field_name, filter_type, filter_bits)
raise InvalidFilterError("The '%s' field does not support
relations." % field_name)
if not self._meta.filtering[field_name] == ALL_WITH_RELATIONS:
@@ -2075,10 +2077,6 @@ def build_filters(self, filters=None,
ignore_bad_filters=False):
qs_filters = {}
- query_terms = QUERY_TERMS
- if django.VERSION >= (1, 8) and GeometryField:
- query_terms |= set(GeometryField.class_lookups.keys())
-
for filter_expr, value in filters.items():
filter_bits = filter_expr.split(LOOKUP_SEP)
field_name = filter_bits.pop(0)
@@ -2088,6 +2086,16 @@ def build_filters(self, filters=None,
ignore_bad_filters=False):
# It's not a field we know about. Move along citizen.
continue
+ # Validate filter types other than 'exact' that are supported by
the field type
+ try:
+ django_field_name = self.fields[field_name].attribute
+ django_field =
self._meta.object_class._meta.get_field(django_field_name)
+ if hasattr(django_field, 'field'):
+ django_field = django_field.field # related field
+ except FieldDoesNotExist:
+ raise InvalidFilterError("The '%s' field is not a valid field
name" % field_name)
+
+ query_terms = django_field.get_lookups().keys()
if len(filter_bits) and filter_bits[-1] in query_terms:
filter_type = filter_bits.pop()
diff --git a/tests/core/tests/resources.py b/tests/core/tests/resources.py
index f096a799..1c3bc0c0 100644
--- a/tests/core/tests/resources.py
+++ b/tests/core/tests/resources.py
@@ -2102,13 +2102,19 @@ def test_build_filters(self):
resource_4 = AnotherSubjectResource()
self.assertEqual(resource_4.build_filters(filters={'notes__user__startswith':
'Daniel'}), {'notes__author__startswith': 'Daniel'})
- # Make sure that fields that don't have attributes can't be filtered
on.
- self.assertRaises(InvalidFilterError, resource_4.build_filters,
filters={'notes__hello_world': 'News'})
-
# Make sure build_filters works even on resources without queryset
resource = NoQuerysetNoteResource()
self.assertEqual(resource.build_filters(), {})
+ def test_build_filters_bad(self):
+ """
+ Test that a nonsensical filter fails validation.
+ """
+ resource = AnotherSubjectResource()
+ # Make sure that fields that don't have attributes can't be filtered
on.
+ self.assertRaises(InvalidFilterError, resource.build_filters,
filters={'notes__hello_world': 'News'})
+
+
def test_custom_build_filters(self):
"""
A test derived from an example in the documentation (under Advanced
Filtering).
>From d9a732c2f1b6738c5dde5cb37f0f5e1e365f6422 Mon Sep 17 00:00:00 2001
From: Sam Thompson <[email protected]>
Date: Mon, 13 Aug 2018 07:43:08 -0700
Subject: [PATCH 3/4] Leftover debug
---
tastypie/resources.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/tastypie/resources.py b/tastypie/resources.py
index 0ad0d921..4de667e7 100644
--- a/tastypie/resources.py
+++ b/tastypie/resources.py
@@ -2019,7 +2019,6 @@ def check_filtering(self, field_name,
filter_type='exact', filter_bits=None):
# Check to see if it's a relational lookup and if that's allowed.
if len(filter_bits):
if not getattr(self.fields[field_name], 'is_related', False):
- print(field_name, filter_type, filter_bits)
raise InvalidFilterError("The '%s' field does not support
relations." % field_name)
if not self._meta.filtering[field_name] == ALL_WITH_RELATIONS:
>From 9dd62f4b9687cc7510a05a3ce55ef089c1b3894d Mon Sep 17 00:00:00 2001
From: Sam Thompson <[email protected]>
Date: Mon, 20 Aug 2018 07:21:32 -0700
Subject: [PATCH] Django 2.1: explicitly set blank=True on BooleanFields due to
upstream regression (#1567)
Failing tests unrelated to this PR; those will need another compat shim (and
pep8).
---
tests/core/models.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/core/models.py b/tests/core/models.py
index 91498e8d..c41cab36 100644
--- a/tests/core/models.py
+++ b/tests/core/models.py
@@ -22,7 +22,7 @@ class Note(models.Model):
title = models.CharField("The Title", max_length=100)
slug = models.SlugField()
content = models.TextField(blank=True)
- is_active = models.BooleanField(default=True)
+ is_active = models.BooleanField(default=True, blank=True)
created = models.DateTimeField(default=now)
updated = models.DateTimeField(default=now)
@@ -86,7 +86,7 @@ class AutoNowNote(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
content = models.TextField(blank=True)
- is_active = models.BooleanField(default=True)
+ is_active = models.BooleanField(default=True, blank=True)
created = models.DateTimeField(auto_now_add=now, null=True)
updated = models.DateTimeField(auto_now=now)