fastapi-cloud-cli 0.1.2__tar.gz → 0.1.5__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.1.2 → fastapi_cloud_cli-0.1.5}/PKG-INFO +1 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/pyproject.toml +1 -1
- fastapi_cloud_cli-0.1.5/src/fastapi_cloud_cli/__init__.py +1 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/deploy.py +27 -30
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/login.py +5 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/config.py +3 -2
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/api.py +4 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_cli_deploy.py +2 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_cli_login.py +2 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_cli_whoami.py +2 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_env_delete.py +2 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_env_list.py +2 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_env_set.py +2 -1
- fastapi_cloud_cli-0.1.2/src/fastapi_cloud_cli/__init__.py +0 -1
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/LICENSE +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/README.md +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/requirements-tests.txt +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/requirements.txt +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/scripts/format.sh +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/scripts/lint.sh +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/scripts/test-cov-html.sh +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/scripts/test.sh +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/__main__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/cli.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/env.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/logout.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/whoami.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/logging.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/py.typed +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/apps.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/auth.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/cli.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/config.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/env.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/utils/sentry.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/broken_package/mod/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/broken_package/mod/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/broken_package/utils.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_api/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_main/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_main/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_main/main.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/non_default/nonstandard.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/core/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/core/utils.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/mod/__init__.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/mod/api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/mod/app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/package/mod/other.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/single_file_api.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/single_file_app.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/single_file_other.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/conftest.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_cli.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_cli_logout.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_config.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_deploy_utils.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/test_sentry.py +0 -0
- {fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.5"
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/deploy.py
RENAMED
|
@@ -345,42 +345,43 @@ def _wait_for_deployment(
|
|
|
345
345
|
with toolkit.progress(
|
|
346
346
|
next(messages), inline_logs=True, lines_to_show=20
|
|
347
347
|
) as progress:
|
|
348
|
-
|
|
349
|
-
|
|
348
|
+
with handle_http_errors(progress=progress):
|
|
349
|
+
for line in _stream_build_logs(deployment.id):
|
|
350
|
+
time_elapsed = time.monotonic() - started_at
|
|
350
351
|
|
|
351
|
-
|
|
352
|
+
data = json.loads(line)
|
|
352
353
|
|
|
353
|
-
|
|
354
|
-
|
|
354
|
+
if "message" in data:
|
|
355
|
+
progress.log(Text.from_ansi(data["message"].rstrip()))
|
|
355
356
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
357
|
+
if data.get("type") == "complete":
|
|
358
|
+
progress.log("")
|
|
359
|
+
progress.log(
|
|
360
|
+
f"🐔 Ready the chicken! Your app is ready at [link={deployment.url}]{deployment.url}[/link]"
|
|
361
|
+
)
|
|
361
362
|
|
|
362
|
-
|
|
363
|
+
progress.log("")
|
|
363
364
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
progress.log(
|
|
366
|
+
f"You can also check the app logs at [link={deployment.dashboard_url}]{deployment.dashboard_url}[/link]"
|
|
367
|
+
)
|
|
367
368
|
|
|
368
|
-
|
|
369
|
+
break
|
|
369
370
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
371
|
+
if data.get("type") == "failed":
|
|
372
|
+
progress.log("")
|
|
373
|
+
progress.log(
|
|
374
|
+
f"😔 Oh no! Something went wrong. Check out the logs at [link={deployment.dashboard_url}]{deployment.dashboard_url}[/link]"
|
|
375
|
+
)
|
|
376
|
+
raise typer.Exit(1)
|
|
376
377
|
|
|
377
|
-
|
|
378
|
-
|
|
378
|
+
if time_elapsed > 30:
|
|
379
|
+
messages = cycle(LONG_WAIT_MESSAGES) # pragma: no cover
|
|
379
380
|
|
|
380
|
-
|
|
381
|
-
|
|
381
|
+
if (time.monotonic() - last_message_changed_at) > 2:
|
|
382
|
+
progress.title = next(messages) # pragma: no cover
|
|
382
383
|
|
|
383
|
-
|
|
384
|
+
last_message_changed_at = time.monotonic() # pragma: no cover
|
|
384
385
|
|
|
385
386
|
|
|
386
387
|
def _setup_environment_variables(toolkit: RichToolkit, app_id: str) -> None:
|
|
@@ -529,10 +530,6 @@ def _waitlist_form(toolkit: RichToolkit) -> None:
|
|
|
529
530
|
check=False,
|
|
530
531
|
)
|
|
531
532
|
|
|
532
|
-
toolkit.print_line()
|
|
533
|
-
|
|
534
|
-
toolkit.print("Thank you for your interest in FastAPI Cloud! 🚀")
|
|
535
|
-
|
|
536
533
|
|
|
537
534
|
def deploy(
|
|
538
535
|
path: Annotated[
|
|
@@ -6,7 +6,7 @@ import httpx
|
|
|
6
6
|
import typer
|
|
7
7
|
from pydantic import BaseModel
|
|
8
8
|
|
|
9
|
-
from fastapi_cloud_cli.config import
|
|
9
|
+
from fastapi_cloud_cli.config import Settings
|
|
10
10
|
from fastapi_cloud_cli.utils.api import APIClient
|
|
11
11
|
from fastapi_cloud_cli.utils.auth import AuthConfig, write_auth_config
|
|
12
12
|
from fastapi_cloud_cli.utils.cli import get_rich_toolkit, handle_http_errors
|
|
@@ -29,6 +29,8 @@ class TokenResponse(BaseModel):
|
|
|
29
29
|
def _start_device_authorization(
|
|
30
30
|
client: httpx.Client,
|
|
31
31
|
) -> AuthorizationData:
|
|
32
|
+
settings = Settings.get()
|
|
33
|
+
|
|
32
34
|
response = client.post(
|
|
33
35
|
"/login/device/authorization", data={"client_id": settings.client_id}
|
|
34
36
|
)
|
|
@@ -39,6 +41,8 @@ def _start_device_authorization(
|
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
def _fetch_access_token(client: httpx.Client, device_code: str, interval: int) -> str:
|
|
44
|
+
settings = Settings.get()
|
|
45
|
+
|
|
42
46
|
while True:
|
|
43
47
|
response = client.post(
|
|
44
48
|
"/login/device/token",
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import httpx
|
|
2
2
|
|
|
3
3
|
from fastapi_cloud_cli import __version__
|
|
4
|
-
from fastapi_cloud_cli.config import
|
|
4
|
+
from fastapi_cloud_cli.config import Settings
|
|
5
5
|
from fastapi_cloud_cli.utils.auth import get_auth_token
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class APIClient(httpx.Client):
|
|
9
9
|
def __init__(self) -> None:
|
|
10
|
+
settings = Settings.get()
|
|
11
|
+
|
|
10
12
|
token = get_auth_token()
|
|
11
13
|
|
|
12
14
|
super().__init__(
|
|
13
15
|
base_url=settings.base_api_url,
|
|
16
|
+
timeout=httpx.Timeout(20),
|
|
14
17
|
headers={
|
|
15
18
|
"Authorization": f"Bearer {token}",
|
|
16
19
|
"User-Agent": f"fastapi-cloud-cli/{__version__}",
|
|
@@ -11,11 +11,12 @@ from httpx import Response
|
|
|
11
11
|
from typer.testing import CliRunner
|
|
12
12
|
|
|
13
13
|
from fastapi_cloud_cli.cli import app
|
|
14
|
-
from fastapi_cloud_cli.config import
|
|
14
|
+
from fastapi_cloud_cli.config import Settings
|
|
15
15
|
from tests.conftest import ConfiguredApp
|
|
16
16
|
from tests.utils import Keys, changing_dir
|
|
17
17
|
|
|
18
18
|
runner = CliRunner()
|
|
19
|
+
settings = Settings.get()
|
|
19
20
|
|
|
20
21
|
assets_path = Path(__file__).parent / "assets"
|
|
21
22
|
|
|
@@ -8,9 +8,10 @@ from httpx import Response
|
|
|
8
8
|
from typer.testing import CliRunner
|
|
9
9
|
|
|
10
10
|
from fastapi_cloud_cli.cli import app
|
|
11
|
-
from fastapi_cloud_cli.config import
|
|
11
|
+
from fastapi_cloud_cli.config import Settings
|
|
12
12
|
|
|
13
13
|
runner = CliRunner()
|
|
14
|
+
settings = Settings.get()
|
|
14
15
|
|
|
15
16
|
assets_path = Path(__file__).parent / "assets"
|
|
16
17
|
|
|
@@ -6,9 +6,10 @@ from httpx import ReadTimeout, Response
|
|
|
6
6
|
from typer.testing import CliRunner
|
|
7
7
|
|
|
8
8
|
from fastapi_cloud_cli.cli import app
|
|
9
|
-
from fastapi_cloud_cli.config import
|
|
9
|
+
from fastapi_cloud_cli.config import Settings
|
|
10
10
|
|
|
11
11
|
runner = CliRunner()
|
|
12
|
+
settings = Settings.get()
|
|
12
13
|
|
|
13
14
|
assets_path = Path(__file__).parent / "assets"
|
|
14
15
|
|
|
@@ -7,10 +7,11 @@ from httpx import Response
|
|
|
7
7
|
from typer.testing import CliRunner
|
|
8
8
|
|
|
9
9
|
from fastapi_cloud_cli.cli import app
|
|
10
|
-
from fastapi_cloud_cli.config import
|
|
10
|
+
from fastapi_cloud_cli.config import Settings
|
|
11
11
|
from tests.utils import Keys, changing_dir
|
|
12
12
|
|
|
13
13
|
runner = CliRunner()
|
|
14
|
+
settings = Settings.get()
|
|
14
15
|
|
|
15
16
|
assets_path = Path(__file__).parent / "assets"
|
|
16
17
|
|
|
@@ -6,11 +6,12 @@ from httpx import Response
|
|
|
6
6
|
from typer.testing import CliRunner
|
|
7
7
|
|
|
8
8
|
from fastapi_cloud_cli.cli import app
|
|
9
|
-
from fastapi_cloud_cli.config import
|
|
9
|
+
from fastapi_cloud_cli.config import Settings
|
|
10
10
|
from tests.conftest import ConfiguredApp
|
|
11
11
|
from tests.utils import changing_dir
|
|
12
12
|
|
|
13
13
|
runner = CliRunner()
|
|
14
|
+
settings = Settings.get()
|
|
14
15
|
|
|
15
16
|
assets_path = Path(__file__).parent / "assets"
|
|
16
17
|
|
|
@@ -7,10 +7,11 @@ from httpx import Response
|
|
|
7
7
|
from typer.testing import CliRunner
|
|
8
8
|
|
|
9
9
|
from fastapi_cloud_cli.cli import app
|
|
10
|
-
from fastapi_cloud_cli.config import
|
|
10
|
+
from fastapi_cloud_cli.config import Settings
|
|
11
11
|
from tests.utils import Keys, changing_dir
|
|
12
12
|
|
|
13
13
|
runner = CliRunner()
|
|
14
|
+
settings = Settings.get()
|
|
14
15
|
|
|
15
16
|
assets_path = Path(__file__).parent / "assets"
|
|
16
17
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.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
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/src/fastapi_cloud_cli/commands/logout.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/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.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/broken_package/mod/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_api/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_app/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/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.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_main/api.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/tests/assets/default_files/default_main/app.py
RENAMED
|
File without changes
|
{fastapi_cloud_cli-0.1.2 → fastapi_cloud_cli-0.1.5}/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
|