Chris Trenthem commited on
Commit
b280ddf
·
2 Parent(s): 91e75a3 edeaf5b

Merge branch 'master' of https://github.com/nidhaloff/deep-translator

Browse files
.github/workflows/build.yml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: build
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ python-version: ["3.7", "3.8", "3.9"]
11
+
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Python ${{ matrix.python-version }}
15
+ uses: actions/[email protected]
16
+ with:
17
+ python-version: ${{ matrix.python-version }}
18
+
19
+ - name: Install poetry
20
+ run: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
21
+
22
+ - name: Set up cache
23
+ uses: actions/[email protected]
24
+ with:
25
+ path: .venv
26
+ key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }}
27
+ - name: Install dependencies
28
+ run: |
29
+ source "$HOME/.poetry/env"
30
+ poetry config virtualenvs.in-project true
31
+ poetry install
32
+
33
+ - name: Run tests
34
+ run: |
35
+ source "$HOME/.poetry/env"
36
+ poetry run pytest
.readthedocs.yaml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # File: .readthedocs.yaml
3
+
4
+ version: 2
5
+
6
+ # Build from the docs/ directory with Sphinx
7
+ sphinx:
8
+ configuration: docs/conf.py
9
+
10
+ # Explicitly set the version of Python and its requirements
11
+ python:
12
+ version: 3.7
13
+ install:
14
+ - requirements: docs/requirements_docs.txt
.travis.yml DELETED
@@ -1,34 +0,0 @@
1
- # Config file for automatic testing at travis-ci.com
2
-
3
- language: python
4
- python:
5
- - 3.8
6
- - 3.7
7
- # - 3.6
8
- #- 3.5
9
- #- 3.4
10
- before_install:
11
- - "pip install -U pip"
12
- - "python setup.py install"
13
-
14
- dist: xenial
15
- # Command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
16
- install: pip install -U tox-travis
17
-
18
- # Command to run tests, e.g. python setup.py test
19
- script: tox
20
-
21
- # Assuming you have installed the travis-ci CLI tool, after you
22
- # create the Github repo and add it to Travis, run the
23
- # following command to finish PyPI deployment setup:
24
- # $ travis encrypt --add deploy.password
25
- deploy:
26
- provider: pypi
27
- distributions: sdist bdist_wheel
28
- user: nidhaloff
29
- password:
30
- secure: __token__
31
- on:
32
- tags: true
33
- repo: nidhaloff/deep_translator
34
- python: 3.7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
MANIFEST.in DELETED
@@ -1,11 +0,0 @@
1
- include AUTHORS.rst
2
- include CONTRIBUTING.rst
3
- include HISTORY.rst
4
- include LICENSE
5
- include README.rst
6
-
7
- recursive-include tests *
8
- recursive-exclude * __pycache__
9
- recursive-exclude * *.py[co]
10
-
11
- recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif
 
 
 
 
 
 
 
 
 
 
 
 
deep_translator/__init__.py CHANGED
@@ -17,13 +17,15 @@ __author__ = """Nidhal Baccouri"""
17
  __email__ = '[email protected]'
18
  __version__ = '1.5.0'
19
 
20
- __all__ = [GoogleTranslator,
21
- PonsTranslator,
22
- LingueeTranslator,
23
- MyMemoryTranslator,
24
- YandexTranslator,
25
- MicrosoftTranslator,
26
- QCRI,
27
- DeepL,
28
- single_detection,
29
- batch_detection]
 
 
 
17
  __email__ = '[email protected]'
18
  __version__ = '1.5.0'
19
 
20
+ __all__ = [
21
+ "GoogleTranslator",
22
+ "PonsTranslator",
23
+ "LingueeTranslator",
24
+ "MyMemoryTranslator",
25
+ "YandexTranslator",
26
+ "MicrosoftTranslator",
27
+ "QCRI",
28
+ "DeepL",
29
+ "single_detection",
30
+ "batch_detection"
31
+ ]
deep_translator/deepl.py CHANGED
@@ -67,6 +67,10 @@ class DeepL(object):
67
  """
68
  return [self.translate(text, **kwargs) for text in batch]
69
 
 
 
 
 
70
  def _is_language_supported(self, lang, **kwargs):
71
  # The language is supported when is in the dicionary.
72
  return lang == 'auto' or lang in self._languages.keys() or lang in self._languages.values()
 
67
  """
68
  return [self.translate(text, **kwargs) for text in batch]
69
 
70
+ @staticmethod
71
+ def get_supported_languages(as_dict=False, **kwargs):
72
+ return [*DeepL._languages.keys()] if not as_dict else DeepL._languages
73
+
74
  def _is_language_supported(self, lang, **kwargs):
75
  # The language is supported when is in the dicionary.
76
  return lang == 'auto' or lang in self._languages.keys() or lang in self._languages.values()
deep_translator/main.py CHANGED
@@ -22,7 +22,7 @@ def cli():
22
  @click.option("--target", "-tgt", required=True, type=str, help="target language to translate to")
23
  @click.option("--text", "-txt", type=str,required = True,prompt="Enter the text you want to translate",help="text you want to translate")
24
  @click.option("--api-key",type=str,help="required for DeepL, QCRI, Yandex, Microsoft and Papago translators")
25
- def translate(translator, source, target, text, api_key, languages):
26
  """
27
  Use TRANSLATOR to translate source material into another language.
28
  \f
 
22
  @click.option("--target", "-tgt", required=True, type=str, help="target language to translate to")
23
  @click.option("--text", "-txt", type=str,required = True,prompt="Enter the text you want to translate",help="text you want to translate")
24
  @click.option("--api-key",type=str,help="required for DeepL, QCRI, Yandex, Microsoft and Papago translators")
25
+ def translate(translator, source, target, text, api_key):
26
  """
27
  Use TRANSLATOR to translate source material into another language.
28
  \f
deep_translator/qcri.py CHANGED
@@ -38,12 +38,13 @@ class QCRI(object):
38
  except Exception as e:
39
  raise e
40
 
41
- def get_supported_languages(self, **kwargs):
 
42
  # Have no use for this as the format is not what we need
43
  # Save this for whenever
44
- pairs = self._get("get_languages")
45
  # Using a this one instead
46
- return QCRI_LANGUAGE_TO_CODE
47
 
48
  @property
49
  def languages(self):
 
38
  except Exception as e:
39
  raise e
40
 
41
+ @staticmethod
42
+ def get_supported_languages(as_dict=False, **kwargs):
43
  # Have no use for this as the format is not what we need
44
  # Save this for whenever
45
+ # pairs = self._get("get_languages")
46
  # Using a this one instead
47
+ return [*QCRI_LANGUAGE_TO_CODE.keys()] if not as_dict else QCRI_LANGUAGE_TO_CODE
48
 
49
  @property
50
  def languages(self):
deep_translator/tests/test_cli.py CHANGED
@@ -3,20 +3,28 @@
3
  """Tests for the CLI interface."""
4
 
5
  from click.testing import CliRunner
6
- from deep_translator import main
7
 
8
- def results_test():
9
- runner = CliRunner()
10
- result = runner.invoke(main.translate, [ 'google', 'auto', 'en', '좋은'])
11
- assert result.exit_code == 0
12
- assert result == 'good'
13
-
14
- api_error = runner.invoke(main.translate, ['microsoft','auto','en','Zwei minimale Dellchen auf der Rückseite.'])
15
- assert api_error.exit_code == 0
16
- assert api_error == "This translator requires an api key provided through --api-key"
17
 
18
- language_list_test = runner.invoke(main.languages, ['google'])
19
- assert language_list_test.exit_code == 0
 
 
 
20
 
21
- language_list_invalid_test = runner.invoke(main.languages, ['notValidTranslator'])
22
- assert language_list_invalid_test.exception == AttributeError
 
 
 
 
 
 
 
 
 
3
  """Tests for the CLI interface."""
4
 
5
  from click.testing import CliRunner
6
+ from deep_translator.main import cli
7
 
8
+ class TestClass:
9
+ def test_translate(self):
10
+ runner = CliRunner()
11
+ result = runner.invoke(cli, ['translate', 'google', '-src=auto', '-tgt=en', '-txt=좋은'])
12
+ assert 'good' in result.output
13
+ assert result.exit_code == 0
 
 
 
14
 
15
+ def test_api_key_error(self):
16
+ runner = CliRunner()
17
+ result = runner.invoke(cli, ['translate', 'microsoft','-src=auto','-tgt=en','-txt=\'Zwei minimale Dellchen auf der Rückseite.\''])
18
+ assert "This translator requires an api key provided through --api-key" in result.output
19
+ assert result.exit_code == 1
20
 
21
+ def test_language_languages(self):
22
+ runner = CliRunner()
23
+ result = runner.invoke(cli, ['languages', 'google'])
24
+ assert result.exit_code == 0
25
+
26
+ def test_invalid_language_languages(self):
27
+ runner = CliRunner()
28
+ result = runner.invoke(cli, ['languages', 'notValidTranslator'])
29
+ assert 'The given translator is not supported.' in str(result.exception)
30
+ assert result.exit_code == 1
deep_translator/yandex.py CHANGED
@@ -28,7 +28,14 @@ class YandexTranslator(object):
28
  "translate": "translate",
29
  }
30
 
31
- def get_supported_languages(self):
 
 
 
 
 
 
 
32
  return set(x.split("-")[0] for x in self.dirs)
33
 
34
  @property
 
28
  "translate": "translate",
29
  }
30
 
31
+ @staticmethod
32
+ def get_supported_languages(as_dict=False, **kwargs):
33
+ """ this method is just for consistency."""
34
+ return """ this method is just for consistency. You need to create an instance of yandex and access
35
+ supported languages using the languages property or call _get_supported_languages
36
+ """
37
+
38
+ def _get_supported_languages(self):
39
  return set(x.split("-")[0] for x in self.dirs)
40
 
41
  @property
docs/deep_translator.tests.rst ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ deep\_translator.tests package
2
+ ==============================
3
+
4
+ Submodules
5
+ ----------
6
+
7
+ deep\_translator.tests.test\_cli module
8
+ ---------------------------------------
9
+
10
+ .. automodule:: deep_translator.tests.test_cli
11
+ :members:
12
+ :undoc-members:
13
+ :show-inheritance:
14
+
15
+ deep\_translator.tests.test\_deepl module
16
+ -----------------------------------------
17
+
18
+ .. automodule:: deep_translator.tests.test_deepl
19
+ :members:
20
+ :undoc-members:
21
+ :show-inheritance:
22
+
23
+ deep\_translator.tests.test\_google\_trans module
24
+ -------------------------------------------------
25
+
26
+ .. automodule:: deep_translator.tests.test_google_trans
27
+ :members:
28
+ :undoc-members:
29
+ :show-inheritance:
30
+
31
+ deep\_translator.tests.test\_linguee module
32
+ -------------------------------------------
33
+
34
+ .. automodule:: deep_translator.tests.test_linguee
35
+ :members:
36
+ :undoc-members:
37
+ :show-inheritance:
38
+
39
+ deep\_translator.tests.test\_microsoft\_trans module
40
+ ----------------------------------------------------
41
+
42
+ .. automodule:: deep_translator.tests.test_microsoft_trans
43
+ :members:
44
+ :undoc-members:
45
+ :show-inheritance:
46
+
47
+ deep\_translator.tests.test\_mymemory module
48
+ --------------------------------------------
49
+
50
+ .. automodule:: deep_translator.tests.test_mymemory
51
+ :members:
52
+ :undoc-members:
53
+ :show-inheritance:
54
+
55
+ deep\_translator.tests.test\_pons module
56
+ ----------------------------------------
57
+
58
+ .. automodule:: deep_translator.tests.test_pons
59
+ :members:
60
+ :undoc-members:
61
+ :show-inheritance:
62
+
63
+ Module contents
64
+ ---------------
65
+
66
+ .. automodule:: deep_translator.tests
67
+ :members:
68
+ :undoc-members:
69
+ :show-inheritance:
docs/ja/README.rst CHANGED
@@ -88,9 +88,9 @@ Pythonを使用してテキストを別の言語に翻訳するタスクがあ
88
  * 異なる言語の異なる段落の翻訳を自動化する
89
  * コマンドラインから直接翻訳する(バージョン1.1.0以上)
90
 
91
- =============
92
  インストール方法
93
- =============
94
 
95
  ツールの安定版をインストールする方法です:
96
 
@@ -100,14 +100,15 @@ Pythonを使用してテキストを別の言語に翻訳するタスクがあ
100
 
101
  ソースからインストールを行いたい場合、ドキュメントを参照してください。
102
 
103
- =====
104
  使い方
105
- =====
106
 
107
  このセクションでは、このツールで様々な統合トランスレータを利用するデモを行います。このデモでは、google、pons、linguee、mymemoryの翻訳サービスを扱います(現時点)。将来的には、より多くの翻訳サービスを統合する予定です。
108
 
 
109
  インポート
110
- ========
111
 
112
  .. code-block:: python
113
 
@@ -119,7 +120,7 @@ Pythonを使用してテキストを別の言語に翻訳するタスクがあ
119
 
120
 
121
  サポートされている言語を確認する
122
- ==========================
123
 
124
  ポイント
125
 
@@ -295,9 +296,9 @@ deep_translatorの使用目的やpythonで翻訳をする方法を確認する
295
 
296
  https://medium.com/@nidhalbacc/how-to-translate-text-with-python-9d203139dcf5
297
 
298
- ===========================
299
- スマートフォンアプリ Translator++
300
- ===========================
301
 
302
  .. image:: ../../assets/app-icon.png
303
  :width: 100
@@ -340,9 +341,9 @@ Translator++はdeep_translatorパッケージがベースになっています
340
  :height: 300
341
  :alt: screenshot3
342
 
343
- ==========
344
  次のステップに進むためには
345
- ==========
346
 
347
  詳細は examples フォルダを確認してください。
348
  コントリビュートはいつでも歓迎しています。このパッケージが便利だと感じた方や使っている方がいたら、遠慮なくプルリクエストをしてフィードバックをください!
 
88
  * 異なる言語の異なる段落の翻訳を自動化する
89
  * コマンドラインから直接翻訳する(バージョン1.1.0以上)
90
 
91
+ ===============
92
  インストール方法
93
+ ===============
94
 
95
  ツールの安定版をインストールする方法です:
96
 
 
100
 
101
  ソースからインストールを行いたい場合、ドキュメントを参照してください。
102
 
103
+ =======
104
  使い方
105
+ =======
106
 
107
  このセクションでは、このツールで様々な統合トランスレータを利用するデモを行います。このデモでは、google、pons、linguee、mymemoryの翻訳サービスを扱います(現時点)。将来的には、より多くの翻訳サービスを統合する予定です。
108
 
109
+ ==========
110
  インポート
111
+ ==========
112
 
113
  .. code-block:: python
114
 
 
120
 
121
 
122
  サポートされている言語を確認する
123
+ ============================
124
 
125
  ポイント
126
 
 
296
 
297
  https://medium.com/@nidhalbacc/how-to-translate-text-with-python-9d203139dcf5
298
 
299
+ ===============================
300
+ スマートフォンアプリ Translator++
301
+ ===============================
302
 
303
  .. image:: ../../assets/app-icon.png
304
  :width: 100
 
341
  :height: 300
342
  :alt: screenshot3
343
 
344
+ =======================
345
  次のステップに進むためには
346
+ =======================
347
 
348
  詳細は examples フォルダを確認してください。
349
  コントリビュートはいつでも歓迎しています。このパッケージが便利だと感じた方や使っている方がいたら、遠慮なくプルリクエストをしてフィードバックをください!
docs/ja/contributing.rst DELETED
@@ -1,123 +0,0 @@
1
- .. highlight:: shell
2
-
3
- =======================
4
- コントリビュートする方法
5
- =======================
6
-
7
- このプロジェクトではあなたのコントリビュートを歓迎します!どんなに小さい貢献でも、コントリビューターとしてプロジェクトを支援することができます。
8
-
9
- 次の方法でコントリビュートすることができます。
10
-
11
- コントリビュートの種類
12
- ----------------------
13
-
14
- バグの報告
15
- ~~~~~~~~~~~
16
-
17
- もしバグを発見したらhttps://github.com/nidhaloff/deep_translator/issues でバクを報告してください。
18
-
19
- バグを報告する際にはトラブルシューティングしやすいように、以下の項目を含めて投稿するようにしてください。
20
-
21
- * バグの発生したOSの種類とOSバージョンの情報
22
- * ソフトウェアの設定などのローカル環境の情報
23
- * バグを再現するための詳細な手順
24
-
25
- バグの修正
26
- ~~~~~~~~~~~
27
-
28
- このリポジトリのイシューを見ることで、バグの情報を確認できます。
29
- "bug" と "help wanted"でタグ付けされているものは、誰でもバグを修正にしてコントリビュートすることができます。
30
-
31
- 追加機能の実装
32
- ~~~~~~~~~~~~~~~~~~
33
-
34
- このリポジトリのイシューを見ることで、実装待ちの機能が確認できます。
35
- "enhancement" と "help wanted"でタグ付けされているものは、誰でも実装してコントリビュートすることができます。
36
-
37
- ドキュメントの作成
38
- ~~~~~~~~~~~~~~~~~~~
39
-
40
- deep_translator は、deep_translator の公式ドキュメントの一部、docstrings、あるいはウェブ上のブログ記事や記事など、常により多くのドキュメントを求めています。
41
-
42
-
43
- 新しい機能の提案
44
- ~~~~~~~~~~~~~~~~~~
45
-
46
- 新しい提案をするには https://github.com/nidhaloff/deep_translator/issues に投稿してください。
47
-
48
- 新しい機能を提案するときには、以下の項目を留意してください:
49
-
50
- * 新しい機能の動作をできるだけ詳しく説明してください。
51
- * 実装しやすいように機能の規模は限定するようにしてください。
52
- * このプロジェクトがボランティアから成り立っていることと、コントリビュートを歓迎する精神を忘れないでください。
53
-
54
-
55
- 開発環境の構築
56
- ----------------
57
-
58
- コントリビュートの準備はできましたか?ここからは deep_translator の開発環境を構築する方法について説明します。
59
-
60
- 1. GitHub で deep_translator をフォークする.
61
- 2. フォークしたものをローカルリポジトリとしてクローンする。::
62
-
63
- $ git clone [email protected]:your_name_here/deep_translator.git
64
-
65
- 3. virtualenvの作成とインストールを行う。virtualenvwrapperがインストール済みとすると、以下のコマンドでローカルに開発環境を構築できる::
66
-
67
- $ mkvirtualenv deep_translator
68
- $ cd deep_translator /
69
- $ python setup.py develop
70
-
71
- 4. ローカルで開発を行うために新しいブランチを作成する::
72
-
73
- $ git checkout -b name-of-your-bugfix-or-feature
74
-
75
- これでローカルリポジトリに変更を加えることができるようになります。
76
-
77
- 5. 変更が終わったらflake8のコードチェックとテストを通過するようにする。この時、toxで複数バージョンのPythonで動作することを確認する::
78
-
79
- $ flake8 deep_translator tests
80
- $ python setup.py test or pytest
81
- $ tox
82
-
83
-   flake8とtoxのインストールは、virtualenvでpip installを行うことで可能です。
84
-
85
- 6. 変更をコミットし、自分のリモートリポジトリにプッシュする::
86
-
87
- $ git add .
88
- $ git commit -m "Your detailed description of your changes."
89
- $ git push origin name-of-your-bugfix-or-feature
90
-
91
- 7. GitHub からプルリクエストを送る.
92
-
93
- プルリクエストにあたって
94
- ----------------------------
95
-
96
- プルリクエストを送る前に以下のガイドラインに従っているか確認してください:
97
-
98
- 1. プルリクエストにテストが含まれている。
99
-
100
- 2. プルリクエストで機能が追加された場合、ドキュメントを更新する必要があります。新しい機能について関数内にdocstringで記述し、それに加えてリストREADME.rstのリストに追加してください。
101
-
102
- 3. プルリクエストによる変更はPython 3.5、3.6、3.7、3.8またはPyPyで動作することが望まれます。https://travisci.com/nidhaloff/deep_translator/pull_requests を確認し、サポートされている全てのPythonバージョンでテストを通過することを確認してください。
103
-
104
-
105
- ヒント
106
- ---------
107
-
108
- テストのサブセットを実行するには以下のコマンドが利用できます::
109
-
110
- $ pytest tests.test_deep_translator
111
-
112
-
113
- デプロイの方法
114
- ------------------
115
-
116
- メンテナンス担当者のためにデプロイの方法を記しておきます。まず、全ての変更がコミットされていることを確認してください。(HISTORY.rstのエントリを含む).
117
- 次に、以下のコマンドを実行します::
118
-
119
- $ bump2version patch # possible: major / minor / patch
120
- $ git push
121
- $ git push --tags
122
-
123
- Travisはテストを通過することを確認したら、PyPIにデプロイします。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
docs/ja/history.rst DELETED
@@ -1,20 +0,0 @@
1
- ==================
2
- 重要な歴史
3
- ==================
4
-
5
- -1.5.0は、合理化されたコマンドと多数のバグ修正により、cli機能を改善しました。
6
- -1.4.4 papagoのサポートの追加、opt paramsの追加、deepl無料APIの修正
7
- -1.4.3追加されたサポートdeepl無料API
8
- -1.4.2追加されたプロキシサポート
9
- -オランダ語の1.3.4バグ修正
10
- -1.3.3グーグル翻訳のバグを修正
11
-
12
- -1.2.5:DeepLトランスレータのサポートが追加されました
13
- -1.2.4:QCRIトランスレータのサポートが追加されました
14
- -1.2.1:yandexトランスレータのサポートが追加されました
15
- -1.1.9:リクエストのバグを修正
16
- -1.1.5:言語検出を追加
17
- -1.1.3:mymemoryのサポートが追加されました
18
- -1.0.4:橋のサポートが追加されました
19
- -1.0.2:lingueeのサポートが追加されました
20
- -1.0.0:googletranslateのサポートが追加されました
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
docs/ja/installation.rst CHANGED
@@ -1,8 +1,8 @@
1
  .. highlight:: shell
2
 
3
- ============
4
  インストール方法
5
- ============
6
 
7
 
8
  安定版
 
1
  .. highlight:: shell
2
 
3
+ ===============
4
  インストール方法
5
+ ===============
6
 
7
 
8
  安定版
docs/ja/usage.rst CHANGED
@@ -1,6 +1,6 @@
1
- =====
2
  使い方
3
- =====
4
 
5
  .. code-block:: python
6
 
 
1
+ =======
2
  使い方
3
+ =======
4
 
5
  .. code-block:: python
6
 
docs/other_lang.rst CHANGED
@@ -1,5 +1,5 @@
1
  Choose Languages
2
- ===============
3
 
4
  English
5
  --------------
 
1
  Choose Languages
2
+ =================
3
 
4
  English
5
  --------------
docs/requirements_docs.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ pip==20.2.2
2
+ bump2version==1.0.0
3
+ wheel==0.35.1
4
+ argh
5
+ toml
6
+ watchdog==0.10.3
7
+ flake8==3.8.3
8
+ coverage==5.2.1
9
+ Sphinx==3.2.1
10
+ twine==3.2.0
11
+ Click==7.1.2
12
+ pytest==6.0.1
13
+ pytest-runner==5.2
14
+ sphinx-copybutton==0.3.1
15
+ importlib-metadata==1.6.0
poetry.lock ADDED
@@ -0,0 +1,1010 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [[package]]
2
+ name = "alabaster"
3
+ version = "0.7.12"
4
+ description = "A configurable sidebar-enabled Sphinx theme"
5
+ category = "dev"
6
+ optional = false
7
+ python-versions = "*"
8
+
9
+ [[package]]
10
+ name = "atomicwrites"
11
+ version = "1.4.0"
12
+ description = "Atomic file writes."
13
+ category = "dev"
14
+ optional = false
15
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
16
+
17
+ [[package]]
18
+ name = "attrs"
19
+ version = "21.2.0"
20
+ description = "Classes Without Boilerplate"
21
+ category = "dev"
22
+ optional = false
23
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
24
+
25
+ [package.extras]
26
+ dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
27
+ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
28
+ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
29
+ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
30
+
31
+ [[package]]
32
+ name = "babel"
33
+ version = "2.9.1"
34
+ description = "Internationalization utilities"
35
+ category = "dev"
36
+ optional = false
37
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
38
+
39
+ [package.dependencies]
40
+ pytz = ">=2015.7"
41
+
42
+ [[package]]
43
+ name = "beautifulsoup4"
44
+ version = "4.9.3"
45
+ description = "Screen-scraping library"
46
+ category = "main"
47
+ optional = false
48
+ python-versions = "*"
49
+
50
+ [package.dependencies]
51
+ soupsieve = {version = ">1.2", markers = "python_version >= \"3.0\""}
52
+
53
+ [package.extras]
54
+ html5lib = ["html5lib"]
55
+ lxml = ["lxml"]
56
+
57
+ [[package]]
58
+ name = "bleach"
59
+ version = "3.3.1"
60
+ description = "An easy safelist-based HTML-sanitizing tool."
61
+ category = "dev"
62
+ optional = false
63
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
64
+
65
+ [package.dependencies]
66
+ packaging = "*"
67
+ six = ">=1.9.0"
68
+ webencodings = "*"
69
+
70
+ [[package]]
71
+ name = "certifi"
72
+ version = "2021.5.30"
73
+ description = "Python package for providing Mozilla's CA Bundle."
74
+ category = "main"
75
+ optional = false
76
+ python-versions = "*"
77
+
78
+ [[package]]
79
+ name = "cffi"
80
+ version = "1.14.6"
81
+ description = "Foreign Function Interface for Python calling C code."
82
+ category = "dev"
83
+ optional = false
84
+ python-versions = "*"
85
+
86
+ [package.dependencies]
87
+ pycparser = "*"
88
+
89
+ [[package]]
90
+ name = "charset-normalizer"
91
+ version = "2.0.3"
92
+ description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
93
+ category = "main"
94
+ optional = false
95
+ python-versions = ">=3.5.0"
96
+
97
+ [package.extras]
98
+ unicode_backport = ["unicodedata2"]
99
+
100
+ [[package]]
101
+ name = "click"
102
+ version = "8.0.1"
103
+ description = "Composable command line interface toolkit"
104
+ category = "main"
105
+ optional = false
106
+ python-versions = ">=3.6"
107
+
108
+ [package.dependencies]
109
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
110
+ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
111
+
112
+ [[package]]
113
+ name = "colorama"
114
+ version = "0.4.4"
115
+ description = "Cross-platform colored terminal text."
116
+ category = "main"
117
+ optional = false
118
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
119
+
120
+ [[package]]
121
+ name = "coverage"
122
+ version = "5.5"
123
+ description = "Code coverage measurement for Python"
124
+ category = "dev"
125
+ optional = false
126
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
127
+
128
+ [package.extras]
129
+ toml = ["toml"]
130
+
131
+ [[package]]
132
+ name = "cryptography"
133
+ version = "3.4.7"
134
+ description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
135
+ category = "dev"
136
+ optional = false
137
+ python-versions = ">=3.6"
138
+
139
+ [package.dependencies]
140
+ cffi = ">=1.12"
141
+
142
+ [package.extras]
143
+ docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
144
+ docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
145
+ pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
146
+ sdist = ["setuptools-rust (>=0.11.4)"]
147
+ ssh = ["bcrypt (>=3.1.5)"]
148
+ test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
149
+
150
+ [[package]]
151
+ name = "docutils"
152
+ version = "0.17.1"
153
+ description = "Docutils -- Python Documentation Utilities"
154
+ category = "dev"
155
+ optional = false
156
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
157
+
158
+ [[package]]
159
+ name = "idna"
160
+ version = "3.2"
161
+ description = "Internationalized Domain Names in Applications (IDNA)"
162
+ category = "main"
163
+ optional = false
164
+ python-versions = ">=3.5"
165
+
166
+ [[package]]
167
+ name = "imagesize"
168
+ version = "1.2.0"
169
+ description = "Getting image size from png/jpeg/jpeg2000/gif file"
170
+ category = "dev"
171
+ optional = false
172
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
173
+
174
+ [[package]]
175
+ name = "importlib-metadata"
176
+ version = "4.6.1"
177
+ description = "Read metadata from Python packages"
178
+ category = "main"
179
+ optional = false
180
+ python-versions = ">=3.6"
181
+
182
+ [package.dependencies]
183
+ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
184
+ zipp = ">=0.5"
185
+
186
+ [package.extras]
187
+ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
188
+ perf = ["ipython"]
189
+ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
190
+
191
+ [[package]]
192
+ name = "iniconfig"
193
+ version = "1.1.1"
194
+ description = "iniconfig: brain-dead simple config-ini parsing"
195
+ category = "dev"
196
+ optional = false
197
+ python-versions = "*"
198
+
199
+ [[package]]
200
+ name = "jeepney"
201
+ version = "0.7.0"
202
+ description = "Low-level, pure Python DBus protocol wrapper."
203
+ category = "dev"
204
+ optional = false
205
+ python-versions = ">=3.6"
206
+
207
+ [package.extras]
208
+ test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio"]
209
+ trio = ["trio", "async-generator"]
210
+
211
+ [[package]]
212
+ name = "jinja2"
213
+ version = "3.0.1"
214
+ description = "A very fast and expressive template engine."
215
+ category = "dev"
216
+ optional = false
217
+ python-versions = ">=3.6"
218
+
219
+ [package.dependencies]
220
+ MarkupSafe = ">=2.0"
221
+
222
+ [package.extras]
223
+ i18n = ["Babel (>=2.7)"]
224
+
225
+ [[package]]
226
+ name = "keyring"
227
+ version = "23.0.1"
228
+ description = "Store and access your passwords safely."
229
+ category = "dev"
230
+ optional = false
231
+ python-versions = ">=3.6"
232
+
233
+ [package.dependencies]
234
+ importlib-metadata = ">=3.6"
235
+ jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""}
236
+ pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""}
237
+ SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""}
238
+
239
+ [package.extras]
240
+ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
241
+ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
242
+
243
+ [[package]]
244
+ name = "markupsafe"
245
+ version = "2.0.1"
246
+ description = "Safely add untrusted strings to HTML/XML markup."
247
+ category = "dev"
248
+ optional = false
249
+ python-versions = ">=3.6"
250
+
251
+ [[package]]
252
+ name = "packaging"
253
+ version = "21.0"
254
+ description = "Core utilities for Python packages"
255
+ category = "dev"
256
+ optional = false
257
+ python-versions = ">=3.6"
258
+
259
+ [package.dependencies]
260
+ pyparsing = ">=2.0.2"
261
+
262
+ [[package]]
263
+ name = "pkginfo"
264
+ version = "1.7.1"
265
+ description = "Query metadatdata from sdists / bdists / installed packages."
266
+ category = "dev"
267
+ optional = false
268
+ python-versions = "*"
269
+
270
+ [package.extras]
271
+ testing = ["nose", "coverage"]
272
+
273
+ [[package]]
274
+ name = "pluggy"
275
+ version = "0.13.1"
276
+ description = "plugin and hook calling mechanisms for python"
277
+ category = "dev"
278
+ optional = false
279
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
280
+
281
+ [package.dependencies]
282
+ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
283
+
284
+ [package.extras]
285
+ dev = ["pre-commit", "tox"]
286
+
287
+ [[package]]
288
+ name = "py"
289
+ version = "1.10.0"
290
+ description = "library with cross-python path, ini-parsing, io, code, log facilities"
291
+ category = "dev"
292
+ optional = false
293
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
294
+
295
+ [[package]]
296
+ name = "pycparser"
297
+ version = "2.20"
298
+ description = "C parser in Python"
299
+ category = "dev"
300
+ optional = false
301
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
302
+
303
+ [[package]]
304
+ name = "pygments"
305
+ version = "2.9.0"
306
+ description = "Pygments is a syntax highlighting package written in Python."
307
+ category = "dev"
308
+ optional = false
309
+ python-versions = ">=3.5"
310
+
311
+ [[package]]
312
+ name = "pyparsing"
313
+ version = "2.4.7"
314
+ description = "Python parsing module"
315
+ category = "dev"
316
+ optional = false
317
+ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
318
+
319
+ [[package]]
320
+ name = "pytest"
321
+ version = "6.2.4"
322
+ description = "pytest: simple powerful testing with Python"
323
+ category = "dev"
324
+ optional = false
325
+ python-versions = ">=3.6"
326
+
327
+ [package.dependencies]
328
+ atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
329
+ attrs = ">=19.2.0"
330
+ colorama = {version = "*", markers = "sys_platform == \"win32\""}
331
+ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
332
+ iniconfig = "*"
333
+ packaging = "*"
334
+ pluggy = ">=0.12,<1.0.0a1"
335
+ py = ">=1.8.2"
336
+ toml = "*"
337
+
338
+ [package.extras]
339
+ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
340
+
341
+ [[package]]
342
+ name = "pytest-runner"
343
+ version = "5.3.1"
344
+ description = "Invoke py.test as distutils command with dependency resolution"
345
+ category = "dev"
346
+ optional = false
347
+ python-versions = ">=3.6"
348
+
349
+ [package.extras]
350
+ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
351
+ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-virtualenv", "pytest-black (>=0.3.7)", "pytest-mypy"]
352
+
353
+ [[package]]
354
+ name = "pytz"
355
+ version = "2021.1"
356
+ description = "World timezone definitions, modern and historical"
357
+ category = "dev"
358
+ optional = false
359
+ python-versions = "*"
360
+
361
+ [[package]]
362
+ name = "pywin32-ctypes"
363
+ version = "0.2.0"
364
+ description = ""
365
+ category = "dev"
366
+ optional = false
367
+ python-versions = "*"
368
+
369
+ [[package]]
370
+ name = "readme-renderer"
371
+ version = "29.0"
372
+ description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
373
+ category = "dev"
374
+ optional = false
375
+ python-versions = "*"
376
+
377
+ [package.dependencies]
378
+ bleach = ">=2.1.0"
379
+ docutils = ">=0.13.1"
380
+ Pygments = ">=2.5.1"
381
+ six = "*"
382
+
383
+ [package.extras]
384
+ md = ["cmarkgfm (>=0.5.0,<0.6.0)"]
385
+
386
+ [[package]]
387
+ name = "requests"
388
+ version = "2.26.0"
389
+ description = "Python HTTP for Humans."
390
+ category = "main"
391
+ optional = false
392
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
393
+
394
+ [package.dependencies]
395
+ certifi = ">=2017.4.17"
396
+ charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
397
+ idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
398
+ urllib3 = ">=1.21.1,<1.27"
399
+
400
+ [package.extras]
401
+ socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
402
+ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
403
+
404
+ [[package]]
405
+ name = "requests-toolbelt"
406
+ version = "0.9.1"
407
+ description = "A utility belt for advanced users of python-requests"
408
+ category = "dev"
409
+ optional = false
410
+ python-versions = "*"
411
+
412
+ [package.dependencies]
413
+ requests = ">=2.0.1,<3.0.0"
414
+
415
+ [[package]]
416
+ name = "rfc3986"
417
+ version = "1.5.0"
418
+ description = "Validating URI References per RFC 3986"
419
+ category = "dev"
420
+ optional = false
421
+ python-versions = "*"
422
+
423
+ [package.extras]
424
+ idna2008 = ["idna"]
425
+
426
+ [[package]]
427
+ name = "secretstorage"
428
+ version = "3.3.1"
429
+ description = "Python bindings to FreeDesktop.org Secret Service API"
430
+ category = "dev"
431
+ optional = false
432
+ python-versions = ">=3.6"
433
+
434
+ [package.dependencies]
435
+ cryptography = ">=2.0"
436
+ jeepney = ">=0.6"
437
+
438
+ [[package]]
439
+ name = "six"
440
+ version = "1.16.0"
441
+ description = "Python 2 and 3 compatibility utilities"
442
+ category = "dev"
443
+ optional = false
444
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
445
+
446
+ [[package]]
447
+ name = "snowballstemmer"
448
+ version = "2.1.0"
449
+ description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
450
+ category = "dev"
451
+ optional = false
452
+ python-versions = "*"
453
+
454
+ [[package]]
455
+ name = "soupsieve"
456
+ version = "2.2.1"
457
+ description = "A modern CSS selector implementation for Beautiful Soup."
458
+ category = "main"
459
+ optional = false
460
+ python-versions = ">=3.6"
461
+
462
+ [[package]]
463
+ name = "sphinx"
464
+ version = "4.1.1"
465
+ description = "Python documentation generator"
466
+ category = "dev"
467
+ optional = false
468
+ python-versions = ">=3.6"
469
+
470
+ [package.dependencies]
471
+ alabaster = ">=0.7,<0.8"
472
+ babel = ">=1.3"
473
+ colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""}
474
+ docutils = ">=0.14,<0.18"
475
+ imagesize = "*"
476
+ Jinja2 = ">=2.3"
477
+ packaging = "*"
478
+ Pygments = ">=2.0"
479
+ requests = ">=2.5.0"
480
+ snowballstemmer = ">=1.1"
481
+ sphinxcontrib-applehelp = "*"
482
+ sphinxcontrib-devhelp = "*"
483
+ sphinxcontrib-htmlhelp = ">=2.0.0"
484
+ sphinxcontrib-jsmath = "*"
485
+ sphinxcontrib-qthelp = "*"
486
+ sphinxcontrib-serializinghtml = ">=1.1.5"
487
+
488
+ [package.extras]
489
+ docs = ["sphinxcontrib-websupport"]
490
+ lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.900)", "docutils-stubs", "types-typed-ast", "types-pkg-resources", "types-requests"]
491
+ test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"]
492
+
493
+ [[package]]
494
+ name = "sphinxcontrib-applehelp"
495
+ version = "1.0.2"
496
+ description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books"
497
+ category = "dev"
498
+ optional = false
499
+ python-versions = ">=3.5"
500
+
501
+ [package.extras]
502
+ lint = ["flake8", "mypy", "docutils-stubs"]
503
+ test = ["pytest"]
504
+
505
+ [[package]]
506
+ name = "sphinxcontrib-devhelp"
507
+ version = "1.0.2"
508
+ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document."
509
+ category = "dev"
510
+ optional = false
511
+ python-versions = ">=3.5"
512
+
513
+ [package.extras]
514
+ lint = ["flake8", "mypy", "docutils-stubs"]
515
+ test = ["pytest"]
516
+
517
+ [[package]]
518
+ name = "sphinxcontrib-htmlhelp"
519
+ version = "2.0.0"
520
+ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
521
+ category = "dev"
522
+ optional = false
523
+ python-versions = ">=3.6"
524
+
525
+ [package.extras]
526
+ lint = ["flake8", "mypy", "docutils-stubs"]
527
+ test = ["pytest", "html5lib"]
528
+
529
+ [[package]]
530
+ name = "sphinxcontrib-jsmath"
531
+ version = "1.0.1"
532
+ description = "A sphinx extension which renders display math in HTML via JavaScript"
533
+ category = "dev"
534
+ optional = false
535
+ python-versions = ">=3.5"
536
+
537
+ [package.extras]
538
+ test = ["pytest", "flake8", "mypy"]
539
+
540
+ [[package]]
541
+ name = "sphinxcontrib-qthelp"
542
+ version = "1.0.3"
543
+ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document."
544
+ category = "dev"
545
+ optional = false
546
+ python-versions = ">=3.5"
547
+
548
+ [package.extras]
549
+ lint = ["flake8", "mypy", "docutils-stubs"]
550
+ test = ["pytest"]
551
+
552
+ [[package]]
553
+ name = "sphinxcontrib-serializinghtml"
554
+ version = "1.1.5"
555
+ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)."
556
+ category = "dev"
557
+ optional = false
558
+ python-versions = ">=3.5"
559
+
560
+ [package.extras]
561
+ lint = ["flake8", "mypy", "docutils-stubs"]
562
+ test = ["pytest"]
563
+
564
+ [[package]]
565
+ name = "toml"
566
+ version = "0.10.2"
567
+ description = "Python Library for Tom's Obvious, Minimal Language"
568
+ category = "dev"
569
+ optional = false
570
+ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
571
+
572
+ [[package]]
573
+ name = "tqdm"
574
+ version = "4.61.2"
575
+ description = "Fast, Extensible Progress Meter"
576
+ category = "dev"
577
+ optional = false
578
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
579
+
580
+ [package.dependencies]
581
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
582
+
583
+ [package.extras]
584
+ dev = ["py-make (>=0.1.0)", "twine", "wheel"]
585
+ notebook = ["ipywidgets (>=6)"]
586
+ telegram = ["requests"]
587
+
588
+ [[package]]
589
+ name = "twine"
590
+ version = "3.4.2"
591
+ description = "Collection of utilities for publishing packages on PyPI"
592
+ category = "dev"
593
+ optional = false
594
+ python-versions = ">=3.6"
595
+
596
+ [package.dependencies]
597
+ colorama = ">=0.4.3"
598
+ importlib-metadata = ">=3.6"
599
+ keyring = ">=15.1"
600
+ pkginfo = ">=1.4.2"
601
+ readme-renderer = ">=21.0"
602
+ requests = ">=2.20"
603
+ requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0"
604
+ rfc3986 = ">=1.4.0"
605
+ tqdm = ">=4.14"
606
+
607
+ [[package]]
608
+ name = "typing-extensions"
609
+ version = "3.10.0.0"
610
+ description = "Backported and Experimental Type Hints for Python 3.5+"
611
+ category = "main"
612
+ optional = false
613
+ python-versions = "*"
614
+
615
+ [[package]]
616
+ name = "urllib3"
617
+ version = "1.26.6"
618
+ description = "HTTP library with thread-safe connection pooling, file post, and more."
619
+ category = "main"
620
+ optional = false
621
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
622
+
623
+ [package.extras]
624
+ brotli = ["brotlipy (>=0.6.0)"]
625
+ secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
626
+ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
627
+
628
+ [[package]]
629
+ name = "webencodings"
630
+ version = "0.5.1"
631
+ description = "Character encoding aliases for legacy web content"
632
+ category = "dev"
633
+ optional = false
634
+ python-versions = "*"
635
+
636
+ [[package]]
637
+ name = "zipp"
638
+ version = "3.5.0"
639
+ description = "Backport of pathlib-compatible object wrapper for zip files"
640
+ category = "main"
641
+ optional = false
642
+ python-versions = ">=3.6"
643
+
644
+ [package.extras]
645
+ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
646
+ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
647
+
648
+ [metadata]
649
+ lock-version = "1.1"
650
+ python-versions = "^3.7"
651
+ content-hash = "b07152dec26ab024bb88d96ed0662e0d575390d70ef05ca6c03c9468cf22d699"
652
+
653
+ [metadata.files]
654
+ alabaster = [
655
+ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"},
656
+ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"},
657
+ ]
658
+ atomicwrites = [
659
+ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
660
+ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
661
+ ]
662
+ attrs = [
663
+ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
664
+ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
665
+ ]
666
+ babel = [
667
+ {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"},
668
+ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
669
+ ]
670
+ beautifulsoup4 = [
671
+ {file = "beautifulsoup4-4.9.3-py2-none-any.whl", hash = "sha256:4c98143716ef1cb40bf7f39a8e3eec8f8b009509e74904ba3a7b315431577e35"},
672
+ {file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"},
673
+ {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"},
674
+ ]
675
+ bleach = [
676
+ {file = "bleach-3.3.1-py2.py3-none-any.whl", hash = "sha256:ae976d7174bba988c0b632def82fdc94235756edfb14e6558a9c5be555c9fb78"},
677
+ {file = "bleach-3.3.1.tar.gz", hash = "sha256:306483a5a9795474160ad57fce3ddd1b50551e981eed8e15a582d34cef28aafa"},
678
+ ]
679
+ certifi = [
680
+ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
681
+ {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
682
+ ]
683
+ cffi = [
684
+ {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
685
+ {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
686
+ {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
687
+ {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
688
+ {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
689
+ {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
690
+ {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
691
+ {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
692
+ {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
693
+ {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
694
+ {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
695
+ {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
696
+ {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
697
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
698
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
699
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
700
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
701
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
702
+ {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
703
+ {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
704
+ {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
705
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
706
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
707
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
708
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
709
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
710
+ {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
711
+ {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
712
+ {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
713
+ {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
714
+ {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
715
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
716
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
717
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
718
+ {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
719
+ {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
720
+ {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
721
+ {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
722
+ {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
723
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
724
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
725
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
726
+ {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
727
+ {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
728
+ {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
729
+ ]
730
+ charset-normalizer = [
731
+ {file = "charset-normalizer-2.0.3.tar.gz", hash = "sha256:c46c3ace2d744cfbdebceaa3c19ae691f53ae621b39fd7570f59d14fb7f2fd12"},
732
+ {file = "charset_normalizer-2.0.3-py3-none-any.whl", hash = "sha256:88fce3fa5b1a84fdcb3f603d889f723d1dd89b26059d0123ca435570e848d5e1"},
733
+ ]
734
+ click = [
735
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
736
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
737
+ ]
738
+ colorama = [
739
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
740
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
741
+ ]
742
+ coverage = [
743
+ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"},
744
+ {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"},
745
+ {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"},
746
+ {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"},
747
+ {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"},
748
+ {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"},
749
+ {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"},
750
+ {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"},
751
+ {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"},
752
+ {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"},
753
+ {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"},
754
+ {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"},
755
+ {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"},
756
+ {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"},
757
+ {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"},
758
+ {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"},
759
+ {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"},
760
+ {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"},
761
+ {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"},
762
+ {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"},
763
+ {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"},
764
+ {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"},
765
+ {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"},
766
+ {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"},
767
+ {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"},
768
+ {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"},
769
+ {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"},
770
+ {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"},
771
+ {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"},
772
+ {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"},
773
+ {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"},
774
+ {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"},
775
+ {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"},
776
+ {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"},
777
+ {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"},
778
+ {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"},
779
+ {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"},
780
+ {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"},
781
+ {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"},
782
+ {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"},
783
+ {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"},
784
+ {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"},
785
+ {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"},
786
+ {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"},
787
+ {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"},
788
+ {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"},
789
+ {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"},
790
+ {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"},
791
+ {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"},
792
+ {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"},
793
+ {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"},
794
+ {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
795
+ ]
796
+ cryptography = [
797
+ {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
798
+ {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
799
+ {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
800
+ {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
801
+ {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
802
+ {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
803
+ {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
804
+ {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
805
+ {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
806
+ {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
807
+ {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
808
+ {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
809
+ ]
810
+ docutils = [
811
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
812
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
813
+ ]
814
+ idna = [
815
+ {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
816
+ {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
817
+ ]
818
+ imagesize = [
819
+ {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
820
+ {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
821
+ ]
822
+ importlib-metadata = [
823
+ {file = "importlib_metadata-4.6.1-py3-none-any.whl", hash = "sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e"},
824
+ {file = "importlib_metadata-4.6.1.tar.gz", hash = "sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac"},
825
+ ]
826
+ iniconfig = [
827
+ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
828
+ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
829
+ ]
830
+ jeepney = [
831
+ {file = "jeepney-0.7.0-py3-none-any.whl", hash = "sha256:71335e7a4e93817982f473f3507bffc2eff7a544119ab9b73e089c8ba1409ba3"},
832
+ {file = "jeepney-0.7.0.tar.gz", hash = "sha256:1237cd64c8f7ac3aa4b3f332c4d0fb4a8216f39eaa662ec904302d4d77de5a54"},
833
+ ]
834
+ jinja2 = [
835
+ {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
836
+ {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"},
837
+ ]
838
+ keyring = [
839
+ {file = "keyring-23.0.1-py3-none-any.whl", hash = "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48"},
840
+ {file = "keyring-23.0.1.tar.gz", hash = "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8"},
841
+ ]
842
+ markupsafe = [
843
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
844
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
845
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
846
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
847
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
848
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
849
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
850
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
851
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
852
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
853
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
854
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
855
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
856
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
857
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
858
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
859
+ {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
860
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
861
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
862
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
863
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
864
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
865
+ {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
866
+ {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
867
+ {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
868
+ {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
869
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
870
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
871
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
872
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
873
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
874
+ {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
875
+ {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
876
+ {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
877
+ ]
878
+ packaging = [
879
+ {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
880
+ {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
881
+ ]
882
+ pkginfo = [
883
+ {file = "pkginfo-1.7.1-py2.py3-none-any.whl", hash = "sha256:37ecd857b47e5f55949c41ed061eb51a0bee97a87c969219d144c0e023982779"},
884
+ {file = "pkginfo-1.7.1.tar.gz", hash = "sha256:e7432f81d08adec7297633191bbf0bd47faf13cd8724c3a13250e51d542635bd"},
885
+ ]
886
+ pluggy = [
887
+ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
888
+ {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
889
+ ]
890
+ py = [
891
+ {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
892
+ {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
893
+ ]
894
+ pycparser = [
895
+ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
896
+ {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
897
+ ]
898
+ pygments = [
899
+ {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
900
+ {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
901
+ ]
902
+ pyparsing = [
903
+ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
904
+ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
905
+ ]
906
+ pytest = [
907
+ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
908
+ {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
909
+ ]
910
+ pytest-runner = [
911
+ {file = "pytest-runner-5.3.1.tar.gz", hash = "sha256:0fce5b8dc68760f353979d99fdd6b3ad46330b6b1837e2077a89ebcf204aac91"},
912
+ {file = "pytest_runner-5.3.1-py3-none-any.whl", hash = "sha256:85f93af814438ee322b4ea08fe3f5c2ad53b253577f3bd84b2ad451fee450ac5"},
913
+ ]
914
+ pytz = [
915
+ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
916
+ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
917
+ ]
918
+ pywin32-ctypes = [
919
+ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
920
+ {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
921
+ ]
922
+ readme-renderer = [
923
+ {file = "readme_renderer-29.0-py2.py3-none-any.whl", hash = "sha256:63b4075c6698fcfa78e584930f07f39e05d46f3ec97f65006e430b595ca6348c"},
924
+ {file = "readme_renderer-29.0.tar.gz", hash = "sha256:92fd5ac2bf8677f310f3303aa4bce5b9d5f9f2094ab98c29f13791d7b805a3db"},
925
+ ]
926
+ requests = [
927
+ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
928
+ {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
929
+ ]
930
+ requests-toolbelt = [
931
+ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"},
932
+ {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
933
+ ]
934
+ rfc3986 = [
935
+ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
936
+ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
937
+ ]
938
+ secretstorage = [
939
+ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
940
+ {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"},
941
+ ]
942
+ six = [
943
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
944
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
945
+ ]
946
+ snowballstemmer = [
947
+ {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"},
948
+ {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"},
949
+ ]
950
+ soupsieve = [
951
+ {file = "soupsieve-2.2.1-py3-none-any.whl", hash = "sha256:c2c1c2d44f158cdbddab7824a9af8c4f83c76b1e23e049479aa432feb6c4c23b"},
952
+ {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"},
953
+ ]
954
+ sphinx = [
955
+ {file = "Sphinx-4.1.1-py3-none-any.whl", hash = "sha256:3d513088236eef51e5b0adb78b0492eb22cc3b8ccdb0b36dd021173b365d4454"},
956
+ {file = "Sphinx-4.1.1.tar.gz", hash = "sha256:23c846a1841af998cb736218539bb86d16f5eb95f5760b1966abcd2d584e62b8"},
957
+ ]
958
+ sphinxcontrib-applehelp = [
959
+ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"},
960
+ {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"},
961
+ ]
962
+ sphinxcontrib-devhelp = [
963
+ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"},
964
+ {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"},
965
+ ]
966
+ sphinxcontrib-htmlhelp = [
967
+ {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"},
968
+ {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"},
969
+ ]
970
+ sphinxcontrib-jsmath = [
971
+ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"},
972
+ {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"},
973
+ ]
974
+ sphinxcontrib-qthelp = [
975
+ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"},
976
+ {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"},
977
+ ]
978
+ sphinxcontrib-serializinghtml = [
979
+ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"},
980
+ {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"},
981
+ ]
982
+ toml = [
983
+ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
984
+ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
985
+ ]
986
+ tqdm = [
987
+ {file = "tqdm-4.61.2-py2.py3-none-any.whl", hash = "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64"},
988
+ {file = "tqdm-4.61.2.tar.gz", hash = "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"},
989
+ ]
990
+ twine = [
991
+ {file = "twine-3.4.2-py3-none-any.whl", hash = "sha256:087328e9bb405e7ce18527a2dca4042a84c7918658f951110b38bc135acab218"},
992
+ {file = "twine-3.4.2.tar.gz", hash = "sha256:4caec0f1ed78dc4c9b83ad537e453d03ce485725f2aea57f1bb3fdde78dae936"},
993
+ ]
994
+ typing-extensions = [
995
+ {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
996
+ {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
997
+ {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
998
+ ]
999
+ urllib3 = [
1000
+ {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
1001
+ {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
1002
+ ]
1003
+ webencodings = [
1004
+ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
1005
+ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
1006
+ ]
1007
+ zipp = [
1008
+ {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
1009
+ {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
1010
+ ]
pyproject.toml CHANGED
@@ -1,3 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  [build-system]
2
- requires = ["setuptools", "wheel"]
3
- build-backend = "setuptools.build_meta"
 
1
+ [tool.poetry]
2
+ name = "deep-translator"
3
+ version = "1.5.2"
4
+ description = ""
5
+ license = "MIT"
6
+ authors = ["Nidhal Baccouri <[email protected]>"]
7
+ maintainers = ["Chris Trenthem <[email protected]>"]
8
+ readme = "README.rst"
9
+ homepage = "https://github.com/nidhaloff/deep_translator"
10
+ repository = "https://github.com/nidhaloff/deep_translator"
11
+ documentation = "https://deep-translator.readthedocs.io/en/latest/"
12
+ keywords = ["deep_translator", "deepL", "DeepL", "translator", "translation", "automation", "web scraping", "google translator", "google translation", "google trans", "PONS", "YANDEX", "MyMemory translator", "Linguee", "QCRI", "Language", "Language detection", "detect language", "free translation", "unlimited translation", "translate for free"]
13
+ classifiers = [
14
+ "Development Status :: 5 - Production/Stable",
15
+ "Intended Audience :: Developers",
16
+ "Intended Audience :: Education",
17
+ "Intended Audience :: Information Technology",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Topic :: Education",
20
+ "Topic :: Software Development",
21
+ "Topic :: Communications",
22
+ "Topic :: Text Processing",
23
+ "Topic :: Text Processing :: Linguistic",
24
+ "Operating System :: OS Independent"]
25
+ packages = [{include="deep_translator"}]
26
+ # TODO: Add whatever additional documentation to be added here.
27
+ include = [ ]
28
+
29
+ [tool.poetry.scripts]
30
+ deep-translator = 'deep_translator.main:cli'
31
+ dt = 'deep_translator.main:cli'
32
+
33
+ [tool.poetry.dependencies]
34
+ python = "^3.7"
35
+ beautifulsoup4 = "^4.9.1"
36
+ requests = "^2.23.0"
37
+ click = "^8.0.1"
38
+ #pandas = {version = "^1.3.0", optional = true}
39
+
40
+ [tool.poetry.dev-dependencies]
41
+ wheel = "flake8"
42
+ #tox = "^3.24.0"
43
+ coverage = "^5.5"
44
+ Sphinx = "^4.1.1"
45
+ twine = "^3.4.2"
46
+ pytest = "^6.2.4"
47
+ pytest-runner = "^5.3.1"
48
+ toml = "^0.10.2"
49
+
50
  [build-system]
51
+ requires = ["poetry-core>=1.0.0"]
52
+ build-backend = "poetry.core.masonry.api"
pyvenv.cfg DELETED
@@ -1,3 +0,0 @@
1
- home = /usr/bin
2
- include-system-site-packages = false
3
- version = 3.7.7
 
 
 
 
requirements.txt DELETED
@@ -1,2 +0,0 @@
1
- beautifulsoup4==4.9.1
2
- requests==2.23.0
 
 
 
requirements_dev.txt DELETED
@@ -1,9 +0,0 @@
1
- bump2version
2
- wheel
3
- flake8
4
- tox
5
- coverage
6
- Sphinx
7
- twine
8
- pytest
9
- pytest-runner
 
 
 
 
 
 
 
 
 
 
setup.cfg DELETED
@@ -1,87 +0,0 @@
1
- #main config
2
- [metadata]
3
- name = deep-translator
4
- version = 1.5.0
5
- url = https://github.com/nidhaloff/deep_translator
6
- author = Nidhal Baccouri
7
- author_email = [email protected]
8
- maintainer = Nidhal Baccouri
9
- maintainer_email = [email protected]
10
- classifiers =
11
- Development Status :: 5 - Production/Stable
12
- Intended Audience :: Developers
13
- Intended Audience :: Education
14
- Intended Audience :: Information Technology
15
- License :: OSI Approved :: MIT License
16
- Topic :: Education
17
- Topic :: Software Development
18
- Topic :: Communications
19
- Topic :: Text Processing
20
- Topic :: Text Processing :: Linguistic
21
- Operating System :: OS Independent
22
- Programming Language :: Python :: 3
23
- Programming Language :: Python :: 3.5
24
- Programming Language :: Python :: 3.6
25
- Programming Language :: Python :: 3.7
26
- Programming Language :: Python :: 3.8
27
- license = MIT
28
- license_files = file:LICENSE
29
- description = A flexible python tool to translate between different languages in a simple way.
30
- long_description = file:README.rst
31
- long_description_content_type = text/x-rst
32
- keywords = deep_translator, deepL, DeepL, translator, translation, automation,
33
- web scraping, google translator, google translation, google trans, PONS,
34
- YANDEX, MyMemory translator, Linguee, QCRI, Language, Language detection,
35
- detect language, free translation, unlimited translation, translate for free
36
-
37
- [build_sphinx]
38
- version = 1.5.0
39
- release = 1.5.0
40
-
41
- # TODO: These can be switched back on if the CI platform changes from Travis. Travis still requires setup.py to function properly.
42
- # [options]
43
- # zip_safe = 0
44
- # setup_requires = pytest-runner
45
- # install_requires = requests; beautifulsoup4; click
46
- # python_requires = >=3.0
47
- # tests_require = pytest>=3
48
- # include_package_data = 1
49
- # packages = find:
50
- # package_dir = =deep_translator
51
-
52
- # [options.entry_points]
53
- # console_scripts = deep-translator = deep_translator.__main__:deep_translator
54
- # dt = deep_translator.__main__:deep_translator
55
-
56
- # [options.packages.find]
57
- # where = deep_translator
58
-
59
- # TODO: This can be removed once Sphinx confirms it reads the version tags from here. The tags might be simplified by referencing metadata.version
60
- # bumpversion config
61
- # [bumpversion]
62
- # current_version = 1.4.4
63
- # commit = True
64
- # tag = True
65
-
66
- # [bumpversion:file:setup.py]
67
- # search = version='{current_version}'
68
- # replace = version='{new_version}'
69
-
70
- # [bumpversion:file:deep_translator/__init__.py]
71
- # search = __version__ = '{current_version}'
72
- # replace = __version__ = '{new_version}'
73
-
74
-
75
- # TODO: These are all optional settings, turned on for now since they exist already.
76
- [bdist_wheel]
77
- universal = 1
78
-
79
- [flake8]
80
- exclude = docs
81
-
82
- [aliases]
83
- # Define setup.py command aliases here
84
- test = pytest
85
-
86
- [tool:pytest]
87
- collect_ignore = [setup.py]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
setup.py DELETED
@@ -1,17 +0,0 @@
1
- # #!/usr/bin/env python
2
- """The setup script."""
3
- from setuptools import setup, find_packages
4
-
5
- setup(
6
- zip_safe=False,
7
- setup_requires=['pytest-runner',],
8
- install_requires=['requests','beautifulsoup4','click'],
9
- python_requires='>=3',
10
- tests_require=['pytest>=3',],
11
- include_package_data=True,
12
- packages=find_packages(include=['deep_translator'],),
13
- entry_points={'console_scripts':[
14
- 'deep-translator=deep_translator.main:cli',
15
- 'dt=deep_translator.main:cli',
16
- ],},
17
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tox.ini DELETED
@@ -1,28 +0,0 @@
1
- [tox]
2
- envlist = py37, py38, flake8
3
-
4
- [travis]
5
- python =
6
- 3.8: py38
7
- 3.7: py37
8
- #3.5: py35
9
- #3.4: py34
10
-
11
-
12
- [testenv:flake8]
13
- basepython = python
14
- deps = flake8
15
- commands = flake8 deep_translator tests
16
-
17
- [testenv]
18
- setenv =
19
- PYTHONPATH = {toxinidir}
20
- deps =
21
- -r{toxinidir}/requirements_dev.txt
22
- ; If you want to make tox run the tests with the same versions, create a
23
- ; requirements.txt with the pinned versions and uncomment the following line:
24
- ; -r{toxinidir}/requirements.txt
25
- commands =
26
- pip install -U pip
27
- pytest --basetemp={envtmpdir}
28
-