Add type annotations to request_tab_widget.py

This commit is contained in:
vesp 2026-01-05 11:33:12 +01:00
parent 30872b4697
commit b17393432c

View File

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