amsdal_cli 0.5.8__py3-none-any.whl → 0.5.10__py3-none-any.whl
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.
- amsdal_cli/__about__.py +1 -1
- amsdal_cli/commands/cloud/command.py +1 -0
- amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py +4 -4
- amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py +1 -1
- amsdal_cli/commands/cloud/external_connections/__init__.py +3 -0
- amsdal_cli/commands/cloud/external_connections/app.py +11 -0
- amsdal_cli/commands/cloud/external_connections/command.py +5 -0
- amsdal_cli/commands/cloud/external_connections/sub_commands/__init__.py +11 -0
- amsdal_cli/commands/cloud/external_connections/sub_commands/connection_add.py +123 -0
- amsdal_cli/commands/cloud/external_connections/sub_commands/connection_list.py +146 -0
- amsdal_cli/commands/cloud/external_connections/sub_commands/connection_remove.py +82 -0
- amsdal_cli/commands/cloud/external_connections/sub_commands/connection_update.py +104 -0
- amsdal_cli/commands/generate/utils/tests/type_utils.py +3 -3
- amsdal_cli/commands/migrations/sub_commands/apply.py +1 -1
- amsdal_cli/commands/migrations/sub_commands/list.py +1 -1
- amsdal_cli/commands/migrations/sub_commands/make.py +1 -1
- amsdal_cli/commands/migrations/sub_commands/make_contrib.py +1 -1
- amsdal_cli/commands/new/templates/requirements.txt +1 -1
- amsdal_cli/commands/register_connection/utils/initialize.py +1 -1
- amsdal_cli/commands/register_connection/utils/migrate_models.py +3 -3
- amsdal_cli/commands/serve/command.py +1 -1
- amsdal_cli/commands/serve/utils.py +3 -3
- {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/METADATA +5 -4
- {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/RECORD +27 -19
- {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/WHEEL +1 -1
- {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/entry_points.txt +0 -0
- {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/licenses/LICENSE.txt +0 -0
amsdal_cli/__about__.py
CHANGED
|
@@ -3,6 +3,7 @@ from amsdal_cli.commands.cloud.app import cloud_sub_app
|
|
|
3
3
|
from amsdal_cli.commands.cloud.dependency.command import * # noqa
|
|
4
4
|
from amsdal_cli.commands.cloud.deploy.command import * # noqa
|
|
5
5
|
from amsdal_cli.commands.cloud.environments.command import * # noqa
|
|
6
|
+
from amsdal_cli.commands.cloud.external_connections.command import * # noqa
|
|
6
7
|
from amsdal_cli.commands.cloud.secret.command import * # noqa
|
|
7
8
|
from amsdal_cli.commands.cloud.security.command import * # noqa
|
|
8
9
|
from amsdal_cli.commands.cloud.sub_commands import * # noqa
|
|
@@ -92,11 +92,11 @@ async def list_command(
|
|
|
92
92
|
deployment.application_name or '-',
|
|
93
93
|
datetime.datetime.fromtimestamp(
|
|
94
94
|
deployment.created_at / 1000,
|
|
95
|
-
tz=datetime.
|
|
95
|
+
tz=datetime.UTC,
|
|
96
96
|
).strftime('%Y-%m-%d %H:%M:%S %Z'),
|
|
97
97
|
datetime.datetime.fromtimestamp(
|
|
98
98
|
deployment.last_update_at / 1000,
|
|
99
|
-
tz=datetime.
|
|
99
|
+
tz=datetime.UTC,
|
|
100
100
|
).strftime('%Y-%m-%d %H:%M:%S %Z'),
|
|
101
101
|
deployment.application_uuid or '-',
|
|
102
102
|
deployment.domain_url or '-',
|
|
@@ -109,11 +109,11 @@ async def list_command(
|
|
|
109
109
|
deployment.application_name or '-',
|
|
110
110
|
datetime.datetime.fromtimestamp(
|
|
111
111
|
deployment.created_at / 1000,
|
|
112
|
-
tz=datetime.
|
|
112
|
+
tz=datetime.UTC,
|
|
113
113
|
).strftime('%Y-%m-%d %H:%M:%S %Z'),
|
|
114
114
|
datetime.datetime.fromtimestamp(
|
|
115
115
|
deployment.last_update_at / 1000,
|
|
116
|
-
tz=datetime.
|
|
116
|
+
tz=datetime.UTC,
|
|
117
117
|
).strftime('%Y-%m-%d %H:%M:%S %Z'),
|
|
118
118
|
)
|
|
119
119
|
|
|
@@ -308,7 +308,7 @@ async def _async_check_missing_generated_migrations(
|
|
|
308
308
|
if not amsdal_manager.is_authenticated:
|
|
309
309
|
amsdal_manager.authenticate()
|
|
310
310
|
|
|
311
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
311
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
312
312
|
|
|
313
313
|
migrations_dir = app_source_path / MIGRATIONS_DIR_NAME
|
|
314
314
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import typer
|
|
2
|
+
|
|
3
|
+
from amsdal_cli.utils.alias_group import AliasGroup
|
|
4
|
+
|
|
5
|
+
external_connections_sub_app = typer.Typer(
|
|
6
|
+
help=(
|
|
7
|
+
'Manage external connections for your Cloud Server app. '
|
|
8
|
+
'Without any sub-command, it will list all external connections.'
|
|
9
|
+
),
|
|
10
|
+
cls=AliasGroup,
|
|
11
|
+
)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
from amsdal_cli.commands.cloud.app import cloud_sub_app
|
|
2
|
+
from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
|
|
3
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands import * # noqa
|
|
4
|
+
|
|
5
|
+
cloud_sub_app.add_typer(external_connections_sub_app, name='external-connections, ext-conn, ec')
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands.connection_add import connection_add_command
|
|
2
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands.connection_list import connection_list_callback
|
|
3
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands.connection_remove import connection_remove_command
|
|
4
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands.connection_update import connection_update_command
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
'connection_add_command',
|
|
8
|
+
'connection_list_callback',
|
|
9
|
+
'connection_remove_command',
|
|
10
|
+
'connection_update_command',
|
|
11
|
+
]
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import tempfile
|
|
2
|
+
import typing
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
from rich import print as rprint
|
|
7
|
+
from typer import Option
|
|
8
|
+
|
|
9
|
+
from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def parse_credentials(credential_options: list[str]) -> dict[str, str]:
|
|
13
|
+
"""
|
|
14
|
+
Parse credential key=value pairs into a dictionary.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
credential_options: Tuple of strings in format "key=value"
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Dictionary mapping credential keys to values
|
|
21
|
+
|
|
22
|
+
Raises:
|
|
23
|
+
typer.BadParameter: If credential format is invalid
|
|
24
|
+
"""
|
|
25
|
+
credentials = {}
|
|
26
|
+
for cred in credential_options:
|
|
27
|
+
if '=' not in cred:
|
|
28
|
+
msg = f"Invalid credential format: '{cred}'. Expected 'key=value'"
|
|
29
|
+
raise typer.BadParameter(msg)
|
|
30
|
+
key, value = cred.split('=', 1)
|
|
31
|
+
credentials[key.strip()] = value.strip()
|
|
32
|
+
return credentials
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@external_connections_sub_app.command(name='add, a')
|
|
36
|
+
def connection_add_command(
|
|
37
|
+
ctx: typer.Context,
|
|
38
|
+
connection_name: str,
|
|
39
|
+
backend: str,
|
|
40
|
+
credentials: typing.Annotated[
|
|
41
|
+
typing.Optional[list[str]], # noqa: UP007
|
|
42
|
+
Option('--credential', '-c', help='Credential in key=value format. Can be specified multiple times.'),
|
|
43
|
+
] = None,
|
|
44
|
+
env_name: typing.Annotated[
|
|
45
|
+
typing.Optional[str], # noqa: UP007
|
|
46
|
+
Option('--env', help='Environment name. Default is the current environment from configuration.'),
|
|
47
|
+
] = None,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Adds a new external connection to your Cloud Server app.
|
|
51
|
+
"""
|
|
52
|
+
from amsdal.errors import AmsdalCloudError
|
|
53
|
+
from amsdal.manager import AmsdalManager
|
|
54
|
+
from amsdal.manager import AsyncAmsdalManager
|
|
55
|
+
from amsdal_utils.config.manager import AmsdalConfigManager
|
|
56
|
+
|
|
57
|
+
from amsdal_cli.commands.build.services.builder import AppBuilder
|
|
58
|
+
from amsdal_cli.commands.cloud.environments.utils import get_current_env
|
|
59
|
+
from amsdal_cli.utils.cli_config import CliConfig
|
|
60
|
+
from amsdal_cli.utils.text import rich_error
|
|
61
|
+
from amsdal_cli.utils.text import rich_highlight
|
|
62
|
+
from amsdal_cli.utils.text import rich_info
|
|
63
|
+
from amsdal_cli.utils.text import rich_success
|
|
64
|
+
|
|
65
|
+
cli_config: CliConfig = ctx.meta['config']
|
|
66
|
+
env_name = env_name or get_current_env(cli_config)
|
|
67
|
+
|
|
68
|
+
# Parse credentials
|
|
69
|
+
if not credentials or len(credentials) == 0:
|
|
70
|
+
rprint(rich_error('At least one credential must be provided using --credential/-c'))
|
|
71
|
+
raise typer.Exit(1)
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
credentials_dict = parse_credentials(credentials)
|
|
75
|
+
except typer.BadParameter as e:
|
|
76
|
+
rprint(rich_error(str(e)))
|
|
77
|
+
raise typer.Exit(1) from e
|
|
78
|
+
|
|
79
|
+
if cli_config.verbose:
|
|
80
|
+
rprint(
|
|
81
|
+
rich_info(
|
|
82
|
+
f'Adding external connection {rich_highlight(connection_name)} '
|
|
83
|
+
f'with backend {rich_highlight(backend)} '
|
|
84
|
+
f'to environment: {rich_highlight(env_name)}'
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
with tempfile.TemporaryDirectory() as _temp_dir:
|
|
89
|
+
output_path: Path = Path(_temp_dir)
|
|
90
|
+
|
|
91
|
+
app_builder = AppBuilder(
|
|
92
|
+
cli_config=cli_config,
|
|
93
|
+
config_path=cli_config.config_path,
|
|
94
|
+
)
|
|
95
|
+
app_builder.build(output_path, is_silent=True)
|
|
96
|
+
manager: AsyncAmsdalManager | AmsdalManager
|
|
97
|
+
|
|
98
|
+
manager = AsyncAmsdalManager() if AmsdalConfigManager().get_config().async_mode else AmsdalManager()
|
|
99
|
+
|
|
100
|
+
manager.authenticate()
|
|
101
|
+
|
|
102
|
+
try:
|
|
103
|
+
manager.cloud_actions_manager.add_external_connection(
|
|
104
|
+
connection_name=connection_name,
|
|
105
|
+
backend=backend,
|
|
106
|
+
credentials=credentials_dict,
|
|
107
|
+
env_name=env_name,
|
|
108
|
+
application_uuid=cli_config.application_uuid,
|
|
109
|
+
application_name=cli_config.application_name,
|
|
110
|
+
)
|
|
111
|
+
except AmsdalCloudError as e:
|
|
112
|
+
rprint(rich_error(str(e)))
|
|
113
|
+
raise typer.Exit(1) from e
|
|
114
|
+
else:
|
|
115
|
+
config_dir: Path = cli_config.app_directory / '.amsdal'
|
|
116
|
+
config_dir.mkdir(exist_ok=True, parents=True)
|
|
117
|
+
_connections_path: Path = config_dir / '.external_connections'
|
|
118
|
+
_connections_path.touch(exist_ok=True)
|
|
119
|
+
_connections = set(_connections_path.read_text().split('\n'))
|
|
120
|
+
_connections.add(connection_name)
|
|
121
|
+
_connections_path.write_text('\n'.join(_connections))
|
|
122
|
+
|
|
123
|
+
rprint(rich_success(f'External connection {rich_highlight(connection_name)} added successfully.'))
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import tempfile
|
|
3
|
+
import typing
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Annotated
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
from rich import print as rprint
|
|
9
|
+
from rich.table import Table
|
|
10
|
+
from typer import Option
|
|
11
|
+
|
|
12
|
+
from amsdal_cli.commands.cloud.enums import OutputFormat
|
|
13
|
+
from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def connection_list_command(
|
|
17
|
+
ctx: typer.Context,
|
|
18
|
+
output: Annotated[OutputFormat, typer.Option('--output', '-o')] = OutputFormat.default,
|
|
19
|
+
env_name: typing.Annotated[
|
|
20
|
+
typing.Optional[str], # noqa: UP007
|
|
21
|
+
Option('--env', help='Environment name. Default is the current environment from configuration.'),
|
|
22
|
+
] = None,
|
|
23
|
+
*,
|
|
24
|
+
sync: bool = Option(
|
|
25
|
+
False,
|
|
26
|
+
'--sync',
|
|
27
|
+
help='Sync the external connections from the Cloud Server to ".external_connections".',
|
|
28
|
+
),
|
|
29
|
+
) -> None:
|
|
30
|
+
"""
|
|
31
|
+
List the app external connections on the Cloud Server.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
ctx (typer.Context): The Typer context object.
|
|
35
|
+
output (Annotated[OutputFormat, typer.Option]): The output format for the list.
|
|
36
|
+
Defaults to OutputFormat.default.
|
|
37
|
+
env_name (typing.Annotated[typing.Optional[str], Option]): The name of the environment. Defaults to the current
|
|
38
|
+
environment from configuration.
|
|
39
|
+
sync (bool): Whether to sync the external connections from the Cloud Server to ".external_connections".
|
|
40
|
+
Defaults to False.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
None
|
|
44
|
+
"""
|
|
45
|
+
from amsdal.errors import AmsdalCloudError
|
|
46
|
+
from amsdal.manager import AmsdalManager
|
|
47
|
+
from amsdal.manager import AsyncAmsdalManager
|
|
48
|
+
from amsdal_utils.config.manager import AmsdalConfigManager
|
|
49
|
+
|
|
50
|
+
from amsdal_cli.commands.build.services.builder import AppBuilder
|
|
51
|
+
from amsdal_cli.commands.cloud.environments.utils import get_current_env
|
|
52
|
+
from amsdal_cli.utils.cli_config import CliConfig
|
|
53
|
+
from amsdal_cli.utils.text import rich_error
|
|
54
|
+
from amsdal_cli.utils.text import rich_highlight
|
|
55
|
+
from amsdal_cli.utils.text import rich_info
|
|
56
|
+
|
|
57
|
+
cli_config: CliConfig = ctx.meta['config']
|
|
58
|
+
env_name = env_name or get_current_env(cli_config)
|
|
59
|
+
|
|
60
|
+
if cli_config.verbose:
|
|
61
|
+
rprint(rich_info(f'Listing external connections for environment: {rich_highlight(env_name)}'))
|
|
62
|
+
|
|
63
|
+
with tempfile.TemporaryDirectory() as _temp_dir:
|
|
64
|
+
output_path: Path = Path(_temp_dir)
|
|
65
|
+
app_builder = AppBuilder(
|
|
66
|
+
cli_config=cli_config,
|
|
67
|
+
config_path=cli_config.config_path,
|
|
68
|
+
)
|
|
69
|
+
app_builder.build(output_path, is_silent=True)
|
|
70
|
+
manager: AsyncAmsdalManager | AmsdalManager
|
|
71
|
+
|
|
72
|
+
manager = AsyncAmsdalManager() if AmsdalConfigManager().get_config().async_mode else AmsdalManager()
|
|
73
|
+
|
|
74
|
+
manager.authenticate()
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
list_response = manager.cloud_actions_manager.list_external_connections(
|
|
78
|
+
env_name=env_name,
|
|
79
|
+
application_uuid=cli_config.application_uuid,
|
|
80
|
+
application_name=cli_config.application_name,
|
|
81
|
+
)
|
|
82
|
+
except AmsdalCloudError as e:
|
|
83
|
+
rprint(rich_error(str(e)))
|
|
84
|
+
raise typer.Exit(1) from e
|
|
85
|
+
|
|
86
|
+
if not list_response or not list_response.details:
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
if sync and list_response.details.connections:
|
|
90
|
+
config_dir: Path = cli_config.app_directory / '.amsdal'
|
|
91
|
+
config_dir.mkdir(exist_ok=True, parents=True)
|
|
92
|
+
_connections_path: Path = config_dir / '.external_connections'
|
|
93
|
+
_connections_path.touch(exist_ok=True)
|
|
94
|
+
_connections_path.write_text(
|
|
95
|
+
'\n'.join([connection.name for connection in list_response.details.connections]),
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
if output == OutputFormat.json:
|
|
99
|
+
rprint(json.dumps(list_response.model_dump(), indent=4))
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
if not list_response.details.connections:
|
|
103
|
+
rprint('No external connections found.')
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
data_table = Table()
|
|
107
|
+
data_table.add_column('Connection Name', justify='center')
|
|
108
|
+
data_table.add_column('Backend', justify='center')
|
|
109
|
+
data_table.add_column('Credentials', justify='center')
|
|
110
|
+
|
|
111
|
+
for connection in list_response.details.connections:
|
|
112
|
+
# Show only credential keys, not values for security
|
|
113
|
+
credential_keys = ', '.join(connection.credentials.keys()) if connection.credentials else ''
|
|
114
|
+
data_table.add_row(connection.name, connection.backend, credential_keys)
|
|
115
|
+
|
|
116
|
+
rprint(data_table)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@external_connections_sub_app.callback(invoke_without_command=True)
|
|
120
|
+
def connection_list_callback(
|
|
121
|
+
ctx: typer.Context,
|
|
122
|
+
output: Annotated[OutputFormat, typer.Option('--output', '-o')] = OutputFormat.default,
|
|
123
|
+
env_name: typing.Annotated[
|
|
124
|
+
typing.Optional[str], # noqa: UP007
|
|
125
|
+
Option('--env', help='Environment name. Default is the current environment from configuration.'),
|
|
126
|
+
] = None,
|
|
127
|
+
*,
|
|
128
|
+
sync: bool = Option(
|
|
129
|
+
False,
|
|
130
|
+
'--sync',
|
|
131
|
+
help='Sync the external connections from the Cloud Server to ".external_connections".',
|
|
132
|
+
),
|
|
133
|
+
) -> None:
|
|
134
|
+
"""
|
|
135
|
+
Lists the app external connections on the Cloud Server.
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
if ctx.invoked_subcommand is not None:
|
|
139
|
+
return
|
|
140
|
+
|
|
141
|
+
connection_list_command(
|
|
142
|
+
ctx=ctx,
|
|
143
|
+
output=output,
|
|
144
|
+
env_name=env_name,
|
|
145
|
+
sync=sync,
|
|
146
|
+
)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import tempfile
|
|
2
|
+
import typing
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
from rich import print as rprint
|
|
7
|
+
from typer import Option
|
|
8
|
+
|
|
9
|
+
from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@external_connections_sub_app.command(name='remove, rm, r')
|
|
13
|
+
def connection_remove_command(
|
|
14
|
+
ctx: typer.Context,
|
|
15
|
+
connection_name: str,
|
|
16
|
+
env_name: typing.Annotated[
|
|
17
|
+
typing.Optional[str], # noqa: UP007
|
|
18
|
+
Option('--env', help='Environment name. Default is the current environment from configuration.'),
|
|
19
|
+
] = None,
|
|
20
|
+
) -> None:
|
|
21
|
+
"""
|
|
22
|
+
Removes an external connection from the Cloud Server app.
|
|
23
|
+
"""
|
|
24
|
+
from amsdal.errors import AmsdalCloudError
|
|
25
|
+
from amsdal.manager import AmsdalManager
|
|
26
|
+
from amsdal.manager import AsyncAmsdalManager
|
|
27
|
+
from amsdal_utils.config.manager import AmsdalConfigManager
|
|
28
|
+
|
|
29
|
+
from amsdal_cli.commands.build.services.builder import AppBuilder
|
|
30
|
+
from amsdal_cli.commands.cloud.environments.utils import get_current_env
|
|
31
|
+
from amsdal_cli.utils.cli_config import CliConfig
|
|
32
|
+
from amsdal_cli.utils.text import rich_error
|
|
33
|
+
from amsdal_cli.utils.text import rich_highlight
|
|
34
|
+
from amsdal_cli.utils.text import rich_info
|
|
35
|
+
from amsdal_cli.utils.text import rich_success
|
|
36
|
+
|
|
37
|
+
cli_config: CliConfig = ctx.meta['config']
|
|
38
|
+
env_name = env_name or get_current_env(cli_config)
|
|
39
|
+
|
|
40
|
+
if cli_config.verbose:
|
|
41
|
+
rprint(
|
|
42
|
+
rich_info(
|
|
43
|
+
f'Removing external connection {rich_highlight(connection_name)} '
|
|
44
|
+
f'from environment: {rich_highlight(env_name)}'
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
with tempfile.TemporaryDirectory() as _temp_dir:
|
|
49
|
+
output_path: Path = Path(_temp_dir)
|
|
50
|
+
app_builder = AppBuilder(
|
|
51
|
+
cli_config=cli_config,
|
|
52
|
+
config_path=cli_config.config_path,
|
|
53
|
+
)
|
|
54
|
+
app_builder.build(output_path, is_silent=True)
|
|
55
|
+
manager: AsyncAmsdalManager | AmsdalManager
|
|
56
|
+
|
|
57
|
+
manager = AsyncAmsdalManager() if AmsdalConfigManager().get_config().async_mode else AmsdalManager()
|
|
58
|
+
|
|
59
|
+
manager.authenticate()
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
manager.cloud_actions_manager.remove_external_connection(
|
|
63
|
+
connection_name=connection_name,
|
|
64
|
+
env_name=env_name,
|
|
65
|
+
application_uuid=cli_config.application_uuid,
|
|
66
|
+
application_name=cli_config.application_name,
|
|
67
|
+
)
|
|
68
|
+
except AmsdalCloudError as e:
|
|
69
|
+
rprint(rich_error(str(e)))
|
|
70
|
+
raise typer.Exit(1) from e
|
|
71
|
+
else:
|
|
72
|
+
config_dir: Path = cli_config.app_directory / '.amsdal'
|
|
73
|
+
config_dir.mkdir(exist_ok=True, parents=True)
|
|
74
|
+
_connections_path: Path = config_dir / '.external_connections'
|
|
75
|
+
_connections_path.touch(exist_ok=True)
|
|
76
|
+
_connections = set(_connections_path.read_text().split('\n'))
|
|
77
|
+
|
|
78
|
+
if connection_name in _connections:
|
|
79
|
+
_connections.remove(connection_name)
|
|
80
|
+
_connections_path.write_text('\n'.join(_connections))
|
|
81
|
+
|
|
82
|
+
rprint(rich_success(f'External connection {rich_highlight(connection_name)} removed successfully.'))
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import tempfile
|
|
2
|
+
import typing
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
from rich import print as rprint
|
|
7
|
+
from typer import Option
|
|
8
|
+
|
|
9
|
+
from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
|
|
10
|
+
from amsdal_cli.commands.cloud.external_connections.sub_commands.connection_add import parse_credentials
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@external_connections_sub_app.command(name='update, u')
|
|
14
|
+
def connection_update_command(
|
|
15
|
+
ctx: typer.Context,
|
|
16
|
+
connection_name: str,
|
|
17
|
+
backend: typing.Annotated[
|
|
18
|
+
typing.Optional[str], # noqa: UP007
|
|
19
|
+
Option('--backend', '-b', help='New backend type for the connection.'),
|
|
20
|
+
] = None,
|
|
21
|
+
credentials: typing.Annotated[
|
|
22
|
+
typing.Optional[list[str]], # noqa: UP007
|
|
23
|
+
Option('--credential', '-c', help='Credential in key=value format. Can be specified multiple times.'),
|
|
24
|
+
] = None,
|
|
25
|
+
env_name: typing.Annotated[
|
|
26
|
+
typing.Optional[str], # noqa: UP007
|
|
27
|
+
Option('--env', help='Environment name. Default is the current environment from configuration.'),
|
|
28
|
+
] = None,
|
|
29
|
+
) -> None:
|
|
30
|
+
"""
|
|
31
|
+
Updates an existing external connection in your Cloud Server app.
|
|
32
|
+
"""
|
|
33
|
+
from amsdal.errors import AmsdalCloudError
|
|
34
|
+
from amsdal.manager import AmsdalManager
|
|
35
|
+
from amsdal.manager import AsyncAmsdalManager
|
|
36
|
+
from amsdal_utils.config.manager import AmsdalConfigManager
|
|
37
|
+
|
|
38
|
+
from amsdal_cli.commands.build.services.builder import AppBuilder
|
|
39
|
+
from amsdal_cli.commands.cloud.environments.utils import get_current_env
|
|
40
|
+
from amsdal_cli.utils.cli_config import CliConfig
|
|
41
|
+
from amsdal_cli.utils.text import rich_error
|
|
42
|
+
from amsdal_cli.utils.text import rich_highlight
|
|
43
|
+
from amsdal_cli.utils.text import rich_info
|
|
44
|
+
from amsdal_cli.utils.text import rich_success
|
|
45
|
+
|
|
46
|
+
cli_config: CliConfig = ctx.meta['config']
|
|
47
|
+
env_name = env_name or get_current_env(cli_config)
|
|
48
|
+
|
|
49
|
+
# Validate that at least one update parameter is provided
|
|
50
|
+
if not backend and (not credentials or len(credentials) == 0):
|
|
51
|
+
rprint(rich_error('No updates specified. Provide --backend or --credential.'))
|
|
52
|
+
raise typer.Exit(1)
|
|
53
|
+
|
|
54
|
+
# Parse credentials if provided
|
|
55
|
+
credentials_dict = None
|
|
56
|
+
if credentials:
|
|
57
|
+
try:
|
|
58
|
+
credentials_dict = parse_credentials(credentials)
|
|
59
|
+
except typer.BadParameter as e:
|
|
60
|
+
rprint(rich_error(str(e)))
|
|
61
|
+
raise typer.Exit(1) from e
|
|
62
|
+
|
|
63
|
+
if cli_config.verbose:
|
|
64
|
+
update_info = []
|
|
65
|
+
if backend:
|
|
66
|
+
update_info.append(f'backend to {rich_highlight(backend)}')
|
|
67
|
+
if credentials_dict:
|
|
68
|
+
update_info.append('credentials')
|
|
69
|
+
rprint(
|
|
70
|
+
rich_info(
|
|
71
|
+
f'Updating external connection {rich_highlight(connection_name)} '
|
|
72
|
+
f'({", ".join(update_info)}) '
|
|
73
|
+
f'in environment: {rich_highlight(env_name)}'
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
with tempfile.TemporaryDirectory() as _temp_dir:
|
|
78
|
+
output_path: Path = Path(_temp_dir)
|
|
79
|
+
|
|
80
|
+
app_builder = AppBuilder(
|
|
81
|
+
cli_config=cli_config,
|
|
82
|
+
config_path=cli_config.config_path,
|
|
83
|
+
)
|
|
84
|
+
app_builder.build(output_path, is_silent=True)
|
|
85
|
+
manager: AsyncAmsdalManager | AmsdalManager
|
|
86
|
+
|
|
87
|
+
manager = AsyncAmsdalManager() if AmsdalConfigManager().get_config().async_mode else AmsdalManager()
|
|
88
|
+
|
|
89
|
+
manager.authenticate()
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
manager.cloud_actions_manager.update_external_connection(
|
|
93
|
+
connection_name=connection_name,
|
|
94
|
+
env_name=env_name,
|
|
95
|
+
backend=backend,
|
|
96
|
+
credentials=credentials_dict,
|
|
97
|
+
application_uuid=cli_config.application_uuid,
|
|
98
|
+
application_name=cli_config.application_name,
|
|
99
|
+
)
|
|
100
|
+
except AmsdalCloudError as e:
|
|
101
|
+
rprint(rich_error(str(e)))
|
|
102
|
+
raise typer.Exit(1) from e
|
|
103
|
+
|
|
104
|
+
rprint(rich_success(f'External connection {rich_highlight(connection_name)} updated successfully.'))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ast
|
|
2
|
+
from datetime import UTC
|
|
2
3
|
from datetime import date
|
|
3
|
-
from datetime import timezone
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
6
|
import faker
|
|
@@ -122,7 +122,7 @@ def _generate_values_for_type(
|
|
|
122
122
|
return ast.Constant(value='2023-01-01T00:00:00Z')
|
|
123
123
|
|
|
124
124
|
if test_data_type == TestDataType.RANDOM:
|
|
125
|
-
dt = FAKER.date_time(tzinfo=
|
|
125
|
+
dt = FAKER.date_time(tzinfo=UTC).replace(hour=0, minute=0, second=0, microsecond=0)
|
|
126
126
|
return ast.Constant(value=dt) # type: ignore[arg-type]
|
|
127
127
|
if test_data_type == TestDataType.DYNAMIC:
|
|
128
128
|
return _faker_call('date_time')
|
|
@@ -132,7 +132,7 @@ def _generate_values_for_type(
|
|
|
132
132
|
return ast.Constant(value=date(2023, 1, 1)) # type: ignore[arg-type]
|
|
133
133
|
|
|
134
134
|
if test_data_type == TestDataType.RANDOM:
|
|
135
|
-
dt = FAKER.date_time(tzinfo=
|
|
135
|
+
dt = FAKER.date_time(tzinfo=UTC).replace(hour=0, minute=0, second=0, microsecond=0)
|
|
136
136
|
return ast.Constant(value=dt.date()) # type: ignore[arg-type]
|
|
137
137
|
|
|
138
138
|
if test_data_type == TestDataType.DYNAMIC:
|
|
@@ -116,7 +116,7 @@ async def _async_sync_apply(
|
|
|
116
116
|
try:
|
|
117
117
|
amsdal_manager.authenticate()
|
|
118
118
|
|
|
119
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
119
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
120
120
|
|
|
121
121
|
app_migrations_loader = MigrationsLoader(
|
|
122
122
|
migrations_dir=build_dir / MIGRATIONS_DIR_NAME,
|
|
@@ -39,7 +39,7 @@ async def _async_fetch_migrations(app_migrations_path: Path) -> list['MigrationF
|
|
|
39
39
|
|
|
40
40
|
try:
|
|
41
41
|
amsdal_manager.authenticate()
|
|
42
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
42
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
43
43
|
|
|
44
44
|
store = AsyncFileMigrationStore(app_migrations_path)
|
|
45
45
|
await store.init_migration_table()
|
|
@@ -89,7 +89,7 @@ async def _async_make_migrations(
|
|
|
89
89
|
if not amsdal_manager.is_setup:
|
|
90
90
|
await amsdal_manager.setup()
|
|
91
91
|
amsdal_manager.authenticate()
|
|
92
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
92
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
93
93
|
|
|
94
94
|
schema_repository = build_schema_repository(cli_config=cli_config)
|
|
95
95
|
migrations_dir: Path = cli_config.app_directory / cli_config.src_dir / MIGRATIONS_DIR_NAME
|
|
@@ -87,7 +87,7 @@ async def _async_make_contrib_migrations(
|
|
|
87
87
|
if not amsdal_manager.is_setup:
|
|
88
88
|
await amsdal_manager.setup()
|
|
89
89
|
amsdal_manager.authenticate()
|
|
90
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
90
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
91
91
|
|
|
92
92
|
schema_repository = build_schema_repository(cli_config=cli_config)
|
|
93
93
|
migrations_dir: Path = cli_config.app_directory / cli_config.src_dir / MIGRATIONS_DIR_NAME
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
amsdal[cli]=={{ ctx.amsdal_version }}
|
|
2
|
-
{% if ctx.is_async_mode %}amsdal-glue-connections[async-sqlite]{% endif %}
|
|
2
|
+
{% if ctx.is_async_mode %}amsdal-glue-connections[async-sqlite,postgres-binary]{% endif %}
|
|
@@ -178,7 +178,7 @@ async def _async_migrate_models(config_path: Path) -> None:
|
|
|
178
178
|
new_manager = AsyncAmsdalManager()
|
|
179
179
|
if not new_manager.is_setup:
|
|
180
180
|
await new_manager.setup()
|
|
181
|
-
await new_manager.post_setup() # type: ignore[call-arg
|
|
181
|
+
await new_manager.post_setup() # type: ignore[call-arg]
|
|
182
182
|
|
|
183
183
|
schemas = MigrationSchemas()
|
|
184
184
|
executor = DefaultAsyncMigrationExecutor(schemas, use_foreign_keys=True)
|
|
@@ -310,7 +310,7 @@ async def _async_migrate_data(new_connection_name: str) -> None:
|
|
|
310
310
|
origin_manager = AsyncAmsdalManager()
|
|
311
311
|
if not origin_manager.is_setup:
|
|
312
312
|
await origin_manager.setup()
|
|
313
|
-
await origin_manager.post_setup() # type: ignore[call-arg
|
|
313
|
+
await origin_manager.post_setup() # type: ignore[call-arg]
|
|
314
314
|
|
|
315
315
|
model_class_loader = ModelClassLoader(settings.USER_MODELS_MODULE)
|
|
316
316
|
tables_for_connection = _resolve_tables_for_connection(new_connection_name)
|
|
@@ -346,7 +346,7 @@ async def _async_migrate_data(new_connection_name: str) -> None:
|
|
|
346
346
|
force_insert = True
|
|
347
347
|
lakehouse_item = model_class(**item.model_dump_refs())
|
|
348
348
|
|
|
349
|
-
await lakehouse_item.asave(
|
|
349
|
+
await lakehouse_item.asave(
|
|
350
350
|
force_insert=force_insert,
|
|
351
351
|
using=LAKEHOUSE_DB_ALIAS,
|
|
352
352
|
)
|
|
@@ -45,7 +45,7 @@ async def _async_serve(
|
|
|
45
45
|
async def on_event_async(self, *args: Any, **kwargs: Any) -> None: # noqa: ARG002
|
|
46
46
|
if not amsdal_manager._is_setup:
|
|
47
47
|
await amsdal_manager.setup()
|
|
48
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
48
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
49
49
|
|
|
50
50
|
if not amsdal_manager.is_authenticated:
|
|
51
51
|
amsdal_manager.authenticate()
|
|
@@ -397,13 +397,13 @@ async def async_build_app_and_check_migrations(
|
|
|
397
397
|
if not amsdal_manager.is_setup:
|
|
398
398
|
await amsdal_manager.setup()
|
|
399
399
|
|
|
400
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
400
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
401
401
|
amsdal_manager.init_classes()
|
|
402
402
|
|
|
403
403
|
if not amsdal_manager.is_authenticated:
|
|
404
404
|
amsdal_manager.authenticate()
|
|
405
405
|
|
|
406
|
-
await amsdal_manager.apply_fixtures() # type: ignore[call-arg
|
|
406
|
+
await amsdal_manager.apply_fixtures() # type: ignore[call-arg]
|
|
407
407
|
rprint(rich_success('OK!'))
|
|
408
408
|
except Exception:
|
|
409
409
|
if amsdal_manager.is_setup:
|
|
@@ -438,7 +438,7 @@ async def async_check_migrations_generated_and_applied(
|
|
|
438
438
|
if not amsdal_manager.is_authenticated:
|
|
439
439
|
amsdal_manager.authenticate()
|
|
440
440
|
|
|
441
|
-
await amsdal_manager.post_setup() # type: ignore[call-arg
|
|
441
|
+
await amsdal_manager.post_setup() # type: ignore[call-arg]
|
|
442
442
|
|
|
443
443
|
has_unapplied_migrations = await _async_check_has_unapplied_migrations(build_dir=build_dir)
|
|
444
444
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: amsdal_cli
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.10
|
|
4
4
|
Summary: CLI for AMSDAL framework
|
|
5
5
|
Project-URL: Documentation, https://pypi.org/project/amsdal_cli/#readme
|
|
6
6
|
Project-URL: Issues, https://pypi.org/project/amsdal_cli/
|
|
@@ -118,17 +118,18 @@ Classifier: Development Status :: 4 - Beta
|
|
|
118
118
|
Classifier: Programming Language :: Python
|
|
119
119
|
Classifier: Programming Language :: Python :: 3.11
|
|
120
120
|
Classifier: Programming Language :: Python :: 3.12
|
|
121
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
121
122
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
122
123
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
123
|
-
Requires-Python:
|
|
124
|
+
Requires-Python: <3.14,>=3.11
|
|
124
125
|
Requires-Dist: amsdal-server==0.5.*
|
|
125
126
|
Requires-Dist: click<8.2.0
|
|
126
127
|
Requires-Dist: faker==27.*
|
|
127
128
|
Requires-Dist: gitpython~=3.1
|
|
128
129
|
Requires-Dist: httpx==0.28.*
|
|
129
130
|
Requires-Dist: jinja2~=3.1
|
|
130
|
-
Requires-Dist: pydantic-settings~=2.
|
|
131
|
-
Requires-Dist: pydantic~=2.
|
|
131
|
+
Requires-Dist: pydantic-settings~=2.12
|
|
132
|
+
Requires-Dist: pydantic~=2.12
|
|
132
133
|
Requires-Dist: rich~=14.0
|
|
133
134
|
Requires-Dist: typer~=0.15.3
|
|
134
135
|
Requires-Dist: watchfiles~=0.21
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
amsdal_cli/Third-Party Materials - AMSDAL Dependencies - License Notices.md,sha256=uHJlGG0D4tbpUi8cq-497NNO9ltQ67a5448k-T14HTw,68241
|
|
2
|
-
amsdal_cli/__about__.py,sha256=
|
|
2
|
+
amsdal_cli/__about__.py,sha256=2PfW0mPI4DYZrdult5d2mMRHPOJDirOQvIzkUq-Vwks,125
|
|
3
3
|
amsdal_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
amsdal_cli/app.py,sha256=_ucuLT5ospf1ifFKEG0IMfVnxKjnvPUQ4iMhkvOfCrc,466
|
|
5
5
|
amsdal_cli/main.py,sha256=LtH-BD1eJrAUecjKzC8Gx7kYFUstOMH1erdeJUVqFB8,144
|
|
@@ -54,7 +54,7 @@ amsdal_cli/commands/clean/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
54
54
|
amsdal_cli/commands/clean/command.py,sha256=a4h0ZB7B9pRSyUaJF5d1eD33cwgvmexm_z8W3Ws71_Q,934
|
|
55
55
|
amsdal_cli/commands/cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
amsdal_cli/commands/cloud/app.py,sha256=PKtcnIoByDMn0vGPSQrr9lfhg90Za2S2X9Z0C-zM430,174
|
|
57
|
-
amsdal_cli/commands/cloud/command.py,sha256=
|
|
57
|
+
amsdal_cli/commands/cloud/command.py,sha256=L5Es2Xukqs6WPdskVC_jDzqroEVUL-HxPUnCzvp1nwo,601
|
|
58
58
|
amsdal_cli/commands/cloud/enums.py,sha256=mQJzdRDSeWgm9D2zTaXMbG0_EKcQ_ff-79iZE57kAME,612
|
|
59
59
|
amsdal_cli/commands/cloud/dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
60
|
amsdal_cli/commands/cloud/dependency/app.py,sha256=m2pcB5z3257uU7pKt9XoOdQn7J3PUys6elCs9c9qc2o,230
|
|
@@ -68,8 +68,8 @@ amsdal_cli/commands/cloud/deploy/app.py,sha256=_t2LVD8apbyvBrcWdNv1_nXtubng1hLW9
|
|
|
68
68
|
amsdal_cli/commands/cloud/deploy/command.py,sha256=LIX07pTU55GUA9KmTiKDtoCj5Ytx9ZDC7XQsVYUYsh8,262
|
|
69
69
|
amsdal_cli/commands/cloud/deploy/sub_commands/__init__.py,sha256=I7MJEyceCIgCXP7JpX06nLvEA6HUkjj9LSDAb7VfTGo,353
|
|
70
70
|
amsdal_cli/commands/cloud/deploy/sub_commands/deploy_delete.py,sha256=pRLumeigF4e_Nod32p6XkgJsYxbB9H3WSxbv0IwA5Eo,3221
|
|
71
|
-
amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py,sha256=
|
|
72
|
-
amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py,sha256=
|
|
71
|
+
amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py,sha256=rqykOi49C3CHm7GiVOKTgwlrYcN3mSguHx759ZzZJ3k,5498
|
|
72
|
+
amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py,sha256=N591T6XKpj1xPx_qGmpAmCqumeWpGrA0RH0e9_SSs-8,12686
|
|
73
73
|
amsdal_cli/commands/cloud/environments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
74
|
amsdal_cli/commands/cloud/environments/app.py,sha256=kkzf_kW2jpl3d44qWuIZB5C3uWXzpNpnTIvUpuuPJHE,238
|
|
75
75
|
amsdal_cli/commands/cloud/environments/command.py,sha256=roeg2tpa53W1qzCa_3-zEn5z2xiVS4STWB9M7P5BVKA,283
|
|
@@ -80,6 +80,14 @@ amsdal_cli/commands/cloud/environments/sub_commands/env_checkout.py,sha256=S4wh-
|
|
|
80
80
|
amsdal_cli/commands/cloud/environments/sub_commands/env_delete.py,sha256=4OlTKASd0fKCh7Pv7AUcMJlgiQYVViID1GwlQsmOsgc,1773
|
|
81
81
|
amsdal_cli/commands/cloud/environments/sub_commands/env_list.py,sha256=7QT-cVuBVQ3ddjlCLVIXf-D9PI1lkaUn96K1THW6A-Q,2789
|
|
82
82
|
amsdal_cli/commands/cloud/environments/sub_commands/env_new.py,sha256=GzemfFXc623OU1PakUhMAJ8vcJhXopXSghTSMx0joPs,1761
|
|
83
|
+
amsdal_cli/commands/cloud/external_connections/__init__.py,sha256=BFs3y_xV8DORVjNcHoTgFVbZCtpFR6_Q7szDC47juPI,136
|
|
84
|
+
amsdal_cli/commands/cloud/external_connections/app.py,sha256=NHsG9-wnE2COpeD0PJEhmmKnlzK2y6bC9-2qJF_fArI,291
|
|
85
|
+
amsdal_cli/commands/cloud/external_connections/command.py,sha256=o9Q1PXqj16LhGTbRasFpV2X4VHYmqMFOraWLCjhHOGY,328
|
|
86
|
+
amsdal_cli/commands/cloud/external_connections/sub_commands/__init__.py,sha256=QERWNr1qYFlqyDSkBnSjkJ6H-v2ipJxANRZJNtSQJU4,598
|
|
87
|
+
amsdal_cli/commands/cloud/external_connections/sub_commands/connection_add.py,sha256=m3TlrjL-uKUlVzboWtF0zQ3oNAWUcMc9r-aIej-zT1U,4372
|
|
88
|
+
amsdal_cli/commands/cloud/external_connections/sub_commands/connection_list.py,sha256=c-k5OrlTAHmw93werYEc7ykRQMslURTLLPR45u8GAaI,5203
|
|
89
|
+
amsdal_cli/commands/cloud/external_connections/sub_commands/connection_remove.py,sha256=XCxrSPP1vKMoK2asEZKswqdEHUUHe2QVQjq54h1Z8r4,3037
|
|
90
|
+
amsdal_cli/commands/cloud/external_connections/sub_commands/connection_update.py,sha256=68qMy3n4e6RRYn0ew0MNeXuj27H0dAZM8Kb9i9RqI1Y,3883
|
|
83
91
|
amsdal_cli/commands/cloud/secret/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
92
|
amsdal_cli/commands/cloud/secret/app.py,sha256=0GnTkNYAUQwGpccton4Ndy2NYTEGox53I7UteHTXX-Y,224
|
|
85
93
|
amsdal_cli/commands/cloud/secret/command.py,sha256=mvEjNIiuxowlHkxK_BNOT6dh0cYaaabkuXc4sEj48N0,253
|
|
@@ -138,7 +146,7 @@ amsdal_cli/commands/generate/utils/tests/async_mode_utils.py,sha256=iub84Pj5TMa3
|
|
|
138
146
|
amsdal_cli/commands/generate/utils/tests/conftest_utils.py,sha256=Ma0yRcrwzGwN_IdnAoYgVnYVjgLy0CgQveqXHuhn5RA,786
|
|
139
147
|
amsdal_cli/commands/generate/utils/tests/function_utils.py,sha256=Bkk9JDbANX2aSreNRr1Bste5rPwVKc2HV5xLFg2dQK4,496
|
|
140
148
|
amsdal_cli/commands/generate/utils/tests/model_utils.py,sha256=CBfR9AcL6Q1boEejjmOD16F0kgJFdIjYYWNE3vQMkfE,4051
|
|
141
|
-
amsdal_cli/commands/generate/utils/tests/type_utils.py,sha256=
|
|
149
|
+
amsdal_cli/commands/generate/utils/tests/type_utils.py,sha256=c2eKOrzuioDHbxQieiRAT8reF9TCgTq5CRx7WB3_W-Y,9302
|
|
142
150
|
amsdal_cli/commands/generate/utils/tests/unit.py,sha256=XEoTmgZP-8dSmFqA6lPk5U8k3AfDbDom92CviXgzFtw,27696
|
|
143
151
|
amsdal_cli/commands/generate/utils/tests/templates/async/conftest.py,sha256=9GfoV_HzwuWtglI7uz0fP5_pOsPk2f56elaoinuPa80,1632
|
|
144
152
|
amsdal_cli/commands/generate/utils/tests/templates/sync/conftest.py,sha256=wMmnKQnVTSJsS5MdH25ChRcc-aQevQYqIZhXwLnZl0U,1564
|
|
@@ -148,17 +156,17 @@ amsdal_cli/commands/migrations/command.py,sha256=jlpdYZAc02ZUBxSdzGSzkDxEb1nlHNz
|
|
|
148
156
|
amsdal_cli/commands/migrations/constants.py,sha256=846-DQ-Iqcxw2akd5aBAmbnXHDmRFqEKu6vai2ZFBkU,35
|
|
149
157
|
amsdal_cli/commands/migrations/utils.py,sha256=Fvu6NlIFL3OAz0MhLkvnucIsHBZlDDCOZZ38VhNahws,2700
|
|
150
158
|
amsdal_cli/commands/migrations/sub_commands/__init__.py,sha256=HHxiJxcbJUQLv6QOLwcvcSjTYJTixiRJ89IUb1H7sRo,1100
|
|
151
|
-
amsdal_cli/commands/migrations/sub_commands/apply.py,sha256=
|
|
152
|
-
amsdal_cli/commands/migrations/sub_commands/list.py,sha256=
|
|
153
|
-
amsdal_cli/commands/migrations/sub_commands/make.py,sha256=
|
|
154
|
-
amsdal_cli/commands/migrations/sub_commands/make_contrib.py,sha256=
|
|
159
|
+
amsdal_cli/commands/migrations/sub_commands/apply.py,sha256=MrlykOqsdBZoC1gnaHSOa6oGfTREDmxKyTmB7-mBRPU,8742
|
|
160
|
+
amsdal_cli/commands/migrations/sub_commands/list.py,sha256=kZc-qI-lVFrVpWyPV3b21wx1aLUYcFbFX1U1WDq2l0E,5828
|
|
161
|
+
amsdal_cli/commands/migrations/sub_commands/make.py,sha256=6Xh4wZFyZQmxSR8InBc0f_FUuIM_eqyfqO0ynLuDlPY,6423
|
|
162
|
+
amsdal_cli/commands/migrations/sub_commands/make_contrib.py,sha256=G3w5fRKR16-tKrTfOWCGj4Vkuwl22V5aEsRxEhIoD1k,6331
|
|
155
163
|
amsdal_cli/commands/new/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
164
|
amsdal_cli/commands/new/command.py,sha256=B-chjS_TAEzH4CIr_vBtxFWn7Y4xWm8vpUetCf1lwKo,3233
|
|
157
165
|
amsdal_cli/commands/new/templates/.amsdal-cli,sha256=PdXPovcT8AfPhqwDLI_4EWFYAS6e3J5JcsHVityBdF8,304
|
|
158
166
|
amsdal_cli/commands/new/templates/.gitignore,sha256=u7cZFs8VyeZahreeYtkoRnAQduko23Lz4SoGCyMSOQc,153
|
|
159
167
|
amsdal_cli/commands/new/templates/README.md,sha256=SM_MPq4HNWIxo2B4HJmfM1kfJYawW4YneuZxFqZnDo4,21552
|
|
160
168
|
amsdal_cli/commands/new/templates/config.yml,sha256=89BTeSrzPO92JTCRS8N03DXY0kdw-uMWCStLHzNaeRw,640
|
|
161
|
-
amsdal_cli/commands/new/templates/requirements.txt,sha256=
|
|
169
|
+
amsdal_cli/commands/new/templates/requirements.txt,sha256=05SVW1yzgvHwir231NIEgeCguZovGJyJKtHA1uFC3aA,129
|
|
162
170
|
amsdal_cli/commands/new/templates/.amsdal/.dependencies,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
163
171
|
amsdal_cli/commands/new/templates/.amsdal/.environment,sha256=DW5AeeNnA-vTfAByL1iR0osOKBHcEUsSkhUSOtzONgU,4
|
|
164
172
|
amsdal_cli/commands/new/templates/.amsdal/.secrets,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -179,17 +187,17 @@ amsdal_cli/commands/register_connection/utils/__init__.py,sha256=47DEQpj8HBSa-_T
|
|
|
179
187
|
amsdal_cli/commands/register_connection/utils/build.py,sha256=nsx2EeN-KhZHg1IwICeRSTfUJS1ajNy1LrP33lXoD4s,710
|
|
180
188
|
amsdal_cli/commands/register_connection/utils/config_updater.py,sha256=CDsaCuli5tCsHoNrzfeWoVDPlyOTWvi8TPdbM4Fzo4o,4204
|
|
181
189
|
amsdal_cli/commands/register_connection/utils/credentials.py,sha256=iaAF5STbKJNIoT8vL30DafTn4uzYnrjumtM3XNHuOS8,1066
|
|
182
|
-
amsdal_cli/commands/register_connection/utils/initialize.py,sha256=
|
|
190
|
+
amsdal_cli/commands/register_connection/utils/initialize.py,sha256=Fjs3ilpnv3TqdzpfkT8UUxtZhWR2GQ8_2-pGvazQu3s,1273
|
|
183
191
|
amsdal_cli/commands/register_connection/utils/meta.py,sha256=PDs2miN0SPW2hCATLY8uGe1WOzDyw-D6my90P-mpcl8,709
|
|
184
|
-
amsdal_cli/commands/register_connection/utils/migrate_models.py,sha256=
|
|
192
|
+
amsdal_cli/commands/register_connection/utils/migrate_models.py,sha256=vljLYKBDZJn4h2fywbDfNeKd5W4G_KYZ8vKpMhc1oMI,14043
|
|
185
193
|
amsdal_cli/commands/register_connection/utils/model_generator.py,sha256=w0vz-i-tMdimcQYmFbtfpOZJF8heTTRIzu1yTdbKBpc,10853
|
|
186
194
|
amsdal_cli/commands/register_connection/utils/tables.py,sha256=FOwbWOpEw485Leoqe8LXCVY5osGKTKlMqWD9oqosapk,474
|
|
187
195
|
amsdal_cli/commands/restore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
188
196
|
amsdal_cli/commands/restore/command.py,sha256=yrtF0y3HHmv6RXrMKQCnUIDhEQecDWY7THI_erh6WtA,35976
|
|
189
197
|
amsdal_cli/commands/restore/enums.py,sha256=6SiKMRGlSjiLyepfbfQFXGAYqlM6Bkoeko2KscntTUQ,307
|
|
190
198
|
amsdal_cli/commands/serve/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
191
|
-
amsdal_cli/commands/serve/command.py,sha256=
|
|
192
|
-
amsdal_cli/commands/serve/utils.py,sha256=
|
|
199
|
+
amsdal_cli/commands/serve/command.py,sha256=r27g3mw-P77LfP43ygTk9QbxN7HklWbzrlosjO4hB5c,6537
|
|
200
|
+
amsdal_cli/commands/serve/utils.py,sha256=ErwuQFRJxo32Y7uLgxtUXYdbPlDCYsh8OfAkqWSblrA,18475
|
|
193
201
|
amsdal_cli/commands/serve/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
194
202
|
amsdal_cli/commands/serve/filters/models_watch_filter.py,sha256=cnoAjrn-PYDAFq5MtgbQ6QeCvJJmcNisVNlA8QtFv4A,170
|
|
195
203
|
amsdal_cli/commands/serve/filters/static_files_watch_filter.py,sha256=jKAF5RHq1au2v0kcOrqaAHP1x5IUjt_KgZURJLm29Tw,552
|
|
@@ -224,8 +232,8 @@ amsdal_cli/utils/vcs/base.py,sha256=jC05ExJZDnyHAsW7_4IDf8gQcYgK4dXq3zNlFIX66T4,
|
|
|
224
232
|
amsdal_cli/utils/vcs/dummy.py,sha256=Lk8MT-b0YlHHUsiXsq5cvmPwcl4jTYdo8piN5_C8ORA,434
|
|
225
233
|
amsdal_cli/utils/vcs/enums.py,sha256=tYR9LN1IOr8BZFbSeX_vDlhn8fPl4IU-Yakii8lRDYs,69
|
|
226
234
|
amsdal_cli/utils/vcs/git.py,sha256=xHynbZcV6p2D3RFCwu1MGGpV9D7eK-pGUtO8kVexTQM,1269
|
|
227
|
-
amsdal_cli-0.5.
|
|
228
|
-
amsdal_cli-0.5.
|
|
229
|
-
amsdal_cli-0.5.
|
|
230
|
-
amsdal_cli-0.5.
|
|
231
|
-
amsdal_cli-0.5.
|
|
235
|
+
amsdal_cli-0.5.10.dist-info/METADATA,sha256=tT-PolxQpK1kAtb8Pu09ZphgzxrFfhkVDLrypcbjMqM,57165
|
|
236
|
+
amsdal_cli-0.5.10.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
237
|
+
amsdal_cli-0.5.10.dist-info/entry_points.txt,sha256=GC-8LZsD3W--Pd9_gD4W3tw3ZZyPbSvkZ-qWc9Fx0NI,47
|
|
238
|
+
amsdal_cli-0.5.10.dist-info/licenses/LICENSE.txt,sha256=hG-541PFYfNJi9WRZi_hno91UyqNg7YLK8LR3vLblZA,27355
|
|
239
|
+
amsdal_cli-0.5.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|