diff --git a/requests/cookies.py b/requests/cookies.py index b85fd2b6..eee5168f 100644 --- a/requests/cookies.py +++ b/requests/cookies.py @@ -277,6 +277,12 @@ class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping): dictionary[cookie.name] = cookie.value return dictionary + def __contains__(self, name): + try: + return super(RequestsCookieJar, self).__contains__(name) + except CookieConflictError: + return True + def __getitem__(self, name): """Dict-like __getitem__() for compatibility with client code. Throws exception if there are more than one cookie with name. In that case, diff --git a/tests/test_requests.py b/tests/test_requests.py index 1ee379c9..01e88da1 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -754,6 +754,38 @@ class TestRequests: # make sure one can use items multiple times assert list(items) == list(items) + def test_cookie_duplicate_names_different_domains(self): + key = 'some_cookie' + value = 'some_value' + domain1 = 'test1.com' + domain2 = 'test2.com' + + jar = requests.cookies.RequestsCookieJar() + jar.set(key, value, domain=domain1) + jar.set(key, value, domain=domain2) + assert key in jar + items = jar.items() + assert len(items) == 2 + + # Verify that CookieConflictError is raised if domain is not specified + with pytest.raises(requests.cookies.CookieConflictError): + jar.get(key) + + # Verify that CookieConflictError is not raised if domain is specified + cookie = jar.get(key, domain=domain1) + assert cookie == value + + def test_cookie_duplicate_names_raises_cookie_conflict_error(self): + key = 'some_cookie' + value = 'some_value' + path = 'some_path' + + jar = requests.cookies.RequestsCookieJar() + jar.set(key, value, path=path) + jar.set(key, value) + with pytest.raises(requests.cookies.CookieConflictError): + jar.get(key) + def test_time_elapsed_blank(self, httpbin): r = requests.get(httpbin('get')) td = r.elapsed