fastapi-cloud-cli 0.2.1__tar.gz → 0.3.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.
Files changed (79) hide show
  1. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/PKG-INFO +1 -1
  2. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/pyproject.toml +1 -1
  3. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/requirements-tests.txt +1 -1
  4. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/requirements.txt +1 -1
  5. fastapi_cloud_cli-0.3.0/src/fastapi_cloud_cli/__init__.py +1 -0
  6. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/deploy.py +5 -1
  7. fastapi_cloud_cli-0.3.0/tests/test_archive.py +81 -0
  8. fastapi_cloud_cli-0.2.1/src/fastapi_cloud_cli/__init__.py +0 -1
  9. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/LICENSE +0 -0
  10. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/README.md +0 -0
  11. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/scripts/format.sh +0 -0
  12. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/scripts/lint.sh +0 -0
  13. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/scripts/test-cov-html.sh +0 -0
  14. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/scripts/test.sh +0 -0
  15. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/__main__.py +0 -0
  16. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/cli.py +0 -0
  17. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/__init__.py +0 -0
  18. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/env.py +0 -0
  19. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/login.py +0 -0
  20. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/logout.py +0 -0
  21. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/unlink.py +0 -0
  22. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/commands/whoami.py +0 -0
  23. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/config.py +0 -0
  24. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/logging.py +0 -0
  25. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/py.typed +0 -0
  26. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/__init__.py +0 -0
  27. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/api.py +0 -0
  28. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/apps.py +0 -0
  29. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/auth.py +0 -0
  30. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/cli.py +0 -0
  31. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/config.py +0 -0
  32. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/env.py +0 -0
  33. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/src/fastapi_cloud_cli/utils/sentry.py +0 -0
  34. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/__init__.py +0 -0
  35. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/broken_package/mod/__init__.py +0 -0
  36. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/broken_package/mod/app.py +0 -0
  37. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/broken_package/utils.py +0 -0
  38. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_api/api.py +0 -0
  39. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app/api.py +0 -0
  40. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app/app.py +0 -0
  41. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
  42. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
  43. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
  44. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
  45. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
  46. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
  47. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
  48. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
  49. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
  50. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
  51. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
  52. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_main/api.py +0 -0
  53. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_main/app.py +0 -0
  54. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/default_main/main.py +0 -0
  55. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/default_files/non_default/nonstandard.py +0 -0
  56. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/__init__.py +0 -0
  57. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/core/__init__.py +0 -0
  58. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/core/utils.py +0 -0
  59. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/mod/__init__.py +0 -0
  60. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/mod/api.py +0 -0
  61. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/mod/app.py +0 -0
  62. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/package/mod/other.py +0 -0
  63. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/single_file_api.py +0 -0
  64. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/single_file_app.py +0 -0
  65. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/assets/single_file_other.py +0 -0
  66. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/conftest.py +0 -0
  67. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli.py +0 -0
  68. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli_deploy.py +0 -0
  69. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli_login.py +0 -0
  70. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli_logout.py +0 -0
  71. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli_unlink.py +0 -0
  72. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_cli_whoami.py +0 -0
  73. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_config.py +0 -0
  74. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_deploy_utils.py +0 -0
  75. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_env_delete.py +0 -0
  76. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_env_list.py +0 -0
  77. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_env_set.py +0 -0
  78. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.0}/tests/test_sentry.py +0 -0
  79. {fastapi_cloud_cli-0.2.1 → fastapi_cloud_cli-0.3.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.2.1
3
+ Version: 0.3.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
@@ -40,7 +40,7 @@ dependencies = [
40
40
  "pydantic[email] >= 1.6.1",
41
41
  "sentry-sdk >= 2.20.0",
42
42
  ]
43
- version = "0.2.1"
43
+ version = "0.3.0"
44
44
 
45
45
  [project.license]
46
46
  text = "MIT"
@@ -3,5 +3,5 @@
3
3
  pytest >=4.4.0,<9.0.0
4
4
  coverage[toml] >=6.2,<8.0
5
5
  mypy ==1.14.1
6
- ruff ==0.12.0
6
+ ruff ==0.13.0
7
7
  respx ==0.22.0
@@ -2,4 +2,4 @@
2
2
 
3
3
  -r requirements-tests.txt
4
4
 
5
- pre-commit >=2.17.0,<4.0.0
5
+ pre-commit >=2.17.0,<5.0.0
@@ -0,0 +1 @@
1
+ __version__ = "0.3.0"
@@ -49,7 +49,11 @@ def _should_exclude_entry(path: Path) -> bool:
49
49
 
50
50
  def archive(path: Path) -> Path:
51
51
  logger.debug("Starting archive creation for path: %s", path)
52
- files = rignore.walk(path, should_exclude_entry=_should_exclude_entry)
52
+ files = rignore.walk(
53
+ path,
54
+ should_exclude_entry=_should_exclude_entry,
55
+ additional_ignore_paths=[".fastapicloudignore"],
56
+ )
53
57
 
54
58
  temp_dir = tempfile.mkdtemp()
55
59
  logger.debug("Created temp directory: %s", temp_dir)
@@ -0,0 +1,81 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ from fastapi_cloud_cli.commands.deploy import archive
5
+
6
+
7
+ def test_archive_creates_tar_file(tmp_path: Path) -> None:
8
+ (tmp_path / "main.py").write_text("print('hello')")
9
+ (tmp_path / "config.json").write_text('{"key": "value"}')
10
+ (tmp_path / "subdir").mkdir()
11
+ (tmp_path / "subdir" / "utils.py").write_text("def helper(): pass")
12
+
13
+ tar_path = archive(tmp_path)
14
+
15
+ assert tar_path.exists()
16
+ assert tar_path.suffix == ".tar"
17
+ assert tar_path.name.startswith("fastapi-cloud-deploy-")
18
+
19
+
20
+ def test_archive_excludes_venv_and_similar_folders(tmp_path: Path) -> None:
21
+ """Should exclude .venv directory from archive."""
22
+ # the only files we want to include
23
+ (tmp_path / "main.py").write_text("print('hello')")
24
+ (tmp_path / "static").mkdir()
25
+ (tmp_path / "static" / "index.html").write_text("<html></html>")
26
+ # virtualenv
27
+ (tmp_path / ".venv").mkdir()
28
+ (tmp_path / ".venv" / "lib").mkdir()
29
+ (tmp_path / ".venv" / "lib" / "package.py").write_text("# package")
30
+ # pycache
31
+ (tmp_path / "__pycache__").mkdir()
32
+ (tmp_path / "__pycache__" / "main.cpython-311.pyc").write_text("bytecode")
33
+ # pyc files
34
+ (tmp_path / "main.pyc").write_text("bytecode")
35
+ # mypy/pytest
36
+ (tmp_path / ".mypy_cache").mkdir()
37
+ (tmp_path / ".mypy_cache" / "file.json").write_text("{}")
38
+ (tmp_path / ".pytest_cache").mkdir()
39
+ (tmp_path / ".pytest_cache" / "cache.db").write_text("data")
40
+
41
+ tar_path = archive(tmp_path)
42
+
43
+ with tarfile.open(tar_path, "r") as tar:
44
+ names = tar.getnames()
45
+ assert set(names) == {"main.py", "static/index.html"}
46
+
47
+
48
+ def test_archive_preserves_relative_paths(tmp_path: Path) -> None:
49
+ (tmp_path / "src").mkdir()
50
+ (tmp_path / "src" / "app").mkdir()
51
+ (tmp_path / "src" / "app" / "main.py").write_text("print('hello')")
52
+
53
+ tar_path = archive(tmp_path)
54
+
55
+ with tarfile.open(tar_path, "r") as tar:
56
+ names = tar.getnames()
57
+ assert names == ["src/app/main.py"]
58
+
59
+
60
+ def test_archive_respects_fastapicloudignore(tmp_path: Path) -> None:
61
+ """Should exclude files specified in .fastapicloudignore."""
62
+ # Create test files
63
+ (tmp_path / "main.py").write_text("print('hello')")
64
+ (tmp_path / "config.py").write_text("CONFIG = 'value'")
65
+ (tmp_path / "secrets.env").write_text("SECRET_KEY=xyz")
66
+ (tmp_path / "data").mkdir()
67
+ (tmp_path / "data" / "file.txt").write_text("data")
68
+
69
+ # Create .fastapicloudignore file
70
+ (tmp_path / ".fastapicloudignore").write_text("secrets.env\ndata/\n")
71
+
72
+ # Create archive
73
+ tar_path = archive(tmp_path)
74
+
75
+ # Verify ignored files are excluded
76
+ with tarfile.open(tar_path, "r") as tar:
77
+ names = tar.getnames()
78
+ assert set(names) == {
79
+ "main.py",
80
+ "config.py",
81
+ }
@@ -1 +0,0 @@
1
- __version__ = "0.2.1"