Add type annotations to request_tab_widget.py

This commit is contained in:
Pavel Baksy 2026-01-05 11:33:12 +01:00
parent a8a372d83d
commit 90d66c2c73

View File

@ -20,6 +20,7 @@
import gi
gi.require_version('GtkSource', '5')
from gi.repository import Adw, Gtk, GLib, GtkSource, GObject
from typing import Optional, Set, Dict, List
from .models import HttpRequest, HttpResponse
from .widgets.header_row import HeaderRow
import json
@ -32,20 +33,20 @@ class RequestTabWidget(Gtk.Box):
def __init__(self, tab_id, request=None, response=None, project_id=None, selected_environment_id=None, scripts=None, **kwargs):
super().__init__(orientation=Gtk.Orientation.VERTICAL, **kwargs)
self.tab_id = tab_id
self.request = request or HttpRequest(method="GET", url="", headers={}, body="", syntax="RAW")
self.response = response
self.modified = False
self.original_request = None
self.tab_id: str = tab_id
self.request: HttpRequest = request or HttpRequest(method="GET", url="", headers={}, body="", syntax="RAW")
self.response: Optional[HttpResponse] = response
self.modified: bool = False
self.original_request: Optional[HttpRequest] = None
self.original_scripts = None
self.project_id = project_id
self.selected_environment_id = selected_environment_id
self.project_id: Optional[str] = project_id
self.selected_environment_id: Optional[str] = selected_environment_id
self.scripts = scripts
self.project_manager = None # Will be injected from window
self.environment_dropdown = None # Will be created if project_id is set
self.env_separator = None # Visual separator after environment dropdown
self.undefined_variables = set() # Track undefined variables for visual feedback
self._update_indicators_timeout_id = None # Debounce timer for indicator updates
self.environment_dropdown: Optional[Gtk.DropDown] = None
self.env_separator: Optional[Gtk.Separator] = None
self.undefined_variables: Set[str] = set()
self._update_indicators_timeout_id: Optional[int] = None
# Build the UI
self._build_ui()
@ -61,7 +62,7 @@ class RequestTabWidget(Gtk.Box):
# Setup change tracking
self._setup_change_tracking()
def _build_ui(self):
def _build_ui(self) -> None:
"""Build the complete UI for this tab."""
# URL Input Section - outer container (store as instance var for dynamic updates)
@ -366,7 +367,7 @@ class RequestTabWidget(Gtk.Box):
self.append(split_pane)
def _build_headers_tab(self):
def _build_headers_tab(self) -> None:
"""Build the headers tab."""
headers_scroll = Gtk.ScrolledWindow()
headers_scroll.set_vexpand(True)
@ -392,7 +393,7 @@ class RequestTabWidget(Gtk.Box):
# Add initial empty header row
self._add_header_row()
def _build_body_tab(self):
def _build_body_tab(self) -> None:
"""Build the body tab."""
body_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
@ -706,7 +707,7 @@ class RequestTabWidget(Gtk.Box):
self.headers_listbox.remove(parent)
self._on_request_changed(None)
def _setup_change_tracking(self):
def _setup_change_tracking(self) -> None:
"""Setup change tracking for this tab."""
self.url_entry.connect("changed", self._on_request_changed)
self.method_dropdown.connect("notify::selected", self._on_request_changed)
@ -745,7 +746,7 @@ class RequestTabWidget(Gtk.Box):
'modified-changed': (GObject.SignalFlags.RUN_FIRST, None, (bool,))
}
def _is_different_from_original(self, request):
def _is_different_from_original(self, request: HttpRequest) -> bool:
"""Check if current request differs from original."""
if not self.original_request:
return False
@ -776,7 +777,7 @@ class RequestTabWidget(Gtk.Box):
return request_changed or scripts_changed
def _load_request(self, request):
def _load_request(self, request: HttpRequest) -> None:
"""Load a request into this tab's UI."""
# Set method
methods = ["GET", "POST", "PUT", "DELETE"]
@ -805,7 +806,7 @@ class RequestTabWidget(Gtk.Box):
if request.syntax in syntax_options:
self.body_language_dropdown.set_selected(syntax_options.index(request.syntax))
def get_request(self):
def get_request(self) -> HttpRequest:
"""Build and return HttpRequest from current UI state."""
method = self.method_dropdown.get_selected_item().get_string()
url = self.url_entry.get_text().strip()
@ -868,7 +869,7 @@ class RequestTabWidget(Gtk.Box):
postprocessing_buffer = self.postprocessing_sourceview.get_buffer()
postprocessing_buffer.set_text(scripts.postprocessing)
def display_response(self, response):
def display_response(self, response: HttpResponse) -> None:
"""Display response in this tab's UI."""
self.response = response
@ -896,7 +897,7 @@ class RequestTabWidget(Gtk.Box):
language = self._get_language_from_content_type(content_type)
source_buffer.set_language(language)
def display_error(self, error):
def display_error(self, error: str) -> None:
"""Display error in this tab's UI."""
self.status_label.set_text("Error")
self.time_label.set_text("")