{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "3d9cb929",
   "metadata": {},
   "source": [
    "# 22-08 · Analiza URL\n",
    "\n",
    "Praktyka do sekcji [„URL: domena, ścieżka, parametry i fragment”"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26287a32",
   "metadata": {},
   "source": [
    "## Cel\n",
    "\n",
    "Rozłóż URL z modułem urllib.parse ze standardowej biblioteki Python i upewnij się, że fragment nie dostanie się na ścieżkę i nie query."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87e18bce",
   "metadata": {},
   "source": [
    "## Sprawa robocza"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f304e9cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "from urllib.parse import urlparse, parse_qs\n",
    "\n",
    "url = \"https://example.com:443/products/42?sort=price&page=2#details\"\n",
    "razobrannyj = urlparse(url)\n",
    "\n",
    "print(\"схема:\", razobrannyj.scheme)\n",
    "print(\"хост:\", razobrannyj.hostname)\n",
    "print(\"порт:\", razobrannyj.port)\n",
    "print(\"путь:\", razobrannyj.path)\n",
    "print(\"query:\", razobrannyj.query)\n",
    "print(\"фрагмент:\", razobrannyj.fragment)\n",
    "print(\"параметры:\", parse_qs(razobrannyj.query))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99483720",
   "metadata": {},
   "source": [
    "## Sprawdzenie wyniku"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8063c7a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "assert razobrannyj.scheme == \"https\"\n",
    "assert razobrannyj.hostname == \"example.com\"\n",
    "assert razobrannyj.port == 443\n",
    "assert razobrannyj.path == \"/products/42\"\n",
    "assert razobrannyj.fragment == \"details\"\n",
    "assert parse_qs(razobrannyj.query) == {\"sort\": [\"price\"], \"page\": [\"2\"]}\n",
    "print(\"Верно: URL разобран по частям, фрагмент отдельно от query.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61938869",
   "metadata": {},
   "source": [
    "## Podstawowa praktyka zadań ★\n",
    "\n",
    "Rozbij adres `http://localhost:5000/api/tasks?done=0` i sprawdza, czy ścieżka jest równa `/api/tasks`, ale `done` równa się `[\"0\"]`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c1c0782a",
   "metadata": {},
   "outputs": [],
   "source": [
    "url2 = \"http://localhost:5000/api/tasks?done=0\"\n",
    "razobrannyj2 = urlparse(url2)\n",
    "parametry2 = parse_qs(razobrannyj2.query)\n",
    "\n",
    "assert razobrannyj2.path == \"/api/tasks\"\n",
    "assert parametry2[\"done\"] == [\"0\"]\n",
    "print(\"Верно: путь и параметр разобраны правильно.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
