diff --git a/lisa/commands.py b/lisa/commands.py index a47f433a6..ab1ef1a91 100644 --- a/lisa/commands.py +++ b/lisa/commands.py @@ -4,11 +4,11 @@ from argparse import Namespace from typing import Dict, List, Optional, cast from lisa.common.logger import log -from lisa.core.environment_factory import environment_factory +from lisa.core.environmentFactory import EnvironmentFactory from lisa.core.package import import_module -from lisa.core.platform_factory import platform_factory +from lisa.core.platformFactory import PlatformFactory from lisa.core.runtimeObject import RuntimeObject -from lisa.core.test_factory import test_factory +from lisa.core.testFactory import TestFactory from lisa.parameter_parser.parser import parse from lisa.test_runner.lisarunner import LISARunner from lisa.util import constants @@ -38,12 +38,13 @@ def _initialize(args: Namespace) -> RuntimeObject: # initialize environment environments_config = config.getEnvironment() + environment_factory = EnvironmentFactory() environment_factory.loadEnvironments(environments_config) - runtime_object.environment_factory = environment_factory # initialize platform platform_config = config.getPlatform() - runtime_object.platform = platform_factory.initializePlatform(platform_config) + factory = PlatformFactory() + runtime_object.platform = factory.initializePlatform(platform_config) runtime_object.validate() @@ -54,10 +55,8 @@ def run(args: Namespace) -> None: runtime_object = _initialize(args) platform = runtime_object.platform - environment_factory = runtime_object.environment_factory runner = LISARunner() - runner.config(constants.CONFIG_ENVIRONMENT_FACTORY, environment_factory) runner.config(constants.CONFIG_PLATFORM, platform) awaitable = runner.start() asyncio.run(awaitable) @@ -73,7 +72,8 @@ def list_start(args: Namespace) -> None: listAll = cast(Optional[bool], args.listAll) if args.type == "case": if listAll is True: - for metadata in test_factory.cases.values(): + factory = TestFactory() + for metadata in factory.cases.values(): log.info( "case: %s, suite: %s, area: %s, " + "category: %s, tags: %s, priority: %s", diff --git a/lisa/core/decorator/caseMetadata.py b/lisa/core/decorator/caseMetadata.py index 431be4058..04e6058c4 100644 --- a/lisa/core/decorator/caseMetadata.py +++ b/lisa/core/decorator/caseMetadata.py @@ -2,7 +2,7 @@ from timeit import default_timer as timer from typing import Callable, Optional from lisa.common.logger import log -from lisa.core.test_factory import test_factory +from lisa.core.testFactory import TestFactory class CaseMetadata(object): @@ -10,7 +10,8 @@ class CaseMetadata(object): self.priority = priority def __call__(self, func: Callable[..., None]) -> Callable[..., None]: - test_factory.addTestMethod(func, self.priority) + factory = TestFactory() + factory.addTestMethod(func, self.priority) def wrapper(*args: object) -> None: log.info("case '%s' started", func.__name__) diff --git a/lisa/core/decorator/suiteMetadata.py b/lisa/core/decorator/suiteMetadata.py index 0d99aee95..dd7ac0823 100644 --- a/lisa/core/decorator/suiteMetadata.py +++ b/lisa/core/decorator/suiteMetadata.py @@ -2,7 +2,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, Callable, List, Optional, Type -from lisa.core.test_factory import test_factory +from lisa.core.testFactory import TestFactory from lisa.core.testSuite import TestSuite if TYPE_CHECKING: @@ -19,9 +19,8 @@ class SuiteMetadata: self.name = name def __call__(self, test_class: Type[TestSuite]) -> Callable[..., object]: - test_factory.addTestClass( - test_class, self.area, self.category, self.tags, self.name - ) + factory = TestFactory() + factory.addTestClass(test_class, self.area, self.category, self.tags, self.name) def wrapper( test_class: Type[TestSuite], environment: Environment, cases: List[str] diff --git a/lisa/core/environment_factory.py b/lisa/core/environmentFactory.py similarity index 87% rename from lisa/core/environment_factory.py rename to lisa/core/environmentFactory.py index 73a9b1f77..fc165ad06 100644 --- a/lisa/core/environment_factory.py +++ b/lisa/core/environmentFactory.py @@ -1,13 +1,16 @@ from typing import Dict, List, Optional, cast +from singleton_decorator import singleton + from lisa.util import constants from .environment import Environment -default_no_name = "_no_name_default" +@singleton +class EnvironmentFactory: + default_no_name = "_no_name_default" -class EnvironmentsFactory: def __init__(self) -> None: self.environments: Dict[str, Environment] = dict() self.maxConcurrency = 1 @@ -29,13 +32,13 @@ class EnvironmentsFactory: if environment.name is None: if without_name is True: raise Exception("at least two environments has no name") - environment.name = default_no_name + environment.name = self.default_no_name without_name = True self.environments[environment.name] = environment def getEnvironment(self, name: Optional[str] = None) -> Environment: if name is None: - key = default_no_name + key = self.default_no_name else: key = name.lower() environmet = self.environments.get(key) @@ -43,6 +46,3 @@ class EnvironmentsFactory: raise Exception("not found environment '%s'", name) return environmet - - -environment_factory = EnvironmentsFactory() diff --git a/lisa/core/excutable_base.py b/lisa/core/excutableBase.py similarity index 100% rename from lisa/core/excutable_base.py rename to lisa/core/excutableBase.py diff --git a/lisa/core/platform_factory.py b/lisa/core/platformFactory.py similarity index 97% rename from lisa/core/platform_factory.py rename to lisa/core/platformFactory.py index 7b5d928cc..8c0d91c8b 100644 --- a/lisa/core/platform_factory.py +++ b/lisa/core/platformFactory.py @@ -1,11 +1,14 @@ from typing import Dict, List, Optional, Type, cast +from singleton_decorator import singleton + from lisa.common.logger import log from lisa.util import constants from .platform import Platform +@singleton class PlatformFactory: def __init__(self) -> None: self.platforms: Dict[str, Platform] = dict() @@ -46,6 +49,3 @@ class PlatformFactory: def _buildFactory(self) -> None: for sub_class in Platform.__subclasses__(): self.registerPlatform(sub_class) - - -platform_factory = PlatformFactory() diff --git a/lisa/core/runtimeObject.py b/lisa/core/runtimeObject.py index 815d67414..2339409e0 100644 --- a/lisa/core/runtimeObject.py +++ b/lisa/core/runtimeObject.py @@ -1,7 +1,7 @@ from typing import Optional, cast from lisa.common.logger import log -from lisa.core.environment_factory import EnvironmentsFactory, environment_factory +from lisa.core.environmentFactory import EnvironmentFactory from lisa.core.platform import Platform from lisa.parameter_parser.config import Config from lisa.sut_orchestrator.ready import ReadyPlatform @@ -12,7 +12,6 @@ class RuntimeObject: def __init__(self, config: Config): # global config self.config: Config = config - self.environment_factory: Optional[EnvironmentsFactory] = None self.platform: Optional[Platform] = None # do some cross object validation @@ -23,7 +22,8 @@ class RuntimeObject: warn_as_error = cast( Optional[bool], environment_config.get(constants.WARN_AS_ERROR) ) - enviornments = environment_factory.environments + factory = EnvironmentFactory() + enviornments = factory.environments for environment in enviornments.values(): if environment.spec is not None and isinstance( self.platform, ReadyPlatform diff --git a/lisa/core/test_factory.py b/lisa/core/testFactory.py similarity index 98% rename from lisa/core/test_factory.py rename to lisa/core/testFactory.py index 8d8ce23f0..fa0df01b2 100644 --- a/lisa/core/test_factory.py +++ b/lisa/core/testFactory.py @@ -1,5 +1,7 @@ from typing import Callable, Dict, List, Optional, Type +from singleton_decorator import singleton + from lisa.common.logger import log from lisa.core.testSuite import TestSuite @@ -48,6 +50,7 @@ class TestSuiteMetadata: ) +@singleton class TestFactory: def __init__(self) -> None: self.suites: Dict[str, TestSuiteMetadata] = dict() @@ -109,6 +112,3 @@ class TestFactory: ) -> None: test_suite.addCase(test_case) test_case.suite = test_suite - - -test_factory = TestFactory() diff --git a/lisa/test_runner/lisarunner.py b/lisa/test_runner/lisarunner.py index 1f2121a31..455035c3b 100644 --- a/lisa/test_runner/lisarunner.py +++ b/lisa/test_runner/lisarunner.py @@ -2,9 +2,9 @@ from typing import cast from lisa.common.logger import log from lisa.core.action import ActionStatus -from lisa.core.environment_factory import EnvironmentsFactory +from lisa.core.environmentFactory import EnvironmentFactory from lisa.core.platform import Platform -from lisa.core.test_factory import test_factory +from lisa.core.testFactory import TestFactory from lisa.core.testRunner import TestRunner from lisa.core.testSuite import TestSuite from lisa.util import constants @@ -19,20 +19,19 @@ class LISARunner(TestRunner): return "LISAv2" def config(self, key: str, value: object) -> None: - if key == constants.CONFIG_ENVIRONMENT_FACTORY: - self.environmentsFactory: EnvironmentsFactory = cast( - EnvironmentsFactory, value - ) - elif key == constants.CONFIG_PLATFORM: + if key == constants.CONFIG_PLATFORM: self.platform: Platform = cast(Platform, value) async def start(self) -> None: await super().start() self.setStatus(ActionStatus.RUNNING) + test_factory = TestFactory() suites = test_factory.suites + + environment_factory = EnvironmentFactory() # request environment log.info("platform %s environment requesting", self.platform.platformType()) - environment = self.environmentsFactory.getEnvironment() + environment = environment_factory.getEnvironment() log.info("platform %s environment requested", self.platform.platformType()) for suite in suites.values(): diff --git a/lisa/testcase_selector/tests_loader.py b/lisa/testcase_selector/testcaseLoader.py similarity index 100% rename from lisa/testcase_selector/tests_loader.py rename to lisa/testcase_selector/testcaseLoader.py diff --git a/poetry.lock b/poetry.lock index dfd8e1730..5c889d7e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -20,6 +20,21 @@ dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.int 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 = "dev" description = "The uncompromising code formatter." @@ -40,6 +55,17 @@ typed-ast = ">=1.4.0" [package.extras] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +[[package]] +category = "main" +description = "Foreign Function Interface for Python calling C code." +name = "cffi" +optional = false +python-versions = "*" +version = "1.14.1" + +[package.dependencies] +pycparser = "*" + [[package]] category = "dev" description = "Composable command line interface toolkit" @@ -48,6 +74,26 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "7.1.2" +[[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 = "3.0" + +[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,<3.1.0 || >3.1.0,<3.1.1 || >3.1.1)", "sphinx-rtd-theme"] +docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +idna = ["idna (>=2.1)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +ssh = ["bcrypt (>=3.1.5)"] +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 = "Decorators for Humans" @@ -173,6 +219,25 @@ optional = false python-versions = "*" version = "0.4.3" +[[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 = "A Python Parser" @@ -230,6 +295,14 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.6.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 = "passive checker of Python programs" @@ -281,6 +354,22 @@ python-language-server = "*" [package.extras] test = ["tox", "versioneer", "pytest", "pytest-cov", "coverage"] +[[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 = "JSON RPC 2.0 server library" @@ -361,6 +450,22 @@ version = "0.17.0" [package.extras] dev = ["pytest"] +[[package]] +category = "main" +description = "A testable singleton decorator" +name = "singleton-decorator" +optional = false +python-versions = "*" +version = "1.0.0" + +[[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 = "A collection of helpers and mock objects for unit tests and doc tests." @@ -408,7 +513,7 @@ python-versions = "*" version = "1.35" [metadata] -content-hash = "4d0216f755bae5066ebc7fb06448f659be9e75b1f73a943926bba6e2d7f332ce" +content-hash = "59cde0dfa40d3e9d1494ed53142ff22b698a890bb024defd051d4fd1145caa0e" lock-version = "1.0" python-versions = "^3.8" @@ -421,14 +526,85 @@ 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"}, +] black = [ {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, ] +cffi = [ + {file = "cffi-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:66dd45eb9530e3dde8f7c009f84568bc7cac489b93d04ac86e3111fb46e470c2"}, + {file = "cffi-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:4f53e4128c81ca3212ff4cf097c797ab44646a40b42ec02a891155cd7a2ba4d8"}, + {file = "cffi-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:833401b15de1bb92791d7b6fb353d4af60dc688eaa521bd97203dcd2d124a7c1"}, + {file = "cffi-1.14.1-cp27-cp27m-win32.whl", hash = "sha256:26f33e8f6a70c255767e3c3f957ccafc7f1f706b966e110b855bfe944511f1f9"}, + {file = "cffi-1.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:b87dfa9f10a470eee7f24234a37d1d5f51e5f5fa9eeffda7c282e2b8f5162eb1"}, + {file = "cffi-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:effd2ba52cee4ceff1a77f20d2a9f9bf8d50353c854a282b8760ac15b9833168"}, + {file = "cffi-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bac0d6f7728a9cc3c1e06d4fcbac12aaa70e9379b3025b27ec1226f0e2d404cf"}, + {file = "cffi-1.14.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d6033b4ffa34ef70f0b8086fd4c3df4bf801fee485a8a7d4519399818351aa8e"}, + {file = "cffi-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8416ed88ddc057bab0526d4e4e9f3660f614ac2394b5e019a628cdfff3733849"}, + {file = "cffi-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:892daa86384994fdf4856cb43c93f40cbe80f7f95bb5da94971b39c7f54b3a9c"}, + {file = "cffi-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:c991112622baee0ae4d55c008380c32ecfd0ad417bcd0417ba432e6ba7328caa"}, + {file = "cffi-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fcf32bf76dc25e30ed793145a57426064520890d7c02866eb93d3e4abe516948"}, + {file = "cffi-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f960375e9823ae6a07072ff7f8a85954e5a6434f97869f50d0e41649a1c8144f"}, + {file = "cffi-1.14.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a6d28e7f14ecf3b2ad67c4f106841218c8ab12a0683b1528534a6c87d2307af3"}, + {file = "cffi-1.14.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cda422d54ee7905bfc53ee6915ab68fe7b230cacf581110df4272ee10462aadc"}, + {file = "cffi-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:4a03416915b82b81af5502459a8a9dd62a3c299b295dcdf470877cb948d655f2"}, + {file = "cffi-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:4ce1e995aeecf7cc32380bc11598bfdfa017d592259d5da00fc7ded11e61d022"}, + {file = "cffi-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e23cb7f1d8e0f93addf0cae3c5b6f00324cccb4a7949ee558d7b6ca973ab8ae9"}, + {file = "cffi-1.14.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ddff0b2bd7edcc8c82d1adde6dbbf5e60d57ce985402541cd2985c27f7bec2a0"}, + {file = "cffi-1.14.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f90c2267101010de42f7273c94a1f026e56cbc043f9330acd8a80e64300aba33"}, + {file = "cffi-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:3cd2c044517f38d1b577f05927fb9729d3396f1d44d0c659a445599e79519792"}, + {file = "cffi-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fa72a52a906425416f41738728268072d5acfd48cbe7796af07a923236bcf96"}, + {file = "cffi-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:267adcf6e68d77ba154334a3e4fc921b8e63cbb38ca00d33d40655d4228502bc"}, + {file = "cffi-1.14.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d3148b6ba3923c5850ea197a91a42683f946dba7e8eb82dfa211ab7e708de939"}, + {file = "cffi-1.14.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:98be759efdb5e5fa161e46d404f4e0ce388e72fbf7d9baf010aff16689e22abe"}, + {file = "cffi-1.14.1-cp38-cp38-win32.whl", hash = "sha256:6923d077d9ae9e8bacbdb1c07ae78405a9306c8fd1af13bfa06ca891095eb995"}, + {file = "cffi-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:b1d6ebc891607e71fd9da71688fcf332a6630b7f5b7f5549e6e631821c0e5d90"}, + {file = "cffi-1.14.1.tar.gz", hash = "sha256:b2a2b0d276a136146e012154baefaea2758ef1f56ae9f4e01c612b0831e0bd2f"}, +] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] +cryptography = [ + {file = "cryptography-3.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ab49edd5bea8d8b39a44b3db618e4783ef84c19c8b47286bf05dfdb3efb01c83"}, + {file = "cryptography-3.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:124af7255ffc8e964d9ff26971b3a6153e1a8a220b9a685dc407976ecb27a06a"}, + {file = "cryptography-3.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:51e40123083d2f946794f9fe4adeeee2922b581fa3602128ce85ff813d85b81f"}, + {file = "cryptography-3.0-cp27-cp27m-win32.whl", hash = "sha256:dea0ba7fe6f9461d244679efa968d215ea1f989b9c1957d7f10c21e5c7c09ad6"}, + {file = "cryptography-3.0-cp27-cp27m-win_amd64.whl", hash = "sha256:8ecf9400d0893836ff41b6f977a33972145a855b6efeb605b49ee273c5e6469f"}, + {file = "cryptography-3.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c608ff4d4adad9e39b5057de43657515c7da1ccb1807c3a27d4cf31fc923b4b"}, + {file = "cryptography-3.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:bec7568c6970b865f2bcebbe84d547c52bb2abadf74cefce396ba07571109c67"}, + {file = "cryptography-3.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:0cbfed8ea74631fe4de00630f4bb592dad564d57f73150d6f6796a24e76c76cd"}, + {file = "cryptography-3.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:a09fd9c1cca9a46b6ad4bea0a1f86ab1de3c0c932364dbcf9a6c2a5eeb44fa77"}, + {file = "cryptography-3.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:ce82cc06588e5cbc2a7df3c8a9c778f2cb722f56835a23a68b5a7264726bb00c"}, + {file = "cryptography-3.0-cp35-cp35m-win32.whl", hash = "sha256:9367d00e14dee8d02134c6c9524bb4bd39d4c162456343d07191e2a0b5ec8b3b"}, + {file = "cryptography-3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:384d7c681b1ab904fff3400a6909261cae1d0939cc483a68bdedab282fb89a07"}, + {file = "cryptography-3.0-cp36-cp36m-win32.whl", hash = "sha256:4d355f2aee4a29063c10164b032d9fa8a82e2c30768737a2fd56d256146ad559"}, + {file = "cryptography-3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:45741f5499150593178fc98d2c1a9c6722df88b99c821ad6ae298eff0ba1ae71"}, + {file = "cryptography-3.0-cp37-cp37m-win32.whl", hash = "sha256:8ecef21ac982aa78309bb6f092d1677812927e8b5ef204a10c326fc29f1367e2"}, + {file = "cryptography-3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4b9303507254ccb1181d1803a2080a798910ba89b1a3c9f53639885c90f7a756"}, + {file = "cryptography-3.0-cp38-cp38-win32.whl", hash = "sha256:8713ddb888119b0d2a1462357d5946b8911be01ddbf31451e1d07eaa5077a261"}, + {file = "cryptography-3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bea0b0468f89cdea625bb3f692cd7a4222d80a6bdafd6fb923963f2b9da0e15f"}, + {file = "cryptography-3.0.tar.gz", hash = "sha256:8e924dbc025206e97756e8903039662aa58aa9ba357d8e1d8fc29e3092322053"}, +] decorator = [ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, @@ -480,6 +656,10 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] +paramiko = [ + {file = "paramiko-2.7.1-py2.py3-none-any.whl", hash = "sha256:9c980875fa4d2cb751604664e9a2d0f69096643f5be4db1b99599fe114a97b2f"}, + {file = "paramiko-2.7.1.tar.gz", hash = "sha256:920492895db8013f6cc0179293147f830b8c7b21fdfc839b6bad760c27459d9f"}, +] parso = [ {file = "parso-0.7.1-py2.py3-none-any.whl", hash = "sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea"}, {file = "parso-0.7.1.tar.gz", hash = "sha256:caba44724b994a8a5e086460bb212abc5a8bc46951bf4a9a1210745953622eb9"}, @@ -513,6 +693,10 @@ pycodestyle = [ {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, ] +pycparser = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] pyflakes = [ {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, @@ -528,6 +712,24 @@ pyls-isort = [ pyls-mypy = [ {file = "pyls-mypy-0.1.8.tar.gz", hash = "sha256:3fd83028961f0ca9eb3048b7a01cf42a9e3d46d8ea4935c1424c33da22c3eb03"}, ] +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"}, +] python-jsonrpc-server = [ {file = "python-jsonrpc-server-0.3.4.tar.gz", hash = "sha256:c73bf5495c9dd4d2f902755bedeb6da5afe778e0beee82f0e195c4655352fe37"}, {file = "python_jsonrpc_server-0.3.4-py3-none-any.whl", hash = "sha256:1f85f75f37f923149cc0aa078474b6df55b708e82ed819ca8846a65d7d0ada7f"}, @@ -579,6 +781,13 @@ retry = [ rope = [ {file = "rope-0.17.0.tar.gz", hash = "sha256:658ad6705f43dcf3d6df379da9486529cf30e02d9ea14c5682aa80eb33b649e1"}, ] +singleton-decorator = [ + {file = "singleton-decorator-1.0.0.tar.gz", hash = "sha256:1a90ad8a8a738be591c9c167fdd677c5d4a43d1bc6b1c128227be1c5e03bee07"}, +] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] testfixtures = [ {file = "testfixtures-6.14.1-py2.py3-none-any.whl", hash = "sha256:30566e24a1b34e4d3f8c13abf62557d01eeb4480bcb8f1745467bfb0d415a7d9"}, {file = "testfixtures-6.14.1.tar.gz", hash = "sha256:58d2b3146d93bc5ddb0cd24e0ccacb13e29bdb61e5c81235c58f7b8ee4470366"}, diff --git a/pyproject.toml b/pyproject.toml index ccaa66ec7..e8cb0a9f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,8 @@ psutil = "^5.7.2" pyyaml = "^5.3.1" regex = "^2020.7.14" retry = "^0.9.2" +paramiko = "^2.7.1" +singleton-decorator = "^1.0.0" [tool.poetry.dev-dependencies] black = "^19.10b0"