Skip to content
This repository was archived by the owner on Mar 23, 2025. It is now read-only.

Commit 7897308

Browse files
committed
Support termius groups expansion from config file
1 parent 822eb9f commit 7897308

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

termius/porting/providers/ssh/adapter.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from pathlib2 import Path
66

77
from termius.core.commands.mixins import SshConfigMergerMixin
8-
from termius.core.models.terminal import Host, SshConfig, Identity, SshKey
8+
from termius.core.models.terminal import Host, SshConfig, Identity, SshKey, Group
99

1010

1111
class SSHConfigHostAdapter(SshConfigMergerMixin):
@@ -56,7 +56,7 @@ def adapt_instance_to_ssh_config_host(self, host_instance):
5656

5757
return adapted
5858

59-
def adapt_ssh_config_host_to_instance(self, alias, parsed_host):
59+
def adapt_ssh_config_host_to_instance(self, alias, parsed_host, parsed_group=None):
6060
"""Convert parsed host to application host."""
6161
app_host = Host(
6262
label=alias,
@@ -80,5 +80,7 @@ def adapt_ssh_config_host_to_instance(self, alias, parsed_host):
8080
)
8181

8282
app_host.ssh_config = ssh_config
83+
if parsed_group:
84+
app_host.group = parsed_group
8385

8486
return app_host

termius/porting/providers/ssh/parser.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ def parse(self, file_obj): # noqa
1414
1515
:param file_obj: a file-like object to read the config file from
1616
"""
17+
TERMIUS_GROUPS = "# termius:group"
1718
termius_ignore_regexp = re.compile(r'# termius:ignore')
19+
termius_groups_regexp = re.compile(r'{}'.format(TERMIUS_GROUPS))
1820

1921
host = {'host': ['*'], 'config': {}}
2022

@@ -30,6 +32,10 @@ def parse(self, file_obj): # noqa
3032
if ignore_comment:
3133
host['config']['ignore'] = ''
3234

35+
groups_comment = termius_groups_regexp.match(line)
36+
if groups_comment:
37+
host['group'] = line.replace(TERMIUS_GROUPS, "").strip()
38+
3339
continue
3440

3541
match = re.match(self.SETTINGS_REGEX, line)

termius/porting/providers/ssh/provider.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from os.path import expanduser
66
from pathlib2 import Path
77

8-
from termius.core.models.terminal import Host
8+
from termius.core.models.terminal import Host, Group
99

1010
from ..base import BasePortingProvider
1111
from .parser import SSHConfigParser
@@ -50,16 +50,26 @@ def provider_hosts(self):
5050
]
5151

5252
to_import = []
53-
53+
parsed_group = None
5454
for alias in parsed_hosts:
55+
parsed_group_name = parser._config[parsed_hosts.index(alias) + 1].get("group", None)
56+
if parsed_group_name:
57+
matching_groups = [x for x in self.storage.get_all(Group) if x['label'] == parsed_group_name]
58+
if len(matching_groups) == 0:
59+
g = Group(label=parsed_group_name)
60+
self.storage.create(g)
61+
matching_groups = [g]
62+
63+
item = matching_groups.pop()
64+
parsed_group = Group(**item)
5565
parsed_host = parser.lookup(alias)
5666

5767
if 'ignore' in parsed_host:
5868
continue
5969

6070
to_import.append(
6171
self.adapter.adapt_ssh_config_host_to_instance(
62-
alias, parsed_host
72+
alias, parsed_host, parsed_group
6373
)
6474
)
6575

0 commit comments

Comments
 (0)