Skip to main content

This package implements an algorithm similar to JIRA's lexorank, but without using buckets for rebalancing that can be used with Django projects.

Project description

django-lexorank

Test workflow PyPI version PyPI downloads License Supported Python versions Code style: Black

This package implements an algorithm similar to JIRA's lexorank, but without using buckets for rebalancing that can be used with Django projects.

Installation

pip install django-lexorank

Configuration

Add django_lexorank to your INSTALLED_APPS setting:

INSTALLED_APPS = [
    ...
    "django_lexorank",
]

Usage

Defining models

To add ranking to your model, you need to inherit it from RankedModel.

There are 2 ways of using RankedModel:

Globally

This way, all the objects will be ranked together in the global scope.

Example:

from django_lexorank.models import RankedModel
from django.db import models


class Board(RankedModel):
    name = models.CharField(max_length=255)

Per group

This way, instances of the model will be ranked separately per group.

To do that, you have to set a name of the foreign key to the group to the order_with_respect_to parameter of the model.

Example:

from django_lexorank.models import RankedModel
from django.db import models


class Task(RankedModel):
    name = models.CharField(max_length=255)
    board = models.ForeignKey("Board", on_delete=models.CASCADE, related_name="tasks")
    order_with_respect_to = "board"

Field parameters

By default, new instances of the model will be ranked at the top of the list. Rank field may accept boolean parameter insert_to_bottom to override this behaviour.

Example:

from django_lexorank.models import RankedModel
from django_lexorank.fields import RankField
from django.db import models


class User(RankedModel):
    name = models.CharField(max_length=255)
    rank = RankField(insert_to_bottom=True)

Manager methods

There are 3 ways to insert models using manager methods:

model.objects.create(**kwargs) - will use the default behaviour specified on RankField definition.

model.objects.add_to_bottom(**kwargs) - will insert the model at the bottom of the list.

model.objects.add_to_top(**kwargs) - will insert the model at the top of the list.

Instance methods

obj.place_after(after_obj) - places model instance after provided instance. If rank length exceeds the limit after the move, rebalancing will be scheduled.

obj.place_before(before_obj) - places model instance before provided instance. If rank length exceeds the limit after the move, rebalancing will be scheduled.

obj.place_on_top() - moves model instance to the bottom of the list. If rank length exceeds the limit after the move, rebalancing will be scheduled.

obj.place_on_bottom() - moves model instance to the bottom of the list. If rank length exceeds the limit after the move, rebalancing will be scheduled.

obj.get_previous_object() - return previous object in the list

obj.get_next_object() - return next object in the list

obj.get_previous_object_rank() - return previous object rank in the list

obj.get_next_object_rank() - return next object rank in the list

obj.schedule_rebalancing() - schedule rebalancing for the whole list or a group if order_with_respect_to is set

obj.rebalance() - rebalance the whole list or a group if order_with_respect_to is set

obj.rebalancing_required() - returns True if rebalancing is required for the whole list, or for a group if order_with_respect_to is set

obj.rebalancing_scheduled() - returns True if rebalancing is scheduled for the whole list, or for a group if order_with_respect_to is set

Model methods

model.get_first_object() - return first object in the list

model.get_last_object() - return last object in the list

model.get_first_object_rank() - return first object rank in the list

model.get_last_object_rank() - return last object rank in the list

Rebalancing Schedule

Each time, a rank length exceeds the limit, rebalancing is scheduled for the whole list or a group, according to the value of order_with_respect_to parameter.

SheduledRebalancing model can be used to create a task for rebalancing ranks.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_lexorank-0.1.4.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_lexorank-0.1.4-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file django_lexorank-0.1.4.tar.gz.

File metadata

  • Download URL: django_lexorank-0.1.4.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.11.0 Linux/6.11.0-1018-azure

File hashes

Hashes for django_lexorank-0.1.4.tar.gz
Algorithm Hash digest
SHA256 02080fec49a1aaad4aa70bfb3b5fa376737aa23af0447fae2a919bcbaf728203
MD5 a63d8d9cf3adc87d6d052c5577e3ab3c
BLAKE2b-256 447cb674c916e68c190545eaf797bcb4660717c464f5e70d5a69ee990106f01a

See more details on using hashes here.

File details

Details for the file django_lexorank-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: django_lexorank-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.11.0 Linux/6.11.0-1018-azure

File hashes

Hashes for django_lexorank-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1445940c49bb6d63ec7bff09a772426aca54c17166e9ce1afe97fc7cd0108948
MD5 f44edd8e6422c7e9b95f45415c6eb63d
BLAKE2b-256 1ff69d568c9fa0cd539dce49f99e6a951009ca3b8350f5b4cb69f3d49f13fd21

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page