Mkdocs #76
14 changed files with 609 additions and 544 deletions
11
Pipfile
11
Pipfile
|
|
@ -4,10 +4,11 @@ verify_ssl = true
|
||||||
name = "pypi"
|
name = "pypi"
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
hbmqtt = "*"
|
hbmqtt = "~=0.9"
|
||||||
aiohttp = "*"
|
aiohttp = "~=3.6"
|
||||||
tinydb = "*"
|
tinydb = "~=3.15"
|
||||||
pyyaml = ">=4.2b1"
|
pyyaml = "~=5.2"
|
||||||
|
atomicwrites = "~=1.3"
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
black = "*"
|
black = "*"
|
||||||
|
|
@ -21,7 +22,7 @@ testfixtures = "*"
|
||||||
codecov = "*"
|
codecov = "*"
|
||||||
autoflake = "*"
|
autoflake = "*"
|
||||||
pytest-env = "*"
|
pytest-env = "*"
|
||||||
pytest = "==5.0.1"
|
pytest = "*"
|
||||||
pytest-asyncio = "*"
|
pytest-asyncio = "*"
|
||||||
|
|
||||||
[pipenv]
|
[pipenv]
|
||||||
|
|
|
||||||
575
Pipfile.lock
generated
575
Pipfile.lock
generated
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "1aa141a03e494ce194eb124bf884b58efa8d265ad2513344e410c85dbcf4024f"
|
"sha256": "ef9a71350a18ce8bacfa3cdfb4cb9b55873aceb53e78ca000804273af2652d15"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {},
|
"requires": {},
|
||||||
|
|
@ -16,31 +16,21 @@
|
||||||
"default": {
|
"default": {
|
||||||
"aiohttp": {
|
"aiohttp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:02396865118790ebb0bd14d6935e9e4fa80d87683240618894e585048a8b83ec",
|
"sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e",
|
||||||
"sha256:0f448b5d5cd45e642b9fcf4798e48cca4149ae479022f59bd67a47caed44657e",
|
"sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326",
|
||||||
"sha256:1af72f53ccead6d161296e576aa2b5d0c6c7403a389601dd7aa7a7a30a9f41c3",
|
"sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a",
|
||||||
"sha256:32eeef64a5bcf6dc652f19e020b16f36ec66d291957f62ffad18ecfc58695966",
|
"sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654",
|
||||||
"sha256:36c4e234a85a81e325d8b1d7fdeb696a3d51bb8eb09a8c8e69c7532b421e8a29",
|
"sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a",
|
||||||
"sha256:371a5f1bb604fc262ba32893931f5aad3bb3e797dbebcf2b5b2c36f97603e4c7",
|
"sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4",
|
||||||
"sha256:3f5a30f67e4152d4075063ae9f2286313af2e39b950869edba76232569e08793",
|
"sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17",
|
||||||
"sha256:48c65d65d0de79f1a4391bc29c8c8ec7655671a03ad7902d5e66fd735531893e",
|
"sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec",
|
||||||
"sha256:4ede22808195126d55879f1a14aaa3d1004f188c341f92ec3b9ca5ea13e695b9",
|
"sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd",
|
||||||
"sha256:53228028648b40f59fc941c0cd67b7899bce52f35eb66aeb9e33b75bac0aac0a",
|
"sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48",
|
||||||
"sha256:67cb8e71c043686f806cfdb4189774c57ef929d32890024c3775d72b54381797",
|
"sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59",
|
||||||
"sha256:6b1e99dc838c28f14e45bffef6fb77bf5b54bd2bfb1a475c776da5ba8a9fec2d",
|
"sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"
|
||||||
"sha256:6c30eca95e7d60fbf13e6ebcaf62b7c0f3f93ec5de8862919aa5ede3720b1c86",
|
|
||||||
"sha256:6f2c905ab82aa0ee8a06210d5a6c1359c79f3f2088cc1b53c8758cae1dbc0d55",
|
|
||||||
"sha256:746b73eff86a1618025093b9c86ff4d642cff71a7ac7244f7fd8a186967cee22",
|
|
||||||
"sha256:9ebf518c7bc08e65b5396f80e8155c7bb1380b921b84b510570e62196c9fca56",
|
|
||||||
"sha256:9efc80ced0936f3fb2774e1bc981006324c74d1e58fc7f7164ecd98ede727c7d",
|
|
||||||
"sha256:abc43651f2c6d70b812cb874fc8caa00eb69fac11930cd2640d32a11ee7beef0",
|
|
||||||
"sha256:b4c6e1f5a591511537d4ccd4c807f6c8bb8d1b8a5043395950ba339086380904",
|
|
||||||
"sha256:bee80820a8ef5f6bddd58d762fc9f981ef1041a464d382d7d9a992bb94cd23c6",
|
|
||||||
"sha256:f0c304dcc1494dbc3fc492ebc2e61d0db323be9756a1bb14f407097d8adf82ec",
|
|
||||||
"sha256:fb9c2f27d2db6d709a02421733bb6ad22e16104beb2cf403e1120c24f3cc8668"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==4.0.0a0"
|
"version": "==3.6.2"
|
||||||
},
|
},
|
||||||
"async-timeout": {
|
"async-timeout": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -49,12 +39,20 @@
|
||||||
],
|
],
|
||||||
"version": "==3.0.1"
|
"version": "==3.0.1"
|
||||||
},
|
},
|
||||||
|
"atomicwrites": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
|
||||||
|
"sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==1.3.0"
|
||||||
|
},
|
||||||
"attrs": {
|
"attrs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
|
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
|
||||||
"sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
|
"sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
|
||||||
],
|
],
|
||||||
"version": "==19.1.0"
|
"version": "==19.3.0"
|
||||||
},
|
},
|
||||||
"chardet": {
|
"chardet": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -86,78 +84,64 @@
|
||||||
},
|
},
|
||||||
"multidict": {
|
"multidict": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f",
|
"sha256:0f04bf4c15d8417401a10a650c349ccc0285943681bfd87d3690587d7714a9b4",
|
||||||
"sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3",
|
"sha256:15a61c0df2d32487e06f6084eabb48fd9e8b848315e397781a70caf9670c9d78",
|
||||||
"sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef",
|
"sha256:3c5e2dcbe6b04cbb4303e47a896757a77b676c5e5db5528be7ff92f97ba7ab95",
|
||||||
"sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b",
|
"sha256:5d2b32b890d9e933d3ced417924261802a857abdee9507b68c75014482145c03",
|
||||||
"sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73",
|
"sha256:5e5fb8bfebf87f2e210306bf9dd8de2f1af6782b8b78e814060ae9254ab1f297",
|
||||||
"sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc",
|
"sha256:63ba2be08d82ea2aa8b0f7942a74af4908664d26cb4ff60c58eadb1e33e7da00",
|
||||||
"sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3",
|
"sha256:73740fcdb38f0adcec85e97db7557615b50ec4e5a3e73e35878720bcee963382",
|
||||||
"sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd",
|
"sha256:78bed18e7f1eb21f3d10ff3acde900b4d630098648fe1d65bb4abfb3e22c4900",
|
||||||
"sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351",
|
"sha256:a02fade7b5476c4f88efe9593ff2f3286698d8c6d715ba4f426954f73f382026",
|
||||||
"sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941",
|
"sha256:aacbde3a8875352a640efa2d1b96e5244a29b0f8df79cbf1ec6470e86fd84697",
|
||||||
"sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d",
|
"sha256:be813fb9e5ce41a5a99a29cdb857144a1bd6670883586f995b940a4878dc5238",
|
||||||
"sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1",
|
"sha256:bfcad6da0b8839f01a819602aaa5c5a5b4c85ecbfae9b261a31df3d9262fb31e",
|
||||||
"sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b",
|
"sha256:c2bfc0db3166e68515bc4a2b9164f4f75ae9c793e9635f8651f2c9ffc65c8dad",
|
||||||
"sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a",
|
"sha256:c66d11870ae066499a3541963e6ce18512ca827c2aaeaa2f4e37501cee39ac5d",
|
||||||
"sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3",
|
"sha256:cc7f2202b753f880c2e4123f9aacfdb94560ba893e692d24af271dac41f8b8d9",
|
||||||
"sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7",
|
"sha256:d1f45e5bb126662ba66ee579831ce8837b1fd978115c9657e32eb3c75b92973d",
|
||||||
"sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0",
|
"sha256:ed5f3378c102257df9e2dc9ce6468dabf68bee9ec34969cfdc472631aba00316"
|
||||||
"sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0",
|
|
||||||
"sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014",
|
|
||||||
"sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5",
|
|
||||||
"sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036",
|
|
||||||
"sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d",
|
|
||||||
"sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a",
|
|
||||||
"sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce",
|
|
||||||
"sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1",
|
|
||||||
"sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a",
|
|
||||||
"sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9",
|
|
||||||
"sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7",
|
|
||||||
"sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b"
|
|
||||||
],
|
],
|
||||||
"version": "==4.5.2"
|
"version": "==4.7.3"
|
||||||
},
|
},
|
||||||
"passlib": {
|
"passlib": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0",
|
"sha256:68c35c98a7968850e17f1b6892720764cc7eed0ef2b7cb3116a89a28e43fe177",
|
||||||
"sha256:43526aea08fa32c6b6dbbbe9963c4c767285b78147b7437597f992812f69d280"
|
"sha256:8d666cef936198bc2ab47ee9b0410c94adf2ba798e5a84bf220be079ae7ab6a8"
|
||||||
],
|
],
|
||||||
"version": "==1.7.1"
|
"version": "==1.7.2"
|
||||||
},
|
},
|
||||||
"pyyaml": {
|
"pyyaml": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9",
|
"sha256:21a8e19e2007a4047ffabbd8f0ee32c0dabae3b7f4b6c645110ae53e7714b470",
|
||||||
"sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4",
|
"sha256:74ad685bfb065f4bdd36d24aa97092f04bcbb1179b5ffdd3d5f994023fb8c292",
|
||||||
"sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8",
|
"sha256:79c3ba1da22e61c2a71aaa382c57518ab492278c8974c40187b900b50f3e0282",
|
||||||
"sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696",
|
"sha256:94ad913ab3fd967d14ecffda8182d7d0e1f7dd919b352773c492ec51890d3224",
|
||||||
"sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34",
|
"sha256:998db501e3a627c3e5678d6505f0e182d1529545df289db036cdc717f35d8058",
|
||||||
"sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9",
|
"sha256:9b69d4645bff5820713e8912bc61c4277dc127a6f8c197b52b6436503c42600f",
|
||||||
"sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73",
|
"sha256:9da13b536533518343a04f3c6564782ec8a13c705310b26b4832d77fa4d92a47",
|
||||||
"sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299",
|
"sha256:a76159f13b47fb44fb2acac8fef798a1940dd31b4acec6f4560bd11b2d92d31b",
|
||||||
"sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b",
|
"sha256:a9e9175c1e47a089a2b45d9e2afc6aae1f1f725538c32eec761894a42ba1227f",
|
||||||
"sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae",
|
"sha256:ea51ce7b96646ecd3bb12c2702e570c2bd7dd4d9f146db7fa83c5008ede35f66",
|
||||||
"sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681",
|
"sha256:ffbaaa05de60fc444eda3f6300d1af27d965b09b67f1fb4ebcc88dd0fb4ab1b4"
|
||||||
"sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41",
|
|
||||||
"sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==5.1.2"
|
"version": "==5.3b1"
|
||||||
},
|
},
|
||||||
"six": {
|
"six": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
|
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
|
||||||
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
|
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
|
||||||
],
|
],
|
||||||
"version": "==1.12.0"
|
"version": "==1.13.0"
|
||||||
},
|
},
|
||||||
"tinydb": {
|
"tinydb": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:be396c95e05802cad39fc2e5528faa933d9be2b3b063c28fc1aa85d83233df0c",
|
"sha256:1087ade5300c47dbf9539d9f6dafd53115bd5e85a67d480d8188bdbfa2d9eaf4",
|
||||||
"sha256:c92ddb8155b85dfecc7661465127b79d6972e3f5df5b1f04ee089f4f84184ecf"
|
"sha256:f273d9b6d8b1b5e1d094a6eb8b72851b39b81099293344132c73332b60e3b893"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==3.14.1"
|
"version": "==3.15.2"
|
||||||
},
|
},
|
||||||
"transitions": {
|
"transitions": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -168,65 +152,72 @@
|
||||||
},
|
},
|
||||||
"websockets": {
|
"websockets": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:049e694abe33f8a1d99969fee7bfc0ae6761f7fd5f297c58ea933b27dd6805f2",
|
"sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5",
|
||||||
"sha256:73ce69217e4655783ec72ce11c151053fcbd5b837cc39de7999e19605182e28a",
|
"sha256:1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5",
|
||||||
"sha256:83e63aa73331b9ca21af61df8f115fb5fbcba3f281bee650a4ad16a40cd1ef15",
|
"sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308",
|
||||||
"sha256:882a7266fa867a2ebb2c0baaa0f9159cabf131cf18c1b4270d79ad42f9208dc5",
|
"sha256:295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb",
|
||||||
"sha256:8c77f7d182a6ea2a9d09c2612059f3ad859a90243e899617137ee3f6b7f2b584",
|
"sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a",
|
||||||
"sha256:8d7a20a2f97f1e98c765651d9fb9437201a9ccc2c70e94b0270f1c5ef29667a3",
|
"sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c",
|
||||||
"sha256:a7affaeffbc5d55681934c16bb6b8fc82bb75b175e7fd4dcca798c938bde8dda",
|
"sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170",
|
||||||
"sha256:c82e286555f839846ef4f0fdd6910769a577952e1e26aa8ee7a6f45f040e3c2b",
|
"sha256:3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422",
|
||||||
"sha256:e906128532a14b9d264a43eb48f9b3080d53a9bda819ab45bf56b8039dc606ac",
|
"sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8",
|
||||||
"sha256:e9102043a81cdc8b7c8032ff4bce39f6229e4ac39cb2010946c912eeb84e2cb6",
|
"sha256:5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485",
|
||||||
"sha256:f5cb2683367e32da6a256b60929a3af9c29c212b5091cf5bace9358d03011bf5"
|
"sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f",
|
||||||
|
"sha256:751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8",
|
||||||
|
"sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc",
|
||||||
|
"sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779",
|
||||||
|
"sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989",
|
||||||
|
"sha256:9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1",
|
||||||
|
"sha256:c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092",
|
||||||
|
"sha256:c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824",
|
||||||
|
"sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d",
|
||||||
|
"sha256:d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55",
|
||||||
|
"sha256:e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36",
|
||||||
|
"sha256:f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b"
|
||||||
],
|
],
|
||||||
"version": "==8.0.2"
|
"version": "==8.1"
|
||||||
},
|
},
|
||||||
"yarl": {
|
"yarl": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9",
|
"sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce",
|
||||||
"sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f",
|
"sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6",
|
||||||
"sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb",
|
"sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce",
|
||||||
"sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320",
|
"sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae",
|
||||||
"sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842",
|
"sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d",
|
||||||
"sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0",
|
"sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f",
|
||||||
"sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829",
|
"sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b",
|
||||||
"sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310",
|
"sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b",
|
||||||
"sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4",
|
"sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb",
|
||||||
"sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8",
|
"sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462",
|
||||||
"sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1"
|
"sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea",
|
||||||
|
"sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70",
|
||||||
|
"sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1",
|
||||||
|
"sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a",
|
||||||
|
"sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b",
|
||||||
|
"sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080",
|
||||||
|
"sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"
|
||||||
],
|
],
|
||||||
"version": "==1.3.0"
|
"version": "==1.4.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {
|
"develop": {
|
||||||
"aiohttp": {
|
"aiohttp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:02396865118790ebb0bd14d6935e9e4fa80d87683240618894e585048a8b83ec",
|
"sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e",
|
||||||
"sha256:0f448b5d5cd45e642b9fcf4798e48cca4149ae479022f59bd67a47caed44657e",
|
"sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326",
|
||||||
"sha256:1af72f53ccead6d161296e576aa2b5d0c6c7403a389601dd7aa7a7a30a9f41c3",
|
"sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a",
|
||||||
"sha256:32eeef64a5bcf6dc652f19e020b16f36ec66d291957f62ffad18ecfc58695966",
|
"sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654",
|
||||||
"sha256:36c4e234a85a81e325d8b1d7fdeb696a3d51bb8eb09a8c8e69c7532b421e8a29",
|
"sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a",
|
||||||
"sha256:371a5f1bb604fc262ba32893931f5aad3bb3e797dbebcf2b5b2c36f97603e4c7",
|
"sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4",
|
||||||
"sha256:3f5a30f67e4152d4075063ae9f2286313af2e39b950869edba76232569e08793",
|
"sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17",
|
||||||
"sha256:48c65d65d0de79f1a4391bc29c8c8ec7655671a03ad7902d5e66fd735531893e",
|
"sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec",
|
||||||
"sha256:4ede22808195126d55879f1a14aaa3d1004f188c341f92ec3b9ca5ea13e695b9",
|
"sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd",
|
||||||
"sha256:53228028648b40f59fc941c0cd67b7899bce52f35eb66aeb9e33b75bac0aac0a",
|
"sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48",
|
||||||
"sha256:67cb8e71c043686f806cfdb4189774c57ef929d32890024c3775d72b54381797",
|
"sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59",
|
||||||
"sha256:6b1e99dc838c28f14e45bffef6fb77bf5b54bd2bfb1a475c776da5ba8a9fec2d",
|
"sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"
|
||||||
"sha256:6c30eca95e7d60fbf13e6ebcaf62b7c0f3f93ec5de8862919aa5ede3720b1c86",
|
|
||||||
"sha256:6f2c905ab82aa0ee8a06210d5a6c1359c79f3f2088cc1b53c8758cae1dbc0d55",
|
|
||||||
"sha256:746b73eff86a1618025093b9c86ff4d642cff71a7ac7244f7fd8a186967cee22",
|
|
||||||
"sha256:9ebf518c7bc08e65b5396f80e8155c7bb1380b921b84b510570e62196c9fca56",
|
|
||||||
"sha256:9efc80ced0936f3fb2774e1bc981006324c74d1e58fc7f7164ecd98ede727c7d",
|
|
||||||
"sha256:abc43651f2c6d70b812cb874fc8caa00eb69fac11930cd2640d32a11ee7beef0",
|
|
||||||
"sha256:b4c6e1f5a591511537d4ccd4c807f6c8bb8d1b8a5043395950ba339086380904",
|
|
||||||
"sha256:bee80820a8ef5f6bddd58d762fc9f981ef1041a464d382d7d9a992bb94cd23c6",
|
|
||||||
"sha256:f0c304dcc1494dbc3fc492ebc2e61d0db323be9756a1bb14f407097d8adf82ec",
|
|
||||||
"sha256:fb9c2f27d2db6d709a02421733bb6ad22e16104beb2cf403e1120c24f3cc8668"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==4.0.0a0"
|
"version": "==3.6.2"
|
||||||
},
|
},
|
||||||
"appdirs": {
|
"appdirs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -237,10 +228,10 @@
|
||||||
},
|
},
|
||||||
"astroid": {
|
"astroid": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:9b3f17b0550f82e28a6776a4e5222441f48e523b0773df4bc505bb6b7c2093b7",
|
"sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a",
|
||||||
"sha256:c7e2e5773d87ccc00d01c273e439386f4d6d63cce61317a79ccce5880162f9fb"
|
"sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"
|
||||||
],
|
],
|
||||||
"version": "==2.3.0"
|
"version": "==2.3.3"
|
||||||
},
|
},
|
||||||
"async-timeout": {
|
"async-timeout": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -249,19 +240,12 @@
|
||||||
],
|
],
|
||||||
"version": "==3.0.1"
|
"version": "==3.0.1"
|
||||||
},
|
},
|
||||||
"atomicwrites": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
|
|
||||||
"sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
|
|
||||||
],
|
|
||||||
"version": "==1.3.0"
|
|
||||||
},
|
|
||||||
"attrs": {
|
"attrs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
|
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
|
||||||
"sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
|
"sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
|
||||||
],
|
],
|
||||||
"version": "==19.1.0"
|
"version": "==19.3.0"
|
||||||
},
|
},
|
||||||
"autoflake": {
|
"autoflake": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -272,18 +256,18 @@
|
||||||
},
|
},
|
||||||
"black": {
|
"black": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf",
|
"sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b",
|
||||||
"sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"
|
"sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==19.3b0"
|
"version": "==19.10b0"
|
||||||
},
|
},
|
||||||
"certifi": {
|
"certifi": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50",
|
"sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
|
||||||
"sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"
|
"sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
|
||||||
],
|
],
|
||||||
"version": "==2019.9.11"
|
"version": "==2019.11.28"
|
||||||
},
|
},
|
||||||
"chardet": {
|
"chardet": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -309,36 +293,40 @@
|
||||||
},
|
},
|
||||||
"coverage": {
|
"coverage": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:094378c3a35594335a840ea04d473c019e6d4fe10e343cd0d7fb5e87f8b7e926",
|
"sha256:0101888bd1592a20ccadae081ba10e8b204d20235d18d05c6f7d5e904a38fc10",
|
||||||
"sha256:10216222f3e4139910b6230d0ca0fe9d10ee98837eb83d29525722d628729d20",
|
"sha256:04b961862334687549eb91cd5178a6fbe977ad365bddc7c60f2227f2f9880cf4",
|
||||||
"sha256:147478e21cba12c63b3454df5a2fb77b44df630428cffa3a36a6813e38157eab",
|
"sha256:1ca43dbd739c0fc30b0a3637a003a0d2c7edc1dd618359d58cc1e211742f8bd1",
|
||||||
"sha256:230ce08965190c0f69196be34a07a795981b2b02b21419c2e1918a882b3eeab0",
|
"sha256:1cbb88b34187bdb841f2599770b7e6ff8e259dc3bb64fc7893acf44998acf5f8",
|
||||||
"sha256:2469621d680a4c71cdbd3ea4dbed9d199bba93f21d2be1c107ded907b2db41a8",
|
"sha256:232f0b52a5b978288f0bbc282a6c03fe48cd19a04202df44309919c142b3bb9c",
|
||||||
"sha256:26526174d11fb2163832628d943edd452e07528b0ecc0c83c88256a59a32287c",
|
"sha256:24bcfa86fd9ce86b73a8368383c39d919c497a06eebb888b6f0c12f13e920b1a",
|
||||||
"sha256:2690bf0835f34ef3451860b02471e9560e4b3caf7413abeaa7544af72eb6d9ed",
|
"sha256:25b8f60b5c7da71e64c18888f3067d5b6f1334b9681876b2fb41eea26de881ae",
|
||||||
"sha256:2b6f2d9a60413e75651cebe33c3f2f66d61209db44e8b9cf6d8d66fb0cb01fda",
|
"sha256:2714160a63da18aed9340c70ed514973971ee7e665e6b336917ff4cca81a25b1",
|
||||||
"sha256:3ce91c6b92160ecefedf95a8c61fbf4fb36b0addef1a40c654acf1ad390653d0",
|
"sha256:2ca2cd5264e84b2cafc73f0045437f70c6378c0d7dbcddc9ee3fe192c1e29e5d",
|
||||||
"sha256:43d16d7e9e9eaace3d9f1828b617b1be248f90d031a4b2dc1b6e1c88f1602dcf",
|
"sha256:2cc707fc9aad2592fc686d63ef72dc0031fc98b6fb921d2f5395d9ab84fbc3ef",
|
||||||
"sha256:52b6455da5f547cad72fd5cfc57a16678573fda6c695d257b5c266a44dbbd172",
|
"sha256:348630edea485f4228233c2f310a598abf8afa5f8c716c02a9698089687b6085",
|
||||||
"sha256:533f3036c8f58e6381fcca3306fe988740638c62c7fc86b7fae9c74b85ac3cdc",
|
"sha256:40fbfd6b044c9db13aeec1daf5887d322c710d811f944011757526ef6e323fd9",
|
||||||
"sha256:62d2abe5c733394058cb381d088bcab64a18da3ce9dc9a8ef2a18e122cbe47f1",
|
"sha256:46c9c6a1d1190c0b75ec7c0f339088309952b82ae8d67a79ff1319eb4e749b96",
|
||||||
"sha256:72c34f99164679e44a5cbf19bf1a13be4e715c680816302b6ceca49b979fde91",
|
"sha256:591506e088901bdc25620c37aec885e82cc896528f28c57e113751e3471fc314",
|
||||||
"sha256:81fc07feed4e40a7c0bdd266efa65e5afc83b5e0f1063007acc6759a957322a1",
|
"sha256:5ac71bba1e07eab403b082c4428f868c1c9e26a21041436b4905c4c3d4e49b08",
|
||||||
"sha256:82093e673182c761ce54dfab17f026a06be3c011fee9b653855b9a2649f20232",
|
"sha256:5f622f19abda4e934938e24f1d67599249abc201844933a6f01aaa8663094489",
|
||||||
"sha256:87947fef728f72860407c446fd9b4a0f98e39e91ad7ae80803c02a85738e63ef",
|
"sha256:65bead1ac8c8930cf92a1ccaedcce19a57298547d5d1db5c9d4d068a0675c38b",
|
||||||
"sha256:8b18c5a5a6b35b6311d2c356782ce3c7bacf6d987d9dc479178577391bf1c7dd",
|
"sha256:7362a7f829feda10c7265b553455de596b83d1623b3d436b6d3c51c688c57bf6",
|
||||||
"sha256:90e1850e993aa6b81bafaf672c8e508eaa17fbb5eb23aba93f7f4df822f3bd29",
|
"sha256:7f2675750c50151f806070ec11258edf4c328340916c53bac0adbc465abd6b1e",
|
||||||
"sha256:99f71e365bcb03a8debe1a75061329c9e45379f244a229442319d64c53c4e844",
|
"sha256:960d7f42277391e8b1c0b0ae427a214e1b31a1278de6b73f8807b20c2e913bba",
|
||||||
"sha256:9b2c559104a90bf0043d6ef262ca205326d1fe6ec572dcf59e34be9289432793",
|
"sha256:a50b0888d8a021a3342d36a6086501e30de7d840ab68fca44913e97d14487dc1",
|
||||||
"sha256:ad22b073d92ea65b063e612154c72d6367dec3dd47ed33c02e3ab339eabe7bf3",
|
"sha256:b7dbc5e8c39ea3ad3db22715f1b5401cd698a621218680c6daf42c2f9d36e205",
|
||||||
"sha256:bc3648da235fee2113a8cb80154d9fff4e2689d2d4a11ad35c1ecae23454b539",
|
"sha256:bb3d29df5d07d5399d58a394d0ef50adf303ab4fbf66dfd25b9ef258effcb692",
|
||||||
"sha256:d0e2478bde68c5d853bcd306b5aae8fbe80417e87957a21fa6ee71edb90639f2",
|
"sha256:c0fff2733f7c2950f58a4fd09b5db257b00c6fec57bf3f68c5bae004d804b407",
|
||||||
"sha256:d3e6912d2370925222d2bfb3bd2ba02e9698b8da89cf7192ddf80cbb9f2455ee",
|
"sha256:c792d3707a86c01c02607ae74364854220fb3e82735f631cd0a345dea6b4cee5",
|
||||||
"sha256:d4fa98e3e15863568ea89eaec5e0866ca763980bdc56098dd9316865c111a28e",
|
"sha256:c90bda74e16bcd03861b09b1d37c0a4158feda5d5a036bb2d6e58de6ff65793e",
|
||||||
"sha256:ee924a23457b373241ff39d21570360afd8ccb58520eb1e8e18eb00827b73e2d"
|
"sha256:cfce79ce41cc1a1dc7fc85bb41eeeb32d34a4cf39a645c717c0550287e30ff06",
|
||||||
|
"sha256:eeafb646f374988c22c8e6da5ab9fb81367ecfe81c70c292623373d2a021b1a1",
|
||||||
|
"sha256:f425f50a6dd807cb9043d15a4fcfba3b5874a54d9587ccbb748899f70dc18c47",
|
||||||
|
"sha256:fcd4459fe35a400b8f416bc57906862693c9f88b66dc925e7f2a933e77f6b18b",
|
||||||
|
"sha256:ff3936dd5feaefb4f91c8c1f50a06c588b5dc69fba4f7d9c79a6617ad80bb7df"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==5.0a7"
|
"version": "==5.0.1"
|
||||||
},
|
},
|
||||||
"idna": {
|
"idna": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -349,11 +337,11 @@
|
||||||
},
|
},
|
||||||
"importlib-metadata": {
|
"importlib-metadata": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26",
|
"sha256:073a852570f92da5f744a3472af1b61e28e9f78ccf0c9117658dc32b15de7b45",
|
||||||
"sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
|
"sha256:d95141fbfa7ef2ec65cfd945e2af7e5a6ddbd7c8d9a25e66ff3be8e3daf9f60f"
|
||||||
],
|
],
|
||||||
"markers": "python_version < '3.8'",
|
"markers": "python_version < '3.8'",
|
||||||
"version": "==0.23"
|
"version": "==1.3.0"
|
||||||
},
|
},
|
||||||
"isort": {
|
"isort": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -364,26 +352,29 @@
|
||||||
},
|
},
|
||||||
"lazy-object-proxy": {
|
"lazy-object-proxy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf",
|
"sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d",
|
||||||
"sha256:18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3",
|
"sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449",
|
||||||
"sha256:1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce",
|
"sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08",
|
||||||
"sha256:2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f",
|
"sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a",
|
||||||
"sha256:616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f",
|
"sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50",
|
||||||
"sha256:63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0",
|
"sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd",
|
||||||
"sha256:77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e",
|
"sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239",
|
||||||
"sha256:83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905",
|
"sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb",
|
||||||
"sha256:84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8",
|
"sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea",
|
||||||
"sha256:874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2",
|
"sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e",
|
||||||
"sha256:9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009",
|
"sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156",
|
||||||
"sha256:a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a",
|
"sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142",
|
||||||
"sha256:a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512",
|
"sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442",
|
||||||
"sha256:ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5",
|
"sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62",
|
||||||
"sha256:ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e",
|
"sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db",
|
||||||
"sha256:b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4",
|
"sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531",
|
||||||
"sha256:c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f",
|
"sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383",
|
||||||
"sha256:fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1"
|
"sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a",
|
||||||
|
"sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357",
|
||||||
|
"sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4",
|
||||||
|
"sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"
|
||||||
],
|
],
|
||||||
"version": "==1.4.2"
|
"version": "==1.4.3"
|
||||||
},
|
},
|
||||||
"mccabe": {
|
"mccabe": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -402,44 +393,32 @@
|
||||||
},
|
},
|
||||||
"more-itertools": {
|
"more-itertools": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832",
|
"sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d",
|
||||||
"sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"
|
"sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564"
|
||||||
],
|
],
|
||||||
"version": "==7.2.0"
|
"version": "==8.0.2"
|
||||||
},
|
},
|
||||||
"multidict": {
|
"multidict": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f",
|
"sha256:0f04bf4c15d8417401a10a650c349ccc0285943681bfd87d3690587d7714a9b4",
|
||||||
"sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3",
|
"sha256:15a61c0df2d32487e06f6084eabb48fd9e8b848315e397781a70caf9670c9d78",
|
||||||
"sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef",
|
"sha256:3c5e2dcbe6b04cbb4303e47a896757a77b676c5e5db5528be7ff92f97ba7ab95",
|
||||||
"sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b",
|
"sha256:5d2b32b890d9e933d3ced417924261802a857abdee9507b68c75014482145c03",
|
||||||
"sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73",
|
"sha256:5e5fb8bfebf87f2e210306bf9dd8de2f1af6782b8b78e814060ae9254ab1f297",
|
||||||
"sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc",
|
"sha256:63ba2be08d82ea2aa8b0f7942a74af4908664d26cb4ff60c58eadb1e33e7da00",
|
||||||
"sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3",
|
"sha256:73740fcdb38f0adcec85e97db7557615b50ec4e5a3e73e35878720bcee963382",
|
||||||
"sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd",
|
"sha256:78bed18e7f1eb21f3d10ff3acde900b4d630098648fe1d65bb4abfb3e22c4900",
|
||||||
"sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351",
|
"sha256:a02fade7b5476c4f88efe9593ff2f3286698d8c6d715ba4f426954f73f382026",
|
||||||
"sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941",
|
"sha256:aacbde3a8875352a640efa2d1b96e5244a29b0f8df79cbf1ec6470e86fd84697",
|
||||||
"sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d",
|
"sha256:be813fb9e5ce41a5a99a29cdb857144a1bd6670883586f995b940a4878dc5238",
|
||||||
"sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1",
|
"sha256:bfcad6da0b8839f01a819602aaa5c5a5b4c85ecbfae9b261a31df3d9262fb31e",
|
||||||
"sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b",
|
"sha256:c2bfc0db3166e68515bc4a2b9164f4f75ae9c793e9635f8651f2c9ffc65c8dad",
|
||||||
"sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a",
|
"sha256:c66d11870ae066499a3541963e6ce18512ca827c2aaeaa2f4e37501cee39ac5d",
|
||||||
"sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3",
|
"sha256:cc7f2202b753f880c2e4123f9aacfdb94560ba893e692d24af271dac41f8b8d9",
|
||||||
"sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7",
|
"sha256:d1f45e5bb126662ba66ee579831ce8837b1fd978115c9657e32eb3c75b92973d",
|
||||||
"sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0",
|
"sha256:ed5f3378c102257df9e2dc9ce6468dabf68bee9ec34969cfdc472631aba00316"
|
||||||
"sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0",
|
|
||||||
"sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014",
|
|
||||||
"sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5",
|
|
||||||
"sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036",
|
|
||||||
"sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d",
|
|
||||||
"sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a",
|
|
||||||
"sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce",
|
|
||||||
"sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1",
|
|
||||||
"sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a",
|
|
||||||
"sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9",
|
|
||||||
"sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7",
|
|
||||||
"sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b"
|
|
||||||
],
|
],
|
||||||
"version": "==4.5.2"
|
"version": "==4.7.3"
|
||||||
},
|
},
|
||||||
"packaging": {
|
"packaging": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -448,27 +427,34 @@
|
||||||
],
|
],
|
||||||
"version": "==19.2"
|
"version": "==19.2"
|
||||||
},
|
},
|
||||||
|
"pathspec": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424",
|
||||||
|
"sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"
|
||||||
|
],
|
||||||
|
"version": "==0.7.0"
|
||||||
|
},
|
||||||
"pbr": {
|
"pbr": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:2c8e420cd4ed4cec4e7999ee47409e876af575d4c35a45840d59e8b5f3155ab8",
|
"sha256:139d2625547dbfa5fb0b81daebb39601c478c21956dc57e2e07b74450a8c506b",
|
||||||
"sha256:b32c8ccaac7b1a20c0ce00ce317642e6cf231cf038f9875e0280e28af5bf7ac9"
|
"sha256:61aa52a0f18b71c5cc58232d2cf8f8d09cd67fcad60b742a60124cb8d6951488"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==5.4.3"
|
"version": "==5.4.4"
|
||||||
},
|
},
|
||||||
"pluggy": {
|
"pluggy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0db4b7601aae1d35b4a033282da476845aa19185c1e6964b25cf324b5e4ec3e6",
|
"sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
|
||||||
"sha256:fa5fa1622fa6dd5c030e9cad086fa19ef6a0cf6d7a2d12318e10cb49d6d68f34"
|
"sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
|
||||||
],
|
],
|
||||||
"version": "==0.13.0"
|
"version": "==0.13.1"
|
||||||
},
|
},
|
||||||
"py": {
|
"py": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
|
"sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
|
||||||
"sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
|
"sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
|
||||||
],
|
],
|
||||||
"version": "==1.8.0"
|
"version": "==1.8.1"
|
||||||
},
|
},
|
||||||
"pyflakes": {
|
"pyflakes": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -479,26 +465,26 @@
|
||||||
},
|
},
|
||||||
"pylint": {
|
"pylint": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:2d64b4b8fa044480b1a49d47535da53557f8f426b8c5bd6a23beb65e905101a1",
|
"sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd",
|
||||||
"sha256:6cbd124a1a5ed1fd3f3fed4178a6c2ba166862ea0dac6ab2ff8d9f0998b13e5c"
|
"sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.4.1"
|
"version": "==2.4.4"
|
||||||
},
|
},
|
||||||
"pyparsing": {
|
"pyparsing": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80",
|
"sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f",
|
||||||
"sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"
|
"sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"
|
||||||
],
|
],
|
||||||
"version": "==2.4.2"
|
"version": "==2.4.6"
|
||||||
},
|
},
|
||||||
"pytest": {
|
"pytest": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6ef6d06de77ce2961156013e9dff62f1b2688aa04d0dc244299fe7d67e09370d",
|
"sha256:6b571215b5a790f9b41f19f3531c53a45cf6bb8ef2988bc1ff9afb38270b25fa",
|
||||||
"sha256:a736fed91c12681a7b34617c8fcefe39ea04599ca72c608751c31d89579a3f77"
|
"sha256:e41d489ff43948babd0fad7ad5e49b8735d5d55e26628a58673c39ff61d95de4"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==5.0.1"
|
"version": "==5.3.2"
|
||||||
},
|
},
|
||||||
"pytest-aiohttp": {
|
"pytest-aiohttp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -518,11 +504,11 @@
|
||||||
},
|
},
|
||||||
"pytest-cov": {
|
"pytest-cov": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6",
|
"sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b",
|
||||||
"sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a"
|
"sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.7.1"
|
"version": "==2.8.1"
|
||||||
},
|
},
|
||||||
"pytest-env": {
|
"pytest-env": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -531,6 +517,32 @@
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.6.2"
|
"version": "==0.6.2"
|
||||||
},
|
},
|
||||||
|
"regex": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:032fdcc03406e1a6485ec09b826eac78732943840c4b29e503b789716f051d8d",
|
||||||
|
"sha256:0e6cf1e747f383f52a0964452658c04300a9a01e8a89c55ea22813931b580aa8",
|
||||||
|
"sha256:106e25a841921d8259dcef2a42786caae35bc750fb996f830065b3dfaa67b77e",
|
||||||
|
"sha256:1768cf42a78a11dae63152685e7a1d90af7a8d71d2d4f6d2387edea53a9e0588",
|
||||||
|
"sha256:27d1bd20d334f50b7ef078eba0f0756a640fd25f5f1708d3b5bed18a5d6bced9",
|
||||||
|
"sha256:29b20f66f2e044aafba86ecf10a84e611b4667643c42baa004247f5dfef4f90b",
|
||||||
|
"sha256:4850c78b53acf664a6578bba0e9ebeaf2807bb476c14ec7e0f936f2015133cae",
|
||||||
|
"sha256:57eacd38a5ec40ed7b19a968a9d01c0d977bda55664210be713e750dd7b33540",
|
||||||
|
"sha256:724eb24b92fc5fdc1501a1b4df44a68b9c1dda171c8ef8736799e903fb100f63",
|
||||||
|
"sha256:77ae8d926f38700432807ba293d768ba9e7652df0cbe76df2843b12f80f68885",
|
||||||
|
"sha256:78b3712ec529b2a71731fbb10b907b54d9c53a17ca589b42a578bc1e9a2c82ea",
|
||||||
|
"sha256:7bbbdbada3078dc360d4692a9b28479f569db7fc7f304b668787afc9feb38ec8",
|
||||||
|
"sha256:8d9ef7f6c403e35e73b7fc3cde9f6decdc43b1cb2ff8d058c53b9084bfcb553e",
|
||||||
|
"sha256:a83049eb717ae828ced9cf607845929efcb086a001fc8af93ff15c50012a5716",
|
||||||
|
"sha256:adc35d38952e688535980ae2109cad3a109520033642e759f987cf47fe278aa1",
|
||||||
|
"sha256:c29a77ad4463f71a506515d9ec3a899ed026b4b015bf43245c919ff36275444b",
|
||||||
|
"sha256:cfd31b3300fefa5eecb2fe596c6dee1b91b3a05ece9d5cfd2631afebf6c6fadd",
|
||||||
|
"sha256:d3ee0b035816e0520fac928de31b6572106f0d75597f6fa3206969a02baba06f",
|
||||||
|
"sha256:d508875793efdf6bab3d47850df8f40d4040ae9928d9d80864c1768d6aeaf8e3",
|
||||||
|
"sha256:ef0b828a7e22e58e06a1cceddba7b4665c6af8afeb22a0d8083001330572c147",
|
||||||
|
"sha256:faad39fdbe2c2ccda9846cd21581063086330efafa47d87afea4073a08128656"
|
||||||
|
],
|
||||||
|
"version": "==2019.12.20"
|
||||||
|
},
|
||||||
"requests": {
|
"requests": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
|
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
|
||||||
|
|
@ -540,18 +552,18 @@
|
||||||
},
|
},
|
||||||
"six": {
|
"six": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
|
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
|
||||||
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
|
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
|
||||||
],
|
],
|
||||||
"version": "==1.12.0"
|
"version": "==1.13.0"
|
||||||
},
|
},
|
||||||
"testfixtures": {
|
"testfixtures": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:665a298976c8d77f311b65c46f16b7cda7229a47dff5ad7c822e5b3371a439e2",
|
"sha256:8f22100d4fb841b958f64e71c8820a32dc46f57d4d7e077777b932acd87b7327",
|
||||||
"sha256:9d230c5c80746f9f86a16a1f751a5cf5d8e317d4cc48243a19fb180d22303bce"
|
"sha256:9334f64d4210b734d04abff516d6ddaab7328306a0c4c1268ce4624df51c4f6d"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==6.10.0"
|
"version": "==6.10.3"
|
||||||
},
|
},
|
||||||
"toml": {
|
"toml": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -562,31 +574,44 @@
|
||||||
},
|
},
|
||||||
"typed-ast": {
|
"typed-ast": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
"sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161",
|
||||||
"sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e",
|
"sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e",
|
||||||
"sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e",
|
"sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e",
|
||||||
"sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0",
|
"sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0",
|
||||||
"sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c",
|
"sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c",
|
||||||
|
"sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47",
|
||||||
"sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631",
|
"sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631",
|
||||||
"sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4",
|
"sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4",
|
||||||
"sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34",
|
"sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34",
|
||||||
"sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b",
|
"sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b",
|
||||||
|
"sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2",
|
||||||
|
"sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e",
|
||||||
"sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a",
|
"sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a",
|
||||||
"sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233",
|
"sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233",
|
||||||
"sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1",
|
"sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1",
|
||||||
"sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36",
|
"sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36",
|
||||||
"sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d",
|
"sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d",
|
||||||
"sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a",
|
"sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a",
|
||||||
|
"sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66",
|
||||||
"sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"
|
"sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"
|
||||||
],
|
],
|
||||||
"markers": "implementation_name == 'cpython' and python_version >= '3.7' and python_version < '3.8'",
|
"markers": "implementation_name == 'cpython' and python_version < '3.8'",
|
||||||
"version": "==1.4.0"
|
"version": "==1.4.0"
|
||||||
},
|
},
|
||||||
|
"typing-extensions": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2",
|
||||||
|
"sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d",
|
||||||
|
"sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575"
|
||||||
|
],
|
||||||
|
"version": "==3.7.4.1"
|
||||||
|
},
|
||||||
"urllib3": {
|
"urllib3": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398",
|
"sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293",
|
||||||
"sha256:9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86"
|
"sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"
|
||||||
],
|
],
|
||||||
"version": "==1.25.6"
|
"version": "==1.25.7"
|
||||||
},
|
},
|
||||||
"wcwidth": {
|
"wcwidth": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
@ -603,19 +628,25 @@
|
||||||
},
|
},
|
||||||
"yarl": {
|
"yarl": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9",
|
"sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce",
|
||||||
"sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f",
|
"sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6",
|
||||||
"sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb",
|
"sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce",
|
||||||
"sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320",
|
"sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae",
|
||||||
"sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842",
|
"sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d",
|
||||||
"sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0",
|
"sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f",
|
||||||
"sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829",
|
"sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b",
|
||||||
"sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310",
|
"sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b",
|
||||||
"sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4",
|
"sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb",
|
||||||
"sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8",
|
"sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462",
|
||||||
"sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1"
|
"sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea",
|
||||||
|
"sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70",
|
||||||
|
"sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1",
|
||||||
|
"sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a",
|
||||||
|
"sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b",
|
||||||
|
"sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080",
|
||||||
|
"sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"
|
||||||
],
|
],
|
||||||
"version": "==1.3.0"
|
"version": "==1.4.2"
|
||||||
},
|
},
|
||||||
"zipp": {
|
"zipp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
|
|
||||||
128
README.md
128
README.md
|
|
@ -8,6 +8,8 @@ Bumper is a standalone and self-hosted implementation of the central server used
|
||||||
|
|
||||||
**Note:** The current master branch is unstable, and in active development.
|
**Note:** The current master branch is unstable, and in active development.
|
||||||
|
|
||||||
|
## Build Status
|
||||||
|
|
||||||
| Master Branch | Status |
|
| Master Branch | Status |
|
||||||
| ------------------- | ---------------------------------------------------------------------- |
|
| ------------------- | ---------------------------------------------------------------------- |
|
||||||
| AppVeyor (Win32) | [](https://ci.appveyor.com/project/bmartin5692/bumper) |
|
| AppVeyor (Win32) | [](https://ci.appveyor.com/project/bmartin5692/bumper) |
|
||||||
|
|
@ -18,7 +20,8 @@ Bumper is a standalone and self-hosted implementation of the central server used
|
||||||
|
|
||||||
**Community**:
|
**Community**:
|
||||||
A Gitter community has been created for Bumper so users can chat and dig into issues outside of Github, join us here:
|
A Gitter community has been created for Bumper so users can chat and dig into issues outside of Github, join us here:
|
||||||
[Ecovacs-Bumper on Gitter](https://gitter.im/ecovacs-bumper/community)
|
[](https://gitter.im/ecovacs-bumper/community)
|
||||||
|
|
||||||
|
|
||||||
***Testing needed***
|
***Testing needed***
|
||||||
Bumper needs users to assist with testing in order to ensure compatability as bumper moves forward! If you've tested Bumper with your bot, please open an issue with details on success or issues.
|
Bumper needs users to assist with testing in order to ensure compatability as bumper moves forward! If you've tested Bumper with your bot, please open an issue with details on success or issues.
|
||||||
|
|
@ -34,111 +37,7 @@ But seriously, there are a several reasons for eliminating the central server:
|
||||||
1. Convenience: It works without an internet connection or if Ecovacs servers are down
|
1. Convenience: It works without an internet connection or if Ecovacs servers are down
|
||||||
2. Performance: No need for messages to travel to Ecovacs server and back.
|
2. Performance: No need for messages to travel to Ecovacs server and back.
|
||||||
3. Security: We can completely isolate the robot from the public Internet.
|
3. Security: We can completely isolate the robot from the public Internet.
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
- An Ecovacs wifi-enabled robot
|
|
||||||
- A computer on your local network to run the Bumper server
|
|
||||||
- Python 3.7 and pipenv OR Docker
|
|
||||||
- A network router that has functionality for overriding DNS queries
|
|
||||||
- A client that can connect to Bumper and talk to the robot over the Ecovacs protocol.
|
|
||||||
- The "Ecovacs" or "Ecovacs Home" Android or iOS apps can be used if configured properly.
|
|
||||||
- See the docs on [Using Bumper with the official Android/iOS App](docs/Use_With_App.md).
|
|
||||||
- [Sucks](https://github.com/wpietri/sucks) can also be used, which can act as a client and control the robots via command-line.
|
|
||||||
- See the doc on [Using Bumper with Sucks](docs/Use_With_Sucks.md)
|
|
||||||
|
|
||||||
## Quick Start Usage
|
|
||||||
|
|
||||||
- Configure your Ecovacs vacuum using the official mobile app (if you haven't done this already)
|
|
||||||
- Configure your DNS server as described in the [DNS Setup](docs/DNS_Setup.md) doc.
|
|
||||||
|
|
||||||
**Choose Install:**
|
|
||||||
- Docker - [See Docker Section](#docker)
|
|
||||||
- Manual/Python
|
|
||||||
- Download bumper then run `pipenv install` to install dependencies
|
|
||||||
- Start bumper - see the [Starting Bumper](#starting-bumper) section.
|
|
||||||
|
|
||||||
- Control your robots like normal
|
|
||||||
- [Using Bumper with the official Android/iOS App](docs/Use_With_App.md)
|
|
||||||
- [Using Bumper with Sucks](docs/Use_With_Sucks.md)
|
|
||||||
|
|
||||||
### Starting Bumper
|
|
||||||
|
|
||||||
Bumper requires certificates to function. If certificates aren't found it will prompt to generate them for you.
|
|
||||||
|
|
||||||
For more information on generating certificates manually, see the [Creating Certs](docs/Create_Certs.md) doc
|
|
||||||
|
|
||||||
- Start Bumper with `pipenv run python -m bumper`
|
|
||||||
- If prompted to generate certificates choose yes or no
|
|
||||||
|
|
||||||
- Reboot your robot
|
|
||||||
- **Note:** Some models may require removing and re-inserting the battery pack.
|
|
||||||
- This doesn't seem to be required for models that don't have easily accessible batteries such as the 900/901.
|
|
||||||
- If your configuration is correct, the robot will connect to Bumper within about 30 seconds. Bumper will output information about the connection status.
|
|
||||||
|
|
||||||
#### Command-Line Usage
|
|
||||||
|
|
||||||
Bumper has a number of available command-line arguments that can be viewed by adding the `-h` flag.
|
|
||||||
|
|
||||||
````
|
|
||||||
usage: bumper [-h] [--listen LISTEN] [--announce ANNOUNCE] [--debug]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--listen LISTEN start serving on address
|
|
||||||
--announce ANNOUNCE announce address to bots on checkin
|
|
||||||
--debug enable debug logs
|
|
||||||
````
|
|
||||||
|
|
||||||
#### Environment Variables
|
|
||||||
|
|
||||||
Bumper looks for a number of Environment Variables at initialization allowing for customizing a number of settings. For more information see the [Environment Variables](docs/Env_Var.md) doc.
|
|
||||||
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
### Docker Hub
|
|
||||||
|
|
||||||
To download the image from Docker Hub you can run the following:
|
|
||||||
`docker pull bmartin5692/bumper`
|
|
||||||
|
|
||||||
[View Bumper on Docker Hub](https://hub.docker.com/r/bmartin5692/bumper)
|
|
||||||
|
|
||||||
### Docker build
|
|
||||||
|
|
||||||
To build the docker image yourself you can run the following:
|
|
||||||
`docker build -t bmartin5692/bumper .`
|
|
||||||
|
|
||||||
This requires Docker 17.09 or newer, but has also been tested with podman.
|
|
||||||
|
|
||||||
### Docker usage
|
|
||||||
|
|
||||||
To run the image in docker some environment settings and port mappings are required:
|
|
||||||
|
|
||||||
**Ports Required: (-p)**
|
|
||||||
- 443 - `-p 443:443`
|
|
||||||
- 8007 - `-p 8007:8007`
|
|
||||||
- 8883 - `-p 8883:8883`
|
|
||||||
- 5223 - `-p 5223:5223`
|
|
||||||
|
|
||||||
**Environment Settings: (-e)**
|
|
||||||
|
|
||||||
BUMPER_ANNOUNCE_IP should be used so the actual host IP is reported to bots that checkin.
|
|
||||||
- BUMPER_ANNOUNCE_IP - `-e "BUMPER_ANNOUNCE_IP=X.X.X.X"`
|
|
||||||
|
|
||||||
**Volume Settings: (-v)**
|
|
||||||
|
|
||||||
Optionally you can map existing directories for logs, data, and certs.
|
|
||||||
|
|
||||||
- data/logs/certs
|
|
||||||
- Data - `-v /home/user/bumper/data:/bumper/data`
|
|
||||||
|
|
||||||
**Full Example:**
|
|
||||||
|
|
||||||
````
|
|
||||||
docker run -it -e "BUMPER_ANNOUNCE_IP=X.X.X.X" -p 443:443 -p 8007:8007 -p 8883:8883 -p 5223:5223 -v /home/user/bumper/data:/bumper/data --name bumper bmartin5692/bumper
|
|
||||||
````
|
|
||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
As work to reverse the protocols and provide a self-hosted central server is still in progress, Bumper has had limited testing. There are a number of EcoVacs models that it hasn't been tested against. Bumper should be compatible with most wifi-enabled robots that use either the Ecovacs Android/iOS app or the Ecovacs Home Android/iOS app, but has only been reported to work on the below:
|
As work to reverse the protocols and provide a self-hosted central server is still in progress, Bumper has had limited testing. There are a number of EcoVacs models that it hasn't been tested against. Bumper should be compatible with most wifi-enabled robots that use either the Ecovacs Android/iOS app or the Ecovacs Home Android/iOS app, but has only been reported to work on the below:
|
||||||
|
|
@ -147,24 +46,17 @@ As work to reverse the protocols and provide a self-hosted central server is sti
|
||||||
| --------------- | ------------- | --------------------- | -------------------- |
|
| --------------- | ------------- | --------------------- | -------------------- |
|
||||||
| Deebot 900/901 | MQTT | master | Ecovacs/Ecovacs Home |
|
| Deebot 900/901 | MQTT | master | Ecovacs/Ecovacs Home |
|
||||||
| Deebot 600 | MQTT | master | Ecovacs Home |
|
| Deebot 600 | MQTT | master | Ecovacs Home |
|
||||||
|
| Deebot Ozmo 950 | MQTT | master | Ecovacs Home |
|
||||||
| Deebot Ozmo 601 | XMPP | master | Ecovacs |
|
| Deebot Ozmo 601 | XMPP | master | Ecovacs |
|
||||||
| Deebot Ozmo 930 | XMPP | master | Ecovacs |
|
| Deebot Ozmo 930 | XMPP | master | Ecovacs |
|
||||||
| Deebot M81 Pro | XMPP | v0.1.0 | Ecovacs |
|
| Deebot M81 Pro | XMPP | v0.1.0 | Ecovacs |
|
||||||
|
|
||||||
For more information about the protocols and how Bumper works, see the [How does it work?](docs/How_It_Works.md) page in the docs. If you test against another model and it works, please open an issue to report it.
|
## Documentation and Getting Started
|
||||||
|
|
||||||
## Thanks
|
See the documentation on [Read the Docs](https://bumper.readthedocs.io)
|
||||||
|
|
||||||
|
---
|
||||||
|
### Thanks
|
||||||
A big thanks to the original project creator @torbjornaxelsson, without his work this project would have taken much longer to build.
|
A big thanks to the original project creator @torbjornaxelsson, without his work this project would have taken much longer to build.
|
||||||
|
|
||||||
Bumper wouldn't exist without [Sucks](https://github.com/wpietri/sucks), an open source client for Ecovacs robots. Big thanks to @wpietri and contributors!
|
Bumper wouldn't exist without [Sucks](https://github.com/wpietri/sucks), an open source client for Ecovacs robots. Thanks to @wpietri and contributors!
|
||||||
|
|
||||||
### Bumper Origins
|
|
||||||
|
|
||||||
@torbjornaxelsson created Bumper originally in 2017 and the project reached its original goal and remained in a stable, but stale state with the last commit in Dec 2017.
|
|
||||||
|
|
||||||
Since the original release of Bumper newer bots have been released that use different protocols, and in early 2019 it was decided that @bmartin5692 would take over development moving forward. This fork was detached and all future development of bumper will take place here.
|
|
||||||
|
|
||||||
#### Archive
|
|
||||||
|
|
||||||
The original bumper code base has been branched off as [v0.1.0](https://github.com/bmartin5692/bumper/tree/v0.1.0) and will remain in the original state. This branch *may* work for older models (M81 Pro, N79S, etc.), but the master branch should be tried first as it contains many changes and fixes over the original with active development moving forward.
|
|
||||||
|
|
|
||||||
13
docs/CmdLine.md
Normal file
13
docs/CmdLine.md
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Command-Line Usage
|
||||||
|
|
||||||
|
Bumper has a number of available command-line arguments that can be viewed by adding the `-h` flag.
|
||||||
|
|
||||||
|
````
|
||||||
|
usage: bumper [-h] [--listen LISTEN] [--announce ANNOUNCE] [--debug]
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--listen LISTEN start serving on address
|
||||||
|
--announce ANNOUNCE announce address to bots on checkin
|
||||||
|
--debug enable debug logs
|
||||||
|
````
|
||||||
|
|
@ -31,6 +31,7 @@ Create_Certs was created to ease creation of certificates specifically for Bumpe
|
||||||
Create_Certs is written in Go which allows cross-platform compiling. If the binaries don't work on your platform, install Go.
|
Create_Certs is written in Go which allows cross-platform compiling. If the binaries don't work on your platform, install Go.
|
||||||
|
|
||||||
With Go installed you can:
|
With Go installed you can:
|
||||||
|
|
||||||
* Execute the go code - `go run create_certs/src/create_certs.go`
|
* Execute the go code - `go run create_certs/src/create_certs.go`
|
||||||
* Build a new binary for your platform - `go build create_certs/src/create_certs.go`
|
* Build a new binary for your platform - `go build create_certs/src/create_certs.go`
|
||||||
|
|
||||||
|
|
@ -53,110 +54,120 @@ I get it, you don't trust create_certs and want to do it manually. The easiest
|
||||||
### Create a Root CA
|
### Create a Root CA
|
||||||
|
|
||||||
1. Create csrconfig.txt for use in later commands
|
1. Create csrconfig.txt for use in later commands
|
||||||
csrconfig.txt
|
|
||||||
````
|
***csrconfig.txt***
|
||||||
[ req ]
|
````
|
||||||
default_md = sha256
|
[ req ]
|
||||||
prompt = no
|
default_md = sha256
|
||||||
req_extensions = req_ext
|
prompt = no
|
||||||
distinguished_name = req_distinguished_name
|
req_extensions = req_ext
|
||||||
[ req_distinguished_name ]
|
distinguished_name = req_distinguished_name
|
||||||
commonName = Bumper CA
|
[ req_distinguished_name ]
|
||||||
organizationName = Bumper
|
commonName = Bumper CA
|
||||||
[ req_ext ]
|
organizationName = Bumper
|
||||||
keyUsage=critical,keyCertSign,cRLSign
|
[ req_ext ]
|
||||||
basicConstraints=critical,CA:true,pathlen:1
|
keyUsage=critical,keyCertSign,cRLSign
|
||||||
````
|
basicConstraints=critical,CA:true,pathlen:1
|
||||||
|
````
|
||||||
|
|
||||||
1. Create certconfig.txt for use in later commands
|
1. Create certconfig.txt for use in later commands
|
||||||
certconfig.txt
|
|
||||||
````
|
***certconfig.txt***
|
||||||
[ req ]
|
````
|
||||||
default_md = sha256
|
[ req ]
|
||||||
prompt = no
|
default_md = sha256
|
||||||
req_extensions = req_ext
|
prompt = no
|
||||||
distinguished_name = req_distinguished_name
|
req_extensions = req_ext
|
||||||
[ req_distinguished_name ]
|
distinguished_name = req_distinguished_name
|
||||||
commonName = Bumper CA
|
[ req_distinguished_name ]
|
||||||
organizationName = Bumper
|
commonName = Bumper CA
|
||||||
[ req_ext ]
|
organizationName = Bumper
|
||||||
subjectKeyIdentifier = hash
|
[ req_ext ]
|
||||||
authorityKeyIdentifier = keyid:always,issuer
|
subjectKeyIdentifier = hash
|
||||||
keyUsage=critical,keyCertSign,cRLSign
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
basicConstraints=critical,CA:true,pathlen:1
|
keyUsage=critical,keyCertSign,cRLSign
|
||||||
````
|
basicConstraints=critical,CA:true,pathlen:1
|
||||||
|
````
|
||||||
|
|
||||||
1. Generate the RSA private key
|
1. Generate the RSA private key
|
||||||
`openssl genpkey -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.key`
|
|
||||||
|
`openssl genpkey -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.key`
|
||||||
|
|
||||||
1. Create the CSR
|
1. Create the CSR
|
||||||
`openssl req -new -nodes -key priv.key -config csrconfig.txt -out cert.csr`
|
|
||||||
|
`openssl req -new -nodes -key priv.key -config csrconfig.txt -out cert.csr`
|
||||||
|
|
||||||
1. Self-sign your CSR
|
1. Self-sign your CSR
|
||||||
`openssl req -x509 -nodes -in cert.csr -days 3650 -key priv.key -config certconfig.txt -extensions req_ext -out cert.crt`
|
|
||||||
|
`openssl req -x509 -nodes -in cert.csr -days 3650 -key priv.key -config certconfig.txt -extensions req_ext -out cert.crt`
|
||||||
|
|
||||||
### Create the Server Certificate
|
### Create the Server Certificate
|
||||||
|
|
||||||
1. Create csrconfig.txt for use in later commands
|
1. Create csrconfig.txt for use in later commands
|
||||||
csrconfig.txt
|
|
||||||
````
|
***csrconfig.txt***
|
||||||
[ req ]
|
````
|
||||||
default_md = sha256
|
[ req ]
|
||||||
prompt = no
|
default_md = sha256
|
||||||
req_extensions = req_ext
|
prompt = no
|
||||||
distinguished_name = req_distinguished_name
|
req_extensions = req_ext
|
||||||
[ req_distinguished_name ]
|
distinguished_name = req_distinguished_name
|
||||||
commonName = Bumper Server
|
[ req_distinguished_name ]
|
||||||
organizationName = Bumper
|
commonName = Bumper Server
|
||||||
[ req_ext ]
|
organizationName = Bumper
|
||||||
keyUsage=critical,digitalSignature,keyEncipherment
|
[ req_ext ]
|
||||||
extendedKeyUsage=serverAuth,clientAuth
|
keyUsage=critical,digitalSignature,keyEncipherment
|
||||||
basicConstraints=critical,CA:false
|
extendedKeyUsage=serverAuth,clientAuth
|
||||||
subjectAltName = @alt_names
|
basicConstraints=critical,CA:false
|
||||||
[ alt_names ]
|
subjectAltName = @alt_names
|
||||||
DNS.0 = ecovacs.com
|
[ alt_names ]
|
||||||
DNS.1 = *.ecovacs.com
|
DNS.0 = ecovacs.com
|
||||||
DNS.2 = ecouser.net
|
DNS.1 = *.ecovacs.com
|
||||||
DNS.3 = *.ecouser.net
|
DNS.2 = ecouser.net
|
||||||
DNS.4 = ecovacs.net
|
DNS.3 = *.ecouser.net
|
||||||
DNS.5 = *.ecovacs.net
|
DNS.4 = ecovacs.net
|
||||||
````
|
DNS.5 = *.ecovacs.net
|
||||||
|
````
|
||||||
|
|
||||||
1. Create certconfig.txt for use in later commands
|
1. Create certconfig.txt for use in later commands
|
||||||
certconfig.txt
|
|
||||||
````
|
***certconfig.txt***
|
||||||
[ req ]
|
````
|
||||||
default_md = sha256
|
[ req ]
|
||||||
prompt = no
|
default_md = sha256
|
||||||
req_extensions = req_ext
|
prompt = no
|
||||||
distinguished_name = req_distinguished_name
|
req_extensions = req_ext
|
||||||
[ req_distinguished_name ]
|
distinguished_name = req_distinguished_name
|
||||||
commonName = Bumper Server
|
[ req_distinguished_name ]
|
||||||
organizationName = Bumper
|
commonName = Bumper Server
|
||||||
[ req_ext ]
|
organizationName = Bumper
|
||||||
subjectKeyIdentifier = hash
|
[ req_ext ]
|
||||||
authorityKeyIdentifier = keyid:always,issuer
|
subjectKeyIdentifier = hash
|
||||||
keyUsage=critical,digitalSignature,keyEncipherment
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
extendedKeyUsage=serverAuth,clientAuth
|
keyUsage=critical,digitalSignature,keyEncipherment
|
||||||
basicConstraints=critical,CA:false
|
extendedKeyUsage=serverAuth,clientAuth
|
||||||
subjectAltName = @alt_names
|
basicConstraints=critical,CA:false
|
||||||
[ alt_names ]
|
subjectAltName = @alt_names
|
||||||
DNS.0 = ecovacs.com
|
[ alt_names ]
|
||||||
DNS.1 = *.ecovacs.com
|
DNS.0 = ecovacs.com
|
||||||
DNS.2 = ecouser.net
|
DNS.1 = *.ecovacs.com
|
||||||
DNS.3 = *.ecouser.net
|
DNS.2 = ecouser.net
|
||||||
DNS.4 = ecovacs.net
|
DNS.3 = *.ecouser.net
|
||||||
DNS.5 = *.ecovacs.net
|
DNS.4 = ecovacs.net
|
||||||
````
|
DNS.5 = *.ecovacs.net
|
||||||
|
````
|
||||||
|
|
||||||
1. Generate the RSA private key
|
1. Generate the RSA private key
|
||||||
`openssl genpkey -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.key`
|
|
||||||
|
`openssl genpkey -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.key`
|
||||||
|
|
||||||
1. Create the CSR
|
1. Create the CSR
|
||||||
`openssl req -new -nodes -key priv.key -config csrconfig.txt -out cert.csr`
|
|
||||||
|
`openssl req -new -nodes -key priv.key -config csrconfig.txt -out cert.csr`
|
||||||
|
|
||||||
1. Sign your CSR with a root CA cert
|
1. Sign your CSR with a root CA cert
|
||||||
`openssl x509 -req -in cert.csr -days 3650 -CA ca.crt -CAkey priv.key -extfile certconfig.txt -extensions req_ext -CAserial /tmp/tmp-10593TSH1OlVSxC7C -CAcreateserial -out cert.crt`
|
|
||||||
|
`openssl x509 -req -in cert.csr -days 3650 -CA ca.crt -CAkey priv.key -extfile certconfig.txt -extensions req_ext -CAserial /tmp/tmp-10593TSH1OlVSxC7C -CAcreateserial -out cert.crt`
|
||||||
|
|
||||||
## Using a Custom CA/Self
|
## Using a Custom CA/Self
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ The easiest way is overriding the main domains used by EcoVacs using DNSMasq/PiH
|
||||||
|
|
||||||
## Custom DNSMasq Config
|
## Custom DNSMasq Config
|
||||||
|
|
||||||
Typically written at /etc/dnsmasq.d/{##}-{name}.conf
|
Typically written at /etc/dnsmasq.d/{##}-{name}.conf
|
||||||
- Ex: `/etc/dnsmasq.d/02-custom.conf`
|
- Ex: `/etc/dnsmasq.d/02-custom.conf`
|
||||||
|
|
||||||
**File Contents:**
|
**File Contents:**
|
||||||
````
|
````
|
||||||
|
|
@ -16,7 +16,8 @@ address=/ecovacs.net/{bumper server ip}
|
||||||
**Note:** *Replace `{bumper server ip}` with your server's IP*
|
**Note:** *Replace `{bumper server ip}` with your server's IP*
|
||||||
|
|
||||||
If using PiHole, reload FTL to apply changes:
|
If using PiHole, reload FTL to apply changes:
|
||||||
`sudo service pihole-FTL reload`
|
|
||||||
|
`sudo service pihole-FTL reload`
|
||||||
|
|
||||||
## Manual Override
|
## Manual Override
|
||||||
|
|
||||||
|
|
@ -27,6 +28,7 @@ If overriding DNS for the top-level domains isn't an option, you'll need to conf
|
||||||
Not all domains have been documented at this point, and this list will be updated as more are identified/seen. The preferred way to ensure Bumper works is to override the full domains as above.
|
Not all domains have been documented at this point, and this list will be updated as more are identified/seen. The preferred way to ensure Bumper works is to override the full domains as above.
|
||||||
|
|
||||||
Replacement Examples:
|
Replacement Examples:
|
||||||
|
|
||||||
- {countrycode}
|
- {countrycode}
|
||||||
- If you see `eco-{countrycode}-api.ecovacs.com` and you live in the US/North America you would use: `eco-us-api.ecovacs.com`
|
- If you see `eco-{countrycode}-api.ecovacs.com` and you live in the US/North America you would use: `eco-us-api.ecovacs.com`
|
||||||
- **Note**: {countrycode} may also be generalized regions such as "EU".
|
- **Note**: {countrycode} may also be generalized regions such as "EU".
|
||||||
|
|
|
||||||
44
docs/Docker.md
Normal file
44
docs/Docker.md
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Docker Hub
|
||||||
|
|
||||||
|
To download the image from Docker Hub you can run the following:
|
||||||
|
|
||||||
|
`docker pull bmartin5692/bumper`
|
||||||
|
|
||||||
|
[View Bumper on Docker Hub](https://hub.docker.com/r/bmartin5692/bumper)
|
||||||
|
|
||||||
|
# Build a Docker image
|
||||||
|
|
||||||
|
To build the docker image yourself you can run the following:
|
||||||
|
`docker build -t bmartin5692/bumper .`
|
||||||
|
|
||||||
|
This requires Docker 17.09 or newer, but has also been tested with podman.
|
||||||
|
|
||||||
|
# Docker usage
|
||||||
|
|
||||||
|
To run the image in docker some environment settings and port mappings are required:
|
||||||
|
|
||||||
|
**Ports Required: (-p)**
|
||||||
|
|
||||||
|
- 443 - `-p 443:443`
|
||||||
|
- 8007 - `-p 8007:8007`
|
||||||
|
- 8883 - `-p 8883:8883`
|
||||||
|
- 5223 - `-p 5223:5223`
|
||||||
|
|
||||||
|
**Environment Settings: (-e)**
|
||||||
|
|
||||||
|
`BUMPER_ANNOUNCE_IP` should be used so the actual host IP is reported to bots that checkin.
|
||||||
|
|
||||||
|
- BUMPER_ANNOUNCE_IP - `-e "BUMPER_ANNOUNCE_IP=X.X.X.X"`
|
||||||
|
|
||||||
|
**Volume Settings: (-v)**
|
||||||
|
|
||||||
|
Optionally you can map existing directories for logs, data, and certs.
|
||||||
|
|
||||||
|
- data/logs/certs
|
||||||
|
- Data - `-v /home/user/bumper/data:/bumper/data`
|
||||||
|
|
||||||
|
**Full Example:**
|
||||||
|
|
||||||
|
````
|
||||||
|
docker run -it -e "BUMPER_ANNOUNCE_IP=X.X.X.X" -p 443:443 -p 8007:8007 -p 8883:8883 -p 5223:5223 -v /home/user/bumper/data:/bumper/data --name bumper bmartin5692/bumper
|
||||||
|
````
|
||||||
|
|
@ -25,28 +25,23 @@ Bumper *can* be used with the official "Ecovacs" or "Ecovacs Home" app, but with
|
||||||
### Importing the CA Cert on iOS
|
### Importing the CA Cert on iOS
|
||||||
|
|
||||||
1. Open the e-mail on your iOS device, and click the attached cert
|
1. Open the e-mail on your iOS device, and click the attached cert
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
2. Install the profile by clicking "Install", and entering your pass code if prompted
|
1. Install the profile by clicking "Install", and entering your pass code if prompted
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
3. Accept the certificate warning by clicking "Install" again
|
1. Accept the certificate warning by clicking "Install" again
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
4. Click "Done" to exit the profile installation
|
1. Click "Done" to exit the profile installation
|
||||||
5. Go to Settings > General > About
|
1. Go to Settings > General > About
|
||||||
6. Scroll to the bottom and click "Certificate Trust Settings"
|
1. Scroll to the bottom and click "Certificate Trust Settings"
|
||||||
7. Enable Full Trust for the Bumper CA Cert, by moving the slider to the right
|
1. Enable Full Trust for the Bumper CA Cert, by moving the slider to the right
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
8. Click continue when prompted
|
1. Click continue when prompted
|
||||||
9. That's it, you can now [Use the app](#use-the-app)
|
1. That's it, you can now [Use the app](#use-the-app)
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
@ -80,17 +75,17 @@ After reboot, verify that the certificate was added by checking `Settings > Secu
|
||||||
|
|
||||||
**Quick Method**
|
**Quick Method**
|
||||||
|
|
||||||
2. Click the cert, and if prompted provide a name
|
1. Click the cert, and if prompted provide a name
|
||||||
3. Under "Used for", select "VPN and apps"
|
1. Under "Used for", select "VPN and apps"
|
||||||
|
|
||||||
**Long Method**
|
**Long Method**
|
||||||
|
|
||||||
2. Save the attached cert file
|
1. Save the attached cert file
|
||||||
3. Go to Settings > Lock screen and security > Other security settings
|
1. Go to Settings > Lock screen and security > Other security settings
|
||||||
4. Under "Credential storage", click "Install from device storage"
|
1. Under "Credential storage", click "Install from device storage"
|
||||||
5. Browse to the downloaded cert, select it, then click "Done"
|
1. Browse to the downloaded cert, select it, then click "Done"
|
||||||
6. Click the cert, and if prompted provide a name
|
1. Click the cert, and if prompted provide a name
|
||||||
7. Under "Used for", select "VPN and apps"
|
1. Under "Used for", select "VPN and apps"
|
||||||
|
|
||||||
Now, start [using the app](#use-the-app).
|
Now, start [using the app](#use-the-app).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,37 @@ At this time you'll need to use the bmartin5692 fork of sucks. Especially if yo
|
||||||
|
|
||||||
OR
|
OR
|
||||||
|
|
||||||
- You can use Sucks as a library from your own script, see the [example script](../examples/sucks.py)
|
- You can use Sucks as a library from your own script, for details see the [sucks project](https://github.com/wpietri/sucks)
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from sucks import *
|
||||||
|
|
||||||
|
|
||||||
|
class BumperVacBot(VacBot):
|
||||||
|
def __init__(self, server_address):
|
||||||
|
self.server_address = server_address
|
||||||
|
vacuum = {"did": "none", "class": "none"}
|
||||||
|
super().__init__("sucks", "ecouser.net", "", "", vacuum, "")
|
||||||
|
|
||||||
|
def connect_and_wait_until_ready(self):
|
||||||
|
logging.info("connecting")
|
||||||
|
self.xmpp.connect(self.server_address)
|
||||||
|
self.xmpp.process()
|
||||||
|
self.xmpp.wait_until_ready()
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG, format="%(levelname)-8s %(message)s")
|
||||||
|
server_address = ("xxx.xxx.xxx.xxx", 5223)
|
||||||
|
|
||||||
|
# Initialize
|
||||||
|
vacbot = BumperVacBot(server_address)
|
||||||
|
|
||||||
|
# Connect
|
||||||
|
vacbot.connect_and_wait_until_ready()
|
||||||
|
|
||||||
|
# Send a command
|
||||||
|
vacbot.run(Clean())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
|
||||||
47
docs/index.md
Normal file
47
docs/index.md
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Requirements
|
||||||
|
|
||||||
|
- An Ecovacs wifi-enabled robot
|
||||||
|
- A computer on your local network to run the Bumper server
|
||||||
|
- Python 3.7 and pipenv OR Docker
|
||||||
|
- A network router that has functionality for overriding DNS queries
|
||||||
|
- A client that can connect to Bumper and talk to the robot over the Ecovacs protocol.
|
||||||
|
- The "Ecovacs" or "Ecovacs Home" Android or iOS apps can be used if configured properly.
|
||||||
|
- See the docs on [Using Bumper with the official Android/iOS App](Use_With_App.md).
|
||||||
|
- [Sucks](https://github.com/wpietri/sucks) can also be used, which can act as a client and control the robots via command-line.
|
||||||
|
- See the doc on [Using Bumper with Sucks](Use_With_Sucks.md)
|
||||||
|
|
||||||
|
# Quick Start Usage
|
||||||
|
|
||||||
|
- Configure your Ecovacs vacuum using the official mobile app (if you haven't done this already)
|
||||||
|
- Configure your DNS server as described in the [DNS Setup](DNS_Setup.md) doc.
|
||||||
|
|
||||||
|
## Choose Installation Type
|
||||||
|
|
||||||
|
- Docker - [See Docker Details](Docker.md)
|
||||||
|
- Manual/Python
|
||||||
|
- Download bumper then run `pipenv install` to install dependencies
|
||||||
|
- Start bumper - see the [Starting Bumper](#starting-bumper) section.
|
||||||
|
|
||||||
|
- Control your robots like normal
|
||||||
|
- [Using Bumper with the official Android/iOS App](Use_With_App.md)
|
||||||
|
- [Using Bumper with Sucks](Use_With_Sucks.md)
|
||||||
|
|
||||||
|
# Starting Bumper
|
||||||
|
|
||||||
|
Bumper requires certificates to function. If certificates aren't found it will prompt to generate them for you.
|
||||||
|
|
||||||
|
For more information on generating certificates manually, see the [Creating Certs](Create_Certs.md) doc
|
||||||
|
|
||||||
|
- Start Bumper with `pipenv run python -m bumper`
|
||||||
|
- If prompted to generate certificates choose yes or no
|
||||||
|
|
||||||
|
- Reboot your robot
|
||||||
|
- **Note:** Some models may require removing and re-inserting the battery pack.
|
||||||
|
- This doesn't seem to be required for models that don't have easily accessible batteries such as the 900/901.
|
||||||
|
- If your configuration is correct, the robot will connect to Bumper within about 30 seconds. Bumper will output information about the connection status.
|
||||||
|
|
||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
Logs are output in the /logs directory.
|
||||||
|
|
||||||
|
If there is an issue, enable debug logging with the `--debug` switch for additional detail.
|
||||||
9
docs/origins.md
Normal file
9
docs/origins.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
### Bumper Origins
|
||||||
|
|
||||||
|
@torbjornaxelsson created Bumper originally in 2017 and the project reached its original goal and remained in a stable, but stale state with the last commit in Dec 2017.
|
||||||
|
|
||||||
|
Since the original release of Bumper newer bots have been released that use different protocols, and in early 2019 it was decided that @bmartin5692 would take over development moving forward. This fork was detached and all future development of bumper will take place here.
|
||||||
|
|
||||||
|
#### Archive
|
||||||
|
|
||||||
|
The original bumper code base has been branched off as [v0.1.0](https://github.com/bmartin5692/bumper/tree/v0.1.0) and will remain in the original state. This branch *may* work for older models (M81 Pro, N79S, etc.), but the master branch should be tried first as it contains many changes and fixes over the original with active development moving forward.
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
from sucks import *
|
|
||||||
|
|
||||||
|
|
||||||
class BumperVacBot(VacBot):
|
|
||||||
def __init__(self, server_address):
|
|
||||||
self.server_address = server_address
|
|
||||||
vacuum = {"did": "none", "class": "none"}
|
|
||||||
super().__init__("sucks", "ecouser.net", "", "", vacuum, "")
|
|
||||||
|
|
||||||
def connect_and_wait_until_ready(self):
|
|
||||||
logging.info("connecting")
|
|
||||||
self.xmpp.connect(self.server_address)
|
|
||||||
self.xmpp.process()
|
|
||||||
self.xmpp.wait_until_ready()
|
|
||||||
|
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG, format="%(levelname)-8s %(message)s")
|
|
||||||
server_address = ("xxx.xxx.xxx.xxx", 5223)
|
|
||||||
|
|
||||||
# Initialize
|
|
||||||
vacbot = BumperVacBot(server_address)
|
|
||||||
|
|
||||||
# Connect
|
|
||||||
vacbot.connect_and_wait_until_ready()
|
|
||||||
|
|
||||||
# Send a command
|
|
||||||
vacbot.run(Clean())
|
|
||||||
16
mkdocs.yml
Normal file
16
mkdocs.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
site_name: Bumper Docs
|
||||||
|
nav:
|
||||||
|
- Home: index.md
|
||||||
|
- How It Works: How_It_Works.md
|
||||||
|
- Using:
|
||||||
|
- "Command-Line": CmdLine.md
|
||||||
|
- "Docker": Docker.md
|
||||||
|
- "Using with Apps": Use_With_App.md
|
||||||
|
- "Using with Sucks": Use_With_Sucks.md
|
||||||
|
- Certs: Create_Certs.md
|
||||||
|
- DNS: DNS_Setup.md
|
||||||
|
- Configuration:
|
||||||
|
- "Environment Variables": Env_Var.md
|
||||||
|
- Origins: origins.md
|
||||||
|
|
||||||
|
theme: readthedocs
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
-i https://pypi.python.org/simple
|
aiohttp==3.6.2
|
||||||
aiohttp==4.0.0a0
|
|
||||||
async-timeout==3.0.1
|
async-timeout==3.0.1
|
||||||
attrs==19.1.0
|
atomicwrites==1.3.0
|
||||||
|
attrs==19.3.0
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
docopt==0.6.2
|
docopt==0.6.2
|
||||||
hbmqtt==0.9.5
|
hbmqtt==0.9.5
|
||||||
idna==2.8
|
idna==2.8
|
||||||
multidict==4.5.2
|
multidict==4.7.3
|
||||||
passlib==1.7.1
|
passlib==1.7.2
|
||||||
pyyaml==5.1.1
|
PyYAML==5.2
|
||||||
six==1.12.0
|
six==1.13.0
|
||||||
tinydb==3.13.0
|
tinydb==3.15.2
|
||||||
transitions==0.6.9
|
transitions==0.7.1
|
||||||
websockets==7.0
|
websockets==8.1
|
||||||
yarl==1.3.0
|
yarl==1.4.2
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue