cloudshell-cli 4.0.6__zip → 4.1.2__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {cloudshell-cli-4.0.6/cloudshell_cli.egg-info → cloudshell-cli-4.1.2}/PKG-INFO +2 -5
  2. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/configurator.py +37 -38
  3. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_switch/SwitchClihandler.py +0 -1
  4. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_ubuntu/runnur.py +0 -1
  5. cloudshell-cli-4.1.2/cloudshell/cli/factory/session_factory.py +96 -0
  6. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/command_mode_helper.py +2 -2
  7. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/expect_session.py +0 -1
  8. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/scpi_session.py +0 -1
  9. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/ssh_session.py +21 -1
  10. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/tcp_session.py +0 -1
  11. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/telnet_session.py +1 -1
  12. cloudshell-cli-4.1.2/cloudshell/cli/session_pool_context_manager.py +0 -0
  13. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2/cloudshell_cli.egg-info}/PKG-INFO +2 -5
  14. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell_cli.egg-info/SOURCES.txt +2 -0
  15. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/setup.py +1 -0
  16. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/test_ssh_session.py +10 -15
  17. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tox.ini +1 -1
  18. cloudshell-cli-4.1.2/version.txt +1 -0
  19. cloudshell-cli-4.0.6/version.txt +0 -1
  20. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/LICENSE +0 -0
  21. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/MANIFEST.in +0 -0
  22. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/README.txt +0 -0
  23. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/__init__.py +0 -0
  24. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/__init__.py +0 -0
  25. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/cli.py +0 -0
  26. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/command_template/__init__.py +0 -0
  27. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/command_template/command_template.py +0 -0
  28. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/command_template/command_template_executor.py +0 -0
  29. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/__init__.py +0 -0
  30. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/__init__.py +0 -0
  31. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_AWS/__init__.py +0 -0
  32. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_AWS/runnur.py +0 -0
  33. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_switch/__init__.py +0 -0
  34. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_switch/runner.py +0 -0
  35. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_ubuntu/__init__.py +0 -0
  36. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/examples/cli_demo/connect_to_ubuntu/readfrom.txt +0 -0
  37. {cloudshell-cli-4.0.6/cloudshell/cli/service → cloudshell-cli-4.1.2/cloudshell/cli/factory}/__init__.py +0 -0
  38. /cloudshell-cli-4.0.6/cloudshell/cli/session_pool_context_manager.py → /cloudshell-cli-4.1.2/cloudshell/cli/service/__init__.py +0 -0
  39. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/cli.py +0 -0
  40. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/cli_exception.py +0 -0
  41. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/cli_service.py +0 -0
  42. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/cli_service_impl.py +0 -0
  43. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/command_mode.py +0 -0
  44. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/node.py +0 -0
  45. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/session_manager.py +0 -0
  46. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/session_manager_impl.py +0 -0
  47. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/session_pool.py +0 -0
  48. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/session_pool_context_manager.py +0 -0
  49. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/service/session_pool_manager.py +0 -0
  50. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/__init__.py +0 -0
  51. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/connection_params.py +0 -0
  52. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/helper/__init__.py +0 -0
  53. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/helper/normalize_buffer.py +0 -0
  54. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/session.py +0 -0
  55. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/session_exceptions.py +0 -0
  56. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell/cli/session/tl1_session.py +0 -0
  57. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell_cli.egg-info/dependency_links.txt +0 -0
  58. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell_cli.egg-info/requires.txt +0 -0
  59. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/cloudshell_cli.egg-info/top_level.txt +0 -0
  60. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/dev_requirements.txt +0 -0
  61. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/requirements.txt +0 -0
  62. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/setup.cfg +0 -0
  63. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/test_requirements.txt +0 -0
  64. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/__init__.py +0 -0
  65. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/__init__.py +0 -0
  66. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/command_template/__init__.py +0 -0
  67. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/command_template/test_command_template.py +0 -0
  68. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/__init__.py +0 -0
  69. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/test_connection_params.py +0 -0
  70. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/test_expect_session.py +0 -0
  71. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/test_expect_session_py3.py +0 -0
  72. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/session/test_telnet_session.py +0 -0
  73. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_cli.py +0 -0
  74. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_cli_service_impl.py +0 -0
  75. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_command_mode.py +0 -0
  76. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_command_mode_helper.py +0 -0
  77. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_node.py +0 -0
  78. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_session_manager.py +0 -0
  79. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_session_pool_context_manager.py +0 -0
  80. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/cli/test_session_pool_manager.py +0 -0
  81. {cloudshell-cli-4.0.6 → cloudshell-cli-4.1.2}/tests/conftest.py +0 -0
@@ -1,14 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudshell-cli
3
- Version: 4.0.6
3
+ Version: 4.1.2
4
4
  Summary: QualiSystems CloudShell CLI support package
5
5
  Home-page: http://www.qualisystems.com/
6
6
  Author: QualiSystems
7
7
  Author-email: info@qualisystems.com
8
- License: UNKNOWN
9
- Platform: UNKNOWN
10
8
  Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, <4
11
9
  License-File: LICENSE
12
10
 
13
- UNKNOWN
14
-
11
+ QualiSystems CloudShell CLI support package
@@ -2,7 +2,13 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  import sys
4
4
  from abc import ABCMeta, abstractmethod
5
+ from collections import defaultdict
5
6
 
7
+ from cloudshell.cli.factory.session_factory import (
8
+ CloudInfoAccessKeySessionFactory,
9
+ GenericSessionFactory,
10
+ SessionFactory,
11
+ )
6
12
  from cloudshell.cli.service.cli import CLI
7
13
  from cloudshell.cli.session.ssh_session import SSHSession
8
14
  from cloudshell.cli.session.telnet_session import TelnetSession
@@ -16,39 +22,33 @@ else:
16
22
 
17
23
 
18
24
  class CLIServiceConfigurator(object):
19
- REGISTERED_SESSIONS = (SSHSession, TelnetSession)
20
-
21
- def __init__(self, resource_config, logger, cli=None, registered_sessions=None):
25
+ REGISTERED_SESSIONS = (CloudInfoAccessKeySessionFactory(SSHSession), TelnetSession)
26
+ """Using factories instead of """
27
+
28
+ def __init__(
29
+ self,
30
+ resource_config,
31
+ logger,
32
+ cli=None,
33
+ registered_sessions=None,
34
+ access_key=None,
35
+ access_key_passphrase=None,
36
+ ):
22
37
  """Initialize CLI service configurator.
23
38
 
24
39
  :param cloudshell.shell.standards.resource_config_generic_models.GenericCLIConfig resource_config: # noqa: E501
25
40
  :param logging.Logger logger:
26
41
  :param cloudshell.cli.service.cli.CLI cli:
27
42
  :param registered_sessions: Session types and order
43
+ :param access_key: access key for the resource
44
+ :param access_key_passphrase: access key passphrase for the resource
28
45
  """
29
46
  self._cli = cli or CLI()
30
47
  self._resource_config = resource_config
31
48
  self._logger = logger
32
49
  self._registered_sessions = registered_sessions or self.REGISTERED_SESSIONS
33
-
34
- @property
35
- def _username(self):
36
- return self._resource_config.user
37
-
38
- @property
39
- @lru_cache()
40
- def _password(self):
41
- return self._resource_config.password
42
-
43
- @property
44
- def _resource_address(self):
45
- """Resource IP."""
46
- return self._resource_config.address
47
-
48
- @property
49
- def _port(self):
50
- """Connection port property, to open socket on."""
51
- return self._resource_config.cli_tcp_port
50
+ self._access_key = access_key
51
+ self._access_key_passphrase = access_key_passphrase
52
52
 
53
53
  @property
54
54
  def _cli_type(self):
@@ -58,29 +58,28 @@ class CLIServiceConfigurator(object):
58
58
  @property
59
59
  @lru_cache()
60
60
  def _session_dict(self):
61
- return {sess.SESSION_TYPE.lower(): [sess] for sess in self._registered_sessions}
61
+ session_dict = defaultdict(list)
62
+ for sess in self._registered_sessions:
63
+ session_dict[sess.SESSION_TYPE.lower()].append(sess)
64
+ return session_dict
62
65
 
63
66
  def _on_session_start(self, session, logger):
64
- """Perform some default commands when session just opened.
65
-
66
- Like 'no logging console'
67
- """
68
67
  pass
69
68
 
70
- @property
71
- @lru_cache()
72
- def _session_kwargs(self):
73
- return {
74
- "host": self._resource_address,
75
- "username": self._username,
76
- "password": self._password,
77
- "port": self._port,
78
- "on_session_start": self._on_session_start,
79
- }
69
+ def initialize_session(self, session):
70
+ if not isinstance(session, SessionFactory):
71
+ session = GenericSessionFactory(session)
72
+ return session.init_session(
73
+ self._resource_config,
74
+ self._logger,
75
+ on_session_start=self._on_session_start,
76
+ access_key=self._access_key,
77
+ access_key_passphrase=self._access_key_passphrase,
78
+ )
80
79
 
81
80
  def _defined_sessions(self):
82
81
  return [
83
- sess(**self._session_kwargs)
82
+ self.initialize_session(sess)
84
83
  for sess in self._session_dict.get(
85
84
  self._cli_type.lower(), self._registered_sessions
86
85
  )
@@ -96,7 +96,6 @@ class SwitchCliHandler(CliHandlerImpl):
96
96
  session.hardware_expect("exit", EnableCommandMode.PROMPT, logger)
97
97
 
98
98
  def enter_enable_mode(self, session, logger):
99
-
100
99
  enable_password = get_attribute_by_name(
101
100
  attribute_name="Enable Password", context=self._context
102
101
  )
@@ -13,7 +13,6 @@ class CliCommandMode(CommandMode):
13
13
  EXIT_COMMAND = "exit"
14
14
 
15
15
  def __init__(self, context):
16
-
17
16
  CommandMode.__init__(
18
17
  self,
19
18
  CliCommandMode.PROMPT,
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ from abc import ABCMeta, abstractmethod
4
+
5
+ ABC = ABCMeta("ABC", (object,), {"__slots__": ()})
6
+
7
+
8
+ class SessionFactory(ABC):
9
+ """Session factory.
10
+
11
+ Help to initialize session for specified session class.
12
+ """
13
+
14
+ def __init__(self, session_class):
15
+ """:param session_class: Session class."""
16
+ self.session_class = session_class
17
+
18
+ @abstractmethod
19
+ def init_session(
20
+ self,
21
+ resource_config,
22
+ logger,
23
+ on_session_start=None,
24
+ access_key=None,
25
+ access_key_passphrase=None,
26
+ ):
27
+ """Initialize session instance.
28
+
29
+ Encapsulate the logic of the session instance creation.
30
+ :param resource_config:
31
+ :param logging.Logger logger:
32
+ :param on_session_start: function that will be called on session start
33
+ :param access_key: access key for the resource
34
+ :param access_key_passphrase: access key passphrase for the resource
35
+ """
36
+ raise NotImplementedError
37
+
38
+
39
+ class GenericSessionFactory(SessionFactory):
40
+ def init_session(
41
+ self,
42
+ resource_config,
43
+ logger,
44
+ on_session_start=None,
45
+ access_key=None,
46
+ access_key_passphrase=None,
47
+ ):
48
+ return self.session_class(
49
+ **self._session_kwargs(
50
+ resource_config,
51
+ logger,
52
+ on_session_start,
53
+ access_key,
54
+ access_key_passphrase,
55
+ )
56
+ )
57
+
58
+ @property
59
+ def SESSION_TYPE(self):
60
+ return self.session_class.SESSION_TYPE
61
+
62
+ def _session_kwargs(
63
+ self,
64
+ resource_config,
65
+ logger,
66
+ on_session_start,
67
+ access_key,
68
+ access_key_passphrase,
69
+ ):
70
+ return {
71
+ "host": resource_config.address,
72
+ "username": resource_config.user,
73
+ "password": resource_config.password,
74
+ "port": resource_config.cli_tcp_port,
75
+ "on_session_start": on_session_start,
76
+ }
77
+
78
+
79
+ class CloudInfoAccessKeySessionFactory(GenericSessionFactory):
80
+ def _session_kwargs(
81
+ self,
82
+ resource_config,
83
+ logger,
84
+ on_session_start,
85
+ access_key,
86
+ access_key_passphrase,
87
+ ):
88
+ return {
89
+ "host": resource_config.address,
90
+ "username": resource_config.user,
91
+ "password": resource_config.password,
92
+ "port": resource_config.cli_tcp_port,
93
+ "pkey": access_key,
94
+ "pkey_passphrase": access_key_passphrase,
95
+ "on_session_start": on_session_start,
96
+ }
@@ -35,7 +35,7 @@ class CommandModeHelper(NodeOperations):
35
35
 
36
36
  :rtype: OrderedDict
37
37
  """
38
- # noqa
38
+
39
39
  def _get_child_nodes(command_node):
40
40
  return reduce(
41
41
  lambda x, y: x + _get_child_nodes(y),
@@ -60,7 +60,7 @@ class CommandModeHelper(NodeOperations):
60
60
 
61
61
  :rtype: dict
62
62
  """
63
- # noqa
63
+
64
64
  def _create_child_modes(instance, child_dict):
65
65
  instance_dict = {}
66
66
  for mode_type in child_dict:
@@ -308,7 +308,6 @@ class ExpectSession(Session, ABC):
308
308
  self._loop_detector_max_combination_length,
309
309
  )
310
310
  while retries == 0 or retries_count < retries:
311
-
312
311
  read_buffer = self._receive_all(timeout, logger)
313
312
 
314
313
  if read_buffer:
@@ -38,7 +38,6 @@ class SCPISession(TCPSession):
38
38
  remove_command_from_output=True,
39
39
  **optional_args
40
40
  ):
41
-
42
41
  if ";:system:error?" not in command.lower():
43
42
  command += ";:system:error?"
44
43
 
@@ -1,3 +1,5 @@
1
+ from io import StringIO
2
+
1
3
  import paramiko
2
4
  from scp import SCPClient
3
5
 
@@ -22,6 +24,7 @@ class SSHSession(ExpectSession, ConnectionParams):
22
24
  port=None,
23
25
  on_session_start=None,
24
26
  pkey=None,
27
+ pkey_passphrase=None,
25
28
  *args,
26
29
  **kwargs
27
30
  ):
@@ -36,6 +39,7 @@ class SSHSession(ExpectSession, ConnectionParams):
36
39
  self.username = username
37
40
  self.password = password
38
41
  self.pkey = pkey
42
+ self.pkey_passphrase = pkey_passphrase
39
43
 
40
44
  self._handler = None
41
45
  self._current_channel = None
@@ -52,6 +56,7 @@ class SSHSession(ExpectSession, ConnectionParams):
52
56
  self.username == other.username,
53
57
  self.password == other.password,
54
58
  self.pkey == other.pkey,
59
+ self.pkey_passphrase == other.pkey_passphrase,
55
60
  ]
56
61
  )
57
62
 
@@ -80,7 +85,7 @@ class SSHSession(ExpectSession, ConnectionParams):
80
85
  banner_timeout=30,
81
86
  allow_agent=False,
82
87
  look_for_keys=False,
83
- pkey=self.pkey,
88
+ pkey=self._get_pkey_object(self.pkey, self.pkey_passphrase, logger),
84
89
  )
85
90
  except Exception as e:
86
91
  logger.exception("Failed to initialize session:")
@@ -161,3 +166,18 @@ class SSHSession(ExpectSession, ConnectionParams):
161
166
  sftp.putfo(file_stream, dest_pathname)
162
167
  sftp.chmod(dest_pathname, int(dest_permissions, base=8))
163
168
  sftp.close()
169
+
170
+ @staticmethod
171
+ def _get_pkey_object(key_material, passphrase, logger):
172
+ """Try to detect private key type and return paramiko.PKey object."""
173
+ if not key_material:
174
+ return None
175
+
176
+ for cls in [paramiko.RSAKey, paramiko.DSSKey, paramiko.ECDSAKey]:
177
+ try:
178
+ key = cls.from_private_key(StringIO(key_material), password=passphrase)
179
+ except paramiko.ssh_exception.SSHException as e:
180
+ # Invalid key, try other key type
181
+ logger.warning(e)
182
+ else:
183
+ return key
@@ -5,7 +5,6 @@ from cloudshell.cli.session.expect_session import ExpectSession
5
5
 
6
6
 
7
7
  class TCPSession(ExpectSession, ConnectionParams):
8
-
9
8
  SESSION_TYPE = "TCP"
10
9
  BUFFER_SIZE = 1024
11
10
 
@@ -99,4 +99,4 @@ class TelnetSession(ExpectSession, ConnectionParams):
99
99
  self._handler.get_socket().settimeout(timeout)
100
100
 
101
101
  def _read_byte_data(self):
102
- self._handler.read_some()
102
+ return self._handler.read_some()
@@ -1,14 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudshell-cli
3
- Version: 4.0.6
3
+ Version: 4.1.2
4
4
  Summary: QualiSystems CloudShell CLI support package
5
5
  Home-page: http://www.qualisystems.com/
6
6
  Author: QualiSystems
7
7
  Author-email: info@qualisystems.com
8
- License: UNKNOWN
9
- Platform: UNKNOWN
10
8
  Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, <4
11
9
  License-File: LICENSE
12
10
 
13
- UNKNOWN
14
-
11
+ QualiSystems CloudShell CLI support package
@@ -26,6 +26,8 @@ cloudshell/cli/examples/cli_demo/connect_to_switch/runner.py
26
26
  cloudshell/cli/examples/cli_demo/connect_to_ubuntu/__init__.py
27
27
  cloudshell/cli/examples/cli_demo/connect_to_ubuntu/readfrom.txt
28
28
  cloudshell/cli/examples/cli_demo/connect_to_ubuntu/runnur.py
29
+ cloudshell/cli/factory/__init__.py
30
+ cloudshell/cli/factory/session_factory.py
29
31
  cloudshell/cli/service/__init__.py
30
32
  cloudshell/cli/service/cli.py
31
33
  cloudshell/cli/service/cli_exception.py
@@ -26,5 +26,6 @@ setup(
26
26
  version=version_from_file,
27
27
  package_data={"": ["*.txt"]},
28
28
  description="QualiSystems CloudShell CLI support package",
29
+ long_description="QualiSystems CloudShell CLI support package",
29
30
  include_package_data=True,
30
31
  )
@@ -443,9 +443,6 @@ class TestSshSession(TestCase):
443
443
  )
444
444
  )
445
445
 
446
- pkey = paramiko.RSAKey.from_private_key(
447
- StringIO(KEY_WITH_PASSPHRASE), password=KEY_PASSPHRASE
448
- )
449
446
  self.assertFalse(
450
447
  self._instance.__eq__(
451
448
  SSHSession(
@@ -454,23 +451,22 @@ class TestSshSession(TestCase):
454
451
  "",
455
452
  port=self._port,
456
453
  on_session_start=self._on_session_start,
457
- pkey=pkey,
454
+ pkey=KEY_WITH_PASSPHRASE,
455
+ pkey_passphrase=KEY_PASSPHRASE,
458
456
  )
459
457
  )
460
458
  )
461
459
 
462
460
  @patch("cloudshell.cli.session.ssh_session.ExpectSession")
463
461
  def test_eq_rsa(self, expect_session):
464
- pkey = paramiko.RSAKey.from_private_key(
465
- StringIO(KEY_WITH_PASSPHRASE), password=KEY_PASSPHRASE
466
- )
467
462
  self._instance = SSHSession(
468
463
  self._hostname,
469
464
  self._username,
470
465
  self._password,
471
466
  port=self._port,
472
467
  on_session_start=self._on_session_start,
473
- pkey=pkey,
468
+ pkey=KEY_WITH_PASSPHRASE,
469
+ pkey_passphrase=KEY_PASSPHRASE,
474
470
  )
475
471
 
476
472
  self.assertTrue(
@@ -481,7 +477,8 @@ class TestSshSession(TestCase):
481
477
  self._password,
482
478
  port=self._port,
483
479
  on_session_start=self._on_session_start,
484
- pkey=pkey,
480
+ pkey=KEY_WITH_PASSPHRASE,
481
+ pkey_passphrase=KEY_PASSPHRASE,
485
482
  )
486
483
  )
487
484
  )
@@ -640,16 +637,13 @@ class TestSshSession(TestCase):
640
637
  "",
641
638
  port=server.port,
642
639
  on_session_start=self._on_session_start,
643
- pkey=pkey,
640
+ pkey=KEY_WITH_PASSPHRASE,
641
+ pkey_passphrase=KEY_PASSPHRASE,
644
642
  )
645
643
  self._instance.connect(">", logger=Mock())
646
644
  self._instance.hardware_expect("dummy command", ">", Mock())
647
645
 
648
646
  def test_rsa_failure(self):
649
- pkey = paramiko.RSAKey.from_private_key(
650
- StringIO(KEY_WITH_PASSPHRASE), password=KEY_PASSPHRASE
651
- )
652
-
653
647
  server = SSHServer(user2key={})
654
648
 
655
649
  with self.assertRaises(SSHSessionException):
@@ -659,7 +653,8 @@ class TestSshSession(TestCase):
659
653
  "",
660
654
  port=server.port,
661
655
  on_session_start=self._on_session_start,
662
- pkey=pkey,
656
+ pkey=KEY_WITH_PASSPHRASE,
657
+ pkey_passphrase=KEY_PASSPHRASE,
663
658
  )
664
659
  self._instance.connect(">", logger=Mock())
665
660
  self._instance.hardware_expect("dummy command", ">", Mock())
@@ -19,7 +19,7 @@ commands =
19
19
  pytest --cov=cloudshell.cli tests --cov-report=xml
20
20
 
21
21
  [testenv:pre-commit]
22
- basepython = python3
22
+ basepython = python3.9
23
23
  skip_install = true
24
24
  deps = pre-commit
25
25
  commands = pre-commit run --all-files --show-diff-on-failure
@@ -0,0 +1 @@
1
+ 4.1.2
@@ -1 +0,0 @@
1
- 4.0.6
File without changes
File without changes