Skip to content

Commit 03b5cca

Browse files
author
Michael "M3" Lasevich
committed
Merge the changes from PR over latest code
1 parent da44007 commit 03b5cca

File tree

4 files changed

+9
-83
lines changed

4 files changed

+9
-83
lines changed

src/fastapi_cli/cli.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22
import logging
33
import sys
4-
54
from pathlib import Path
65
from typing import Any, List, Union
76

@@ -10,7 +9,7 @@
109
from rich.tree import Tree
1110
from typing_extensions import Annotated
1211

13-
from fastapi_cli.discover import get_app, get_import_string, get_import_data
12+
from fastapi_cli.discover import get_app, get_import_data
1413
from fastapi_cli.exceptions import FastAPICLIException
1514

1615
from . import __version__

src/fastapi_cli/discover.py

Lines changed: 5 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from dataclasses import dataclass
55
from logging import getLogger
66
from pathlib import Path
7-
from typing import Iterator, List, Tuple, Union
7+
from typing import Iterator, List, Union
88

99
from fastapi_cli.exceptions import FastAPICLIException
1010

@@ -116,8 +116,6 @@ def get_app_name(*, mod_data: ModuleData, app_name: Union[str, None] = None) ->
116116
raise FastAPICLIException("Could not find FastAPI app in module, try using --app")
117117

118118

119-
# TODO: fix get_import_data vs get_import_string
120-
121119
@dataclass
122120
class ImportData:
123121
app_name: str
@@ -126,7 +124,7 @@ class ImportData:
126124

127125

128126
def get_import_data(
129-
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
127+
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
130128
) -> ImportData:
131129
if not path:
132130
path = get_default_path()
@@ -146,82 +144,13 @@ def get_import_data(
146144
app_name=use_app_name, module_data=mod_data, import_string=import_string
147145
)
148146

149-
def get_import_string(
150-
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
151-
) -> str:
152-
if not path:
153-
path = get_default_path()
154-
155-
logger.debug(f"Using path [blue]{path}[/blue]")
156-
logger.debug(f"Resolved absolute path {path.resolve()}")
157-
158-
if not path.exists():
159-
raise FastAPICLIException(f"Path does not exist {path}")
160-
mod_data = get_module_data_from_path(path)
161-
sys.path.insert(0, str(mod_data.extra_sys_path))
162-
use_app_name = get_app_name(mod_data=mod_data, app_name=app_name)
163-
import_example = Syntax(
164-
f"from {mod_data.module_import_str} import {use_app_name}", "python"
165-
)
166-
import_panel = Padding(
167-
Panel(
168-
import_example,
169-
title="[b green]Importable FastAPI app[/b green]",
170-
expand=False,
171-
padding=(1, 2),
172-
),
173-
1,
174-
)
175-
logger.info("Found importable FastAPI app")
176-
print(import_panel)
177-
import_string = f"{mod_data.module_import_str}:{use_app_name}"
178-
logger.info(f"Using import string [b green]{import_string}[/b green]")
179-
return import_string
180-
181-
def get_import_string_parts(
182-
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
183-
) -> Tuple[ModuleData, str]:
184-
if not path:
185-
path = get_default_path()
186-
logger.info(f"Using path [blue]{path}[/blue]")
187-
logger.info(f"Resolved absolute path {path.resolve()}")
188-
if not path.exists():
189-
raise FastAPICLIException(f"Path does not exist {path}")
190-
mod_data = get_module_data_from_path(path)
191-
sys.path.insert(0, str(mod_data.extra_sys_path))
192-
use_app_name = get_app_name(mod_data=mod_data, app_name=app_name)
193-
194-
return mod_data, use_app_name
195-
196-
197-
def get_import_string(
198-
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
199-
) -> str:
200-
mod_data, use_app_name = get_import_string_parts(path=path, app_name=app_name)
201-
import_string = f"{mod_data.module_import_str}:{use_app_name}"
202-
import_example = Syntax(
203-
f"from {mod_data.module_import_str} import {use_app_name}", "python"
204-
)
205-
import_panel = Padding(
206-
Panel(
207-
import_example,
208-
title="[b green]Importable FastAPI app[/b green]",
209-
expand=False,
210-
padding=(1, 2),
211-
),
212-
1,
213-
)
214-
logger.info("Found importable FastAPI app")
215-
print(import_panel)
216-
217-
logger.info(f"Using import string [b green]{import_string}[/b green]")
218-
return import_string
219-
220147

221148
def get_app(
222149
*, path: Union[Path, None] = None, app_name: Union[str, None] = None
223150
) -> FastAPI:
224-
mod_data, use_app_name = get_import_string_parts(path=path, app_name=app_name)
151+
"""Get the FastAPI app instance from the given path and app name."""
152+
import_data: ImportData = get_import_data(path=path, app_name=app_name)
153+
mod_data, use_app_name = import_data.module_data, import_data.app_name
225154
with mod_data.sys_path():
226155
mod = importlib.import_module(mod_data.module_import_str)
227156
app = getattr(mod, use_app_name)

tests/test_cli.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
from unittest.mock import patch
66

77
import uvicorn
8-
from fastapi_cli.cli import app
9-
# from fastapi_cli.exceptions import FastAPICLIException
10-
118
from typer.testing import CliRunner
129

1310
from fastapi_cli.cli import app
11+
from fastapi_cli.exceptions import FastAPICLIException
1412
from fastapi_cli.utils.cli import get_uvicorn_log_config
1513
from tests.utils import changing_dir
1614

tests/test_utils_package.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import pytest
44
from pytest import CaptureFixture
5-
from fastapi_cli.discover import get_app, get_import_string
6-
from fastapi_cli.discover import get_import_data
5+
6+
from fastapi_cli.discover import get_app, get_import_data
77
from fastapi_cli.exceptions import FastAPICLIException
88
from tests.utils import changing_dir
99

0 commit comments

Comments
 (0)