fastapi-cloud-cli 0.5.2__tar.gz → 0.6.0__tar.gz
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.
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/PKG-INFO +2 -3
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/pyproject.toml +13 -4
- fastapi_cloud_cli-0.6.0/src/fastapi_cloud_cli/__init__.py +1 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/deploy.py +2 -3
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_archive.py +60 -28
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli_deploy.py +2 -19
- fastapi_cloud_cli-0.5.2/requirements-tests.txt +0 -8
- fastapi_cloud_cli-0.5.2/requirements.txt +0 -5
- fastapi_cloud_cli-0.5.2/src/fastapi_cloud_cli/__init__.py +0 -1
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/LICENSE +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/README.md +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/scripts/format.sh +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/scripts/lint.sh +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/scripts/test-cov-html.sh +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/scripts/test.sh +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/__main__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/cli.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/env.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/login.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/logout.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/unlink.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/whoami.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/config.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/logging.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/py.typed +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/apps.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/auth.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/cli.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/config.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/env.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/pydantic_compat.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/sentry.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/broken_package/mod/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/broken_package/mod/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/broken_package/utils.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_api/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/main.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/non_default/nonstandard.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/core/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/core/utils.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/mod/__init__.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/mod/api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/mod/app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/package/mod/other.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/single_file_api.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/single_file_app.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/single_file_other.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/conftest.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_api_client.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_auth.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli_login.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli_logout.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli_unlink.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_cli_whoami.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_config.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_deploy_utils.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_env_delete.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_env_list.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_env_set.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/test_sentry.py +0 -0
- {fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastapi-cloud-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Deploy and manage FastAPI Cloud apps from the command line 🚀
|
|
5
5
|
Author-Email: Patrick Arminio <patrick@fastapilabs.com>
|
|
6
6
|
License: MIT
|
|
@@ -25,7 +25,6 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.13
|
|
28
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
29
28
|
Project-URL: Homepage, https://github.com/fastapilabs/fastapi-cloud-cli
|
|
30
29
|
Project-URL: Documentation, https://fastapi.tiangolo.com/fastapi-cloud-cli/
|
|
31
30
|
Project-URL: Repository, https://github.com/fastapilabs/fastapi-cloud-cli
|
|
@@ -39,7 +38,7 @@ Requires-Dist: httpx>=0.27.0
|
|
|
39
38
|
Requires-Dist: rich-toolkit>=0.14.5
|
|
40
39
|
Requires-Dist: pydantic[email]>=1.6.1
|
|
41
40
|
Requires-Dist: sentry-sdk>=2.20.0
|
|
42
|
-
Requires-Dist: fastar>=0.
|
|
41
|
+
Requires-Dist: fastar>=0.8.0
|
|
43
42
|
Provides-Extra: standard
|
|
44
43
|
Requires-Dist: uvicorn[standard]>=0.15.0; extra == "standard"
|
|
45
44
|
Description-Content-Type: text/markdown
|
|
@@ -29,7 +29,6 @@ classifiers = [
|
|
|
29
29
|
"Programming Language :: Python :: 3.11",
|
|
30
30
|
"Programming Language :: Python :: 3.12",
|
|
31
31
|
"Programming Language :: Python :: 3.13",
|
|
32
|
-
"License :: OSI Approved :: MIT License",
|
|
33
32
|
]
|
|
34
33
|
dependencies = [
|
|
35
34
|
"typer >= 0.12.3",
|
|
@@ -39,9 +38,9 @@ dependencies = [
|
|
|
39
38
|
"rich-toolkit >= 0.14.5",
|
|
40
39
|
"pydantic[email] >= 1.6.1",
|
|
41
40
|
"sentry-sdk >= 2.20.0",
|
|
42
|
-
"fastar >= 0.
|
|
41
|
+
"fastar >= 0.8.0",
|
|
43
42
|
]
|
|
44
|
-
version = "0.
|
|
43
|
+
version = "0.6.0"
|
|
45
44
|
|
|
46
45
|
[project.license]
|
|
47
46
|
text = "MIT"
|
|
@@ -58,6 +57,17 @@ Repository = "https://github.com/fastapilabs/fastapi-cloud-cli"
|
|
|
58
57
|
Issues = "https://github.com/fastapilabs/fastapi-cloud-cli/issues"
|
|
59
58
|
Changelog = "https://github.com/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md"
|
|
60
59
|
|
|
60
|
+
[dependency-groups]
|
|
61
|
+
dev = [
|
|
62
|
+
"pre-commit>=2.17.0,<5.0.0",
|
|
63
|
+
"pytest>=4.4.0,<9.0.0",
|
|
64
|
+
"coverage[toml]>=6.2,<8.0",
|
|
65
|
+
"mypy==1.14.1",
|
|
66
|
+
"ruff==0.13.0",
|
|
67
|
+
"respx==0.22.0",
|
|
68
|
+
"time-machine==2.15.0",
|
|
69
|
+
]
|
|
70
|
+
|
|
61
71
|
[build-system]
|
|
62
72
|
requires = [
|
|
63
73
|
"pdm-backend",
|
|
@@ -74,7 +84,6 @@ path = "src/fastapi_cloud_cli/__init__.py"
|
|
|
74
84
|
[tool.pdm.build]
|
|
75
85
|
source-includes = [
|
|
76
86
|
"tests/",
|
|
77
|
-
"requirements*.txt",
|
|
78
87
|
"scripts/",
|
|
79
88
|
]
|
|
80
89
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.6.0"
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/deploy.py
RENAMED
|
@@ -68,7 +68,7 @@ def archive(path: Path, tar_path: Path) -> Path:
|
|
|
68
68
|
logger.debug("Archive will be created at: %s", tar_path)
|
|
69
69
|
|
|
70
70
|
file_count = 0
|
|
71
|
-
with fastar.open(tar_path, "w") as tar:
|
|
71
|
+
with fastar.open(tar_path, "w:zst") as tar:
|
|
72
72
|
for filename in files:
|
|
73
73
|
if filename.is_dir():
|
|
74
74
|
continue
|
|
@@ -260,8 +260,7 @@ LONG_WAIT_MESSAGES = [
|
|
|
260
260
|
|
|
261
261
|
|
|
262
262
|
def _configure_app(toolkit: RichToolkit, path_to_deploy: Path) -> AppConfig:
|
|
263
|
-
|
|
264
|
-
raise typer.Exit(0)
|
|
263
|
+
toolkit.print(f"Setting up and deploying [blue]{path_to_deploy}[/blue]", tag="path")
|
|
265
264
|
|
|
266
265
|
toolkit.print_line()
|
|
267
266
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import tarfile
|
|
2
1
|
from pathlib import Path
|
|
3
2
|
|
|
3
|
+
import fastar
|
|
4
4
|
import pytest
|
|
5
5
|
|
|
6
6
|
from fastapi_cloud_cli.commands.deploy import archive
|
|
@@ -13,6 +13,13 @@ def src_path(tmp_path: Path) -> Path:
|
|
|
13
13
|
return path
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
@pytest.fixture
|
|
17
|
+
def dst_path(tmp_path: Path) -> Path:
|
|
18
|
+
path = tmp_path / "destination"
|
|
19
|
+
path.mkdir()
|
|
20
|
+
return path
|
|
21
|
+
|
|
22
|
+
|
|
16
23
|
@pytest.fixture
|
|
17
24
|
def tar_path(tmp_path: Path) -> Path:
|
|
18
25
|
return tmp_path / "archive.tar"
|
|
@@ -29,7 +36,7 @@ def test_archive_creates_tar_file(src_path: Path, tar_path: Path) -> None:
|
|
|
29
36
|
|
|
30
37
|
|
|
31
38
|
def test_archive_excludes_venv_and_similar_folders(
|
|
32
|
-
src_path: Path, tar_path: Path
|
|
39
|
+
src_path: Path, tar_path: Path, dst_path: Path
|
|
33
40
|
) -> None:
|
|
34
41
|
"""Should exclude .venv directory from archive."""
|
|
35
42
|
# the only files we want to include
|
|
@@ -53,24 +60,38 @@ def test_archive_excludes_venv_and_similar_folders(
|
|
|
53
60
|
|
|
54
61
|
archive(src_path, tar_path)
|
|
55
62
|
|
|
56
|
-
with
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
with fastar.open(tar_path, "r") as tar:
|
|
64
|
+
tar.unpack(dst_path)
|
|
65
|
+
|
|
66
|
+
assert set(dst_path.glob("**/*")) == {
|
|
67
|
+
dst_path / "main.py",
|
|
68
|
+
dst_path / "static",
|
|
69
|
+
dst_path / "static" / "index.html",
|
|
70
|
+
}
|
|
59
71
|
|
|
60
72
|
|
|
61
|
-
def test_archive_preserves_relative_paths(
|
|
73
|
+
def test_archive_preserves_relative_paths(
|
|
74
|
+
src_path: Path, tar_path: Path, dst_path: Path
|
|
75
|
+
) -> None:
|
|
62
76
|
(src_path / "src").mkdir()
|
|
63
77
|
(src_path / "src" / "app").mkdir()
|
|
64
78
|
(src_path / "src" / "app" / "main.py").write_text("print('hello')")
|
|
65
79
|
|
|
66
80
|
archive(src_path, tar_path)
|
|
67
81
|
|
|
68
|
-
with
|
|
69
|
-
|
|
70
|
-
assert names == ["src/app/main.py"]
|
|
82
|
+
with fastar.open(tar_path, "r") as tar:
|
|
83
|
+
tar.unpack(dst_path)
|
|
71
84
|
|
|
85
|
+
assert set(dst_path.glob("**/*")) == {
|
|
86
|
+
dst_path / "src",
|
|
87
|
+
dst_path / "src" / "app",
|
|
88
|
+
dst_path / "src" / "app" / "main.py",
|
|
89
|
+
}
|
|
72
90
|
|
|
73
|
-
|
|
91
|
+
|
|
92
|
+
def test_archive_respects_fastapicloudignore(
|
|
93
|
+
src_path: Path, tar_path: Path, dst_path: Path
|
|
94
|
+
) -> None:
|
|
74
95
|
"""Should exclude files specified in .fastapicloudignore."""
|
|
75
96
|
(src_path / "main.py").write_text("print('hello')")
|
|
76
97
|
(src_path / "config.py").write_text("CONFIG = 'value'")
|
|
@@ -82,16 +103,17 @@ def test_archive_respects_fastapicloudignore(src_path: Path, tar_path: Path) ->
|
|
|
82
103
|
|
|
83
104
|
archive(src_path, tar_path)
|
|
84
105
|
|
|
85
|
-
with
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
with fastar.open(tar_path, "r") as tar:
|
|
107
|
+
tar.unpack(dst_path)
|
|
108
|
+
|
|
109
|
+
assert set(dst_path.glob("**/*")) == {
|
|
110
|
+
dst_path / "main.py",
|
|
111
|
+
dst_path / "config.py",
|
|
112
|
+
}
|
|
91
113
|
|
|
92
114
|
|
|
93
115
|
def test_archive_respects_fastapicloudignore_unignore(
|
|
94
|
-
src_path: Path, tar_path: Path
|
|
116
|
+
src_path: Path, tar_path: Path, dst_path: Path
|
|
95
117
|
) -> None:
|
|
96
118
|
"""Test we can use .fastapicloudignore to unignore files inside .gitignore"""
|
|
97
119
|
(src_path / "main.py").write_text("print('hello')")
|
|
@@ -109,12 +131,20 @@ def test_archive_respects_fastapicloudignore_unignore(
|
|
|
109
131
|
|
|
110
132
|
archive(src_path, tar_path)
|
|
111
133
|
|
|
112
|
-
with
|
|
113
|
-
|
|
114
|
-
assert set(names) == {"main.py", "static/build/style.css"}
|
|
134
|
+
with fastar.open(tar_path, "r") as tar:
|
|
135
|
+
tar.unpack(dst_path)
|
|
115
136
|
|
|
137
|
+
assert set(dst_path.glob("**/*")) == {
|
|
138
|
+
dst_path / "main.py",
|
|
139
|
+
dst_path / "static",
|
|
140
|
+
dst_path / "static" / "build",
|
|
141
|
+
dst_path / "static" / "build" / "style.css",
|
|
142
|
+
}
|
|
116
143
|
|
|
117
|
-
|
|
144
|
+
|
|
145
|
+
def test_archive_includes_hidden_files(
|
|
146
|
+
src_path: Path, tar_path: Path, dst_path: Path
|
|
147
|
+
) -> None:
|
|
118
148
|
"""Should include hidden files in the archive by default."""
|
|
119
149
|
(src_path / "main.py").write_text("print('hello')")
|
|
120
150
|
(src_path / ".env").write_text("SECRET_KEY=xyz")
|
|
@@ -123,10 +153,12 @@ def test_archive_includes_hidden_files(src_path: Path, tar_path: Path) -> None:
|
|
|
123
153
|
|
|
124
154
|
archive(src_path, tar_path)
|
|
125
155
|
|
|
126
|
-
with
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
156
|
+
with fastar.open(tar_path, "r") as tar:
|
|
157
|
+
tar.unpack(dst_path)
|
|
158
|
+
|
|
159
|
+
assert set(dst_path.glob("**/*")) == {
|
|
160
|
+
dst_path / "main.py",
|
|
161
|
+
dst_path / ".env",
|
|
162
|
+
dst_path / ".config",
|
|
163
|
+
dst_path / ".config" / "settings.json",
|
|
164
|
+
}
|
|
@@ -211,20 +211,6 @@ def test_shows_waitlist_form_when_not_logged_in_longer_flow(
|
|
|
211
211
|
assert "Let's go! Thanks for your interest in FastAPI Cloud! 🚀" in result.output
|
|
212
212
|
|
|
213
213
|
|
|
214
|
-
def test_asks_to_setup_the_app(logged_in_cli: None, tmp_path: Path) -> None:
|
|
215
|
-
steps = [Keys.RIGHT_ARROW, Keys.ENTER]
|
|
216
|
-
|
|
217
|
-
with changing_dir(tmp_path), patch(
|
|
218
|
-
"rich_toolkit.container.getchar"
|
|
219
|
-
) as mock_getchar:
|
|
220
|
-
mock_getchar.side_effect = steps
|
|
221
|
-
|
|
222
|
-
result = runner.invoke(app, ["deploy"])
|
|
223
|
-
|
|
224
|
-
assert result.exit_code == 0
|
|
225
|
-
assert "Setup and deploy" in result.output
|
|
226
|
-
|
|
227
|
-
|
|
228
214
|
@pytest.mark.respx(base_url=settings.base_api_url)
|
|
229
215
|
def test_shows_error_when_trying_to_get_teams(
|
|
230
216
|
logged_in_cli: None, tmp_path: Path, respx_mock: respx.MockRouter
|
|
@@ -323,7 +309,7 @@ def test_asks_for_app_name_after_team(
|
|
|
323
309
|
def test_creates_app_on_backend(
|
|
324
310
|
logged_in_cli: None, tmp_path: Path, respx_mock: respx.MockRouter
|
|
325
311
|
) -> None:
|
|
326
|
-
steps = [Keys.ENTER, Keys.ENTER,
|
|
312
|
+
steps = [Keys.ENTER, Keys.ENTER, *"demo", Keys.ENTER]
|
|
327
313
|
|
|
328
314
|
team = _get_random_team()
|
|
329
315
|
|
|
@@ -354,7 +340,7 @@ def test_creates_app_on_backend(
|
|
|
354
340
|
def test_uses_existing_app(
|
|
355
341
|
logged_in_cli: None, tmp_path: Path, respx_mock: respx.MockRouter
|
|
356
342
|
) -> None:
|
|
357
|
-
steps = [Keys.ENTER, Keys.
|
|
343
|
+
steps = [Keys.ENTER, Keys.RIGHT_ARROW, Keys.ENTER, *"demo", Keys.ENTER]
|
|
358
344
|
|
|
359
345
|
team = _get_random_team()
|
|
360
346
|
|
|
@@ -384,7 +370,6 @@ def test_exits_successfully_when_deployment_is_done(
|
|
|
384
370
|
logged_in_cli: None, tmp_path: Path, respx_mock: respx.MockRouter
|
|
385
371
|
) -> None:
|
|
386
372
|
steps = [
|
|
387
|
-
Keys.ENTER,
|
|
388
373
|
Keys.ENTER,
|
|
389
374
|
Keys.ENTER,
|
|
390
375
|
*"demo",
|
|
@@ -634,7 +619,6 @@ def test_shows_error_when_app_does_not_exist(
|
|
|
634
619
|
|
|
635
620
|
def _deploy_without_waiting(respx_mock: respx.MockRouter, tmp_path: Path) -> Result:
|
|
636
621
|
steps = [
|
|
637
|
-
Keys.ENTER,
|
|
638
622
|
Keys.ENTER,
|
|
639
623
|
Keys.ENTER,
|
|
640
624
|
*"demo",
|
|
@@ -759,7 +743,6 @@ def test_shows_no_apps_found_message_when_team_has_no_apps(
|
|
|
759
743
|
logged_in_cli: None, tmp_path: Path, respx_mock: respx.MockRouter
|
|
760
744
|
) -> None:
|
|
761
745
|
steps = [
|
|
762
|
-
Keys.ENTER, # Setup and deploy
|
|
763
746
|
Keys.ENTER, # Select team
|
|
764
747
|
Keys.RIGHT_ARROW, # Choose existing app (No)
|
|
765
748
|
Keys.ENTER,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.5.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/logout.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/unlink.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/commands/whoami.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/src/fastapi_cloud_cli/utils/pydantic_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/broken_package/mod/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_api/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_app/app.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/app.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.5.2 → fastapi_cloud_cli-0.6.0}/tests/assets/default_files/default_main/main.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|