elif url_components.scheme.lower() == 'socks4a':
socks_type = ProxyType.SOCKS4A
+ def unquote_if_non_empty(s):
+ if not s:
+ return s
+ return compat_urllib_parse_unquote_plus(s)
+
proxy_args = (
socks_type,
url_components.hostname, url_components.port or 1080,
True, # Remote DNS
- compat_urllib_parse_unquote_plus(url_components.username),
- compat_urllib_parse_unquote_plus(url_components.password),
+ unquote_if_non_empty(url_components.username),
+ unquote_if_non_empty(url_components.password),
)
class SocksConnection(base_class):
def remove_start(s, start):
- if s.startswith(start):
- return s[len(start):]
- return s
+ return s[len(start):] if s is not None and s.startswith(start) else s
def remove_end(s, end):
- if s.endswith(end):
- return s[:-len(end)]
- return s
+ return s[:-len(end)] if s is not None and s.endswith(end) else s
def remove_quotes(s):
}.get(m.group(0), m.group(0)), v[1:-1])
INTEGER_TABLE = (
- (r'^(0[xX][0-9a-fA-F]+)', 16),
- (r'^(0+[0-7]+)', 8),
+ (r'^0[xX][0-9a-fA-F]+', 16),
+ (r'^0+[0-7]+', 8),
)
for regex, base in INTEGER_TABLE:
im = re.match(regex, v)
if im:
- i = int(im.group(1), base)
+ i = int(im.group(0), base)
return '"%d":' % i if v.endswith(':') else '%d' % i
return '"%s"' % v
def urlhandle_detect_ext(url_handle):
- try:
- url_handle.headers
- getheader = lambda h: url_handle.headers[h]
- except AttributeError: # Python < 3
- getheader = url_handle.info().getheader
+ getheader = url_handle.headers.get
cd = getheader('Content-Disposition')
if cd: