[Python-modules-commits] [python-django-ordered-model] 01/07: Import python-django-ordered-model_1.4.1.orig.tar.gz

Michael Fladischer fladi at moszumanska.debian.org
Fri May 12 19:30:40 UTC 2017


This is an automated email from the git hooks/post-receive script.

fladi pushed a commit to branch experimental
in repository python-django-ordered-model.

commit 6b0ddf8f574e46df5579a4a67d78d6e8c9bf6117
Author: Michael Fladischer <FladischerMichael at fladi.at>
Date:   Fri May 12 20:44:58 2017 +0200

    Import python-django-ordered-model_1.4.1.orig.tar.gz
---
 CHANGES.md                                         |  21 +++
 MANIFEST.in                                        |   2 +-
 PKG-INFO                                           |   4 +-
 README.md                                          | 181 +++++++++++++--------
 PKG-INFO => django_ordered_model.egg-info/PKG-INFO |   4 +-
 django_ordered_model.egg-info/SOURCES.txt          |  28 ++++
 django_ordered_model.egg-info/dependency_links.txt |   1 +
 django_ordered_model.egg-info/not-zip-safe         |   1 +
 django_ordered_model.egg-info/top_level.txt        |   1 +
 ordered_model/admin.py                             |  22 ++-
 ordered_model/models.py                            |  35 +++-
 ordered_model/tests/models.py                      |  15 ++
 ordered_model/tests/settings.py                    |   5 +
 ordered_model/tests/tests.py                       |  51 ++++--
 requirements.txt                                   |   2 +
 setup.cfg                                          |   5 +
 setup.py                                           |  11 +-
 17 files changed, 292 insertions(+), 97 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index de7b0a8..b3db8f8 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,27 @@
 Change log
 ==========
 
+1.4.1 - 2017-04-16
+------------------
+
+### Fixed
+
+- `pip install` not working due to missing `requirements.txt`
+
+1.4.0 - 2017-04-14
+------------------
+
+### Added
+
+- Support for ordering using a specified base class when using Multi-table inheritance
+- Suport for Python 3.6, Django 1.10 and 1.11.
+
+### Fixed
+
+- The move up/down links in OrderedTabularInline
+- Passing args to `filter()` which broke django-polymorphic.
+
+
 1.3.0 – 2016-10-08
 ------------------
 
diff --git a/MANIFEST.in b/MANIFEST.in
index 5db94f5..a659b3f 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,3 @@
-include MANIFEST.in *.md LICENSE *.sh
+include MANIFEST.in *.md LICENSE *.sh requirements.txt
 recursive-include ordered_model *.json
 
diff --git a/PKG-INFO b/PKG-INFO
index 057d05d..5c1b45c 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-ordered-model
-Version: 1.3.0
+Version: 1.4.1
 Summary: Allows Django models to be ordered and provides a simple admin interface for reordering them.
 Home-page: http://github.com/bfirsh/django-ordered-model
 Author: Ben Firshman
@@ -15,3 +15,5 @@ Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
+Requires: Django
+Requires: six
diff --git a/README.md b/README.md
index 2de5075..43dc092 100644
--- a/README.md
+++ b/README.md
@@ -30,39 +30,49 @@ Add `ordered_model` to your `SETTINGS.INSTALLED_APPS`.
 
 Inherit your model from `OrderedModel` to make it ordered:
 
-    from django.db import models
-    from ordered_model.models import OrderedModel
+```python
+from django.db import models
+from ordered_model.models import OrderedModel
 
-    class Item(OrderedModel):
-        name = models.CharField(max_length=100)
+class Item(OrderedModel):
+    name = models.CharField(max_length=100)
 
-        class Meta(OrderedModel.Meta):
-            pass
+    class Meta(OrderedModel.Meta):
+        pass
+```
 
 Model instances now have a set of methods to move them relative to each other.
 To demonstrate those methods we create two instances of `Item`:
 
-    foo = Item.objects.create(name="Foo")
-    bar = Item.objects.create(name="Bar")
+```python
+foo = Item.objects.create(name="Foo")
+bar = Item.objects.create(name="Bar")
+```
 
 ### Swap positions
 
-    foo.swap(bar)
+```
+foo.swap(bar)
+```
 
 This swaps the position of two objects.
 
 ### Move position up on position
 
-    foo.up()
-    foo.down()
+```python
+foo.up()
+foo.down()
+```
 
 Moving an object up or down just makes it swap its position with the neighouring
 object directly above of below depending on the direction.
 
 ### Move to arbitrary position
 
-    foo.to(12)
-    bar.to(13)
+```python
+foo.to(12)
+bar.to(13)
+```
 
 Move the object to an arbitrary position in the stack. This essentially sets the
 order value to the specified integer. Objects between the original and the new
@@ -71,8 +81,10 @@ of the move.
 
 ### Move object above or below reference
 
-    foo.above(bar)
-    foo.below(bar)
+```python
+foo.above(bar)
+foo.below(bar)
+```
 
 Move the object directly above or below the reference object, increasing or
 decreasing the order value for all objects between the two, depending on the
@@ -80,14 +92,18 @@ direction of the move.
 
 ### Move to top of stack
 
-    foo.top()
+```python
+foo.top()
+```
 
 This sets the order value to the lowest value found in the stack and increases
 the order value of all objects that were above the moved object by one.
 
 ### Move to bottom of stack
 
-    foo.bottom()
+```python
+foo.bottom()
+```
 
 This sets the order value to the highest value found in the stack and decreases
 the order value of all objects that were below the moved object by one.
@@ -97,14 +113,16 @@ the order value of all objects that were below the moved object by one.
 For performance reasons, the delete(), to(), below(), above(), top(), and bottom()
 methods use Django's update() method to change the order of other objects that
 are shifted as a result of one of these calls. If the model has fields that
-are typically updated in a customized save() method, or through other app level 
+are typically updated in a customized save() method, or through other app level
 functionality such as DateTimeField(auto_now=True), you can add additional fields
 to be passed through to update(). This will only impact objects where their order
 is being shifted as a result of an operation on the target object, not the target
 object itself.
 
-    foo.to(12, extra_update={'modified': now()}
- 
+```python
+foo.to(12, extra_update={'modified': now()}
+```
+
 ## Subset Ordering
 
 In some cases, ordering objects is required only on a subset of objects. For example,
@@ -114,37 +132,64 @@ choose their order. This option is supported via the `order_with_respect_to` par
 
 A simple example might look like so:
 
-    class Contact(OrderedModel):
-        user = models.ForeignKey(User)
-        phone = models.CharField()
-        order_with_respect_to = 'user'
+```python
+class Contact(OrderedModel):
+    user = models.ForeignKey(User)
+    phone = models.CharField()
+    order_with_respect_to = 'user'
+```
 
 If objects are ordered with respect to more than one field, `order_with_respect_to` supports
 tuples to define multiple fields:
 
-    class Model(OrderedModel)
-        # ...
-        order_with_respect_to = ('field_a', 'field_b')
+```python
+class Model(OrderedModel)
+    # ...
+    order_with_respect_to = ('field_a', 'field_b')
+```
 
 In a many-to-many relationship you need to use a seperate through model which is derived from the OrderedModel.
 For example, an application which manages pizzas with toppings.
 
 A simple example might look like so:
 
-    class Topping(models.Model):
-        name = models.CharField(max_length=100)
+```python
+class Topping(models.Model):
+    name = models.CharField(max_length=100)
+
+class Pizza(models.Model):
+    name = models.CharField(max_length=100)
+    toppings = models.ManyToManyField(Topping, through='PizzaToppingsThroughModel')
+
+class PizzaToppingsThroughModel(OrderedModel):
+    pizza = models.ForeignKey(Pizza)
+    topping = models.ForeignKey(Topping)
+    order_with_respect_to = 'pizza'
 
-    class Pizza(models.Model):
-        name = models.CharField(max_length=100)
-        toppings = models.ManyToManyField(Topping, through='PizzaToppingsThroughModel')
+    class Meta:
+        ordering = ('pizza', 'order')
+```
 
-    class PizzaToppingsThroughModel(OrderedModel):
-        pizza = models.ForeignKey(Pizza)
-        topping = models.ForeignKey(Topping)
-        order_with_respect_to = 'pizza'
+When you want ordering on the baseclass instead of subclasses in an ordered list of objects of various classes, specify the full module path of the base class:
 
+    class BaseQuestion(OrderedModel):
+        order_class_path = __module__ '.BaseQuestion'
+        question = models.TextField(max_length=100)
         class Meta:
-            ordering = ('pizza', 'order')
+            ordering = ('order',)
+
+    class MultipleChoiceQuestion(BaseQuestion):
+        good_answer = models.TextField(max_length=100)
+        wrong_answer1 = models.TextField(max_length=100)
+        wrong_answer2 = models.TextField(max_length=100)
+        wrong_answer3 = models.TextField(max_length=100)
+
+    class OpenQuestion(BaseQuestion):
+        answer = models.TextField(max_length=100)
+
+
+
+
 
 Admin integration
 -----------------
@@ -152,41 +197,45 @@ Admin integration
 To add arrows in the admin change list page to do reordering, you can use the
 `OrderedModelAdmin` and the `move_up_down_links` field:
 
-    from django.contrib import admin
-    from ordered_model.admin import OrderedModelAdmin
-    from models import Item
+```python
+from django.contrib import admin
+from ordered_model.admin import OrderedModelAdmin
+from models import Item
 
-    class ItemAdmin(OrderedModelAdmin):
-        list_display = ('name', 'move_up_down_links')
+class ItemAdmin(OrderedModelAdmin):
+    list_display = ('name', 'move_up_down_links')
 
-    admin.site.register(Item, ItemAdmin)
+admin.site.register(Item, ItemAdmin)
+```
 
 
 For a many-to-many relationship you need the following in the admin.py file:
 
-    from django.contrib import admin
-    from ordered_model.admin import OrderedTabularInline
-    from models import Pizza, PizzaToppingsThroughModel
-
-    class PizzaToppingsThroughModelInline(OrderedTabularInline):
-        model = PizzaToppingsThroughModel
-        fields = ('topping', 'order', 'move_up_down_links',)
-        readonly_fields = ('order', 'move_up_down_links',)
-        extra = 1
-        ordering = ('order',)
-
-    class PizzaAdmin(admin.ModelAdmin):
-        list_display = ('name', )
-        inlines = (PizzaToppingsThroughModelInline, )
-
-        def get_urls(self):
-            urls = super(PizzaAdmin, self).get_urls()
-            for inline in self.inlines:
-                if hasattr(inline, 'get_urls'):
-                    urls = inline.get_urls(self) + urls
-            return urls
-
-    admin.site.register(Pizza, PizzaAdmin)
+```python
+from django.contrib import admin
+from ordered_model.admin import OrderedTabularInline
+from models import Pizza, PizzaToppingsThroughModel
+
+class PizzaToppingsThroughModelInline(OrderedTabularInline):
+    model = PizzaToppingsThroughModel
+    fields = ('topping', 'order', 'move_up_down_links',)
+    readonly_fields = ('order', 'move_up_down_links',)
+    extra = 1
+    ordering = ('order',)
+
+class PizzaAdmin(admin.ModelAdmin):
+    list_display = ('name', )
+    inlines = (PizzaToppingsThroughModelInline, )
+
+    def get_urls(self):
+        urls = super(PizzaAdmin, self).get_urls()
+        for inline in self.inlines:
+            if hasattr(inline, 'get_urls'):
+                urls = inline.get_urls(self) + urls
+        return urls
+
+admin.site.register(Pizza, PizzaAdmin)
+```
 
 Test suite
 ----------
diff --git a/PKG-INFO b/django_ordered_model.egg-info/PKG-INFO
similarity index 93%
copy from PKG-INFO
copy to django_ordered_model.egg-info/PKG-INFO
index 057d05d..5c1b45c 100644
--- a/PKG-INFO
+++ b/django_ordered_model.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-ordered-model
-Version: 1.3.0
+Version: 1.4.1
 Summary: Allows Django models to be ordered and provides a simple admin interface for reordering them.
 Home-page: http://github.com/bfirsh/django-ordered-model
 Author: Ben Firshman
@@ -15,3 +15,5 @@ Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
+Requires: Django
+Requires: six
diff --git a/django_ordered_model.egg-info/SOURCES.txt b/django_ordered_model.egg-info/SOURCES.txt
new file mode 100644
index 0000000..acc4b90
--- /dev/null
+++ b/django_ordered_model.egg-info/SOURCES.txt
@@ -0,0 +1,28 @@
+CHANGES.md
+LICENSE
+MANIFEST.in
+README.md
+requirements.txt
+setup.py
+django_ordered_model.egg-info/PKG-INFO
+django_ordered_model.egg-info/SOURCES.txt
+django_ordered_model.egg-info/dependency_links.txt
+django_ordered_model.egg-info/not-zip-safe
+django_ordered_model.egg-info/top_level.txt
+ordered_model/__init__.py
+ordered_model/admin.py
+ordered_model/models.py
+ordered_model/locale/de/LC_MESSAGES/django.mo
+ordered_model/locale/de/LC_MESSAGES/django.po
+ordered_model/locale/pl/LC_MESSAGES/django.mo
+ordered_model/locale/pl/LC_MESSAGES/django.po
+ordered_model/static/ordered_model/arrow-down.gif
+ordered_model/static/ordered_model/arrow-up.gif
+ordered_model/templates/ordered_model/admin/order_controls.html
+ordered_model/tests/__init__.py
+ordered_model/tests/admin.py
+ordered_model/tests/models.py
+ordered_model/tests/settings.py
+ordered_model/tests/tests.py
+ordered_model/tests/urls.py
+ordered_model/tests/fixtures/test_items.json
\ No newline at end of file
diff --git a/django_ordered_model.egg-info/dependency_links.txt b/django_ordered_model.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/django_ordered_model.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/django_ordered_model.egg-info/not-zip-safe b/django_ordered_model.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/django_ordered_model.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/django_ordered_model.egg-info/top_level.txt b/django_ordered_model.egg-info/top_level.txt
new file mode 100644
index 0000000..f7d3fca
--- /dev/null
+++ b/django_ordered_model.egg-info/top_level.txt
@@ -0,0 +1 @@
+ordered_model
diff --git a/ordered_model/admin.py b/ordered_model/admin.py
index 9aef17a..b0a014e 100644
--- a/ordered_model/admin.py
+++ b/ordered_model/admin.py
@@ -248,14 +248,23 @@ class OrderedTabularInline(admin.TabularInline):
         return ''
 
     def move_up_down_links(self, obj):
-        if obj.id:
-            order_obj_name = 'obj'
-            if obj._get_order_with_respect_to() is not None:
-                order_obj_name = obj._get_order_with_respect_to().id
+        if not obj.id:
+            return ''
+
+        # Find the fields which refer to the parent model of this inline, and
+        # use one of them if they aren't None.
+        order_with_respect_to = obj._get_order_with_respect_to() or []
+        parent_model = self.parent_model._meta
+        fields = [
+            str(value.id) for field_name, value in order_with_respect_to
+            if value.__class__ is self.parent_model and value is not None and value.id is not None]
+        order_obj_name = fields[0] if len(fields) > 0 else None
+
+        if order_obj_name:
             return render_to_string("ordered_model/admin/order_controls.html", {
                 'app_label': self.model._meta.app_label,
                 'model_name': self.model._meta.model_name,
-                'module_name': self.model._meta.model_name, # backwards compat
+                'module_name': self.model._meta.model_name,  # backwards compat
                 'object_id': obj.id,
                 'urls': {
                     'up': reverse("admin:{app}_{model}_order_up_inline".format(
@@ -267,7 +276,6 @@ class OrderedTabularInline(admin.TabularInline):
                 },
                 'query_string': self.request_query_string
             })
-        else:
-            return ''
+        return ''
     move_up_down_links.allow_tags = True
     move_up_down_links.short_description = _(u'Move')
diff --git a/ordered_model/models.py b/ordered_model/models.py
index 8da7772..096720b 100644
--- a/ordered_model/models.py
+++ b/ordered_model/models.py
@@ -7,6 +7,18 @@ from django.utils.translation import ugettext as _
 import six
 
 
+"""
+Convert a string containing module.submodule.classname to a Class.
+"""
+def _order_model_get_class( classpath ):
+    parts = classpath.split('.')
+    module = ".".join(parts[:-1])
+    m = __import__( module )
+    for comp in parts[1:]:
+        m = getattr(m, comp)           
+    return m
+
+
 class OrderedModelBase(models.Model):
     """
     An abstract model that allows objects to be ordered relative to each other.
@@ -14,15 +26,26 @@ class OrderedModelBase(models.Model):
      - create a model subclassing ``OrderedModelBase``
      - add an indexed ``PositiveIntegerField`` to the model
      - set ``order_field_name`` to the name of that field
-     - use the same field name in ``Meta.ordering``
+     - use the same field name in ``Meta.ordering``     
+    [optional]
+     - set ``order_with_respect_to`` to limit order to a subset 
+     - specify ``order_class_path`` in case of polymorpic classes
     """
 
     order_field_name = None
     order_with_respect_to = None
+    order_class_path = None
 
     class Meta:
         abstract = True
 
+
+    def _get_class_for_ordering_queryset(self):
+        if self.order_class_path:
+            return _order_model_get_class(self.order_class_path)
+        return self.__class__
+
+
     def _get_order_with_respect_to(self):
         if isinstance(self.order_with_respect_to, six.string_types):
             self.order_with_respect_to = (self.order_with_respect_to,)
@@ -38,11 +61,11 @@ class OrderedModelBase(models.Model):
         )
 
     def get_ordering_queryset(self, qs=None):
-        qs = qs or self.__class__.objects.all()
+        qs = qs or self._get_class_for_ordering_queryset().objects.all()
         order_with_respect_to = self.order_with_respect_to
         if order_with_respect_to:
             order_values = self._get_order_with_respect_to()
-            qs = qs.filter(*order_values)
+            qs = qs.filter(**dict(order_values))
         return qs
 
     def save(self, *args, **kwargs):
@@ -122,7 +145,7 @@ class OrderedModelBase(models.Model):
         if not self._valid_ordering_reference(replacement):
             raise ValueError(
                 "{0!r} can only be swapped with instances of {1!r} with equal {2!s} fields.".format(
-                    self, self.__class__, ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
+                    self, self._get_class_for_ordering_queryset(), ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
                 )
             )
         order, replacement_order = getattr(self, self.order_field_name), getattr(replacement, self.order_field_name)
@@ -177,7 +200,7 @@ class OrderedModelBase(models.Model):
         if not self._valid_ordering_reference(ref):
             raise ValueError(
                 "{0!r} can only be swapped with instances of {1!r} with equal {2!s} fields.".format(
-                    self, self.__class__, ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
+                    self, self._get_class_for_ordering_queryset(), ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
                 )
             )
         if getattr(self, self.order_field_name) == getattr(ref, self.order_field_name):
@@ -198,7 +221,7 @@ class OrderedModelBase(models.Model):
         if not self._valid_ordering_reference(ref):
             raise ValueError(
                 "{0!r} can only be swapped with instances of {1!r} with equal {2!s} fields.".format(
-                    self, self.__class__, ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
+                    self, self._get_class_for_ordering_queryset(), ' and '.join(["'{}'".format(o[0]) for o in self._get_order_with_respect_to()])
                 )
             )
         if getattr(self, self.order_field_name) == getattr(ref, self.order_field_name):
diff --git a/ordered_model/tests/models.py b/ordered_model/tests/models.py
index b0dda26..d008c9b 100644
--- a/ordered_model/tests/models.py
+++ b/ordered_model/tests/models.py
@@ -57,3 +57,18 @@ class PizzaToppingsThroughModel(OrderedModel):
 
     class Meta:
         ordering = ('pizza', 'order')
+
+class BaseQuestion(OrderedModel):
+    order_class_path = __module__ + '.BaseQuestion'
+    question = models.TextField(max_length=100)
+    class Meta:
+        ordering = ('order',)
+
+class MultipleChoiceQuestion(BaseQuestion):
+    good_answer = models.TextField(max_length=100)
+    wrong_answer1 = models.TextField(max_length=100)
+    wrong_answer2 = models.TextField(max_length=100)
+    wrong_answer3 = models.TextField(max_length=100)
+
+class OpenQuestion(BaseQuestion):
+    answer = models.TextField(max_length=100)
diff --git a/ordered_model/tests/settings.py b/ordered_model/tests/settings.py
index 52eafec..ee926ba 100644
--- a/ordered_model/tests/settings.py
+++ b/ordered_model/tests/settings.py
@@ -25,5 +25,10 @@ TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
         'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.contrib.auth.context_processors.auth',
+            ],
+        },
     },
 ]
diff --git a/ordered_model/tests/tests.py b/ordered_model/tests/tests.py
index 8ebb1b6..e3c5bdc 100644
--- a/ordered_model/tests/tests.py
+++ b/ordered_model/tests/tests.py
@@ -11,7 +11,9 @@ from ordered_model.tests.models import (
     CustomOrderFieldModel,
     Pizza,
     Topping,
-    PizzaToppingsThroughModel
+    PizzaToppingsThroughModel,
+    OpenQuestion,
+    MultipleChoiceQuestion
 )
 from ordered_model.tests.models import TestUser
 from .admin import ItemAdmin
@@ -203,7 +205,7 @@ class CustomPKTest(TestCase):
                 (self.item4.pk, 3)
             ]
         )
-    
+
     def test_order_to_extra_update(self):
         modified_time = now()
         self.item1.to(3, extra_update={'modified':modified_time})
@@ -212,12 +214,12 @@ class CustomPKTest(TestCase):
                 (self.item2.pk, 0, modified_time),
                 (self.item3.pk, 1, modified_time),
                 (self.item4.pk, 2, modified_time),
-                # This one is the primary item being operated on and modified would be 
+                # This one is the primary item being operated on and modified would be
                 # handled via auto_now or something
                 (self.item1.pk, 3, None)
             ]
         )
-    
+
     def test_bottom_extra_update(self):
         modified_time = now()
         self.item1.bottom(extra_update={'modified':modified_time})
@@ -226,12 +228,12 @@ class CustomPKTest(TestCase):
                 (self.item2.pk, 0, modified_time),
                 (self.item3.pk, 1, modified_time),
                 (self.item4.pk, 2, modified_time),
-                # This one is the primary item being operated on and modified would be 
+                # This one is the primary item being operated on and modified would be
                 # handled via auto_now or something
                 (self.item1.pk, 3, None)
             ]
         )
-    
+
     def test_top_extra_update(self):
         modified_time = now()
         self.item4.top(extra_update={'modified':modified_time})
@@ -240,12 +242,12 @@ class CustomPKTest(TestCase):
                 (self.item4.pk, 0, None),
                 (self.item1.pk, 1, modified_time),
                 (self.item2.pk, 2, modified_time),
-                # This one is the primary item being operated on and modified would be 
+                # This one is the primary item being operated on and modified would be
                 # handled via auto_now or something
                 (self.item3.pk, 3, modified_time)
             ]
         )
-    
+
     def test_below_extra_update(self):
         modified_time = now()
         self.item1.below(self.item4, extra_update={'modified':modified_time})
@@ -254,12 +256,12 @@ class CustomPKTest(TestCase):
                 (self.item2.pk, 0, modified_time),
                 (self.item3.pk, 1, modified_time),
                 (self.item4.pk, 2, modified_time),
-                # This one is the primary item being operated on and modified would be 
+                # This one is the primary item being operated on and modified would be
                 # handled via auto_now or something
                 (self.item1.pk, 3, None)
             ]
         )
-    
+
     def test_above_extra_update(self):
         modified_time = now()
         self.item4.above(self.item1, extra_update={'modified':modified_time})
@@ -268,12 +270,12 @@ class CustomPKTest(TestCase):
                 (self.item4.pk, 0, None),
                 (self.item1.pk, 1, modified_time),
                 (self.item2.pk, 2, modified_time),
-                # This one is the primary item being operated on and modified would be 
+                # This one is the primary item being operated on and modified would be
                 # handled via auto_now or something
                 (self.item3.pk, 3, modified_time)
             ]
         )
-    
+
     def test_delete_extra_update(self):
         modified_time = now()
         self.item1.delete(extra_update={'modified':modified_time})
@@ -521,3 +523,28 @@ class MultiOrderWithRespectToTests(TestCase):
     def test_swap_fails(self):
         with self.assertRaises(ValueError):
             self.q1_u1_a1.swap([self.q2_u1_a2])
+
+
+class PolymorpicOrderGenerationTests(TestCase):
+    def test_order_of_Baselist(self):
+        o1 = OpenQuestion.objects.create()
+        self.assertEqual(o1.order, 0)
+        o1.save()
+        m1 = MultipleChoiceQuestion.objects.create()
+        self.assertEqual(m1.order, 1)
+        m1.save()
+        m2 = MultipleChoiceQuestion.objects.create()
+        self.assertEqual(m2.order, 2)
+        m2.save()
+        o2 = OpenQuestion.objects.create()
+        self.assertEqual(o2.order, 3)
+        o2.save()
+
+        m2.up()
+        self.assertEqual(m2.order, 1)
+        m1.refresh_from_db()
+        self.assertEqual(m1.order, 2)
+        o2.up()
+        self.assertEqual(o2.order, 2)
+        m1.refresh_from_db()
+        self.assertEqual(m1.order, 3)
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..1329207
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+Django
+six
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
index 678315b..b99e2a0 100644
--- a/setup.py
+++ b/setup.py
@@ -1,10 +1,13 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-from distutils.core import setup
- 
+from setuptools import setup
+
+with open('requirements.txt') as f:
+    requires = f.read().splitlines()
+
 setup(
     name='django-ordered-model',
-    version='1.3.0',
+    version='1.4.1',
     description='Allows Django models to be ordered and provides a simple admin interface for reordering them.',
     author='Ben Firshman',
     author_email='ben at firshman.co.uk',
@@ -13,6 +16,7 @@ setup(
         'ordered_model',
         'ordered_model.tests',
     ],
+    requires=requires,
     classifiers=[
         'Development Status :: 5 - Production/Stable',
         'Framework :: Django',
@@ -22,6 +26,7 @@ setup(
         'Programming Language :: Python :: 2',
         'Programming Language :: Python :: 3',
     ],
+    zip_safe = False,
     package_data={'ordered_model': ['static/ordered_model/arrow-up.gif',
                                     'static/ordered_model/arrow-down.gif',
                                     'locale/de/LC_MESSAGES/django.po',

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-django-ordered-model.git



More information about the Python-modules-commits mailing list