Metadata-Version: 2.0
Name: django-tqdm
Version: 1.0.0
Summary: Fast, Extensible Progress Meter (tqdm) For Django
Home-page: https://github.com/desecho/django-tqdm
Author: Anton Samarchyan
Author-email: desecho@gmail.com
License: MIT
Keywords: progressbar progressmeter progress bar meter rate eta console terminal time
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Environment :: Console
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: System :: Monitoring
Classifier: Topic :: Terminals
Classifier: Topic :: Utilities
Classifier: Intended Audience :: Developers
Requires-Dist: tqdm (>=4.11.2)
Requires-Dist: Django (>=1.11)

django-tqdm
==============

|PyPI-Status| |PyPI-Versions| |LICENSE| |Travis| |Codecov| |Requirements| |Downloads|

*Fast, Extensible Progress Meter (tqdm) For Django*.

| Use tqdm_ in Django management commands seamlessly.
| It provides simple universal commands for Django management command to output
  text using standard command functions and tqdm.
| Currently supported versions of Django_ are supported.

Usage
-----

.. code:: python

    from django_tqdm import BaseCommand
    from time import sleep

    class Command(BaseCommand):
        def handle(self, *args, **options):
            # Output directly
            self.error('Error')
            self.info('Info')

            # Output through tqdm
            t = self.tqdm(total=50)
            for x in range(50):
                sleep(0.03)
                t.update(1)

                if x == 10:
                    t.info('X = 10')
                if x == 20:
                    t.error('X = 20')

Advanced:

.. code:: python

    info(text, ending='\n', fatal=False)
    error(text, ending='\n', fatal=False)
    write(text, ending='\n', fatal=False, error=False)

If you set `fatal` to `True` it will terminate the command after printing the message.

For documentation on tqdm see tqdm_.

Comparison
------------

In django-tqdm:

.. code:: python

    self.info('info')
    self.error('error')

In vanilla Django:

.. code:: python

    self.stdout.write('info')
    self.stderr.write('error')


Demos
------------

Demo 1 - Simple usage
------------------------

.. code:: python

    self.info('info')
    self.error('error')

|Demo1|

Demo 2 - tqdm usage
-----------------------

.. code:: python

    t = self.tqdm(total=50)
    for x in range(50):
        sleep(0.02)
        t.update(1)
        if x == 10:
            t.info('info')
        if x == 40:
            t.error('error')

|Demo2|

Demo 3 - Vanilla tqdm with default settings for comparison
------------------------------------------------------------------

.. code:: python

    t = tqdm(total=50)
    for x in range(50):
        sleep(0.02)
        t.update(1)
        if x == 25:
            t.write('info')
        if x == 40:
            t.write('error', file=sys.stderr)

|Demo3|

Development
--------------

| Use `clean.sh` to automatically prettify your code.
| Use `tox` for testing and linting.


.. |Demo1| image:: https://asciinema.org/a/117133.png
   :target: https://asciinema.org/a/117133

.. |Demo2| image:: https://asciinema.org/a/117136.png
   :target: https://asciinema.org/a/117136

.. |Demo3| image:: https://asciinema.org/a/117137.png
   :target: https://asciinema.org/a/117137

.. |PyPI-Status| image:: https://img.shields.io/pypi/v/django-tqdm.svg
   :target: https://pypi.python.org/pypi/django-tqdm

.. |PyPI-Versions| image:: https://img.shields.io/pypi/pyversions/django-tqdm.svg
   :target: https://pypi.python.org/pypi/django-tqdm

.. |LICENSE| image:: https://img.shields.io/pypi/l/django-tqdm.svg
   :target: https://raw.githubusercontent.com/desecho/django-tqdm/master/LICENSE

.. |Travis| image:: https://travis-ci.org/desecho/django-tqdm.svg?branch=master
    :target: https://travis-ci.org/desecho/django-tqdm

.. |Codecov| image:: https://codecov.io/gh/desecho/django-tqdm/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/desecho/django-tqdm

.. |Requirements| image:: https://requires.io/github/desecho/django-tqdm/requirements.svg?branch=master
     :target: https://requires.io/github/desecho/django-tqdm/requirements/?branch=master
     :alt: Requirements Status

.. |Downloads| image:: https://pepy.tech/badge/django-tqdm
     :target: https://pepy.tech/project/django-tqdm
     :alt: RequiDownloads

.. _tqdm: https://github.com/tqdm/tqdm
.. _Django: https://www.djangoproject.com


