diff --git a/src/request_tab_widget.py b/src/request_tab_widget.py index 00c3a4f..e418e45 100644 --- a/src/request_tab_widget.py +++ b/src/request_tab_widget.py @@ -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("")