mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-13 16:11:15 +00:00
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
#
|
|
# libsupport.py - functions which add launchpadlib support to the Ubuntu
|
|
# Developer Tools package.
|
|
#
|
|
# Copyright (C) 2009 Markus Korn <thekorn@gmx.de>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 3
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# Please see the /usr/share/common-licenses/GPL file for the full text of
|
|
# the GNU General Public License license.
|
|
#
|
|
|
|
# Modules.
|
|
import urllib
|
|
import urlparse
|
|
|
|
def query_to_dict(query_string):
|
|
result = dict()
|
|
options = filter(None, query_string.split("&"))
|
|
for opt in options:
|
|
key, value = opt.split("=")
|
|
result.setdefault(key, set()).add(value)
|
|
return result
|
|
|
|
def translate_web_api(url, launchpad):
|
|
scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
|
|
query = query_to_dict(query)
|
|
|
|
differences = set(netloc.split('.')).symmetric_difference(
|
|
set(launchpad._root_uri.host.split('.')))
|
|
if ('staging' in differences or 'edge' in differences):
|
|
raise ValueError("url conflict (url: %s, root: %s" %
|
|
(url, launchpad._root_uri))
|
|
if path.endswith("/+bugs"):
|
|
path = path[:-6]
|
|
if "ws.op" in query:
|
|
raise ValueError("Invalid web url, url: %s" %url)
|
|
query["ws.op"] = "searchTasks"
|
|
scheme, netloc, api_path, _, _ = urlparse.urlsplit(str(launchpad._root_uri))
|
|
query = urllib.urlencode(query)
|
|
url = urlparse.urlunsplit((scheme, netloc, api_path + path.lstrip("/"),
|
|
query, fragment))
|
|
return url
|