New Upstream Snapshot - python-tasklib

Ready changes

Summary

Merged new upstream version: 2.5.1+git20221116.1.793a86d (was: 2.5.1).

Resulting package

Built on 2023-01-23T08:43 (took 33m32s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots python3-tasklib

Lintian Result

Diff

diff --git a/.coveragerc b/.coveragerc
deleted file mode 100644
index 264003a..0000000
--- a/.coveragerc
+++ /dev/null
@@ -1,5 +0,0 @@
-[report]
-omit = */tests.py
-exclude_lines =
-    raise NotImplementedError
-    @abc.abstractmethod
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 0b10a68..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-.cache
-*.pyc
-*~
-tasklib.egg-info
-/dist
-/build
-docs/_build
-.project
-.coverage
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 3f5900f..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-language: python
-env:
-  - TASK_VERSION=v2.4.0
-  - TASK_VERSION=v2.4.1
-  - TASK_VERSION=v2.4.2
-  - TASK_VERSION=v2.4.3
-  - TASK_VERSION=v2.4.4
-  - TASK_VERSION=v2.5.0
-  - TASK_VERSION=v2.5.1
-  - TASK_VERSION=v2.5.2
-  - TASK_VERSION=v2.5.3
-python:
-  - "3.5"
-  - "3.6"
-  - "3.7"
-  - "3.8"
-  - "3.9"
-install:
-  - pip install -e .
-  - pip install coveralls
-  - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
-  - sudo apt-get update -qq
-  - sudo apt-get install -qq build-essential cmake uuid-dev libgnutls-dev g++-4.8
-  - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
-  - git clone --recursive https://github.com/GothenburgBitFactory/taskwarrior
-  - cd taskwarrior
-  - git checkout $TASK_VERSION
-  - git clean -dfx
-  - git submodule init
-  - git submodule update
-  - cmake -DCMAKE_BUILD_TYPE=release .
-  - make -j2
-  - sudo make install
-  - task --version
-before_script:
-  - cd $TRAVIS_BUILD_DIR
-script:
-  - coverage run --source=tasklib setup.py test
-after_success:
-  - coveralls
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..491d642
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,80 @@
+Metadata-Version: 2.1
+Name: tasklib
+Version: 2.5.1
+Summary: Official Taskwarrior library for Python
+Home-page: https://github.com/GothenburgBitFactory/tasklib
+Download-URL: https://github.com/GothenburgBitFactory/tasklib/downloads
+Author: GothenburgBitFactory
+Author-email: support@gothenburgbitfactory.org
+License: BSD
+Classifier: Development Status :: 6 - Mature
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Information Technology
+Classifier: Intended Audience :: System Administrators
+Classifier: Operating System :: OS Independent
+License-File: LICENSE
+License-File: AUTHORS
+
+tasklib
+=======
+
+.. image:: https://travis-ci.org/robgolding/tasklib.png?branch=develop
+    :target: http://travis-ci.org/robgolding/tasklib
+
+.. image:: https://coveralls.io/repos/robgolding/tasklib/badge.png?branch=develop
+    :target: https://coveralls.io/r/robgolding/tasklib?branch=develop
+
+tasklib is a Python library for interacting with taskwarrior_ databases, using
+a queryset API similar to that of Django's ORM.
+
+Requirements
+------------
+
+* Python 3.5 or above
+* taskwarrior_ v2.4.x or above.
+
+Older versions of taskwarrior are untested and may not work.
+
+Installation
+------------
+
+Install via pip::
+
+    pip install tasklib
+
+Usage
+-----
+
+tasklib has a similar API to that of Django's ORM::
+
+    >>> from tasklib import TaskWarrior
+
+    >>> tw = TaskWarrior('~/.task')
+    >>> tasks = tw.tasks.pending()
+    >>> tasks
+    ['Tidy the house', 'Learn German']
+    >>> tasks.filter(tags__contain='chores')
+    ['Tidy the house']
+    >>> type(tasks[0])
+    <class 'tasklib.task.Task'>
+    >>> tasks[0].done()
+    >>> tasks = tw.tasks.pending()
+    >>> tasks
+    ['Learn German']
+    >>> tasks[0]['tags'] = ['languages']
+    >>> tasks[0].save()
+
+For more advanced usage, see the documentation_.
+
+.. _taskwarrior: http://taskwarrior.org
+.. _documentation: http://tasklib.readthedocs.org/en/latest/
diff --git a/debian/changelog b/debian/changelog
index 5cfea47..482fb25 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+python-tasklib (2.5.1+git20221116.1.793a86d-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Mon, 23 Jan 2023 08:17:48 -0000
+
 python-tasklib (2.5.1-3) unstable; urgency=medium
 
   * Add missing build dependency on tzdata (Closes: #1029429)
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index 274756e..0000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,177 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# User-friendly check for sphinx-build
-ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
-$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
-endif
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  xml        to make Docutils-native XML files"
-	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/tasklib.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/tasklib.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/tasklib"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/tasklib"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-latexpdfja:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through platex and dvipdfmx..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
-
-xml:
-	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
-	@echo
-	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-pseudoxml:
-	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
-	@echo
-	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index 6c2b170..0000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# tasklib documentation build configuration file, created by
-# sphinx-quickstart on Sun Nov 10 15:19:07 2013.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = []
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'tasklib'
-copyright = u'2014 - 2021, Rob Golding & Gothenburg Bit Factory'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '2.5.1'
-# The full version, including alpha/beta/rc tags.
-release = '2.5.1'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'tasklibdoc'
-
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
-
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
-
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-#  author, documentclass [howto, manual, or own class]).
-latex_documents = [
-  ('index', 'tasklib.tex', u'tasklib Documentation',
-   u'Rob Golding', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    ('index', 'tasklib', u'tasklib Documentation',
-     [u'Rob Golding'], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-  ('index', 'tasklib', u'tasklib Documentation',
-   u'Rob Golding', 'tasklib', 'One line description of project.',
-   'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644
index d564421..0000000
--- a/docs/index.rst
+++ /dev/null
@@ -1,596 +0,0 @@
-Welcome to tasklib's documentation!
-===================================
-
-tasklib is a Python library for interacting with taskwarrior_ databases, using
-a queryset API similar to that of Django's ORM.
-
-Supports Python 3.5 and above, with taskwarrior 2.4.x and above.
-Older versions of taskwarrior are untested and may not work.
-
-Requirements
-------------
-
-* taskwarrior_ v2.4.x or above, although newest minor release is recommended.
-
-Installation
-------------
-
-Install via pip (recommended)::
-
-    pip install tasklib
-
-Or clone from github::
-
-    git clone https://github.com/robgolding/tasklib.git
-    cd tasklib
-    python setup.py install
-
-Initialization
---------------
-
-Optionally initialize the ``TaskWarrior`` instance with ``data_location`` (the
-database directory). If it doesn't already exist, this will be created
-automatically unless ``create=False``.
-
-The default location is the same as taskwarrior's::
-
-    >>> tw = TaskWarrior(data_location='~/.task', create=True)
-
-The ``TaskWarrior`` instance will also use your .taskrc configuration (so that
-it recognizes the same UDAs as your task binary, uses the same configuration,
-etc.). To override the location of the .taskrc, use
-``taskrc_location=~/some/different/path``.
-
-Creating Tasks
---------------
-
-To create a task, simply create a new ``Task`` object::
-
-    >>> new_task = Task(tw, description="throw out the trash")
-
-This task is not yet saved to TaskWarrior (same as in Django), not until
-you call ``.save()`` method::
-
-    >>> new_task.save()
-
-You can set any attribute as a keyword argument to the Task object::
-
-    >>> complex_task = Task(tw, description="finally fix the shower", due=datetime(2015,2,14,8,0,0), priority='H')
-
-or by setting the attributes one by one::
-
-    >>> complex_task = Task(tw)
-    >>> complex_task['description'] = "finally fix the shower"
-    >>> complex_task['due'] = datetime(2015,2,14,8,0,0)
-    >>> complex_task['priority'] = 'H'
-
-Modifying Task
---------------
-
-To modify a created or retrieved ``Task`` object, use dictionary-like access::
-
-    >>> homework = tw.tasks.get(tags=['chores'])
-    >>> homework['project'] = 'Home'
-
-The change is not propagated to the TaskWarrior until you run the ``save()`` method::
-
-    >>> homework.save()
-
-Attributes, which map to native Python objects are converted. See Task Attributes section.
-
-Task Attributes
----------------
-
-Attributes of task objects are accessible through indices, like so::
-
-    >>> task = tw.tasks.pending().get(tags__contain='work')  # There is only one pending task with 'work' tag
-    >>> task['description']
-    'Upgrade Ubuntu Server'
-    >>> task['id']
-    15
-    >>> task['due']
-    datetime.datetime(2015, 2, 5, 0, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> task['tags']
-    ['work', 'servers']
-
-The following fields are deserialized into Python objects:
-
-* ``due``, ``wait``, ``scheduled``, ``until``, ``entry``: deserialized to a ``datetime`` object
-* ``annotations``: deserialized to a list of ``TaskAnnotation`` objects
-* ``tags``: deserialized to a list of strings
-* ``depends``: deserialized to a set of ``Task`` objects
-
-Attributes should be set using the correct Python representation, which will be
-serialized into the correct format when the task is saved.
-
-Task properties
----------------
-
-Tasklib defines several properties upon ``Task`` object, for convenience::
-
-    >>> t.save()
-    >>> t.saved
-    True
-    >>> t.pending
-    True
-    >>> t.active
-    False
-    >>> t.start()
-    >>> t.active
-    True
-    >>> t.done()
-    >>> t.completed
-    True
-    >>> t.pending
-    False
-    >>> t.delete()
-    >>> t.deleted
-    True
-
-Operations on Tasks
--------------------
-
-After modifying one or more attributes, simple call ``save()`` to write those
-changes to the database::
-
-    >>> task = tw.tasks.pending().get(tags__contain='work')
-    >>> task['due'] = datetime(year=2014, month=1, day=5)
-    >>> task.save()
-
-To mark a task as complete, use ``done()``::
-
-    >>> task = tw.tasks.pending().get(tags__contain='work')
-    >>> task.done()
-    >>> len(tw.tasks.pending().filter(tags__contain='work'))
-    0
-
-To delete a task, use ``delete()``::
-
-    >>> task = tw.tasks.get(description="task added by mistake")
-    >>> task.delete()
-
-To update a task object with values from TaskWarrior database, use ``refresh()``. Example::
-
-    >>> task = Task(tw, description="learn to cook")
-    >>> task.save()
-    >>> task['id']
-    5
-    >>> task['tags']
-    []
-
-Now, suppose the we modify the task using the TaskWarrior interface in another terminal::
-
-    $ task 5 modify +someday
-    Task 5 modified.
-
-Switching back to the open python process::
-
-   >>> task['tags']
-   []
-   >>> task.refresh()
-   >>> task['tags']
-   ['someday']
-
-Tasks can also be started and stopped. Use ``start()`` and ``stop()``
-respectively::
-
-    >>> task.start()
-    >>> task['start']
-    datetime.datetime(2015, 7, 16, 18, 48, 28, tzinfo=<DstTzInfo 'Europe/Prague' CEST+2:00:00 DST>)
-    >>> task.stop()
-    >>> task['start']
-    >>> task.done()
-    >>> task['end']
-    datetime.datetime(2015, 7, 16, 18, 49, 2, tzinfo=<DstTzInfo 'Europe/Prague' CEST+2:00:00 DST>)
-
-
-Retrieving Tasks
-----------------
-
-``tw.tasks`` is a ``TaskQuerySet`` object which emulates the Django QuerySet
-API. To get all tasks (including completed ones)::
-
-    >>> tw.tasks.all()
-    ['First task', 'Completed task', 'Deleted task', ...]
-
-Filtering
----------
-
-Filter tasks using the same familiar syntax::
-
-    >>> tw.tasks.filter(status='pending', tags__contains=['work'])
-    ['Upgrade Ubuntu Server']
-
-Filter arguments are passed to the ``task`` command (``__`` is replaced by
-a period) so the above example is equivalent to the following command::
-
-    $ task status:pending tags.contain=work
-
-Tasks can also be filtered using raw commands, like so::
-
-    >>> tw.tasks.filter('status:pending +work')
-    ['Upgrade Ubuntu Server']
-
-Although this practice is discouraged, as by using raw commands you may lose
-some of the portability of your commands over different TaskWarrior versions.
-
-However, you can mix raw commands with keyword filters, as in the given example::
-
-    >>> tw.tasks.filter('+BLOCKING', project='Home')  # Gets all blocking tasks in project Home
-    ['Fix the toilette']
-
-This can be a neat way how to use syntax not yet supported by tasklib. The above
-is excellent example, since virtual tags do not work the same way as the ordinary ones, that is::
-
-    >>> tw.tasks.filter(tags=['BLOCKING'])
-    >>> []
-
-will not work.
-
-There are built-in functions for retrieving pending & completed tasks::
-
-    >>> tw.tasks.pending().filter(tags__contain='work')
-    ['Upgrade Ubuntu Server']
-    >>> len(tw.tasks.completed())
-    227
-
-Use ``get()`` to return the only task in a ``TaskQuerySet``, or raise an
-exception::
-
-    >>> tw.tasks.get(tags__contain='work')['status']
-    'pending'
-    >>> tw.tasks.get(status='completed', tags__contains='work')  # Status of only task with the work tag is pending, so this should fail
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-      File "tasklib/task.py", line 224, in get
-        'Lookup parameters were {0}'.format(kwargs))
-    tasklib.task.DoesNotExist: Task matching query does not exist. Lookup parameters were {'status': 'completed', 'tags__contains': ['work']}
-    >>> tw.tasks.get(status='pending')
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-      File "tasklib/task.py", line 227, in get
-        'Lookup parameters were {1}'.format(num, kwargs))
-    ValueError: get() returned more than one Task -- it returned 23! Lookup parameters were {'status': 'pending'}
-
-Additionally, since filters return ``TaskQuerySets`` you can stack filters on top of each other::
-
-    >>> home_tasks = tw.tasks.filter(project='Wife')
-    >>> home_tasks.filter(due__before=datetime(2015,2,14,14,14,14))  # What I have to do until Valentine's day
-    ['Prepare surprise birthday party']
-
-Equality of Task objects
-------------------------
-
-Two Tasks are considered equal if they have the same UUIDs::
-
-    >>> task1 = Task(tw, description="Pet the dog")
-    >>> task1.save()
-    >>> task2 = tw.tasks.get(description="Pet the dog")
-    >>> task1 == task2
-    True
-
-If you compare the two unsaved tasks, they are considered equal only if it's the
-same Python object::
-
-    >>> task1 = Task(tw, description="Pet the cat")
-    >>> task2 = Task(tw, description="Pet the cat")
-    >>> task1 == task2
-    False
-    >>> task3 = task1
-    >>> task3 == task1
-    True
-
-Accessing original values
--------------------------
-
-To access the saved state of the Task, use dict-like access using the
-``original`` attribute:
-
-    >>> t = Task(tw, description="tidy up")
-    >>> t.save()
-    >>> t['description'] = "tidy up the kitchen and bathroom"
-    >>> t['description']
-    "tidy up the kitchen and bathroom"
-    >>> t.original['description']
-    "tidy up"
-
-When you save the task, original values are refreshed to reflect the
-saved state of the task:
-
-    >>> t.save()
-    >>> t.original['description']
-    "tidy up the kitchen and bathroom"
-
-Dealing with dates and time
----------------------------
-
-Any timestamp-like attributes of the tasks are converted to timezone-aware
-datetime objects. To achieve this, Tasklib leverages ``zoneinfo`` Python module,
-which brings the Olsen timezone database to Python.
-
-This shields you from annoying details of Daylight Saving Time shifts
-or conversion between different timezones. For example, to list all the
-tasks which are due midnight if you're currently in Berlin:
-
-    >>> myzone = zoneinfo.ZoneInfo('Europe/Berlin')
-    >>> midnight = datetime(2015,2,2,0,0,0,tzinfo=myzone)
-    >>> tw.tasks.filter(due__before=midnight)
-
-However, this is still a little bit tedious. That's why TaskWarrior object
-is capable of automatic timezone detection, using the ``tzlocal`` Python
-module. If your system timezone is set to 'Europe/Berlin', following example
-will work the same way as the previous one:
-
-    >>> tw.tasks.filter(due__before=datetime(2015,2,2,0,0,0))
-
-You can also use simple dates when filtering:
-
-    >>> tw.tasks.filter(due__before=date(2015,2,2))
-
-In such case, a 00:00:00 is used as the time component.
-
-Of course, you can use datetime naive objects when initializing Task object
-or assigning values to datetime attributes:
-
-    >>> t = Task(tw, description="Buy new shoes", due=date(2015,2,5))
-    >>> t['due']
-    datetime.datetime(2015, 2, 5, 0, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> t['due'] = date(2015,2,6,15,15,15)
-    >>> t['due']
-    datetime.datetime(2015, 2, 6, 15, 15, 15, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-
-However, since timezone-aware and timezone-naive datetimes are not comparable
-in Python, this can cause some unexpected behaviour:
-
-    >>> from datetime import datetime
-    >>> now = datetime.now()
-    >>> t = Task(tw, description="take out the trash now")
-    >>> t['due'] = now
-    >>> now
-    datetime.datetime(2015, 2, 1, 19, 44, 4, 770001)
-    >>> t['due']
-    datetime.datetime(2015, 2, 1, 19, 44, 4, 770001, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> t['due'] == now
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-      TypeError: can't compare offset-naive and offset-aware datetimes
-
-If you want to compare datetime aware value with datetime naive value, you need
-to localize the naive value first:
-
-    >>> from datetime import datetime
-    >>> now = datetime.now().astimezone()
-    >>> t['due'] = now
-    >>> now
-    datetime.datetime(2015, 2, 1, 19, 44, 4, 770001, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> t['due'] == now
-    True
-
-Also, note that it does not matter whether the timezone aware datetime objects
-are set in the same timezone:
-
-    >>> import zoneinfo
-    >>> t['due']
-    datetime.datetime(2015, 2, 1, 19, 44, 4, 770001, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> now.astimezone(zoneinfo.ZoneInfo('UTC'))
-    datetime.datetime(2015, 2, 1, 18, 44, 4, 770001, tzinfo=<UTC>)
-    >>> t['due'] == now.astimezone(zoneinfo.ZoneInfo('UTC'))
-    True
-
-*Note*: Following behaviour is available only for TaskWarrior >= 2.4.0.
-
-There is a third approach to setting up date time values, which leverages
-the 'task calc' command. You can simply set any datetime attribute to
-any string that contains an acceptable TaskWarrior-formatted time expression::
-
-    $ task calc now + 1d
-    2015-07-17T21:17:54
-
-This syntax can be leveraged in the python interpreter as follows::
-
-    >>> t['due'] = "now + 1d"
-    >>> t['due']
-    datetime.datetime(2015, 7, 17, 21, 19, 31, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)
-
-It can be easily seen that the string with TaskWarrior-formatted time expression
-is automatically converted to native datetime in the local time zone.
-
-For the list of acceptable formats and keywords, please consult:
-
-* http://taskwarrior.org/docs/dates.html
-* http://taskwarrior.org/docs/named_dates.html
-
-However, as each such assignment involves call to 'task calc' for conversion,
-it might cause some performance issues when assigning strings to datetime
-attributes repeatedly, in a automated manner.
-
-Working with annotations
-------------------------
-
-Annotations of the tasks are represented in tasklib by ``TaskAnnotation`` objects. These
-are much like ``Task`` objects, albeit very simplified.
-
-    >>> annotated_task = tw.tasks.get(description='Annotated task')
-    >>> annotated_task['annotations']
-    [Yeah, I am annotated!]
-
-Annotations have only defined ``entry`` and ``description`` values::
-
-    >>> annotation = annotated_task['annotations'][0]
-    >>> annotation['entry']
-    datetime.datetime(2015, 1, 3, 21, 13, 55, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
-    >>> annotation['description']
-    u'Yeah, I am annotated!'
-
-To add a annotation to a Task, use ``add_annotation()``::
-
-    >>> task = Task(tw, description="new task")
-    >>> task.add_annotation("we can annotate any task")
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-        File "build/bdist.linux-x86_64/egg/tasklib/task.py", line 355, in add_annotation
-    tasklib.task.NotSaved: Task needs to be saved to add annotation
-
-However, Task needs to be saved before you can add a annotation to it::
-
-    >>> task.save()
-    >>> task.add_annotation("we can annotate saved tasks")
-    >>> task['annotations']
-    [we can annotate saved tasks]
-
-To remove the annotation, pass its description to ``remove_annotation()`` method::
-
-    >>> task.remove_annotation("we can annotate saved tasks")
-
-Alternatively, you can pass the ``TaskAnnotation`` object itself::
-
-    >>> task.remove_annotation(task['annotations'][0])
-
-
-Running custom commands
------------------------
-
-To run a custom commands, use ``execute_command()`` method of ``TaskWarrior`` object::
-
-    >>> tw = TaskWarrior()
-    >>> tw.execute_command(['log', 'Finish high school.'])
-    [u'Logged task.']
-
-You can use ``config_override`` keyword argument to specify a dictionary of configuration overrides::
-
-    >>> tw.execute_command(['3', 'done'], config_override={'gc': 'off'}) # Will mark 3 as completed and it will retain its ID
-
-
-Additionally, you can use ``return_all=True`` flag, which returns
-``(stdout, sterr, return_code)`` triplet, and ``allow_failure=False``, which will
-prevent tasklib from raising an exception if the task binary returned non-zero
-return code::
-
-    >>> tw.execute_command(['invalidcommand'], allow_failure=False, return_all=True)
-    ([u''],
-     [u'Using alternate .taskrc file /home/tbabej/.taskrc',
-      u"[task next rc:/home/tbabej/.taskrc rc.recurrence.confirmation=no rc.json.array=off rc.confirmation=no rc.bulk=0 rc.dependency.confirmation=no description ~ 'invalidcommand']",
-      u'Configuration override rc.recurrence.confirmation:no',
-      u'Configuration override rc.json.array:off',
-      u'Configuration override rc.confirmation:no',
-      u'Configuration override rc.bulk:0',
-      u'Configuration override rc.dependency.confirmation:no',
-      u'No matches.',
-      u'There are local changes.  Sync required.'],
-     1)
-
-
-Setting custom configuration values
------------------------------------
-
-By default, TaskWarrior uses configuration values stored in your .taskrc.
-To see what configuration value overrides are passed to each executed
-task command, have a peek into ``overrides`` attribute of ``TaskWarrior`` object::
-
-    >>> tw.overrides
-    {'confirmation': 'no', 'data.location': '/home/tbabej/.task'}
-
-To pass your own configuration overrides, you just need to update this dictionary::
-
-    >>> tw.overrides.update({'hooks': 'off'})  # tasklib will not trigger hooks
-
-Creating hook scripts
----------------------
-
-From version 2.4.0, TaskWarrior has support for hook scripts. Tasklib provides
-some very useful helpers to write those. With tasklib, writing these becomes
-a breeze::
-
-    #!/usr/bin/python
-
-    from tasklib.task import Task
-    task = Task.from_input()
-    # ... <custom logic>
-    print task.export_data()
-
-For example, plugin which would assign the priority "H" to any task containing
-three exclamation marks in the description, would go like this::
-
-    #!/usr/bin/python
-
-    from tasklib.task import Task
-    task = Task.from_input()
-
-    if "!!!" in task['description']:
-        task['priority'] = "H"
-
-    print task.export_data()
-
-Tasklib can automatically detect whether it's running in the ``on-modify`` event,
-which provides more input than ``on-add`` event and reads the data accordingly.
-
-This means the example above works both for ``on-add`` and ``on-modify`` events!
-
-Consenquently, you can create just one hook file for both ``on-add`` and
-``on-modify`` events, and you just need to create a symlink for the other one.
-This removes the need for maintaining two copies of the same code base and/or
-boilerplate code.
-
-In ``on-modify`` events, tasklib loads both the original version and the modified
-version of the task to the returned ``Task`` object. To access the original data
-(in read-only manner), use ``original`` dict-like attribute:
-
-    >>> t = Task.from_input()
-    >>> t['description']
-    "Modified description"
-    >>> t.original['description']
-    "Original description"
-
-Working with UDAs
------------------
-
-Since TaskWarrior does read your .taskrc, you need not to define any UDAs
-in the TaskWarrior's config dictionary, as described above. Suppose we have
-a estimate UDA in the .taskrc::
-
-    uda.estimate.type = numeric
-
-We can simply filter and create tasks using the estimate UDA out of the box::
-
-    >>> tw = TaskWarrior()
-    >>> task = Task(tw, description="Long task", estimate=1000)
-    >>> task.save()
-    >>> task['id']
-    1
-
-This is saved as UDA in the TaskWarrior::
-
-    $ task 1 export
-    {"id":1,"description":"Long task","estimate":1000, ...}
-
-We can also speficy UDAs as arguments in the TaskFilter::
-
-    >>> tw.tasks.filter(estimate=1000)
-    Long task
-
-Syncing
--------
-
-If you have configured the required configuration variables in your .taskrc,
-syncing is as easy as::
-
-    >>> tw = TaskWarrior()
-    >>> tw.execute_command(['sync'])
-
-If you want to use non-standard server/credentials, you'll need to provide configuration
-overrides to the ``TaskWarrior`` instance. Update the ``config`` dictionary with the
-values you desire to override, and then we can run the sync command using
-the ``execute_command()`` method::
-
-    >>> tw = TaskWarrior()
-    >>> sync_config = {
-    ...     'taskd.certificate': '/home/tbabej/.task/tbabej.cert.pem',
-    ...     'taskd.credentials': 'Public/tbabej/34af54de-3cb2-4d3d-82be-33ddb8fd3e66',
-    ...     'taskd.server': 'task.server.com:53589',
-    ...     'taskd.ca': '/home/tbabej/.task/ca.cert.pem',
-    ...     'taskd.trust': 'ignore hostname'}
-    >>> tw.config.update(sync_config)
-    >>> tw.execute_command(['sync'])
-
-
-.. _taskwarrior: http://taskwarrior.org
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/tasklib.egg-info/PKG-INFO b/tasklib.egg-info/PKG-INFO
new file mode 100644
index 0000000..491d642
--- /dev/null
+++ b/tasklib.egg-info/PKG-INFO
@@ -0,0 +1,80 @@
+Metadata-Version: 2.1
+Name: tasklib
+Version: 2.5.1
+Summary: Official Taskwarrior library for Python
+Home-page: https://github.com/GothenburgBitFactory/tasklib
+Download-URL: https://github.com/GothenburgBitFactory/tasklib/downloads
+Author: GothenburgBitFactory
+Author-email: support@gothenburgbitfactory.org
+License: BSD
+Classifier: Development Status :: 6 - Mature
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Information Technology
+Classifier: Intended Audience :: System Administrators
+Classifier: Operating System :: OS Independent
+License-File: LICENSE
+License-File: AUTHORS
+
+tasklib
+=======
+
+.. image:: https://travis-ci.org/robgolding/tasklib.png?branch=develop
+    :target: http://travis-ci.org/robgolding/tasklib
+
+.. image:: https://coveralls.io/repos/robgolding/tasklib/badge.png?branch=develop
+    :target: https://coveralls.io/r/robgolding/tasklib?branch=develop
+
+tasklib is a Python library for interacting with taskwarrior_ databases, using
+a queryset API similar to that of Django's ORM.
+
+Requirements
+------------
+
+* Python 3.5 or above
+* taskwarrior_ v2.4.x or above.
+
+Older versions of taskwarrior are untested and may not work.
+
+Installation
+------------
+
+Install via pip::
+
+    pip install tasklib
+
+Usage
+-----
+
+tasklib has a similar API to that of Django's ORM::
+
+    >>> from tasklib import TaskWarrior
+
+    >>> tw = TaskWarrior('~/.task')
+    >>> tasks = tw.tasks.pending()
+    >>> tasks
+    ['Tidy the house', 'Learn German']
+    >>> tasks.filter(tags__contain='chores')
+    ['Tidy the house']
+    >>> type(tasks[0])
+    <class 'tasklib.task.Task'>
+    >>> tasks[0].done()
+    >>> tasks = tw.tasks.pending()
+    >>> tasks
+    ['Learn German']
+    >>> tasks[0]['tags'] = ['languages']
+    >>> tasks[0].save()
+
+For more advanced usage, see the documentation_.
+
+.. _taskwarrior: http://taskwarrior.org
+.. _documentation: http://tasklib.readthedocs.org/en/latest/
diff --git a/tasklib.egg-info/SOURCES.txt b/tasklib.egg-info/SOURCES.txt
new file mode 100644
index 0000000..6c88440
--- /dev/null
+++ b/tasklib.egg-info/SOURCES.txt
@@ -0,0 +1,17 @@
+AUTHORS
+LICENSE
+MANIFEST.in
+README.rst
+setup.py
+tasklib/__init__.py
+tasklib/backends.py
+tasklib/filters.py
+tasklib/lazy.py
+tasklib/serializing.py
+tasklib/task.py
+tasklib/tests.py
+tasklib.egg-info/PKG-INFO
+tasklib.egg-info/SOURCES.txt
+tasklib.egg-info/dependency_links.txt
+tasklib.egg-info/requires.txt
+tasklib.egg-info/top_level.txt
\ No newline at end of file
diff --git a/tasklib.egg-info/dependency_links.txt b/tasklib.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/tasklib.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/tasklib.egg-info/requires.txt b/tasklib.egg-info/requires.txt
new file mode 100644
index 0000000..47235d6
--- /dev/null
+++ b/tasklib.egg-info/requires.txt
@@ -0,0 +1,3 @@
+
+[:python_version < "3.9"]
+backports.zoneinfo
diff --git a/tasklib.egg-info/top_level.txt b/tasklib.egg-info/top_level.txt
new file mode 100644
index 0000000..9c0646c
--- /dev/null
+++ b/tasklib.egg-info/top_level.txt
@@ -0,0 +1 @@
+tasklib

Debdiff

File lists identical (after any substitutions)

No differences were encountered in the control files

More details

Full run details