|
2 | 2 |
|
3 | 3 | from __future__ import annotations |
4 | 4 |
|
5 | | -from _collections_abc import dict_items, dict_keys |
6 | | -from collections.abc import Iterator, Mapping, MutableMapping |
| 5 | +from collections.abc import Iterator, MutableMapping |
7 | 6 | from datetime import datetime |
8 | 7 | from decimal import Decimal |
9 | 8 | from enum import Enum |
10 | | -from typing import Annotated, Any, cast, overload |
| 9 | +from typing import Annotated, Any, cast |
11 | 10 |
|
12 | 11 | from pydantic import ( |
13 | 12 | BaseModel, |
|
17 | 16 | JsonValue, |
18 | 17 | PlainSerializer, |
19 | 18 | PlainValidator, |
20 | | - RootModel, |
21 | 19 | TypeAdapter, |
22 | 20 | ) |
23 | 21 | from typing_extensions import Self |
24 | 22 |
|
25 | | -from crawlee._types import EnqueueStrategy, HttpMethod, HttpPayload, HttpQueryParams |
| 23 | +from crawlee._types import EnqueueStrategy, HttpHeaders, HttpMethod, HttpPayload, HttpQueryParams |
26 | 24 | from crawlee._utils.requests import compute_unique_key, unique_key_to_request_id |
27 | 25 | from crawlee._utils.urls import extract_query_params, validate_http_url |
28 | 26 |
|
@@ -98,73 +96,6 @@ def __len__(self) -> int: |
98 | 96 | user_data_adapter = TypeAdapter(UserData) |
99 | 97 |
|
100 | 98 |
|
101 | | -class HttpHeaders(RootModel): |
102 | | - """An immutable mapping for HTTP headers that ensures case-insensitivity for header names.""" |
103 | | - |
104 | | - def __init__(self, headers: Mapping[str, str] | None = None) -> None: |
105 | | - """Create a new instance. |
106 | | -
|
107 | | - Args: |
108 | | - headers: A mapping of header names to values. |
109 | | - """ |
110 | | - # Ensure immutability by sorting and fixing the order. |
111 | | - headers = headers or {} |
112 | | - headers = {k.lower(): v for k, v in headers.items()} |
113 | | - self._headers = dict(sorted(headers.items())) |
114 | | - |
115 | | - @property |
116 | | - def __dict__(self) -> dict[str, str]: |
117 | | - """Return the headers as a dictionary.""" |
118 | | - # We have to implement this because of `BaseModel.__iter__` implementation. |
119 | | - return dict(self._headers) |
120 | | - |
121 | | - @__dict__.setter |
122 | | - def __dict__(self, value: dict[str, str]) -> None: |
123 | | - """Set the headers from a dictionary.""" |
124 | | - self._headers = {k.lower(): v for k, v in value.items()} |
125 | | - |
126 | | - def __len__(self) -> int: |
127 | | - """Return the number of headers.""" |
128 | | - return len(self._headers) |
129 | | - |
130 | | - def __repr__(self) -> str: |
131 | | - """Return a string representation of the object.""" |
132 | | - return f'{self.__class__.__name__}({self._headers})' |
133 | | - |
134 | | - def __getitem__(self, key: str) -> str: |
135 | | - """Get the value of a header by its name, case-insensitive.""" |
136 | | - return self._headers[key.lower()] |
137 | | - |
138 | | - def __setitem__(self, key: str, value: str) -> None: |
139 | | - """Prevent setting a header, as the object is immutable.""" |
140 | | - raise TypeError(f'{self.__class__.__name__} is immutable') |
141 | | - |
142 | | - def __delitem__(self, key: str) -> None: |
143 | | - """Prevent deleting a header, as the object is immutable.""" |
144 | | - raise TypeError(f'{self.__class__.__name__} is immutable') |
145 | | - |
146 | | - def keys(self) -> dict_keys[str, str]: |
147 | | - """Return an iterator over the header names.""" |
148 | | - return self._headers.keys() |
149 | | - |
150 | | - def items(self) -> dict_items[str, str]: |
151 | | - """Return an iterator over the header names and values.""" |
152 | | - return self._headers.items() |
153 | | - |
154 | | - @overload |
155 | | - def get(self, key: str) -> str | None: ... |
156 | | - |
157 | | - @overload |
158 | | - def get(self, key: str, default: str) -> str: ... |
159 | | - |
160 | | - @overload |
161 | | - def get(self, key: str, default: None) -> None: ... |
162 | | - |
163 | | - def get(self, key: str, default: str | None = None) -> str | None: |
164 | | - """Returns the value of the header if it exists, otherwise returns the default.""" |
165 | | - return self._headers.get(key, default) |
166 | | - |
167 | | - |
168 | 99 | class BaseRequestData(BaseModel): |
169 | 100 | """Data needed to create a new crawling request.""" |
170 | 101 |
|
|
0 commit comments