.. sidebar:: |badge-github| |badge-docs|
|badge-python|
|badge-pypi|
|badge-wheel|
|badge-contributors|
|badge-license|
########################################################
🤯 Countdoom: a Doomsday Clock client 🕚 |badge-twitter|
########################################################
`Python package <https://pypi.org/project/countdoom/>`__ to fetch and digest the
current `Doomsday Clock`_ world threat assessment from `TheBulletin.org
<https://thebulletin.org/>`__.
Free software released under `MIT License`_, with source code available on
`GitHub`_, Python package distributed on `PyPI`_, and documentation hosted on
`Read the Docs`_.
**************************************************************************************
Features |badge-codecov| |badge-codeclimate-maintain| |badge-codefactor| |badge-black|
**************************************************************************************
* Fetches the current `Doomsday Clock`_ value from the `Bulletin of the Atomic
Scientists`_.
* Converts the Doomsday Clock sentence into:
* countdown seconds ``60``
* countdown minutes ``1``
* clock ``11:59``
* time ``23:59:00``
* Offers a command-line interface.
* Uses `Async IO`_ for efficient Python integration.
.. figure:: https://github.com/renemarc/countdoom/blob/master/docs/screenshot.png?raw=true
:align: center
:alt: Command-line interface output
:figclass: align-center
*Countdoom: a Doomsday Clock client.*
.. |badge-black| image:: https://img.shields.io/badge/code%20style-black-000000.svg?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xNSwxMC41VjlBMiwyIDAgMCwwIDEzLDdIOVYxN0gxM0EyLDIgMCAwLDAgMTUsMTVWMTMuNUMxNSwxMi43IDE0LjMsMTIgMTMuNSwxMkMxNC4zLDEyIDE1LDExLjMgMTUsMTAuNU0xMywxNUgxMVYxM0gxM1YxNU0xMywxMUgxMVY5SDEzVjExWiIgLz4KPC9zdmc+&cacheSeconds=86400
:target: https://black.readthedocs.io/
:alt: Code style: black
.. |badge-codeclimate-maintain| image:: https://img.shields.io/codeclimate/maintainability/renemarc/countdoom.svg?logo=code-climate&cacheSeconds=300
:target: https://codeclimate.com/github/renemarc/countdoom
:alt: Code Climate maintainability
.. |badge-codecov| image:: https://img.shields.io/codecov/c/github/renemarc/countdoom?logo=codecov&logoColor=white&cacheSeconds=300
:target: https://codecov.io/gh/renemarc/countdoom
:alt: CodeCov coverage
.. |badge-codefactor| image:: https://img.shields.io/codefactor/grade/github/renemarc/countdoom?logo=codefactor&logoColor=white&cacheSeconds=300
:target: https://www.codefactor.io/repository/github/renemarc/countdoom
:alt: CodeFactor rating
.. |badge-contributors| image:: https://img.shields.io/badge/all_contributors-welcome-orange.svg?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik0xNiAxN1YxOUgyVjE3UzIgMTMgOSAxMyAxNiAxNyAxNiAxN00xMi41IDcuNUEzLjUgMy41IDAgMSAwIDkgMTFBMy41IDMuNSAwIDAgMCAxMi41IDcuNU0xNS45NCAxM0E1LjMyIDUuMzIgMCAwIDEgMTggMTdWMTlIMjJWMTdTMjIgMTMuMzcgMTUuOTQgMTNNMTUgNEEzLjM5IDMuMzkgMCAwIDAgMTMuMDcgNC41OUE1IDUgMCAwIDEgMTMuMDcgMTAuNDFBMy4zOSAzLjM5IDAgMCAwIDE1IDExQTMuNSAzLjUgMCAwIDAgMTUgNFoiIC8+Cjwvc3ZnPg==&cacheSeconds=21600
:target: https://countdoom.readthedocs.io/en/latest/contributing.html
:alt: All Contributors
.. |badge-docs| image:: https://img.shields.io/badge/-Read_the_Docs-blue?logo=read-the-docs&logoColor=white&cacheSeconds=86400
:target: `Read the Docs`_
:alt: Documentation at Read The Docs
.. |badge-github| image:: https://img.shields.io/badge/-Fork_me_on_GitHub-grey?logo=github&cacheSeconds=86400
:target: `GitHub`_
:alt: Fork me on GitHub
.. |badge-license| image:: https://img.shields.io/github/license/renemarc/countdoom.svg?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE3LjgsMjBDMTcuNCwyMS4yIDE2LjMsMjIgMTUsMjJINUMzLjMsMjIgMiwyMC43IDIsMTlWMThINUwxNC4yLDE4QzE0LjYsMTkuMiAxNS43LDIwIDE3LDIwSDE3LjhNMTksMkMyMC43LDIgMjIsMy4zIDIyLDVWNkgyMFY1QzIwLDQuNCAxOS42LDQgMTksNEMxOC40LDQgMTgsNC40IDE4LDVWMThIMTdDMTYuNCwxOCAxNiwxNy42IDE2LDE3VjE2SDVWNUM1LDMuMyA2LjMsMiA4LDJIMTlNOCw2VjhIMTVWNkg4TTgsMTBWMTJIMTRWMTBIOFoiIGZpbGw9IiNmZmZmZmYiIC8+PC9zdmc+Cg==&cacheSeconds=86400
:target: `MIT License`_
:alt: License
.. |badge-pypi| image:: https://img.shields.io/pypi/v/countdoom.svg?logo=pypi&logoColor=white&cacheSeconds=21600
:target: `PyPI`_
:alt: Python Package Index
.. |badge-python| image:: https://img.shields.io/pypi/pyversions/countdoom.svg?logo=python&logoColor=White&cacheSeconds=21600
:target: https://pypi.python.org/pypi/countdoom
:alt: Python Versions
.. |badge-twitter| image:: https://img.shields.io/twitter/url/https/github.com/renemarc/countdoom.svg?style=social&cacheSeconds=86400
:target: https://twitter.com/intent/tweet?text=Countdoom%3A%20a%20%23DoomsdayClock%20client%20package%20for%20%23Python%21&via=renemarc&hashtags=Doomsday,BulletinAtomic
:alt: Twitter
.. |badge-wheel| image:: https://img.shields.io/pypi/wheel/countdoom.svg?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik0xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJBMTAsMTAgMCAwLDAgMTIsMk0xMiw5QTMsMyAwIDAsMSAxNSwxMkEzLDMgMCAwLDEgMTIsMTVBMywzIDAgMCwxIDksMTJBMywzIDAgMCwxIDEyLDlaIiAvPgo8L3N2Zz4=&cacheSeconds=86400
:target: https://pypi.org/project/countdoom/#files
:alt: Python wheel
.. _Async IO: https://docs.python.org/3/library/asyncio.html
.. _Bulletin of the Atomic Scientists: https://thebulletin.org/
.. _Doomsday Clock: https://thebulletin.org/doomsday-clock/
.. _GitHub: https://github.com/renemarc/countdoom/
.. _MIT License: https://github.com/renemarc/countdoom/blob/master/LICENSE
.. _PyPI: https://pypi.org/project/countdoom/
.. _Read the Docs: https://countdoom.readthedocs.io/
******************************************
Changelog |badge-changelog| |badge-semver|
******************************************
All notable changes to **Countdoom** will be documented in this list. The
format is based on `Keep a Changelog`_, and this project adheres to
`Semantic Versioning`_.
`Unreleased`_ |badge-commits-since-release|
===========================================
*No documented unreleased changes*
`v0.2.1`_ — 2020-03-07
======================
Added
-----
- `Code of Conduct`_ based on `Contributor Covenant`_.
- Continuous deployment to PyPI when new versions are pushed to the repo.
Fixed
-----
- Spelling, links and images in documentation.
.. _Code of Conduct: https://github.com/renemarc/countdoom/blob/master/CODE_OF_CONDUCT.md
.. _Contributor Covenant: https://www.contributor-covenant.org/version/2/0/code_of_conduct/
`v0.2.0`_ — 2020-03-03
======================
Alpha release. Since the `Doomsday Clock
<https://thebulletin.org/doomsday-clock/>`__ has (…unfortunately 😩) started
counting in seconds for the first time since 1947, the code was adapted to also
handle sub-minute values.
Added
-----
- ``minutes`` as an output format option and in returned data set.
- Repo-specific `Markdown README file`_.
- Documentation at `Read The Docs`_.
- Pull Request template.
- Support for `All Contributors`_ specifications and service app.
- Support for `Code Climate`_ code quality checker service.
- Support for `CodeCov`_ test coverage report analyzer service.
- Support for `DeepSource`_ code security checker service.
- Support for `Keep a Changelog`_ specifications.
- Support for `mypy`_ static type checker.
- Support for `Probot's Auto-Comment`_ response service app.
- Support for `Probot's helPR`_ issue labeler service app.
- Support for `Probot's No Response Info`_ issue closing service app.
- Support for `Probot's Request Info`_ issue validating service app.
- Support for `Probot's Stale Info`_ auto-closing service app.
- Support for `Probot's Welcome`_ greeting service app.
Changed
-------
- **BREAKING:** Return countdown in seconds instead of minutes.
- **BREAKING:** Rename project to **Countdoom**.
- Expand Tox test environments to include Python 3.5–3.8, Pypy3, formatter,
and linters.
- Expand test coverage to cover seconds to midnight.
- Improve type hints.
- Expand contributing guidelines.
- Improve install documentation.
- Move Asyncio loop handling from package ``__main__.py`` to ``cli.py``.
- Simplify support tools configuration files.
- Regroup dependencies listing to ``setup.py``.
- Add descriptive file headers and modelines.
- Split `Issue template`_ into *Bug Report*, *Feature Request*, *Questions and
Help*, and *Agile User Story*.
Fixed
-----
- Revise sentence extraction logic to include seconds to midnight.
Removed
-------
- Files ``requirements.txt`` and ``requirements_dev.txt`` (now in ``setup.py``).
- Support for `Pyup`_ dependency checker service.
.. _Markdown README file: https://github.com/renemarc/countdoom
.. _Read The Docs: https://countdoom.readthedocs.io/
.. _All Contributors: https://allcontributors.org/
.. _Code Climate: https://codeclimate.com/github/renemarc/countdoom
.. _CodeCov: https://codecov.io/gh/renemarc/countdoom
.. _DeepSource: https://deepsource.io/gh/renemarc/countdoom/
.. _mypy: http://mypy-lang.org
.. _Probot's Auto-Comment: https://probot.github.io/apps/auto-comment/
.. _Probot's helPR: https://probot.github.io/apps/helpr/
.. _Probot's No Response Info: https://probot.github.io/apps/no-response/
.. _Probot's Request Info: https://probot.github.io/apps/request-info/
.. _Probot's Stale Info: https://probot.github.io/apps/stale/
.. _Probot's Welcome: https://probot.github.io/apps/welcome/
.. _Issue template: https://github.com/renemarc/countdoom/issues/new/choose
`v0.1.0`_ — 2020-02-23
======================
Inital release.
Added
-----
- Extraction of minutes to midnight from `TheBulletin.org`_.
- Tests with `pytest`_.
- Command-line interface.
- Integration examples.
- Importable client module with `Asyncio`_ support.
- `Makefile`_ build assistant.
- Basic `Sphinx`_ documentation.
- `Badges`_ to README file.
- Support for `bandit`_ security issues checker.
- Support for `Black`_ code formatter.
- Support for `Coverage.py`_ unit tests measuring tool.
- Support for `EditorConfig`_ coding style config file.
- Support for `Flake8`_ coding style enforcer.
- Support for `isort`_ imports organizer.
- Support for `pip`_ dependencies manager.
- Support for `pre-commit`_ git hooks with linters, formatters, and validators.
- Support for `Pylint`_ code analyzer.
- Support for `Pyup`_ dependency checker service.
- Support for `Tox`_ automation integration.
- Support for `Travis-CI`_ continuous integration service.
.. _Asyncio: https://docs.python.org/3/library/asyncio.html
.. _Badges: https://shields.io/
.. _bandit: https://bandit.readthedocs.io/
.. _Black: https://black.readthedocs.io/
.. _Coverage.py: https://coverage.readthedocs.io/
.. _EditorConfig: https://editorconfig.org/
.. _Flake8: https://flake8.pycqa.org/
.. _isort: https://github.com/timothycrosley/isort
.. _Keep a Changelog: https://keepachangelog.com/en/1.0.0/
.. _Makefile: https://www.gnu.org/software/make/manual/make.html
.. _pip: https://pip.pypa.io/
.. _pre-commit: https://pre-commit.com/
.. _Pylint: https://www.pylint.org/
.. _pytest: https://docs.pytest.org/
.. _Pyup: https://pyup.io/
.. _Semantic Versioning: https://semver.org/spec/v2.0.0.html
.. _Sphinx: https://www.sphinx-doc.org/
.. _TheBulletin.org: https://thebulletin.org
.. _Tox: https://tox.readthedocs.io/
.. _Travis-CI: https://travis-ci.com/renemarc/countdoom
.. _Unreleased: https://github.com/renemarc/countdoom/compare/v0.2.1...master
.. _v0.2.1: https://github.com/renemarc/countdoom/releases/tag/v0.2.1
.. _v0.2.0: https://github.com/renemarc/countdoom/releases/tag/v0.2.0
.. _v0.1.0: https://github.com/renemarc/countdoom/releases/tag/v0.1.0
.. |badge-changelog| image:: https://img.shields.io/badge/keep%20a%20changelog-v1.0.0-%23E05735?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik01LDE1LjVMNy41LDIwSDIuNUw1LDE1LjVNOSwxOUgyMVYxN0g5VjE5TTUsOS41TDcuNSwxNEgyLjVMNSw5LjVNOSwxM0gyMVYxMUg5VjEzTTUsMy41TDcuNSw4SDIuNUw1LDMuNU05LDdIMjFWNUg5VjdaIiAvPgo8L3N2Zz4=&cacheSeconds=86400
:target: `Keep a Changelog`_
:alt: Keep a Changelog v1.0.0
.. |badge-commits-since-release| image:: https://img.shields.io/github/commits-since/renemarc/countdoom/latest.svg?label=commits%20to%20be%20deployed&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KCTxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik0xMy41LDhIMTJWMTNMMTYuMjgsMTUuNTRMMTcsMTQuMzNMMTMuNSwxMi4yNVY4TTEzLDNBOSw5IDAgMCwwIDQsMTJIMUw0Ljk2LDE2LjAzTDksMTJINkE3LDcgMCAwLDEgMTMsNUE3LDcgMCAwLDEgMjAsMTJBNyw3IDAgMCwxIDEzLDE5QzExLjA3LDE5IDkuMzIsMTguMjEgOC4wNiwxNi45NEw2LjY0LDE4LjM2QzguMjcsMjAgMTAuNSwyMSAxMywyMUE5LDkgMCAwLDAgMjIsMTJBOSw5IDAgMCwwIDEzLDMiIC8+Cjwvc3ZnPgo=&cacheSeconds=300
:target: `Unreleased`_
:alt: Commits to be deployed
.. |badge-semver| image:: https://img.shields.io/badge/semver-v2.0.0-black?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Ik0xNC42LDE2LjZMMTkuMiwxMkwxNC42LDcuNEwxNiw2TDIyLDEyTDE2LDE4TDE0LjYsMTYuNk05LjQsMTYuNkw0LjgsMTJMOS40LDcuNEw4LDZMMiwxMkw4LDE4TDkuNCwxNi42WiIgLz4KPC9zdmc+&cacheSeconds=86400
:target: `Semantic Versioning`_
:alt: Semantic Versioning v2.0.0