📝 Add docstrings to `staging`

Docstrings generation was requested by @gmbrax.

* https://github.com/gmbrax/Pilgrim/pull/48#issuecomment-3076555726

The following files were modified:

* `src/pilgrim/ui/screens/diary_list_screen.py`
* `src/pilgrim/ui/screens/edit_diary_modal.py`
* `src/pilgrim/ui/screens/new_diary_modal.py`
This commit is contained in:
coderabbitai[bot] 2025-07-16 03:06:05 +00:00 committed by GitHub
parent 1beeb39b95
commit 335d06bca1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 71 additions and 5 deletions

View File

@ -203,11 +203,17 @@ class DiaryListScreen(Screen):
self.action_open_diary()
def action_new_diary(self):
"""Action to create new diary"""
"""
Opens the modal dialog to create a new diary and registers a callback for submission.
"""
self.app.push_screen(NewDiaryModal(),self._on_new_diary_submitted)
def _on_new_diary_submitted(self, result):
"""Callback after diary creation"""
"""
Handles the callback after a new diary is submitted.
If a diary was created (non-empty result), notifies the user and refreshes the diary list; otherwise, notifies that creation was canceled.
"""
if result: # Se result não é string vazia, o diário foi criado
self.notify(f"Returning to diary list...")
# Atualiza a lista de diários
@ -216,10 +222,17 @@ class DiaryListScreen(Screen):
self.notify(f"Creation canceled...")
def _on_screen_resume(self) -> None:
"""
Refreshes the diary list when the screen resumes.
"""
self.refresh_diaries()
def action_edit_selected_diary(self):
"""Action to edit selected diary"""
"""
Opens the edit dialog for the currently selected diary.
If a diary is selected, displays the edit modal and registers a callback for when the edit is submitted. Notifies the user if no diary is selected.
"""
if self.selected_diary_index is not None:
diary_id = self.diary_id_map.get(self.selected_diary_index)
if diary_id:

View File

@ -12,6 +12,9 @@ class EditDiaryModal(ModalScreen[tuple[int,str]]):
]
def __init__(self, diary_id: int):
"""
Initialize the EditDiaryModal with the specified diary ID, pre-filling the input field with the current diary name.
"""
super().__init__()
self.diary_id = diary_id
self.current_diary_name = self.app.service_manager.get_travel_diary_service().read_by_id(self.diary_id).name
@ -32,16 +35,29 @@ class EditDiaryModal(ModalScreen[tuple[int,str]]):
self.name_input.cursor_position = len(self.name_input.value)
def on_button_pressed(self, event: Button.Pressed) -> None:
"""
Handle button press events in the modal.
Triggers the save action if the "Save" button is pressed, or cancels and dismisses the modal if the "Cancel" button is pressed.
"""
if event.button.id == "save_diary_button":
self.action_edit_diary()
elif event.button.id == "cancel_button":
self.dismiss(None)
def on_key(self, event):
"""
Handles the Enter key press event by triggering the diary save action and preventing the default behavior.
"""
if event.key == "enter":
self.action_edit_diary()
event.prevent_default()
def action_edit_diary(self) -> None:
"""
Attempts to save the edited diary name, validating input and providing user feedback.
If the new name is non-empty and different from the current name, dismisses the modal and returns the diary ID and new name. If the name is unchanged, notifies the user and dismisses without changes. If the input is empty, notifies the user and refocuses the input field.
"""
new_diary_name = self.name_input.value.strip()
if new_diary_name and new_diary_name != self.current_diary_name:
self.dismiss((self.diary_id, new_diary_name))
@ -53,8 +69,14 @@ class EditDiaryModal(ModalScreen[tuple[int,str]]):
self.name_input.focus()
def on_input_submitted(self, event: Input.Submitted) -> None:
"""
Handles submission of the diary name input field by triggering the save action if the relevant input is submitted.
"""
if event.input.id == "edit_diary_name_input":
self.action_edit_diary()
def action_cancel(self) -> None:
"""
Dismisses the modal without saving changes or returning any data.
"""
self.dismiss(None)

View File

@ -13,12 +13,24 @@ class NewDiaryModal(ModalScreen[str]):
Binding("enter", "create_diary", "Create",priority=True),
]
def __init__(self,autoopen=True):
"""
Initialize the NewDiaryModal with optional automatic opening of the created diary.
Parameters:
autoopen (bool): If True, the newly created diary will open automatically after creation. Defaults to True.
"""
super().__init__()
self.auto_open = autoopen
self.name_input = Input(id="NewDiaryModal-NameInput",classes="NewDiaryModal-NameInput") # This ID is fine, it's specific to the input
def compose(self) -> ComposeResult:
"""
Constructs and yields the UI layout for the new diary modal dialog.
Returns:
ComposeResult: An iterable of widgets forming the modal, including title, input field, and action buttons.
"""
with Vertical(id="new_diary_dialog",classes="NewDiaryModal-Dialog"):
yield Label("Create a new diary", classes="NewDiaryModal-Title")
yield Label("Diary Name:")
@ -33,17 +45,28 @@ class NewDiaryModal(ModalScreen[str]):
self.name_input.focus()
def on_button_pressed(self, event: Button.Pressed) -> None:
"""Handles button clicks."""
"""
Handle button press events for the modal.
Triggers diary creation when the "Create" button is pressed, or dismisses the modal when the "Cancel" button is pressed.
"""
if event.button.id == "create_diary_button":
self.action_create_diary()
elif event.button.id == "cancel_button":
self.dismiss()
def action_cancel(self) -> None:
"""Action to cancel the modal."""
"""
Cancels the modal dialog and dismisses it without returning a diary name.
"""
self.dismiss("")
def action_create_diary(self) -> None:
"""
Validates the diary name input and initiates asynchronous diary creation if valid.
If the input is empty, displays a warning notification and refocuses the input field.
"""
diary_name = self.name_input.value.strip()
if diary_name:
@ -54,11 +77,19 @@ class NewDiaryModal(ModalScreen[str]):
self.name_input.focus()
def on_input_submitted(self, event: Input.Submitted) -> None:
"""
Handles submission of the diary name input field and initiates diary creation if triggered from the correct input.
"""
if event.input.id == "NewDiaryModal-NameInput":
self.action_create_diary()
async def _async_create_diary(self, name: str):
"""
Asynchronously creates a new diary entry with the given name and handles post-creation actions.
If creation succeeds, dismisses the modal with the diary name, optionally opens the diary for editing, and shows a success notification. If creation fails or an exception occurs, displays an error notification.
"""
try:
service = self.app.service_manager.get_travel_diary_service()
created_diary = await service.async_create(name)