Open ReK42 opened 1 year ago
I added these because I'm currently using the following method to pull cookies from a specific browser in bcamp-dl, where self.browser
is a string argument from the user:
func = getattr(browser_cookie3, self.browser)
self.cookies = func(domain_name="bandcamp.com")
This seems a little fragile to me, as I need to validate the string against a list of supported browsers that isn't easily available from upstream, and it can produce some unhelpful exceptions if it goes wrong. Adding a subclass of http.cookiejar.CookieJar
which will raise a helpful exception if the browser is not supported makes this a lot cleaner. I can now rely on upstream to validate for me, and it's a lot more clear that the result is a standard CookieJar object.
The load
function is useful but doesn't quite do what I want: I want to load a cookie from a specific browser, not from all available browsers. I did add get_browser
as an alternative method to get the specific function, as opposed to getattr
.
Adds the following methods to get cookies:
BrowserCookieJar
is a subclass ofhttp.cookiejar.CookieJar
which will take the browser name as a string:get_browser
is a function which will return the browser-specific function based on the browser name as a string:To support these, I update the type annotations on the existing browser-specific functions, including adding the
key_file
argument to those which didn't have it, for consistency. Additionally, both methods use a newSUPPORTED_BROWSERS
dictionary, and theload
method was updated to use it as well: