Skip to main content
Help improve PyPI by participating in a 5-minute user interface survey!

A higher-level topological sort.

Project Description

whatwhen is a higher-level topological sort, a useful algorithm to resolve dependencies and calculate a workable execution order for functions and other things.

Basic topological sorting:

tasks = [
    {
        'name: 'drive',
        'dependencies': ['car'],
    }, {
        'name': 'car',
        'dependencies': ['wheels', 'gas'],
    }, {
        'name': 'wheels',
        'dependencies': 'rubber',
    }, {
        'name': 'gas',
    }, {
        'name': 'rubber',
    },
]

whatwhen.sort(items)

Topological sorting using contracts (needs and provisions):

tasks = [
    {
        'name': 'drive',
        'needs': ['car', 'gas'],
    }, {
        'name': 'fill tank',
        'provides': ['gas'],
    }, {
        'name': 'rent a car',
        'provides': ['car'],
        'dependencies': ['money'],
    }, {
        'name': 'money'
    }
]

whatwhen.sort(items)

Needs and provisions are useful when you don’t know exactly what function (or system or module or whatever) is going to provide the necessary data or preconditions, but you do know what that data or those preconditions are. This might happen in large systems or systems over which you don’t have full control.

In addition to dictionaries, the metadata on tasks can also be added to functions:

def one():
    pass

def two():
    pass

one.dependencies = ['two']

whatwhen.sort([one, two])

Whatwhen will return the original functions (or dictionaries) in sorted order, rather than just a sorted list of node names, so it’s slightly easier to work with than a raw topological sort.

Whatwhen lets the tarjan module do most of the heavy lifting, so there’s really only about 40 lines of wrapper code to this module. It’s up to you to decide whether you’d rather build on top of WhatWhen or plain Tarjan.

Release history Release notifications

This version
History Node

0.1.1

History Node

0.1

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
whatwhen-0.1.1.tar.gz (2.8 kB) Copy SHA256 hash SHA256 Source None Nov 4, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page