Initial version
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| tildetown_botany_notify.egg-info/ | ||||
							
								
								
									
										594
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										594
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,594 @@ | ||||
| [[package]] | ||||
| category = "dev" | ||||
| description = "An abstract syntax tree for Python with inference support." | ||||
| name = "astroid" | ||||
| optional = false | ||||
| python-versions = ">=3.5" | ||||
| version = "2.4.2" | ||||
|  | ||||
| [package.dependencies] | ||||
| lazy-object-proxy = ">=1.4.0,<1.5.0" | ||||
| six = ">=1.12,<2.0" | ||||
| wrapt = ">=1.11,<2.0" | ||||
|  | ||||
| [package.dependencies.typed-ast] | ||||
| python = "<3.8" | ||||
| version = ">=1.4.0,<1.5" | ||||
|  | ||||
| [[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 = "dev" | ||||
| 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 = "main" | ||||
| description = "Modern password hashing for your software and your servers" | ||||
| name = "bcrypt" | ||||
| optional = false | ||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | ||||
| version = "3.1.7" | ||||
|  | ||||
| [package.dependencies] | ||||
| cffi = ">=1.1" | ||||
| six = ">=1.4.1" | ||||
|  | ||||
| [package.extras] | ||||
| tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)"] | ||||
|  | ||||
| [[package]] | ||||
| category = "main" | ||||
| description = "Foreign Function Interface for Python calling C code." | ||||
| name = "cffi" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "1.14.0" | ||||
|  | ||||
| [package.dependencies] | ||||
| pycparser = "*" | ||||
|  | ||||
| [[package]] | ||||
| category = "dev" | ||||
| description = "Cross-platform colored terminal text." | ||||
| marker = "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 = "main" | ||||
| description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." | ||||
| name = "cryptography" | ||||
| optional = false | ||||
| python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" | ||||
| version = "2.9.2" | ||||
|  | ||||
| [package.dependencies] | ||||
| cffi = ">=1.8,<1.11.3 || >1.11.3" | ||||
| six = ">=1.4.1" | ||||
|  | ||||
| [package.extras] | ||||
| docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] | ||||
| docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] | ||||
| idna = ["idna (>=2.1)"] | ||||
| pep8test = ["flake8", "flake8-import-order", "pep8-naming"] | ||||
| test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] | ||||
|  | ||||
| [[package]] | ||||
| category = "main" | ||||
| description = "Python bindings for libdbus" | ||||
| name = "dbus-python" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "1.2.16" | ||||
|  | ||||
| [[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 = "A Python utility / library to sort Python imports." | ||||
| name = "isort" | ||||
| optional = false | ||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | ||||
| version = "4.3.21" | ||||
|  | ||||
| [package.extras] | ||||
| pipfile = ["pipreqs", "requirementslib"] | ||||
| pyproject = ["toml"] | ||||
| requirements = ["pipreqs", "pip-api"] | ||||
| xdg_home = ["appdirs (>=1.4.0)"] | ||||
|  | ||||
| [[package]] | ||||
| category = "dev" | ||||
| description = "A fast and thorough lazy object proxy." | ||||
| name = "lazy-object-proxy" | ||||
| optional = false | ||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | ||||
| version = "1.4.3" | ||||
|  | ||||
| [[package]] | ||||
| category = "dev" | ||||
| description = "McCabe checker, plugin for flake8" | ||||
| name = "mccabe" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "0.6.1" | ||||
|  | ||||
| [[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 = "Python interface to DBus notifications" | ||||
| name = "notify2" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "0.3.1" | ||||
|  | ||||
| [[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 = "main" | ||||
| description = "SSH2 protocol library" | ||||
| name = "paramiko" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "2.7.1" | ||||
|  | ||||
| [package.dependencies] | ||||
| bcrypt = ">=3.1.3" | ||||
| cryptography = ">=2.5" | ||||
| pynacl = ">=1.0.1" | ||||
|  | ||||
| [package.extras] | ||||
| all = ["pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "bcrypt (>=3.1.3)", "invoke (>=1.3)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"] | ||||
| ed25519 = ["pynacl (>=1.0.1)", "bcrypt (>=3.1.3)"] | ||||
| gssapi = ["pyasn1 (>=0.1.7)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"] | ||||
| invoke = ["invoke (>=1.3)"] | ||||
|  | ||||
| [[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 = "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 = "main" | ||||
| description = "C parser in Python" | ||||
| name = "pycparser" | ||||
| optional = false | ||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | ||||
| version = "2.20" | ||||
|  | ||||
| [[package]] | ||||
| category = "dev" | ||||
| description = "python code static checker" | ||||
| name = "pylint" | ||||
| optional = false | ||||
| python-versions = ">=3.5.*" | ||||
| version = "2.5.3" | ||||
|  | ||||
| [package.dependencies] | ||||
| astroid = ">=2.4.0,<=2.5" | ||||
| colorama = "*" | ||||
| isort = ">=4.2.5,<5" | ||||
| mccabe = ">=0.6,<0.7" | ||||
| toml = ">=0.7.1" | ||||
|  | ||||
| [[package]] | ||||
| category = "main" | ||||
| description = "Python binding to the Networking and Cryptography (NaCl) library" | ||||
| name = "pynacl" | ||||
| optional = false | ||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | ||||
| version = "1.4.0" | ||||
|  | ||||
| [package.dependencies] | ||||
| cffi = ">=1.4.1" | ||||
| six = "*" | ||||
|  | ||||
| [package.extras] | ||||
| docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] | ||||
| tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.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 = "Thin-wrapper around the mock package for easier use with pytest" | ||||
| name = "pytest-mock" | ||||
| optional = false | ||||
| python-versions = ">=3.5" | ||||
| version = "3.2.0" | ||||
|  | ||||
| [package.dependencies] | ||||
| pytest = ">=2.7" | ||||
|  | ||||
| [package.extras] | ||||
| dev = ["pre-commit", "tox", "pytest-asyncio"] | ||||
|  | ||||
| [[package]] | ||||
| category = "main" | ||||
| 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 = "a fork of Python 2 and 3 ast modules with type comment support" | ||||
| marker = "implementation_name == \"cpython\" and python_version < \"3.8\"" | ||||
| name = "typed-ast" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "1.4.1" | ||||
|  | ||||
| [[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 = "dev" | ||||
| description = "Module for decorators, wrappers and monkey patching." | ||||
| name = "wrapt" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| version = "1.12.1" | ||||
|  | ||||
| [[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 = "9dab3e98965667a596dd70d581c3715739d5cd232d6bdc25fcf9ebbf735bf3ac" | ||||
| python-versions = "^3.6" | ||||
|  | ||||
| [metadata.files] | ||||
| astroid = [ | ||||
|     {file = "astroid-2.4.2-py3-none-any.whl", hash = "sha256:bc58d83eb610252fd8de6363e39d4f1d0619c894b0ed24603b881c02e64c7386"}, | ||||
|     {file = "astroid-2.4.2.tar.gz", hash = "sha256:2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703"}, | ||||
| ] | ||||
| 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"}, | ||||
| ] | ||||
| bcrypt = [ | ||||
|     {file = "bcrypt-3.1.7-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:d7bdc26475679dd073ba0ed2766445bb5b20ca4793ca0db32b399dccc6bc84b7"}, | ||||
|     {file = "bcrypt-3.1.7-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:69361315039878c0680be456640f8705d76cb4a3a3fe1e057e0f261b74be4b31"}, | ||||
|     {file = "bcrypt-3.1.7-cp27-cp27m-win32.whl", hash = "sha256:5432dd7b34107ae8ed6c10a71b4397f1c853bd39a4d6ffa7e35f40584cffd161"}, | ||||
|     {file = "bcrypt-3.1.7-cp27-cp27m-win_amd64.whl", hash = "sha256:9fe92406c857409b70a38729dbdf6578caf9228de0aef5bc44f859ffe971a39e"}, | ||||
|     {file = "bcrypt-3.1.7-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:763669a367869786bb4c8fcf731f4175775a5b43f070f50f46f0b59da45375d0"}, | ||||
|     {file = "bcrypt-3.1.7-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:a190f2a5dbbdbff4b74e3103cef44344bc30e61255beb27310e2aec407766052"}, | ||||
|     {file = "bcrypt-3.1.7-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:c9457fa5c121e94a58d6505cadca8bed1c64444b83b3204928a866ca2e599105"}, | ||||
|     {file = "bcrypt-3.1.7-cp34-cp34m-win32.whl", hash = "sha256:8b10acde4e1919d6015e1df86d4c217d3b5b01bb7744c36113ea43d529e1c3de"}, | ||||
|     {file = "bcrypt-3.1.7-cp34-cp34m-win_amd64.whl", hash = "sha256:cb93f6b2ab0f6853550b74e051d297c27a638719753eb9ff66d1e4072be67133"}, | ||||
|     {file = "bcrypt-3.1.7-cp35-cp35m-win32.whl", hash = "sha256:6fe49a60b25b584e2f4ef175b29d3a83ba63b3a4df1b4c0605b826668d1b6be5"}, | ||||
|     {file = "bcrypt-3.1.7-cp35-cp35m-win_amd64.whl", hash = "sha256:a595c12c618119255c90deb4b046e1ca3bcfad64667c43d1166f2b04bc72db09"}, | ||||
|     {file = "bcrypt-3.1.7-cp36-cp36m-win32.whl", hash = "sha256:74a015102e877d0ccd02cdeaa18b32aa7273746914a6c5d0456dd442cb65b99c"}, | ||||
|     {file = "bcrypt-3.1.7-cp36-cp36m-win_amd64.whl", hash = "sha256:0258f143f3de96b7c14f762c770f5fc56ccd72f8a1857a451c1cd9a655d9ac89"}, | ||||
|     {file = "bcrypt-3.1.7-cp37-cp37m-win32.whl", hash = "sha256:19a4b72a6ae5bb467fea018b825f0a7d917789bcfe893e53f15c92805d187294"}, | ||||
|     {file = "bcrypt-3.1.7-cp37-cp37m-win_amd64.whl", hash = "sha256:ff032765bb8716d9387fd5376d987a937254b0619eff0972779515b5c98820bc"}, | ||||
|     {file = "bcrypt-3.1.7-cp38-cp38-win32.whl", hash = "sha256:ce4e4f0deb51d38b1611a27f330426154f2980e66582dc5f438aad38b5f24fc1"}, | ||||
|     {file = "bcrypt-3.1.7-cp38-cp38-win_amd64.whl", hash = "sha256:6305557019906466fc42dbc53b46da004e72fd7a551c044a827e572c82191752"}, | ||||
|     {file = "bcrypt-3.1.7.tar.gz", hash = "sha256:0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42"}, | ||||
| ] | ||||
| cffi = [ | ||||
|     {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, | ||||
|     {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, | ||||
|     {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, | ||||
|     {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, | ||||
|     {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, | ||||
|     {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, | ||||
|     {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, | ||||
|     {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, | ||||
|     {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, | ||||
|     {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, | ||||
|     {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, | ||||
|     {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, | ||||
|     {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, | ||||
|     {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, | ||||
|     {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, | ||||
|     {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, | ||||
|     {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, | ||||
|     {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, | ||||
|     {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, | ||||
|     {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, | ||||
|     {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, | ||||
|     {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, | ||||
|     {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, | ||||
| ] | ||||
| colorama = [ | ||||
|     {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, | ||||
|     {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, | ||||
| ] | ||||
| cryptography = [ | ||||
|     {file = "cryptography-2.9.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:daf54a4b07d67ad437ff239c8a4080cfd1cc7213df57d33c97de7b4738048d5e"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3b3eba865ea2754738616f87292b7f29448aec342a7c720956f8083d252bf28b"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c447cf087cf2dbddc1add6987bbe2f767ed5317adb2d08af940db517dd704365"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27m-win32.whl", hash = "sha256:f118a95c7480f5be0df8afeb9a11bd199aa20afab7a96bcf20409b411a3a85f0"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:c4fd17d92e9d55b84707f4fd09992081ba872d1a0c610c109c18e062e06a2e55"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d0d5aeaedd29be304848f1c5059074a740fa9f6f26b84c5b63e8b29e73dfc270"}, | ||||
|     {file = "cryptography-2.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e4014639d3d73fbc5ceff206049c5a9a849cefd106a49fa7aaaa25cc0ce35cf"}, | ||||
|     {file = "cryptography-2.9.2-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:96c080ae7118c10fcbe6229ab43eb8b090fccd31a09ef55f83f690d1ef619a1d"}, | ||||
|     {file = "cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:e993468c859d084d5579e2ebee101de8f5a27ce8e2159959b6673b418fd8c785"}, | ||||
|     {file = "cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:88c881dd5a147e08d1bdcf2315c04972381d026cdb803325c03fe2b4a8ed858b"}, | ||||
|     {file = "cryptography-2.9.2-cp35-cp35m-win32.whl", hash = "sha256:651448cd2e3a6bc2bb76c3663785133c40d5e1a8c1a9c5429e4354201c6024ae"}, | ||||
|     {file = "cryptography-2.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:726086c17f94747cedbee6efa77e99ae170caebeb1116353c6cf0ab67ea6829b"}, | ||||
|     {file = "cryptography-2.9.2-cp36-cp36m-win32.whl", hash = "sha256:091d31c42f444c6f519485ed528d8b451d1a0c7bf30e8ca583a0cac44b8a0df6"}, | ||||
|     {file = "cryptography-2.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:bb1f0281887d89617b4c68e8db9a2c42b9efebf2702a3c5bf70599421a8623e3"}, | ||||
|     {file = "cryptography-2.9.2-cp37-cp37m-win32.whl", hash = "sha256:18452582a3c85b96014b45686af264563e3e5d99d226589f057ace56196ec78b"}, | ||||
|     {file = "cryptography-2.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:22e91636a51170df0ae4dcbd250d318fd28c9f491c4e50b625a49964b24fe46e"}, | ||||
|     {file = "cryptography-2.9.2-cp38-cp38-win32.whl", hash = "sha256:844a76bc04472e5135b909da6aed84360f522ff5dfa47f93e3dd2a0b84a89fa0"}, | ||||
|     {file = "cryptography-2.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:1dfa985f62b137909496e7fc182dac687206d8d089dd03eaeb28ae16eec8e7d5"}, | ||||
|     {file = "cryptography-2.9.2.tar.gz", hash = "sha256:a0c30272fb4ddda5f5ffc1089d7405b7a71b0b0f51993cb4e5dbb4590b2fc229"}, | ||||
| ] | ||||
| dbus-python = [ | ||||
|     {file = "dbus-python-1.2.16.tar.gz", hash = "sha256:11238f1d86c995d8aed2e22f04a1e3779f0d70e587caffeab4857f3c662ed5a4"}, | ||||
| ] | ||||
| 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"}, | ||||
| ] | ||||
| isort = [ | ||||
|     {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, | ||||
|     {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, | ||||
| ] | ||||
| lazy-object-proxy = [ | ||||
|     {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win32.whl", hash = "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win32.whl", hash = "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win_amd64.whl", hash = "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, | ||||
|     {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, | ||||
| ] | ||||
| mccabe = [ | ||||
|     {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, | ||||
|     {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, | ||||
| ] | ||||
| 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"}, | ||||
| ] | ||||
| notify2 = [ | ||||
|     {file = "notify2-0.3.1-py2.py3-none-any.whl", hash = "sha256:d7e27e63c2120c074225e526754101e22f029e38e5f002b1ceaa965258bf1073"}, | ||||
|     {file = "notify2-0.3.1.tar.gz", hash = "sha256:33fa108d50c42f3cd3407cc437518ad3f6225d1bb237011f16393c9dd3ce197d"}, | ||||
| ] | ||||
| packaging = [ | ||||
|     {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, | ||||
|     {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, | ||||
| ] | ||||
| paramiko = [ | ||||
|     {file = "paramiko-2.7.1-py2.py3-none-any.whl", hash = "sha256:9c980875fa4d2cb751604664e9a2d0f69096643f5be4db1b99599fe114a97b2f"}, | ||||
|     {file = "paramiko-2.7.1.tar.gz", hash = "sha256:920492895db8013f6cc0179293147f830b8c7b21fdfc839b6bad760c27459d9f"}, | ||||
| ] | ||||
| pluggy = [ | ||||
|     {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, | ||||
|     {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, | ||||
| ] | ||||
| py = [ | ||||
|     {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, | ||||
|     {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, | ||||
| ] | ||||
| pycparser = [ | ||||
|     {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, | ||||
|     {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, | ||||
| ] | ||||
| pylint = [ | ||||
|     {file = "pylint-2.5.3-py3-none-any.whl", hash = "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c"}, | ||||
|     {file = "pylint-2.5.3.tar.gz", hash = "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc"}, | ||||
| ] | ||||
| pynacl = [ | ||||
|     {file = "PyNaCl-1.4.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff"}, | ||||
|     {file = "PyNaCl-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514"}, | ||||
|     {file = "PyNaCl-1.4.0-cp27-cp27m-win32.whl", hash = "sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574"}, | ||||
|     {file = "PyNaCl-1.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80"}, | ||||
|     {file = "PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7"}, | ||||
|     {file = "PyNaCl-1.4.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122"}, | ||||
|     {file = "PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d"}, | ||||
|     {file = "PyNaCl-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4"}, | ||||
|     {file = "PyNaCl-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25"}, | ||||
|     {file = "PyNaCl-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4"}, | ||||
|     {file = "PyNaCl-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6"}, | ||||
|     {file = "PyNaCl-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f"}, | ||||
|     {file = "PyNaCl-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f"}, | ||||
|     {file = "PyNaCl-1.4.0-cp38-cp38-win32.whl", hash = "sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96"}, | ||||
|     {file = "PyNaCl-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420"}, | ||||
|     {file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"}, | ||||
| ] | ||||
| 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-mock = [ | ||||
|     {file = "pytest-mock-3.2.0.tar.gz", hash = "sha256:7122d55505d5ed5a6f3df940ad174b3f606ecae5e9bc379569cdcbd4cd9d2b83"}, | ||||
|     {file = "pytest_mock-3.2.0-py3-none-any.whl", hash = "sha256:5564c7cd2569b603f8451ec77928083054d8896046830ca763ed68f4112d17c7"}, | ||||
| ] | ||||
| 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"}, | ||||
| ] | ||||
| typed-ast = [ | ||||
|     {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, | ||||
|     {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, | ||||
|     {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, | ||||
|     {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, | ||||
|     {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, | ||||
|     {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, | ||||
|     {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, | ||||
|     {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, | ||||
|     {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, | ||||
|     {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, | ||||
|     {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, | ||||
|     {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, | ||||
|     {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, | ||||
|     {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, | ||||
|     {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, | ||||
|     {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, | ||||
|     {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, | ||||
|     {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, | ||||
|     {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, | ||||
|     {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, | ||||
|     {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, | ||||
| ] | ||||
| wcwidth = [ | ||||
|     {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, | ||||
|     {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, | ||||
| ] | ||||
| wrapt = [ | ||||
|     {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, | ||||
| ] | ||||
| zipp = [ | ||||
|     {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, | ||||
|     {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, | ||||
| ] | ||||
							
								
								
									
										21
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| [tool.poetry] | ||||
| name = "botany-notify" | ||||
| version = "0.1.0" | ||||
| description = "Get a desktop notification if your plant needs water" | ||||
| authors = ["Gergely Polonkai <gergely@polonkai.eu>"] | ||||
| license = "GPL-3.0-or-later" | ||||
|  | ||||
| [tool.poetry.dependencies] | ||||
| python = "^3.6" | ||||
| paramiko = "^2.7.1" | ||||
| notify2 = "^0.3.1" | ||||
| dbus-python = "^1.2.16" | ||||
|  | ||||
| [tool.poetry.dev-dependencies] | ||||
| pylint = "^2.5.3" | ||||
| pytest = "^5.4.3" | ||||
| pytest-mock = "^3.2.0" | ||||
|  | ||||
| [build-system] | ||||
| requires = ["poetry>=0.12"] | ||||
| build-backend = "poetry.masonry.api" | ||||
							
								
								
									
										72
									
								
								tildetown_botany_notify/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								tildetown_botany_notify/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| """Check your tilde.town botany garden | ||||
| """ | ||||
|  | ||||
| from datetime import datetime | ||||
| import json | ||||
| import sys | ||||
|  | ||||
| import notify2 | ||||
| from paramiko.client import SSHClient | ||||
| from paramiko.ssh_exception import SSHException | ||||
|  | ||||
|  | ||||
| def get_botany_json(username): | ||||
|     ssh_client = SSHClient() | ||||
|     ssh_client.load_system_host_keys() | ||||
|     ssh_client.connect('tilde.town', username=username) | ||||
|  | ||||
|     with ssh_client.open_sftp() as sftp_client: | ||||
|         with sftp_client.open(f'.botany/{username}_plant_data.json') as remote_file: | ||||
|             botany_json_data = remote_file.read() | ||||
|  | ||||
|     return json.loads(botany_json_data) | ||||
|  | ||||
|  | ||||
| def get_water_level(botany_json): | ||||
|     timestamp = botany_json['last_watered'] | ||||
|     last_water_time = datetime.utcfromtimestamp(timestamp) | ||||
|     now = datetime.utcnow() | ||||
|     not_watered_for = (now - last_water_time).total_seconds() | ||||
|  | ||||
|     return 100 - (not_watered_for / 86400) * 100 | ||||
|  | ||||
|  | ||||
| def show_notification(title, message, message_type=notify2.URGENCY_NORMAL, icon='task-due'): | ||||
|     notify2.init('town.tilde.botany') | ||||
|     n = notify2.Notification(title, message, icon) | ||||
|     n.set_urgency(message_type) | ||||
|     n.set_timeout(10000) | ||||
|     n.show() | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     username = sys.argv[1] | ||||
|  | ||||
|     if len(sys.argv) > 2: | ||||
|         threshold = float(sys.argv[2]) | ||||
|     else: | ||||
|         threshold = 40 | ||||
|  | ||||
|     try: | ||||
|         botany_json = get_botany_json(username) | ||||
|     except SSHException: | ||||
|         show_error('Botany error', 'Could not connect to tilde.town') | ||||
|  | ||||
|         return | ||||
|     except json.JSONDecodeError: | ||||
|         show_error('Botany error', 'Invalid botany data fetched from tilde.town') | ||||
|  | ||||
|         return | ||||
|  | ||||
|     try: | ||||
|         water_level = get_water_level(botany_json) | ||||
|     except KeyError: | ||||
|         show_error('Botany error', 'Watering time missing from botany data') | ||||
|  | ||||
|         return | ||||
|  | ||||
|     if water_level < threshold: | ||||
|         show_notification('Your plant is drying', | ||||
|                           f'Your plant on tilde.town has a water level of {water_level:.2f}') | ||||
|  | ||||
| main() | ||||
		Reference in New Issue
	
	Block a user