Adjust urllib.parse unquote, quote, quote_plus, unquote

This commit is contained in:
croneter 2020-12-19 08:10:08 +01:00
parent 599f134204
commit e32fa567bc
3 changed files with 28 additions and 45 deletions

View file

@ -50,12 +50,12 @@ def initialize(playlist, plex_id):
"""
LOG.debug('Initializing the playlist with Plex id %s on the Plex side: %s',
plex_id, playlist)
url_path = utils.quote(f'/library/metadata/{plex_id}', safe='')
params = {
'type': v.PLEX_PLAYLIST_TYPE_FROM_KODI[playlist.kodi_type],
'title': playlist.plex_name,
'smart': 0,
'uri': ('library://None/item/%s' % (utils.quote('/library/metadata/%s'
% plex_id, safe='')))
'uri': (f'library://None/item/{url_path}')
}
xml = DU().downloadUrl(url='{server}/playlists',
action_type='POST',
@ -77,9 +77,9 @@ def add_item(playlist, plex_id):
Will set playlist.plex_updatedat
Raises PlaylistError if that did not work out.
"""
url_path = utils.quote(f'/library/metadata/{plex_id}', safe='')
params = {
'uri': ('library://None/item/%s' % (utils.quote('/library/metadata/%s'
% plex_id, safe='')))
'uri': f'library://None/item/{url_path}'
}
xml = DU().downloadUrl(url='{server}/playlists/%s/items' % playlist.plex_id,
action_type='PUT',

View file

@ -398,61 +398,46 @@ def escape_path(path, safe_url_char=SAFE_URL_CHARACTERS):
# using RegExp and using safe_url_char as safe characters not to be escaped
protocol = is_http_dav_ftp.group(1)
user = is_http_dav_ftp.group(6)
psswd = is_http_dav_ftp.group(7)
if user and psswd:
user = urllib.parse.quote(user.encode('utf-8'), safe=safe_url_char).decode('utf-8')
psswd = urllib.parse.quote(psswd.encode('utf-8'), safe=safe_url_char).decode('utf-8')
passwd = is_http_dav_ftp.group(7)
if user and passwd:
user = quote(user, safe=safe_url_char)
passwd = quote(passwd, safe=safe_url_char)
host = is_http_dav_ftp.group(8)
port = is_http_dav_ftp.group(10)
url_path = path.replace(is_http_dav_ftp.group(), '', 1)
if url_path:
url_path = urllib.parse.quote(path.replace(is_http_dav_ftp.group(), '', 1).encode('utf-8'),
safe=safe_url_char).decode('utf-8')
return protocol + \
u'://' + \
(user + u':' + psswd + u'@' if (user and psswd) else u'') + \
url_path = quote(path.replace(is_http_dav_ftp.group(), '', 1),
safe=safe_url_char)
return f'{protocol}://' + \
(f'{user}:{passwd}@' if user and passwd else '') + \
host + \
(u':' + port if port else u'') + \
u'/' + \
(url_path if url_path else u'')
(f':{port}' if port else '') + \
(f'/{url_path}' if url_path else '')
else:
# If paths does not seem to be a http(s), dav(s) or (s)ftp url (e.g. plugin://)
# escape path as before
return urllib.parse.quote(path.encode('utf-8'),
safe=SAFE_URL_CHARACTERS).decode('utf-8')
# If paths does not seem to be a http(s), dav(s) or (s)ftp url (e.g.
# plugin://) escape path as before
return quote(path, safe=SAFE_URL_CHARACTERS)
def quote(s, safe='/'):
"""
unicode-safe way to use urllib.quote(). Pass in either str or unicode
Returns unicode
Pass in unicode, returns unicode
"""
if isinstance(s, str):
s = s.encode('utf-8')
s = urllib.parse.quote(s, safe.encode('utf-8'))
return s.decode('utf-8')
return urllib.parse.quote(s, safe)
def quote_plus(s, safe=''):
"""
unicode-safe way to use urllib.quote(). Pass in either str or unicode
Returns unicode
Pass in unicode, returns unicode
"""
if isinstance(s, str):
s = s.encode('utf-8')
s = urllib.parse.quote_plus(s, safe.encode('utf-8'))
return s.decode('utf-8')
return urllib.parse.quote_plus(s, safe)
def unquote(s):
"""
unicode-safe way to use urllib.unquote(). Pass in either str or unicode
Returns unicode
Pass in unicode, returns unicode
"""
if isinstance(s, str):
s = s.encode('utf-8')
s = urllib.parse.unquote(s)
return s.decode('utf-8')
return urllib.parse.unquote(s)
def try_encode(input_str, encoding='utf-8'):

View file

@ -155,8 +155,7 @@ def start():
xml.write_xml = False
return
user = user.strip()
user = urllib.parse.quote(user)
user = user.decode('utf-8')
user = utils.quote(user)
# "Password"
# May also be blank!! (=user aborts dialog)
password = utils.dialog('input',
@ -164,16 +163,15 @@ def start():
'',
type='{alphanum}',
option='{hide}')
password = urllib.parse.quote(password)
password = password.decode('utf-8')
password = utils.quote(password)
utils.etree.SubElement(entry,
'from',
attrib={'pathversion': '1'}).text = '%s/' % path
login = '%s://%s:%s@%s/' % (protocol, user, password, hostname)
attrib={'pathversion': '1'}).text = f'{path}/'
login = f'{protocol}://{user}:{password}@{hostname}/'
utils.etree.SubElement(entry,
'to',
attrib={'pathversion': '1'}).text = login
xml.write_xml = True
except utils.ParseError:
return
LOG.info('Successfully completed editing sources.xml and padsswords.xml')
LOG.info('Successfully completed editing sources.xml and passwords.xml')