Skip to content

Commit 9e585d8

Browse files
committed
Merge branch 'release/4.0.2'
2 parents 89d4b73 + 7fe47e8 commit 9e585d8

4 files changed

Lines changed: 54 additions & 32 deletions

File tree

fastapi_template/input_model.py

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44
from pydantic import BaseModel
55
import click
66
import abc
7-
from simple_term_menu import TerminalMenu
87
from collections import UserDict
8+
from prompt_toolkit.shortcuts import checkboxlist_dialog, radiolist_dialog
9+
10+
try:
11+
from simple_term_menu import TerminalMenu
12+
except Exception:
13+
TerminalMenu = None
914

1015

1116
class Database(BaseModel):
@@ -50,6 +55,7 @@ def generated_name(self) -> str:
5055
class BaseMenuModel(BaseModel, abc.ABC):
5156
title: str
5257
entries: list[MenuEntry]
58+
description: str = ""
5359

5460
def _preview(self, current_value: str):
5561

@@ -122,20 +128,31 @@ def ask(self, context: "BuilderContext") -> Optional["BuilderContext"]:
122128
available_entries.append(entry)
123129
elif not entry.is_hidden(context):
124130
available_entries.append(entry)
125-
126-
menu = TerminalMenu(
127-
title=self.title,
128-
menu_entries=[entry.user_view for entry in available_entries],
129-
multi_select=False,
130-
preview_title="Description",
131-
preview_command=self._preview,
132-
preview_size=0.5,
133-
)
134-
idx = menu.show()
135-
if idx is None:
136-
return None
137-
138-
chosen_entry = available_entries[idx]
131+
if TerminalMenu is not None:
132+
menu = TerminalMenu(
133+
title=self.title,
134+
menu_entries=[entry.user_view for entry in available_entries],
135+
multi_select=False,
136+
preview_title="Description",
137+
preview_command=self._preview,
138+
preview_size=0.5,
139+
)
140+
idx = menu.show()
141+
if idx is None:
142+
return None
143+
144+
chosen_entry = available_entries[idx]
145+
else:
146+
chosen_entry = (
147+
radiolist_dialog(
148+
title=self.title,
149+
text=self.description,
150+
values=[
151+
(entry, entry.user_view) for entry in available_entries
152+
],
153+
).run()
154+
or SKIP_ENTRY
155+
)
139156

140157
if chosen_entry == SKIP_ENTRY:
141158
return
@@ -190,22 +207,29 @@ def ask(self, context: "BuilderContext") -> Optional["BuilderContext"]:
190207
elif not entry.is_hidden(context):
191208
visible_entries.append(entry)
192209

193-
menu = TerminalMenu(
194-
title=self.title,
195-
menu_entries=[entry.user_view for entry in visible_entries],
196-
multi_select=True,
197-
preview_title="Description",
198-
preview_command=self._preview,
199-
)
210+
if TerminalMenu is not None:
211+
menu = TerminalMenu(
212+
title=self.title,
213+
menu_entries=[entry.user_view for entry in visible_entries],
214+
multi_select=True,
215+
preview_title="Description",
216+
preview_command=self._preview,
217+
)
200218

201-
idxs = menu.show()
219+
idxs = menu.show()
202220

203-
if idxs is None:
204-
return None
221+
if idxs is None:
222+
return None
205223

206-
chosen_entries = []
207-
for idx in idxs:
208-
chosen_entries.append(visible_entries[idx])
224+
chosen_entries = []
225+
for idx in idxs:
226+
chosen_entries.append(visible_entries[idx])
227+
else:
228+
chosen_entries = checkboxlist_dialog(
229+
title=self.title,
230+
text=self.description,
231+
values=[(entry, entry.user_view) for entry in visible_entries],
232+
).run() or [SKIP_ENTRY]
209233

210234
if chosen_entries == [SKIP_ENTRY]:
211235
return context
@@ -232,5 +256,5 @@ def __getattr__(self, name: str) -> Any:
232256
def __setattr__(self, name: str, value: Any) -> None:
233257
self[name] = value
234258

235-
def dict(self) -> str:
259+
def dict(self) -> dict[str, Any]:
236260
return self.__dict__["data"]

fastapi_template/template/{{cookiecutter.project_name}}/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ By default it runs:
126126
* mypy (validates types);
127127
* isort (sorts imports in all files);
128128
* flake8 (spots possibe bugs);
129-
* yesqa (removes useless `# noqa` comments).
130129
131130
132131
You can read more about pre-commit here: https://pre-commit.com/

fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ pytest = "^7.1.3"
125125
flake8 = "~4.0.1"
126126
mypy = "^0.981"
127127
isort = "^5.10.1"
128-
yesqa = "^1.4.0"
129128
pre-commit = "^2.20.0"
130129
wemake-python-styleguide = "^0.17.0"
131130
black = "^22.8.0"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "fastapi_template"
3-
version = "4.0.1"
3+
version = "4.0.2"
44
description = "Feature-rich robust FastAPI template"
55
authors = ["Pavel Kirilin <win10@list.ru>"]
66
packages = [{ include = "fastapi_template" }]

0 commit comments

Comments
 (0)