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.
Files changed (27) hide show
  1. amsdal_cli/__about__.py +1 -1
  2. amsdal_cli/commands/cloud/command.py +1 -0
  3. amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py +4 -4
  4. amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py +1 -1
  5. amsdal_cli/commands/cloud/external_connections/__init__.py +3 -0
  6. amsdal_cli/commands/cloud/external_connections/app.py +11 -0
  7. amsdal_cli/commands/cloud/external_connections/command.py +5 -0
  8. amsdal_cli/commands/cloud/external_connections/sub_commands/__init__.py +11 -0
  9. amsdal_cli/commands/cloud/external_connections/sub_commands/connection_add.py +123 -0
  10. amsdal_cli/commands/cloud/external_connections/sub_commands/connection_list.py +146 -0
  11. amsdal_cli/commands/cloud/external_connections/sub_commands/connection_remove.py +82 -0
  12. amsdal_cli/commands/cloud/external_connections/sub_commands/connection_update.py +104 -0
  13. amsdal_cli/commands/generate/utils/tests/type_utils.py +3 -3
  14. amsdal_cli/commands/migrations/sub_commands/apply.py +1 -1
  15. amsdal_cli/commands/migrations/sub_commands/list.py +1 -1
  16. amsdal_cli/commands/migrations/sub_commands/make.py +1 -1
  17. amsdal_cli/commands/migrations/sub_commands/make_contrib.py +1 -1
  18. amsdal_cli/commands/new/templates/requirements.txt +1 -1
  19. amsdal_cli/commands/register_connection/utils/initialize.py +1 -1
  20. amsdal_cli/commands/register_connection/utils/migrate_models.py +3 -3
  21. amsdal_cli/commands/serve/command.py +1 -1
  22. amsdal_cli/commands/serve/utils.py +3 -3
  23. {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/METADATA +5 -4
  24. {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/RECORD +27 -19
  25. {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/WHEEL +1 -1
  26. {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/entry_points.txt +0 -0
  27. {amsdal_cli-0.5.8.dist-info → amsdal_cli-0.5.10.dist-info}/licenses/LICENSE.txt +0 -0
amsdal_cli/__about__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2023-present
2
2
  #
3
3
  # SPDX-License-Identifier: AMSDAL End User License Agreement
4
- __version__ = '0.5.8'
4
+ __version__ = '0.5.10'
@@ -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.timezone.utc,
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.timezone.utc,
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.timezone.utc,
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.timezone.utc,
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, misc]
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,3 @@
1
+ from amsdal_cli.commands.cloud.external_connections.app import external_connections_sub_app
2
+
3
+ __all__ = ['external_connections_sub_app']
@@ -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=timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
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=timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
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, misc]
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,misc]
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, misc]
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, misc]
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 %}
@@ -38,4 +38,4 @@ async def _async_init() -> None:
38
38
  amsdal_manager = AsyncAmsdalManager()
39
39
  await amsdal_manager.setup()
40
40
  amsdal_manager.authenticate()
41
- await amsdal_manager.post_setup() # type: ignore[call-arg, misc]
41
+ await amsdal_manager.post_setup() # type: ignore[call-arg]
@@ -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, misc]
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, misc]
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( # type: ignore[misc]
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, misc]
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,misc]
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,misc]
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,misc]
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.8
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: >=3.11
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.2
131
- Requires-Dist: pydantic~=2.3
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=JGF3XlJObn428GEyZLeDPPWqGJueIxTc_Bg3msQ3gts,124
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=imgV1E-LeBXR3Ax11tRuSVVWAvNpigeJSa87xv0G0EY,524
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=ozr7tVbPrTnx_YscyAb1_ZockFfQQSwd6XDijrkZSWk,5534
72
- amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py,sha256=n87MNWad-oOFYXRpQvWqZZtRo0NXaQZSb3GQkMFE0ls,12692
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=yglZHcvAQ0m6JnwQEBxHdcWxlkHY65P-Cp81fCrC3q8,9325
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=n4-BzBlAjjmt69iD0QQjMyy_A_4YxeIgU7y_P7eBr5k,8748
152
- amsdal_cli/commands/migrations/sub_commands/list.py,sha256=vC-oeTVHjYNzI_HhiylZSNeOsIFvnDZ6TRwrqQ-wpUk,5833
153
- amsdal_cli/commands/migrations/sub_commands/make.py,sha256=Qh3_4djVgdT67oRZ46AF2dqSyUDEiipOOkW5_-n4DOY,6429
154
- amsdal_cli/commands/migrations/sub_commands/make_contrib.py,sha256=JdlD8hGjNMrbWFIqSw5eXRSxUd1hW6D2UcxWR6-6uTg,6337
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=SZ3s8KxuCFfat3FHl8-ZF3mrghDNdMXFS4T1QI1YXeo,113
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=9NvfAWOvWQVrSfVNZnGBqeKcQ7bxpTf56oj8239jgc8,1279
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=oU_5oZcwU-qIMImpFIGniXvs7CJXyCyfSJozhFBRYkM,14077
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=rdeS9obphECV6UsGIExVEWUiFL8ntqbNfLiNTMUD4nM,6543
192
- amsdal_cli/commands/serve/utils.py,sha256=2APwAytxKBuS8PbfGJ0MVLgi_9Q3p-OfBCiZoAMt0bU,18490
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.8.dist-info/METADATA,sha256=z4h-NRFwmwAl9Qef3vSadlk0_s2-CU5MgOsdg_tsnAc,57105
228
- amsdal_cli-0.5.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
229
- amsdal_cli-0.5.8.dist-info/entry_points.txt,sha256=GC-8LZsD3W--Pd9_gD4W3tw3ZZyPbSvkZ-qWc9Fx0NI,47
230
- amsdal_cli-0.5.8.dist-info/licenses/LICENSE.txt,sha256=hG-541PFYfNJi9WRZi_hno91UyqNg7YLK8LR3vLblZA,27355
231
- amsdal_cli-0.5.8.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any