Skip to content

Commit 6d67533

Browse files
Merge pull request #29 from thewebscraping/develop
Develop
2 parents f024ac7 + dce99d0 commit 6d67533

File tree

3 files changed

+49
-24
lines changed

3 files changed

+49
-24
lines changed

tls_requests/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
__url__ = "https://github.com/thewebscraping/tls-requests"
44
__author__ = "Tu Pham"
55
__author_email__ = "[email protected]"
6-
__version__ = "1.1.1"
6+
__version__ = "1.1.2"
77
__license__ = "MIT"

tls_requests/models/cookies.py

+33-19
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
from abc import ABC
77
from email.message import Message
88
from http import cookiejar as cookielib
9+
from http.cookiejar import Cookie
910
from http.cookies import Morsel
10-
from typing import TYPE_CHECKING, Iterator, MutableMapping
11+
from typing import TYPE_CHECKING, Iterator, MutableMapping, Optional
1112
from urllib.parse import urlparse, urlunparse
1213

1314
from tls_requests.exceptions import CookieConflictError
15+
from tls_requests.types import CookieTypes
1416

1517
if TYPE_CHECKING:
1618
from .request import Request
@@ -123,7 +125,8 @@ def get(self, name, default=None, domain=None, path=None):
123125
.. warning:: operation is O(n), not O(1).
124126
"""
125127
try:
126-
return self._find_no_duplicates(name, domain, path)
128+
value = self._find_no_duplicates(name, domain, path)
129+
return value
127130
except KeyError:
128131
return default
129132

@@ -332,7 +335,7 @@ def _find_no_duplicates(self, name, domain=None, path=None):
332335
# we will eventually return this as long as no cookie conflict
333336
toReturn = cookie.value
334337

335-
if toReturn:
338+
if toReturn is not None:
336339
return toReturn
337340
raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}")
338341

@@ -536,28 +539,42 @@ def _prepare_cookiejar(self, cookies: CookieTypes = None) -> RequestsCookieJar:
536539
if isinstance(cookies, self.__class__):
537540
return cookies.cookiejar
538541

539-
if isinstance(cookies, dict):
540-
return cookiejar_from_dict(cookies)
541-
542-
if isinstance(cookies, (tuple, list, set)):
542+
if isinstance(cookies, (dict, tuple, list, set)):
543543
cookiejar = RequestsCookieJar()
544+
if isinstance(cookies, dict):
545+
cookies = cookies.items()
546+
544547
for k, v in cookies:
545-
cookiejar.set(k, v)
548+
if isinstance(v, (float, int)):
549+
v = str(v)
546550

551+
cookiejar.set(k, v)
547552
return cookiejar
548553

549554
return RequestsCookieJar()
550555

551556
def extract_cookies(self, response: Response, request: Request) -> None:
552557
extract_cookies_to_jar(self.cookiejar, response, request)
553558

554-
def get_cookie_header(self, request: Request):
559+
def get_cookie_header(self, request: Request) -> str:
555560
return get_cookie_header(self.cookiejar, request)
556561

557-
def set(self, name, value, **kwargs) -> None:
558-
self.cookiejar.set(name, value, **kwargs)
562+
def set(self, name, value, **kwargs) -> Optional[Cookie]:
563+
if value is None:
564+
remove_cookie_by_name(
565+
self, name, domain=kwargs.get("domain"), path=kwargs.get("path")
566+
)
567+
return
568+
569+
if isinstance(value, Morsel):
570+
cookie = morsel_to_cookie(value)
571+
else:
572+
cookie = create_cookie(name, value, **kwargs)
573+
574+
self.cookiejar.set_cookie(cookie)
575+
return cookie
559576

560-
def get(self, name, default=None, domain="", path="/"):
577+
def get(self, name, default=None, domain="", path="/") -> str:
561578
return self.cookiejar.get(name, default, domain, path)
562579

563580
def delete(self, name: str, domain: str = None, path: str = None) -> None:
@@ -581,14 +598,11 @@ def copy(self) -> "Cookies":
581598
ret.cookiejar = _copy_cookie_jar(self.cookiejar)
582599
return ret
583600

584-
def __setitem__(self, name: str, value: str) -> None:
601+
def __setitem__(self, name: str, value: str) -> Optional[Cookie]:
585602
return self.set(name, value)
586603

587604
def __getitem__(self, name: str) -> str:
588-
value = self.get(name)
589-
if value is None:
590-
raise KeyError(name)
591-
return value
605+
return self.cookiejar.get(name)
592606

593607
def __delitem__(self, name: str) -> None:
594608
return self.delete(name)
@@ -605,5 +619,5 @@ def __bool__(self) -> bool:
605619
return False
606620

607621
def __repr__(self) -> str:
608-
r = ", ".join([repr(cookie) for cookie in self.cookiejar])
609-
return "<%s[%s]>" % (self.__class__.__name__, r)
622+
cookiejar_repr = ", ".join([repr(cookie) for cookie in self.cookiejar])
623+
return "<%s[%s]>" % (self.__class__.__name__, cookiejar_repr)

tls_requests/types.py

+15-4
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,33 @@
9999
"confirmed_android_2",
100100
]
101101

102+
AnyList = List[
103+
Union[
104+
List[Union[str, Union[str, int, float]]],
105+
Tuple[Union[str, Union[str, int, float]]],
106+
Set[Union[str, Union[str, int, float]]],
107+
List[Union[str, bytes]],
108+
Tuple[Union[str, bytes]],
109+
Set[Union[str, bytes]],
110+
]
111+
]
112+
102113
HeaderTypes = Optional[
103114
Union[
104115
"Headers",
105-
Mapping[str, str],
116+
Mapping[str, Union[str, int, float]],
106117
Mapping[bytes, bytes],
107-
List[Union[List[Union[str, bytes]], Tuple[Union[str, bytes]], Set[Union[str, bytes]]]],
118+
AnyList,
108119
]
109120
]
110121

111122
CookieTypes = Optional[
112123
Union[
113124
"Cookies",
114125
CookieJar,
115-
Mapping[str, str],
126+
Mapping[str, Union[str, int, float]],
116127
Mapping[bytes, bytes],
117-
List[Union[List[Union[str, bytes]], Tuple[Union[str, bytes]], Set[Union[str, bytes]]]],
128+
AnyList,
118129
]
119130
]
120131

0 commit comments

Comments
 (0)