From b5730375d9a5e2823bae6caefa8792d4a76cc7eb Mon Sep 17 00:00:00 2001 From: andy Date: Sat, 19 Jun 2021 12:54:24 +0100 Subject: [PATCH] remove debugger, added admin script to docs, added launch.json --- .gitignore | 1 - .vscode/launch.json | 24 ++++++++ admin.py | 41 +++++++++++-- docs/index.rst | 1 + docs/src/admin.rst | 8 +++ music/music.py | 13 ---- poetry.lock | 143 +++++--------------------------------------- pyproject.toml | 3 +- 8 files changed, 86 insertions(+), 148 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 docs/src/admin.rst diff --git a/.gitignore b/.gitignore index e16f0a6..4c5fb84 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ node_modules/ *$py.class .idea -launch.json # C extensions *.so diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..d384ab4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Flask", + "type": "python", + "request": "launch", + "module": "flask", + "env": { + "FLASK_APP": "music.music", + "FLASK_ENV": "development" + }, + "envFile": "${workspaceFolder}/.env", + "args": [ + "run", + "--no-debugger" + ], + "jinja": true + } + ] +} \ No newline at end of file diff --git a/admin.py b/admin.py index 76788ef..b54e1a4 100755 --- a/admin.py +++ b/admin.py @@ -6,6 +6,12 @@ import sys import subprocess from cmd import Cmd +try: + from dotenv import load_dotenv + load_dotenv() +except ImportError: + pass + stage_dir = '.music-tools' scss_rel_path = Path('src', 'scss', 'style.scss') css_rel_path = Path('build', 'style.css') @@ -139,6 +145,12 @@ class Admin(Cmd): subprocess.check_call('gcloud app deploy', shell=True) def function_deploy(self, main, function_id): + """Deploy Cloud Function, copy main file and initiate gcloud command + + Args: + main (str): main path + function_id (str): function id to deploy to + """ self.copy_main_file(main) print(f'>> deploying {function_id}') @@ -233,21 +245,38 @@ class Admin(Cmd): """ subprocess.check_call(f'sass --style=compressed --watch {str(scss_rel_path)} {str(css_rel_path)}', shell=True) + def do_run(self, args): + """ + Run Flask app + """ + subprocess.check_call(f'python main.api.py', shell=True) + + def do_test(self, args): + """ + Run Python unit tests + """ + subprocess.check_call(f'python -u -m unittest discover -s tests', shell=True) + + def do_docs(self, args): + """ + Compile documentation using sphinx + """ + subprocess.check_call(f'sphinx-build docs docs/build -b html', shell=True) + def do_exit(self, args): """ Exit script """ exit(0) - - def test(): - os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'service.json' - subprocess.check_call("python -u -m unittest discover -s tests", shell=True) + Admin().onecmd('test') def run(): - os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'service.json' - subprocess.check_call("python main.api.py", shell=True) + Admin().onecmd('run') + +def docs(): + Admin().onecmd('docs') if __name__ == '__main__': console = Admin() diff --git a/docs/index.rst b/docs/index.rst index 2805352..ed756b2 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,6 +7,7 @@ Music Tools Py Js + Admin Script All Modules `Music Tools `_ diff --git a/docs/src/admin.rst b/docs/src/admin.rst new file mode 100644 index 0000000..bfd9252 --- /dev/null +++ b/docs/src/admin.rst @@ -0,0 +1,8 @@ +admin script +================== + +.. automodule:: admin + :members: + :undoc-members: + :show-inheritance: + diff --git a/music/music.py b/music/music.py index 48c9a3a..ff049e5 100644 --- a/music/music.py +++ b/music/music.py @@ -11,16 +11,6 @@ from music.model.config import Config logger = logging.getLogger(__name__) -def init_cloud_debug(): - try: - import googleclouddebugger - googleclouddebugger.enable( - breakpoint_enable_canary=False - ) - except ImportError: - logger.warning('Failed to import Cloud Debugger') - - def create_app(): """Generate and retrieve a ready-to-run flask app @@ -28,9 +18,6 @@ def create_app(): Flask App: Music Tools app """ - if os.environ.get('DEPLOY_DESTINATION', None) == 'PROD': - init_cloud_debug() - app = Flask(__name__, static_folder=os.path.join(os.path.dirname(__file__), '..', 'build'), template_folder="templates") config = Config.collection.get("config/music-tools") diff --git a/poetry.lock b/poetry.lock index ce2e33b..876cbe3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -176,22 +176,6 @@ grpc = ["grpcio (>=1.29.0,<2.0dev)"] grpcgcp = ["grpcio-gcp (>=0.2.2)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] -[[package]] -name = "google-api-python-client" -version = "2.9.0" -description = "Google API Client Library for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -google-api-core = ">=1.21.0,<2dev" -google-auth = ">=1.16.0,<2dev" -google-auth-httplib2 = ">=0.1.0" -httplib2 = ">=0.15.0,<1dev" -six = ">=1.13.0,<2dev" -uritemplate = ">=3.0.0,<4dev" - [[package]] name = "google-auth" version = "1.28.0" @@ -210,19 +194,6 @@ six = ">=1.9.0" aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] pyopenssl = ["pyopenssl (>=20.0.0)"] -[[package]] -name = "google-auth-httplib2" -version = "0.1.0" -description = "Google Authentication Library: httplib2 transport" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -google-auth = "*" -httplib2 = ">=0.15.0" -six = "*" - [[package]] name = "google-cloud-core" version = "1.6.0" @@ -288,22 +259,6 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" google-api-core = {version = ">=1.14.0,<2.0.0dev", extras = ["grpc"]} grpc-google-iam-v1 = ">=0.12.3,<0.13dev" -[[package]] -name = "google-python-cloud-debugger" -version = "2.17" -description = "Python Cloud Debugger" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -google-api-core = {version = "*", markers = "python_version > \"3.0\""} -google-api-python-client = {version = "*", markers = "python_version > \"3.0\""} -google-auth = {version = ">=1.0.0", markers = "python_version > \"3.0\""} -google-auth-httplib2 = "*" -pyyaml = "*" -six = ">=1.10.0" - [[package]] name = "googleapis-common-protos" version = "1.53.0" @@ -345,17 +300,6 @@ six = ">=1.5.2" [package.extras] protobuf = ["grpcio-tools (>=1.36.1)"] -[[package]] -name = "httplib2" -version = "0.19.1" -description = "A comprehensive HTTP client library." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pyparsing = ">=2.4.2,<3" - [[package]] name = "idna" version = "2.10" @@ -517,6 +461,17 @@ category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "python-dotenv" +version = "0.17.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "pytz" version = "2021.1" @@ -525,14 +480,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "pyyaml" -version = "5.4.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - [[package]] name = "requests" version = "2.25.1" @@ -759,14 +706,6 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -[[package]] -name = "uritemplate" -version = "3.0.1" -description = "URI templates" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "urllib3" version = "1.26.4" @@ -803,7 +742,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "fda7557c00c44d6656906dc5ff3927d2f0139bc909d08f632a9a6e5ce5365fbf" +content-hash = "2f621bfc78b83fd786c7b8ade45292e1adb5d251682f1281cd33ef9e0203383e" [metadata.files] alabaster = [ @@ -862,18 +801,10 @@ google-api-core = [ {file = "google-api-core-1.26.3.tar.gz", hash = "sha256:b914345c7ea23861162693a27703bab804a55504f7e6e9abcaff174d80df32ac"}, {file = "google_api_core-1.26.3-py2.py3-none-any.whl", hash = "sha256:099762d4b4018cd536bcf85136bf337957da438807572db52f21dc61251be089"}, ] -google-api-python-client = [ - {file = "google-api-python-client-2.9.0.tar.gz", hash = "sha256:2b5274f06799d80222fd3f20fd4ebcd19f57c009703bd4cf7b00492e7e05e15a"}, - {file = "google_api_python_client-2.9.0-py2.py3-none-any.whl", hash = "sha256:fb5c28b61327392891bf79ccd0a4edc54c76f6d1f3c10e3821dbdf8a7287f691"}, -] google-auth = [ {file = "google-auth-1.28.0.tar.gz", hash = "sha256:9bd436d19ab047001a1340720d2b629eb96dd503258c524921ec2af3ee88a80e"}, {file = "google_auth-1.28.0-py2.py3-none-any.whl", hash = "sha256:dcaba3aa9d4e0e96fd945bf25a86b6f878fcb05770b67adbeb50a63ca4d28a5e"}, ] -google-auth-httplib2 = [ - {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, - {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, -] google-cloud-core = [ {file = "google-cloud-core-1.6.0.tar.gz", hash = "sha256:c6abb18527545379fc82efc4de75ce9a3772ccad2fc645adace593ba097cbb02"}, {file = "google_cloud_core-1.6.0-py2.py3-none-any.whl", hash = "sha256:40d9c2da2d03549b5ac3dcccf289d4f15e6d1210044c6381ce45c92913e62904"}, @@ -894,13 +825,6 @@ google-cloud-tasks = [ {file = "google-cloud-tasks-1.5.0.tar.gz", hash = "sha256:d751b97c1e84980a1646702d3fc1b45bab3284bc3388181f1dc9ba3d204b5a39"}, {file = "google_cloud_tasks-1.5.0-py2.py3-none-any.whl", hash = "sha256:36aa16f0c52aa9a292b1f919d2582725731e9760393c9ca98ce599c68cbf9996"}, ] -google-python-cloud-debugger = [ - {file = "google_python_cloud_debugger-2.17-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5d66de90cc18bc3fb36591096ce736c7b94aacd6dbd54bc0b6ea418e1bddd751"}, - {file = "google_python_cloud_debugger-2.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:7d271bd4d184017bf627395f6c54ba03c3ab3afb7964c3c8e7f53f6fb7e73870"}, - {file = "google_python_cloud_debugger-2.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6f8fe1a333213fea6676c761075639a451753201476f8db7e6f1bfa569b0d6b3"}, - {file = "google_python_cloud_debugger-2.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1ee387ffba070537acd3586e5a29f574b5a14f213b83ba7d0978faf0a44d3b47"}, - {file = "google_python_cloud_debugger-2.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a8f334cbef4f3d62ff37c3b5a7d793b6ddc5bded8c5ba46366d7b109162c23b1"}, -] googleapis-common-protos = [ {file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"}, {file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"}, @@ -956,10 +880,6 @@ grpcio = [ {file = "grpcio-1.36.1-cp39-cp39-win_amd64.whl", hash = "sha256:f22c11772eff25ba1ca536e760b8c34ba56f2a9d66b6842cb11770a8f61f879d"}, {file = "grpcio-1.36.1.tar.gz", hash = "sha256:a66ea59b20f3669df0f0c6a3bd57b985e5b2d1dcf3e4c29819bb8dc232d0fd38"}, ] -httplib2 = [ - {file = "httplib2-0.19.1-py3-none-any.whl", hash = "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4"}, - {file = "httplib2-0.19.1.tar.gz", hash = "sha256:0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d"}, -] idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, @@ -1133,41 +1053,14 @@ pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] +python-dotenv = [ + {file = "python-dotenv-0.17.1.tar.gz", hash = "sha256:b1ae5e9643d5ed987fc57cc2583021e38db531946518130777734f9589b3141f"}, + {file = "python_dotenv-0.17.1-py2.py3-none-any.whl", hash = "sha256:00aa34e92d992e9f8383730816359647f358f4a3be1ba45e5a5cefd27ee91544"}, +] pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] requests = [ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, @@ -1230,10 +1123,6 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -uritemplate = [ - {file = "uritemplate-3.0.1-py2.py3-none-any.whl", hash = "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f"}, - {file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"}, -] urllib3 = [ {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, diff --git a/pyproject.toml b/pyproject.toml index c846aed..2096218 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ repository = "https://github.com/Sarsoo/Music-Tools" [tool.poetry.scripts] test = 'admin:test' start = 'admin:run' +docs = 'admin:docs' [tool.poetry.dependencies] python = "^3.8" @@ -24,12 +25,12 @@ requests = "^2.24.0" spotframework = { git = "https://github.com/Sarsoo/spotframework.git" } fmframework = { git = "https://github.com/Sarsoo/pyfmframework.git" } spotfm = { git = "https://github.com/Sarsoo/spotfm.git" } -google-python-cloud-debugger = "^2.17" [tool.poetry.dev-dependencies] pylint = "^2.5.3" Sphinx = "^3.5.3" sphinx-js = "^3.1.2" +python-dotenv = "^0.17.1" [build-system] requires = ["poetry-core>=1.0.0"]