From 338ac9037bd641656206dbd5e997509efee724a1 Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:17:08 +0200 Subject: [PATCH 01/13] Migrate to Poetry --- poetry.lock | 660 +++++++++++++++++++++++++++++++++++++++++++++++++ poetry.toml | 2 + pyproject.toml | 23 ++ setup.cfg | 23 ++ setup.py | 23 -- 5 files changed, 708 insertions(+), 23 deletions(-) create mode 100644 poetry.lock create mode 100644 poetry.toml create mode 100644 pyproject.toml create mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..f99fdfc9 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,660 @@ +[[package]] +category = "main" +description = "Async http client/server framework (asyncio)" +name = "aiohttp" +optional = false +python-versions = ">=3.5.3" +version = "3.6.2" + +[package.dependencies] +async-timeout = ">=3.0,<4.0" +attrs = ">=17.3.0" +chardet = ">=2.0,<4.0" +multidict = ">=4.5,<5.0" +yarl = ">=1.0,<2.0" + +[package.dependencies.idna-ssl] +python = "<3.7" +version = ">=1.0" + +[package.dependencies.typing-extensions] +python = "<3.7" +version = ">=3.6.5" + +[package.extras] +speedups = ["aiodns", "brotlipy", "cchardet"] + +[[package]] +category = "dev" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "appdirs" +optional = false +python-versions = "*" +version = "1.4.4" + +[[package]] +category = "main" +description = "Timeout context manager for asyncio programs" +name = "async-timeout" +optional = false +python-versions = ">=3.5.3" +version = "3.0.1" + +[[package]] +category = "dev" +description = "Atomic file writes." +marker = "sys_platform == \"win32\"" +name = "atomicwrites" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.4.0" + +[[package]] +category = "main" +description = "Classes Without Boilerplate" +name = "attrs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.3.0" + +[package.extras] +azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] +dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] +docs = ["sphinx", "zope.interface"] +tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] + +[[package]] +category = "dev" +description = "Validate configuration and produce human readable error messages." +name = "cfgv" +optional = false +python-versions = ">=3.6" +version = "3.0.0" + +[[package]] +category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "dev" +description = "Cross-platform colored terminal text." +marker = "platform_system == \"Windows\" or sys_platform == \"win32\"" +name = "colorama" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.3" + +[[package]] +category = "dev" +description = "Code coverage measurement for Python" +name = "coverage" +optional = false +python-versions = "*" +version = "4.4.2" + +[[package]] +category = "dev" +description = "Distribution utilities" +name = "distlib" +optional = false +python-versions = "*" +version = "0.3.1" + +[[package]] +category = "dev" +description = "A platform independent file lock." +name = "filelock" +optional = false +python-versions = "*" +version = "3.0.12" + +[[package]] +category = "dev" +description = "File identification library for Python" +name = "identify" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +version = "1.4.21" + +[package.extras] +license = ["editdistance"] + +[[package]] +category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.10" + +[[package]] +category = "main" +description = "Patch ssl.match_hostname for Unicode(idna) domains support" +marker = "python_version < \"3.7\"" +name = "idna-ssl" +optional = false +python-versions = "*" +version = "1.1.0" + +[package.dependencies] +idna = ">=2.0" + +[[package]] +category = "dev" +description = "Read metadata from Python packages" +marker = "python_version < \"3.8\"" +name = "importlib-metadata" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "1.7.0" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "rst.linker"] +testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] + +[[package]] +category = "dev" +description = "Read resources from Python packages" +marker = "python_version < \"3.7\"" +name = "importlib-resources" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "3.0.0" + +[package.dependencies] +[package.dependencies.zipp] +python = "<3.8" +version = ">=0.4" + +[package.extras] +docs = ["sphinx", "rst.linker", "jaraco.packaging"] + +[[package]] +category = "dev" +description = "More routines for operating on iterables, beyond itertools" +name = "more-itertools" +optional = false +python-versions = ">=3.5" +version = "8.4.0" + +[[package]] +category = "main" +description = "multidict implementation" +name = "multidict" +optional = false +python-versions = ">=3.5" +version = "4.7.6" + +[[package]] +category = "dev" +description = "Node.js virtual environment builder" +name = "nodeenv" +optional = false +python-versions = "*" +version = "1.4.0" + +[[package]] +category = "dev" +description = "Core utilities for Python packages" +name = "packaging" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "20.4" + +[package.dependencies] +pyparsing = ">=2.0.2" +six = "*" + +[[package]] +category = "dev" +description = "plugin and hook calling mechanisms for python" +name = "pluggy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.13.1" + +[package.dependencies] +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12" + +[package.extras] +dev = ["pre-commit", "tox"] + +[[package]] +category = "dev" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +name = "pre-commit" +optional = false +python-versions = ">=3.6" +version = "2.1.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=15.2" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = "*" + +[package.dependencies.importlib-resources] +python = "<3.7" +version = "*" + +[[package]] +category = "dev" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "py" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.9.0" + +[[package]] +category = "dev" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.7" + +[[package]] +category = "dev" +description = "pytest: simple powerful testing with Python" +name = "pytest" +optional = false +python-versions = ">=3.5" +version = "5.4.3" + +[package.dependencies] +atomicwrites = ">=1.0" +attrs = ">=17.4.0" +colorama = "*" +more-itertools = ">=4.0.0" +packaging = "*" +pluggy = ">=0.12,<1.0" +py = ">=1.5.0" +wcwidth = "*" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12" + +[package.extras] +checkqa-mypy = ["mypy (v0.761)"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +category = "dev" +description = "Pytest plugin for measuring coverage." +name = "pytest-cov" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.10.0" + +[package.dependencies] +coverage = ">=4.4" +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests (2.0.2)", "six", "pytest-xdist", "virtualenv"] + +[[package]] +category = "dev" +description = "YAML parser and emitter for Python" +name = "pyyaml" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "5.3.1" + +[[package]] +category = "dev" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.15.0" + +[[package]] +category = "dev" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" +optional = false +python-versions = "*" +version = "0.10.1" + +[[package]] +category = "dev" +description = "tox is a generic virtualenv management and test command line tool" +name = "tox" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "3.16.1" + +[package.dependencies] +colorama = ">=0.4.1" +filelock = ">=3.0.0" +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +toml = ">=0.9.4" +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12,<2" + +[package.extras] +docs = ["sphinx (>=2.0.0)", "towncrier (>=18.5.0)", "pygments-github-lexers (>=0.0.5)", "sphinxcontrib-autoprogram (>=0.1.5)"] +testing = ["freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-xdist (>=1.22.2)", "pytest-randomly (>=1.0.0)", "flaky (>=3.4.0)", "psutil (>=5.6.1)"] + +[[package]] +category = "main" +description = "Backported and Experimental Type Hints for Python 3.5+" +marker = "python_version < \"3.7\"" +name = "typing-extensions" +optional = false +python-versions = "*" +version = "3.7.4.2" + +[[package]] +category = "dev" +description = "Virtual Python Environment builder" +name = "virtualenv" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +version = "20.0.25" + +[package.dependencies] +appdirs = ">=1.4.3,<2" +distlib = ">=0.3.0,<1" +filelock = ">=3.0.0,<4" +six = ">=1.9.0,<2" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12,<2" + +[package.dependencies.importlib-resources] +python = "<3.7" +version = ">=1.0" + +[package.extras] +docs = ["sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)", "proselint (>=0.10.2)"] +testing = ["pytest (>=4)", "coverage (>=5)", "coverage-enable-subprocess (>=1)", "pytest-xdist (>=1.31.0)", "pytest-mock (>=2)", "pytest-env (>=0.6.2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "pytest-freezegun (>=0.4.1)", "flaky (>=3)", "packaging (>=20.0)", "xonsh (>=0.9.16)"] + +[[package]] +category = "dev" +description = "Measures the displayed width of unicode strings in a terminal" +name = "wcwidth" +optional = false +python-versions = "*" +version = "0.2.5" + +[[package]] +category = "main" +description = "Yet another URL library" +name = "yarl" +optional = false +python-versions = ">=3.5" +version = "1.4.2" + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +category = "dev" +description = "Backport of pathlib-compatible object wrapper for zip files" +marker = "python_version < \"3.8\"" +name = "zipp" +optional = false +python-versions = ">=3.6" +version = "3.1.0" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["jaraco.itertools", "func-timeout"] + +[metadata] +content-hash = "2bc9ae3dbd99f59cb2b8c6f8dd332aab9b9abe4f46d7a7fe61334631a32dbe5c" +python-versions = ">=3.6" + +[metadata.files] +aiohttp = [ + {file = "aiohttp-3.6.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e"}, + {file = "aiohttp-3.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec"}, + {file = "aiohttp-3.6.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48"}, + {file = "aiohttp-3.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59"}, + {file = "aiohttp-3.6.2-cp36-cp36m-win32.whl", hash = "sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a"}, + {file = "aiohttp-3.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17"}, + {file = "aiohttp-3.6.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a"}, + {file = "aiohttp-3.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd"}, + {file = "aiohttp-3.6.2-cp37-cp37m-win32.whl", hash = "sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"}, + {file = "aiohttp-3.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654"}, + {file = "aiohttp-3.6.2-py3-none-any.whl", hash = "sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4"}, + {file = "aiohttp-3.6.2.tar.gz", hash = "sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326"}, +] +appdirs = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] +async-timeout = [ + {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"}, + {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, + {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, +] +cfgv = [ + {file = "cfgv-3.0.0-py2.py3-none-any.whl", hash = "sha256:f22b426ed59cd2ab2b54ff96608d846c33dfb8766a67f0b4a6ce130ce244414f"}, + {file = "cfgv-3.0.0.tar.gz", hash = "sha256:04b093b14ddf9fd4d17c53ebfd55582d27b76ed30050193c14e560770c5360eb"}, +] +chardet = [ + {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, + {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +] +colorama = [ + {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, + {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, +] +coverage = [ + {file = "coverage-4.4.2-cp26-cp26m-macosx_10_10_x86_64.whl", hash = "sha256:d1ee76f560c3c3e8faada866a07a32485445e16ed2206ac8378bd90dadffb9f0"}, + {file = "coverage-4.4.2-cp26-cp26m-manylinux1_i686.whl", hash = "sha256:007eeef7e23f9473622f7d94a3e029a45d55a92a1f083f0f3512f5ab9a669b05"}, + {file = "coverage-4.4.2-cp26-cp26m-manylinux1_x86_64.whl", hash = "sha256:17307429935f96c986a1b1674f78079528833410750321d22b5fb35d1883828e"}, + {file = "coverage-4.4.2-cp26-cp26mu-manylinux1_i686.whl", hash = "sha256:845fddf89dca1e94abe168760a38271abfc2e31863fbb4ada7f9a99337d7c3dc"}, + {file = "coverage-4.4.2-cp26-cp26mu-manylinux1_x86_64.whl", hash = "sha256:3f4d0b3403d3e110d2588c275540649b1841725f5a11a7162620224155d00ba2"}, + {file = "coverage-4.4.2-cp27-cp27m-macosx_10_12_intel.whl", hash = "sha256:4c4f368ffe1c2e7602359c2c50233269f3abe1c48ca6b288dcd0fb1d1c679733"}, + {file = "coverage-4.4.2-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:f8c55dd0f56d3d618dfacf129e010cbe5d5f94b6951c1b2f13ab1a2f79c284da"}, + {file = "coverage-4.4.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cdd92dd9471e624cd1d8c1a2703d25f114b59b736b0f1f659a98414e535ffb3d"}, + {file = "coverage-4.4.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2ad357d12971e77360034c1596011a03f50c0f9e1ecd12e081342b8d1aee2236"}, + {file = "coverage-4.4.2-cp27-cp27m-win32.whl", hash = "sha256:700d7579995044dc724847560b78ac786f0ca292867447afda7727a6fbaa082e"}, + {file = "coverage-4.4.2-cp27-cp27m-win_amd64.whl", hash = "sha256:66f393e10dd866be267deb3feca39babba08ae13763e0fc7a1063cbe1f8e49f6"}, + {file = "coverage-4.4.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:e9a0e1caed2a52f15c96507ab78a48f346c05681a49c5b003172f8073da6aa6b"}, + {file = "coverage-4.4.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:eea9135432428d3ca7ee9be86af27cb8e56243f73764a9b6c3e0bda1394916be"}, + {file = "coverage-4.4.2-cp33-cp33m-macosx_10_10_x86_64.whl", hash = "sha256:5ff16548492e8a12e65ff3d55857ccd818584ed587a6c2898a9ebbe09a880674"}, + {file = "coverage-4.4.2-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:d00e29b78ff610d300b2c37049a41234d48ea4f2d2581759ebcf67caaf731c31"}, + {file = "coverage-4.4.2-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:87d942863fe74b1c3be83a045996addf1639218c2cb89c5da18c06c0fe3917ea"}, + {file = "coverage-4.4.2-cp34-cp34m-macosx_10_10_x86_64.whl", hash = "sha256:358d635b1fc22a425444d52f26287ae5aea9e96e254ff3c59c407426f44574f4"}, + {file = "coverage-4.4.2-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:81912cfe276e0069dca99e1e4e6be7b06b5fc8342641c6b472cb2fed7de7ae18"}, + {file = "coverage-4.4.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:079248312838c4c8f3494934ab7382a42d42d5f365f0cf7516f938dbb3f53f3f"}, + {file = "coverage-4.4.2-cp34-cp34m-win32.whl", hash = "sha256:b0059630ca5c6b297690a6bf57bf2fdac1395c24b7935fd73ee64190276b743b"}, + {file = "coverage-4.4.2-cp34-cp34m-win_amd64.whl", hash = "sha256:493082f104b5ca920e97a485913de254cbe351900deed72d4264571c73464cd0"}, + {file = "coverage-4.4.2-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:e3ba9b14607c23623cf38f90b23f5bed4a3be87cbfa96e2e9f4eabb975d1e98b"}, + {file = "coverage-4.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:82cbd3317320aa63c65555aa4894bf33a13fb3a77f079059eb5935eea415938d"}, + {file = "coverage-4.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9721f1b7275d3112dc7ccf63f0553c769f09b5c25a26ee45872c7f5c09edf6c1"}, + {file = "coverage-4.4.2-cp35-cp35m-win32.whl", hash = "sha256:bd4800e32b4c8d99c3a2c943f1ac430cbf80658d884123d19639bcde90dad44a"}, + {file = "coverage-4.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:f29841e865590af72c4b90d7b5b8e93fd560f5dea436c1d5ee8053788f9285de"}, + {file = "coverage-4.4.2-cp36-cp36m-macosx_10_12_x86_64.whl", hash = "sha256:f3a5c6d054c531536a83521c00e5d4004f1e126e2e2556ce399bef4180fbe540"}, + {file = "coverage-4.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:dd707a21332615108b736ef0b8513d3edaf12d2a7d5fc26cd04a169a8ae9b526"}, + {file = "coverage-4.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2e1a5c6adebb93c3b175103c2f855eda957283c10cf937d791d81bef8872d6ca"}, + {file = "coverage-4.4.2-cp36-cp36m-win32.whl", hash = "sha256:f87f522bde5540d8a4b11df80058281ac38c44b13ce29ced1e294963dd51a8f8"}, + {file = "coverage-4.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a7cfaebd8f24c2b537fa6a271229b051cdac9c1734bb6f939ccfc7c055689baa"}, + {file = "coverage-4.4.2.tar.gz", hash = "sha256:309d91bd7a35063ec7a0e4d75645488bfab3f0b66373e7722f23da7f5b0f34cc"}, + {file = "coverage-4.4.2.win-amd64-py2.7.exe", hash = "sha256:b6cebae1502ce5b87d7c6f532fa90ab345cfbda62b95aeea4e431e164d498a3d"}, + {file = "coverage-4.4.2.win-amd64-py3.4.exe", hash = "sha256:a4497faa4f1c0fc365ba05eaecfb6b5d24e3c8c72e95938f9524e29dadb15e76"}, + {file = "coverage-4.4.2.win-amd64-py3.5.exe", hash = "sha256:2b4d7f03a8a6632598cbc5df15bbca9f778c43db7cf1a838f4fa2c8599a8691a"}, + {file = "coverage-4.4.2.win-amd64-py3.6.exe", hash = "sha256:1afccd7e27cac1b9617be8c769f6d8a6d363699c9b86820f40c74cfb3328921c"}, + {file = "coverage-4.4.2.win32-py2.7.exe", hash = "sha256:0388c12539372bb92d6dde68b4627f0300d948965bbb7fc104924d715fdc0965"}, + {file = "coverage-4.4.2.win32-py3.4.exe", hash = "sha256:ab3508df9a92c1d3362343d235420d08e2662969b83134f8a97dc1451cbe5e84"}, + {file = "coverage-4.4.2.win32-py3.5.exe", hash = "sha256:43a155eb76025c61fc20c3d03b89ca28efa6f5be572ab6110b2fb68eda96bfea"}, + {file = "coverage-4.4.2.win32-py3.6.exe", hash = "sha256:f98b461cb59f117887aa634a66022c0bd394278245ed51189f63a036516e32de"}, +] +distlib = [ + {file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"}, + {file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"}, +] +filelock = [ + {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, + {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, +] +identify = [ + {file = "identify-1.4.21-py2.py3-none-any.whl", hash = "sha256:dac33eff90d57164e289fb20bf4e131baef080947ee9bf45efcd0da8d19064bf"}, + {file = "identify-1.4.21.tar.gz", hash = "sha256:c4d07f2b979e3931894170a9e0d4b8281e6905ea6d018c326f7ffefaf20db680"}, +] +idna = [ + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, +] +idna-ssl = [ + {file = "idna-ssl-1.1.0.tar.gz", hash = "sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"}, +] +importlib-metadata = [ + {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, + {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, +] +importlib-resources = [ + {file = "importlib_resources-3.0.0-py2.py3-none-any.whl", hash = "sha256:d028f66b66c0d5732dae86ba4276999855e162a749c92620a38c1d779ed138a7"}, + {file = "importlib_resources-3.0.0.tar.gz", hash = "sha256:19f745a6eca188b490b1428c8d1d4a0d2368759f32370ea8fb89cad2ab1106c3"}, +] +more-itertools = [ + {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, + {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, +] +multidict = [ + {file = "multidict-4.7.6-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000"}, + {file = "multidict-4.7.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1ece5a3369835c20ed57adadc663400b5525904e53bae59ec854a5d36b39b21a"}, + {file = "multidict-4.7.6-cp35-cp35m-win32.whl", hash = "sha256:5141c13374e6b25fe6bf092052ab55c0c03d21bd66c94a0e3ae371d3e4d865a5"}, + {file = "multidict-4.7.6-cp35-cp35m-win_amd64.whl", hash = "sha256:9456e90649005ad40558f4cf51dbb842e32807df75146c6d940b6f5abb4a78f3"}, + {file = "multidict-4.7.6-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:e0d072ae0f2a179c375f67e3da300b47e1a83293c554450b29c900e50afaae87"}, + {file = "multidict-4.7.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3750f2205b800aac4bb03b5ae48025a64e474d2c6cc79547988ba1d4122a09e2"}, + {file = "multidict-4.7.6-cp36-cp36m-win32.whl", hash = "sha256:f07acae137b71af3bb548bd8da720956a3bc9f9a0b87733e0899226a2317aeb7"}, + {file = "multidict-4.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:6513728873f4326999429a8b00fc7ceddb2509b01d5fd3f3be7881a257b8d463"}, + {file = "multidict-4.7.6-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:feed85993dbdb1dbc29102f50bca65bdc68f2c0c8d352468c25b54874f23c39d"}, + {file = "multidict-4.7.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fcfbb44c59af3f8ea984de67ec7c306f618a3ec771c2843804069917a8f2e255"}, + {file = "multidict-4.7.6-cp37-cp37m-win32.whl", hash = "sha256:4538273208e7294b2659b1602490f4ed3ab1c8cf9dbdd817e0e9db8e64be2507"}, + {file = "multidict-4.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d14842362ed4cf63751648e7672f7174c9818459d169231d03c56e84daf90b7c"}, + {file = "multidict-4.7.6-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c026fe9a05130e44157b98fea3ab12969e5b60691a276150db9eda71710cd10b"}, + {file = "multidict-4.7.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:51a4d210404ac61d32dada00a50ea7ba412e6ea945bbe992e4d7a595276d2ec7"}, + {file = "multidict-4.7.6-cp38-cp38-win32.whl", hash = "sha256:5cf311a0f5ef80fe73e4f4c0f0998ec08f954a6ec72b746f3c179e37de1d210d"}, + {file = "multidict-4.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:7388d2ef3c55a8ba80da62ecfafa06a1c097c18032a501ffd4cabbc52d7f2b19"}, + {file = "multidict-4.7.6.tar.gz", hash = "sha256:fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430"}, +] +nodeenv = [ + {file = "nodeenv-1.4.0-py2.py3-none-any.whl", hash = "sha256:4b0b77afa3ba9b54f4b6396e60b0c83f59eaeb2d63dc3cc7a70f7f4af96c82bc"}, +] +packaging = [ + {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, + {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, +] +pluggy = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] +pre-commit = [ + {file = "pre_commit-2.1.1-py2.py3-none-any.whl", hash = "sha256:09ebe467f43ce24377f8c2f200fe3cd2570d328eb2ce0568c8e96ce19da45fa6"}, + {file = "pre_commit-2.1.1.tar.gz", hash = "sha256:f8d555e31e2051892c7f7b3ad9f620bd2c09271d87e9eedb2ad831737d6211eb"}, +] +py = [ + {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, + {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, +] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] +pytest = [ + {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, + {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, +] +pytest-cov = [ + {file = "pytest-cov-2.10.0.tar.gz", hash = "sha256:1a629dc9f48e53512fcbfda6b07de490c374b0c83c55ff7a1720b3fccff0ac87"}, + {file = "pytest_cov-2.10.0-py2.py3-none-any.whl", hash = "sha256:6e6d18092dce6fad667cd7020deed816f858ad3b49d5b5e2b1cc1c97a4dba65c"}, +] +pyyaml = [ + {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, + {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, + {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, + {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, + {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, +] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] +toml = [ + {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, + {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"}, +] +tox = [ + {file = "tox-3.16.1-py2.py3-none-any.whl", hash = "sha256:60c3793f8ab194097ec75b5a9866138444f63742b0f664ec80be1222a40687c5"}, + {file = "tox-3.16.1.tar.gz", hash = "sha256:9a746cda9cadb9e1e05c7ab99f98cfcea355140d2ecac5f97520be94657c3bc7"}, +] +typing-extensions = [ + {file = "typing_extensions-3.7.4.2-py2-none-any.whl", hash = "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"}, + {file = "typing_extensions-3.7.4.2-py3-none-any.whl", hash = "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5"}, + {file = "typing_extensions-3.7.4.2.tar.gz", hash = "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"}, +] +virtualenv = [ + {file = "virtualenv-20.0.25-py2.py3-none-any.whl", hash = "sha256:ffffcb3c78a671bb3d590ac3bc67c081ea2188befeeb058870cba13e7f82911b"}, + {file = "virtualenv-20.0.25.tar.gz", hash = "sha256:f332ba0b2dfbac9f6b1da9f11224f0036b05cdb4df23b228527c2a2d5504aeed"}, +] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] +yarl = [ + {file = "yarl-1.4.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b"}, + {file = "yarl-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1"}, + {file = "yarl-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080"}, + {file = "yarl-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a"}, + {file = "yarl-1.4.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f"}, + {file = "yarl-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea"}, + {file = "yarl-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb"}, + {file = "yarl-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70"}, + {file = "yarl-1.4.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d"}, + {file = "yarl-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce"}, + {file = "yarl-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"}, + {file = "yarl-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce"}, + {file = "yarl-1.4.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b"}, + {file = "yarl-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae"}, + {file = "yarl-1.4.2-cp38-cp38-win32.whl", hash = "sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462"}, + {file = "yarl-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6"}, + {file = "yarl-1.4.2.tar.gz", hash = "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"}, +] +zipp = [ + {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, + {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, +] diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 00000000..efa46ec0 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..eeb3552a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "pymfy" +version = "0.9.0" +description = "Python wrapper to interact with internal Somfy TaHoma API" +authors = ["Mick Vleeshouwer", "Vincent Le Bourlot", "Thibaut Etienne"] +license = "GPL-3.0-only" +readme = "README.md" +homepage = "https://github.com/iMicknl/python-tahoma-api" +repository = "https://github.com/iMicknl/python-tahoma-api" + +[tool.poetry.dependencies] +python = ">=3.6" +aiohttp = "^3.6.2" + +[tool.poetry.dev-dependencies] +tox = ">=3.0" +pytest = ">=4.1" +pytest-cov = ">=2.8.1" +pre-commit = ">=1.10" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..483a444f --- /dev/null +++ b/setup.cfg @@ -0,0 +1,23 @@ +[flake8] +max-line-length = 80 +select = C,E,F,W,B,B950 +ignore = E501 + +[isort] +known_third_party = aiohttp,setuptools +multi_line_output=3 +include_trailing_comma=true +force_grid_wrap=0 +use_parentheses=true +line_length=88 + +[mypy] +check_untyped_defs = True +disallow_untyped_defs = True +disallow_any_generics = True +warn_no_return = True +no_implicit_optional = True +ignore_missing_imports = True + +[mypy-tests.*] +ignore_errors = True diff --git a/setup.py b/setup.py deleted file mode 100644 index 20651f93..00000000 --- a/setup.py +++ /dev/null @@ -1,23 +0,0 @@ -from setuptools import setup, find_packages - -with open("README.md", "r") as fh: - long_description = fh.read() - -setup( - name="tahoma_api", - version="0.1.0", - author="Mick Vleeshouwer", - author_email="mick@imick.nl", - description="Python wrapper to interact with internal Somfy TaHama API", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/iMicknl/python-tahoma-api", - classifiers=( - 'Development Status :: 3 - Alpha', - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ), - packages=find_packages(), - install_requires=['aiohttp==3.6.1'], -) From 654f7514a075abc097dbfb8877968da450834552 Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:17:51 +0200 Subject: [PATCH 02/13] Add pre-commit with some linters - black - mypy - isort - flake8 --- .pre-commit-config.yaml | 34 ++++++++++++++++++++++++++++++++++ .pylintrc | 21 +++++++++++++++++++++ tahoma_api/__init__.py | 2 +- tahoma_api/client.py | 19 +++++++++---------- tahoma_api/models.py | 1 + test.py | 4 +++- 6 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 .pylintrc diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..bae6b0ea --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,34 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.5.0 + hooks: + - id: check-json + - id: trailing-whitespace + - id: end-of-file-fixer + - repo: https://github.com/python/black + rev: 19.10b0 + hooks: + - id: black + language_version: python3.8 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.4.0 + hooks: + - id: flake8 + language_version: python3.8 + - repo: https://github.com/pre-commit/mirrors-mypy + rev: v0.740 + hooks: + - id: mypy + - repo: https://github.com/pre-commit/mirrors-pylint + rev: v2.4.4 + hooks: + - id: pylint + - repo: https://github.com/asottile/seed-isort-config + rev: v1.9.4 + hooks: + - id: seed-isort-config + - repo: https://github.com/pre-commit/mirrors-isort + rev: v4.3.21 + hooks: + - id: isort + additional_dependencies: ['toml'] diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 00000000..47dff15e --- /dev/null +++ b/.pylintrc @@ -0,0 +1,21 @@ +[BASIC] +good-names=id + +[LOGGING] +logging-format-style=fstr + +[MESSAGES CONTROL] +disable= + missing-module-docstring, + missing-class-docstring, + missing-function-docstring, + no-self-use, + too-few-public-methods, + too-many-public-methods, + too-many-arguments, + bad-continuation, + import-error, + unsubscriptable-object, + fixme, + pointless-string-statement, + redefined-builtin diff --git a/tahoma_api/__init__.py b/tahoma_api/__init__.py index 46a6aebf..ce397303 100644 --- a/tahoma_api/__init__.py +++ b/tahoma_api/__init__.py @@ -1,4 +1,4 @@ from .client import * from .exceptions import * -__version__ = '0.1.0' \ No newline at end of file +__version__ = "0.1.0" diff --git a/tahoma_api/client.py b/tahoma_api/client.py index 7c752248..8de3187f 100644 --- a/tahoma_api/client.py +++ b/tahoma_api/client.py @@ -1,13 +1,13 @@ """ Python wrapper for the Tahoma API """ -import aiohttp - import asyncio -import logging -import time import hashlib +import json +import logging import math import random -import json +import time + +import aiohttp from .exceptions import * from .models import * @@ -95,10 +95,10 @@ async def get_devices(self, refresh=False) -> List[Device]: return devices async def register_event_listener(self) -> str: - """ - Register a new setup event listener on the current session and return a new listener id. - Only one listener may be registered on a given session. - Registering an new listener will invalidate the previous one if any. + """ + Register a new setup event listener on the current session and return a new listener id. + Only one listener may be registered on a given session. + Registering an new listener will invalidate the previous one if any. Note that registering an event listener drastically reduces the session timeout : listening sessions are expected to call the /events/{listenerId}/fetch API on a regular basis. """ response = await self.__make_http_request("POST", "events/register") @@ -157,4 +157,3 @@ async def __make_http_request( if response.status > 400 and response.status < 500: # implement retry logic print("TODO") - diff --git a/tahoma_api/models.py b/tahoma_api/models.py index f4810373..7d7690ce 100644 --- a/tahoma_api/models.py +++ b/tahoma_api/models.py @@ -1,5 +1,6 @@ from typing import Any, Dict, List, Optional, Union + # TODO Rewrite camelCase to snake_case class Device: __slots__ = ( diff --git a/test.py b/test.py index e037aeba..e5db4127 100644 --- a/test.py +++ b/test.py @@ -1,7 +1,8 @@ import asyncio -from tahoma_api import TahomaClient import time +from tahoma_api import TahomaClient + username = "" password = "" @@ -26,4 +27,5 @@ async def main(): except Exception as exception: print(exception) + asyncio.run(main()) From e582813c500188804a7b632062a45d31e2dcca9b Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:18:16 +0200 Subject: [PATCH 03/13] Add tox.ini --- tox.ini | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 tox.ini diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..51b30676 --- /dev/null +++ b/tox.ini @@ -0,0 +1,23 @@ +[tox] +isolated_build = true +envlist = lint,py3{6,7,8} +skipsdist = True + +;[testenv] +;whitelist_externals = poetry +;commands = +; poetry install +; poetry run pytest --cov=pymfy {posargs} + +[testenv:lint] +basepython = python3.8 +skip_install=True +deps = pre-commit>=1.10 +commands = + poetry run pre-commit run --all-files + +[gh-actions] +python = + 3.6: py36 + 3.7: py37 + 3.8: py38, lint From 8917debfe23b96e9cbe598e712800b9315eaa1fb Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:18:34 +0200 Subject: [PATCH 04/13] Add Github Action workflow to run linters --- .github/workflows/main.yaml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/main.yaml diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 00000000..027eae9d --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,37 @@ +name: CI + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + tests: + name: "Python ${{ matrix.python-version }}" + runs-on: "ubuntu-latest" + + strategy: + matrix: + python-version: ["3.6", "3.7", "3.8"] + + steps: + - uses: "actions/checkout@v2" + - uses: "actions/setup-python@v1" + with: + python-version: "${{ matrix.python-version }}" + + - name: Install and set up Poetry + run: | + curl -o get-poetry.py https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py + python get-poetry.py -y + + - name: "Install tox" + run: | + python -m pip install --upgrade tox tox-gh-actions + - name: "Run tox targets for ${{ matrix.python-version }}" + run: | + source $HOME/.poetry/env + python -m tox From c369e7513f3cb5591004a6d0220ab70e02b1368b Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:19:49 +0200 Subject: [PATCH 05/13] Don't ignore .vscode - Can be useful to share the configuration --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index c42b4c7a..aa44ee2a 100644 --- a/.gitignore +++ b/.gitignore @@ -128,4 +128,3 @@ dmypy.json # Pyre type checker .pyre/ -.vscode \ No newline at end of file From 75e3b03adcc9be29e5bf06c1896c567e5f2935bc Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:32:51 +0200 Subject: [PATCH 06/13] Add Pycharm configuration --- .gitignore | 22 ++++++++++++++++ .idea/inspectionProfiles/Project_Default.xml | 25 +++++++++++++++++++ .../inspectionProfiles/profiles_settings.xml | 6 +++++ .idea/misc.xml | 4 +++ .idea/modules.xml | 8 ++++++ .idea/python-tahoma-api.iml | 12 +++++++++ .idea/vcs.xml | 6 +++++ 7 files changed, 83 insertions(+) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/python-tahoma-api.iml create mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index aa44ee2a..61255684 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,25 @@ dmypy.json # Pyre type checker .pyre/ + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# File-based project format +*.iws \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..a2c2f815 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..ca7a6d13 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..5e2be116 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/python-tahoma-api.iml b/.idea/python-tahoma-api.iml new file mode 100644 index 00000000..6b913d2d --- /dev/null +++ b/.idea/python-tahoma-api.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From e2024c13d0b439fc1fb8b0b25a9e1fa3e828be8b Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 09:33:05 +0200 Subject: [PATCH 07/13] Add installation step by step --- README.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/README.md b/README.md index 4bff872c..ba415757 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,43 @@ # Somfy TaHoma +

+ + +

+ An updated and async version of the original [tahoma-api](https://github.com/philklei/tahoma-api) by [@philklei](https://github.com/philklei). The aim of this wrapper is to offer an easy to consume Python wrapper for the internal API's used by tahomalink.com. Somfy TaHoma has an official API, which can be consumed via the [Somfy-open-api](https://github.com/tetienne/somfy-open-api). Unfortunately only a few device classes are supported via the official API, thus the need for this wrapper. This package is written for the Home Assistant [ha-tahoma](https://github.com/iMicknl/ha-tahoma) integration, but could be used by any Python project interacting with Somfy TaHoma devices. + +# Development + +## Installation + +* For Linux, install [pyenv](https://github.com/pyenv/pyenv) using [pyenv-installer](https://github.com/pyenv/pyenv-installer) +* For MacOS, run `brew install pyenv` +* Don't forget to update your `.bashrc` file (or similar): + ``` + export PATH="~/.pyenv/bin:$PATH" + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-init -)" + ``` +* Install the required [dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) +* Install [poetry](https://python-poetry.org): `curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python` +* Clone this repository +* `cd python-tahoma-api` +* Install the required Python version: `pyenv install` +* Init the project: `poetry install` +* Run `poetry run pre-commit install` + +## PyCharm +As IDE you can use [PyCharm](https://www.jetbrains.com/pycharm/). + +Using snap, run `snap install pycharm --classic` to install it. + +For MacOS, run `brew cask install pycharm-ce` + +Once launched, don't create a new project, but open an existing one and select the **python-tahoma-api** folder. + +Go to *File | Settings | Project: nre-tag | Project Interpreter*. Your interpreter must look like `/python-tahoma-api/.venv/bin/python` From 019decf5df7de1f8fb15e124f80a387d0fb31cab Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 12:27:43 +0200 Subject: [PATCH 08/13] Exclude .venv from Pycharm --- .idea/python-tahoma-api.iml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.idea/python-tahoma-api.iml b/.idea/python-tahoma-api.iml index 6b913d2d..44e96509 100644 --- a/.idea/python-tahoma-api.iml +++ b/.idea/python-tahoma-api.iml @@ -1,7 +1,9 @@ - + + + @@ -9,4 +11,4 @@ \ No newline at end of file + From 7a2f85a55c174d8484cf27f39fd316b3c01f0e69 Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 12:28:00 +0200 Subject: [PATCH 09/13] Set initial version to 0.1.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index eeb3552a..5d8b249c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pymfy" -version = "0.9.0" +version = "0.1.0" description = "Python wrapper to interact with internal Somfy TaHoma API" authors = ["Mick Vleeshouwer", "Vincent Le Bourlot", "Thibaut Etienne"] license = "GPL-3.0-only" From e5b8295b526af4b3583bc4910a926ad036e3e583 Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 12:28:38 +0200 Subject: [PATCH 10/13] Apply linter remarks --- setup.cfg | 2 +- tahoma_api/__init__.py | 4 --- tahoma_api/client.py | 68 ++++++++++++++++++++++-------------------- tahoma_api/models.py | 61 ++++++++++++++++++++----------------- test.py | 33 ++++++++++---------- 5 files changed, 85 insertions(+), 83 deletions(-) diff --git a/setup.cfg b/setup.cfg index 483a444f..1ec0651a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,7 +4,7 @@ select = C,E,F,W,B,B950 ignore = E501 [isort] -known_third_party = aiohttp,setuptools +known_third_party = aiohttp multi_line_output=3 include_trailing_comma=true force_grid_wrap=0 diff --git a/tahoma_api/__init__.py b/tahoma_api/__init__.py index ce397303..e69de29b 100644 --- a/tahoma_api/__init__.py +++ b/tahoma_api/__init__.py @@ -1,4 +0,0 @@ -from .client import * -from .exceptions import * - -__version__ = "0.1.0" diff --git a/tahoma_api/client.py b/tahoma_api/client.py index 8de3187f..88742fac 100644 --- a/tahoma_api/client.py +++ b/tahoma_api/client.py @@ -1,24 +1,17 @@ """ Python wrapper for the Tahoma API """ -import asyncio -import hashlib -import json -import logging -import math -import random -import time +from typing import Any, List, Optional import aiohttp -from .exceptions import * -from .models import * +from tahoma_api.models import Device API_URL = "https://tahomalink.com/enduser-mobile-web/enduserAPI/" # /doc for API doc -class TahomaClient(object): +class TahomaClient: """ Interface class for the Tahoma API """ - def __init__(self, username, password, api_url=API_URL): + def __init__(self, username: str, password: str, api_url: str = API_URL) -> None: """ Constructor @@ -31,10 +24,10 @@ def __init__(self, username, password, api_url=API_URL): self.api_url = api_url self.__cookies = None - self.__devices = None + self.devices: List[Device] = [] self.__roles = None - async def login(self): + async def login(self) -> bool: payload = {"userId": self.username, "userPassword": self.password} @@ -44,8 +37,10 @@ async def login(self): result = await response.json() # 401 - # {'errorCode': 'AUTHENTICATION_ERROR', 'error': 'Bad credentials'} - # {'errorCode': 'AUTHENTICATION_ERROR', 'error': 'Your setup cannot be accessed through this application'} + # {'errorCode': 'AUTHENTICATION_ERROR', + # 'error': 'Bad credentials'} + # {'errorCode': 'AUTHENTICATION_ERROR', + # 'error': 'Your setup cannot be accessed through this application'} if response.status == 401: if result["errorCode"] == "AUTHENTICATION_ERROR": @@ -67,13 +62,14 @@ async def login(self): return False # todo throw error # 401 - # {'errorCode': 'AUTHENTICATION_ERROR', 'error': 'Too many requests, try again later : login with xxx@xxx.tld'} + # {'errorCode': 'AUTHENTICATION_ERROR', + # 'error': 'Too many requests, try again later : login with xxx@xxx.tld'} # TODO Add retry logic on too many requests + for debug, log requests + timespans # 200 # {'success': True, 'roles': [{'name': 'ENDUSER'}]} if response.status == 200: - if result["success"] == True: + if result["success"]: self.__roles = result["roles"] self.__cookies = response.cookies @@ -83,23 +79,28 @@ async def login(self): print(response.status) print(result) - async def get_devices(self, refresh=False) -> List[Device]: - if self.__devices and refresh == False: - return self._devices + return False + + async def get_devices(self, refresh: bool = False) -> List[Device]: + if self.devices and not refresh: + return self.devices response = await self.__make_http_request("GET", "setup/devices") devices = [Device(**d) for d in response] - self.__devices = devices + self.devices = devices return devices async def register_event_listener(self) -> str: """ - Register a new setup event listener on the current session and return a new listener id. + Register a new setup event listener on the current session and return a new + listener id. Only one listener may be registered on a given session. Registering an new listener will invalidate the previous one if any. - Note that registering an event listener drastically reduces the session timeout : listening sessions are expected to call the /events/{listenerId}/fetch API on a regular basis. + Note that registering an event listener drastically reduces the session + timeout : listening sessions are expected to call the /events/{listenerId}/fetch + API on a regular basis. """ response = await self.__make_http_request("POST", "events/register") listener_id = response.get("id") @@ -108,23 +109,26 @@ async def register_event_listener(self) -> str: async def fetch_event_listener(self, listener_id: str) -> List[Any]: """ - Fetch new events from a registered event listener. Fetched events are removed from the listener buffer. Return an empty response if no event is available. - Per-session rate-limit : 1 calls per 1 SECONDS period for this particular operation (polling) + Fetch new events from a registered event listener. Fetched events are removed + from the listener buffer. Return an empty response if no event is available. + Per-session rate-limit : 1 calls per 1 SECONDS period for this particular + operation (polling) """ response = await self.__make_http_request("POST", f"events/{listener_id}/fetch") return response async def execute_action_group( - self, actions: [Command], label="python-tahoma-api", priority=False + self, actions: List[Command], label: str = "python-tahoma-api" ) -> List[Any]: - """ - Execute a non-persistent action group - The executed action group does not have to be persisted on the server before use. - Per-session rate-limit : 50 calls per 24 HOURS period for all operations of the same category (exec) + """ Execute a non-persistent action group. + The executed action group does not have to be persisted on the server before + use. + Per-session rate-limit : 50 calls per 24 HOURS period for all operations of the + same category (exec) """ payload = {"label": label, "actions": actions} - response = await self.__make_http_request("POST", f"exec/apply", payload) + response = await self.__make_http_request("POST", "exec/apply", payload) return response @@ -154,6 +158,6 @@ async def __make_http_request( if response.status == 200: return result - if response.status > 400 and response.status < 500: + if 400 < response.status < 500: # implement retry logic print("TODO") diff --git a/tahoma_api/models.py b/tahoma_api/models.py index 7d7690ce..49af657c 100644 --- a/tahoma_api/models.py +++ b/tahoma_api/models.py @@ -1,25 +1,25 @@ -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Optional # TODO Rewrite camelCase to snake_case class Device: __slots__ = ( "id", - "creationTime", - "lastUpdateTime", + "creation_time", + "last_update_time", "label", - "deviceURL", + "device_url", "shortcut", - "controllableName", + "controllable_name", "definition", "states", - "dataProperties", + "data_properties", "available", "enabled", - "widgetName", + "widget_name", "widget", - "uiClass", - "qualifiedName", + "ui_class", + "qualified_name", "type", ) @@ -27,54 +27,59 @@ def __init__( self, *, label: str, - deviceURL: str, - controllableName: str, + device_url: str, + controllable_name: str, # definition: Dict[List[Any]], states: List[Dict[str, Any]], - dataProperties: Optional[List[Dict[str, Any]]] = None, - widgetName: Optional[str] = None, - uiClass: str, - qualifiedName: Optional[str] = None, + data_properties: Optional[List[Dict[str, Any]]] = None, + widget_name: Optional[str] = None, + ui_class: str, + qualified_name: Optional[str] = None, type: str, - **kwargs: Any - ): - self.id = deviceURL - self.deviceURL = deviceURL + **_: Any + ) -> None: + self.id = device_url + self.device_url = device_url self.label = label - self.controllableName = controllableName + self.controllable_name = controllable_name self.states = [State(**s) for s in states] + self.data_properties = data_properties + self.widget_name = widget_name + self.ui_class = ui_class + self.qualified_name = qualified_name + self.type = type class StateDefinition: __slots__ = ( - "qualifiedName", + "qualified_name", "type", "values", ) def __init__( - self, qualifiedName: str, type: str, values: Optional[str], **kwargs: Any - ): - self.qualifiedName = qualifiedName + self, qualified_name: str, type: str, values: Optional[str], **_: Any + ) -> None: + self.qualified_name = qualified_name self.type = type self.values = values class CommandDefinition: __slots__ = ( - "commandName", + "command_name", "nparams", ) - def __init__(self, commandName: str, nparams: int, **kwargs: Any): - self.commandName = commandName + def __init__(self, command_name: str, nparams: int, **_: Any) -> None: + self.command_name = command_name self.nparams = nparams class State: __slots__ = "name", "value", "type" - def __init__(self, name: str, value: str, type: str, **kwargs: Any): + def __init__(self, name: str, value: str, type: str, **_: Any): self.name = name self.value = value self.type = type diff --git a/test.py b/test.py index e5db4127..b482fa61 100644 --- a/test.py +++ b/test.py @@ -1,31 +1,28 @@ import asyncio import time -from tahoma_api import TahomaClient +from tahoma_api.client import TahomaClient -username = "" -password = "" +# TODO use .env file +USERNAME = "" +PASSWORD = "" -async def main(): - client = TahomaClient(username, password) +async def main() -> None: + client = TahomaClient(USERNAME, PASSWORD) - try: - login = await client.login() - devices = await client.get_devices() + await client.login() + devices = await client.get_devices() - for device in devices: - print(f"{device.label} ({device.id})") + for device in devices: + print(f"{device.label} ({device.id})") - listener_id = await client.register_event_listener() + listener_id = await client.register_event_listener() - while True: - events = await client.fetch_event_listener(listener_id) - print(events) - time.sleep(2) - - except Exception as exception: - print(exception) + while True: + events = await client.fetch_event_listener(listener_id) + print(events) + time.sleep(2) asyncio.run(main()) From 0ece41237256d5fb22e55ff0c1064148db7a0cae Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 14:15:07 +0200 Subject: [PATCH 11/13] Comment method using undefined Command type --- tahoma_api/client.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tahoma_api/client.py b/tahoma_api/client.py index 88742fac..702510cb 100644 --- a/tahoma_api/client.py +++ b/tahoma_api/client.py @@ -118,19 +118,19 @@ async def fetch_event_listener(self, listener_id: str) -> List[Any]: return response - async def execute_action_group( - self, actions: List[Command], label: str = "python-tahoma-api" - ) -> List[Any]: - """ Execute a non-persistent action group. - The executed action group does not have to be persisted on the server before - use. - Per-session rate-limit : 50 calls per 24 HOURS period for all operations of the - same category (exec) - """ - payload = {"label": label, "actions": actions} - response = await self.__make_http_request("POST", "exec/apply", payload) - - return response + # async def execute_action_group( + # self, actions: List[Command], label: str = "python-tahoma-api" + # ) -> List[Any]: + # """ Execute a non-persistent action group. + # The executed action group does not have to be persisted on the server before + # use. + # Per-session rate-limit : 50 calls per 24 HOURS period for all operations of the + # same category (exec) + # """ + # payload = {"label": label, "actions": actions} + # response = await self.__make_http_request("POST", "exec/apply", payload) + # + # return response async def __make_http_request( self, method: str, endpoint: str, payload: Optional[Any] = None From df95c01e2299282f05841877ad4d65869fa86fc3 Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 14:17:18 +0200 Subject: [PATCH 12/13] Bypass too-many-instance-attributes for the models --- tahoma_api/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tahoma_api/models.py b/tahoma_api/models.py index 49af657c..0ec69cf2 100644 --- a/tahoma_api/models.py +++ b/tahoma_api/models.py @@ -1,7 +1,8 @@ from typing import Any, Dict, List, Optional +# pylint: disable=unused-argument, too-many-instance-attributes + -# TODO Rewrite camelCase to snake_case class Device: __slots__ = ( "id", From f4e6e18fdc1e14684b2115201a32570df67489bb Mon Sep 17 00:00:00 2001 From: Thibaut Etienne Date: Tue, 7 Jul 2020 14:19:32 +0200 Subject: [PATCH 13/13] Fixing end-of file --- .gitignore | 2 +- .idea/inspectionProfiles/Project_Default.xml | 2 +- .../inspectionProfiles/profiles_settings.xml | 2 +- .idea/misc.xml | 2 +- .idea/modules.xml | 2 +- .idea/vcs.xml | 2 +- README.md | 4 +- docs/callable_names.txt | 2 +- docs/jquery-1.10.2-ui.js | 2 +- docs/jquery-1.10.2.js | 2 +- docs/tahoma_api.html | 82 +++++++++---------- poetry.toml | 2 +- 12 files changed, 53 insertions(+), 53 deletions(-) diff --git a/.gitignore b/.gitignore index 61255684..56d70662 100644 --- a/.gitignore +++ b/.gitignore @@ -149,4 +149,4 @@ dmypy.json .idea/**/dbnavigator.xml # File-based project format -*.iws \ No newline at end of file +*.iws diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index a2c2f815..d01a903d 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -22,4 +22,4 @@ - \ No newline at end of file + diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml index 105ce2da..cc5462da 100644 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -3,4 +3,4 @@