32
32
export BZR_LP_XMLRPC_URL=http://xmlrpc.staging.launchpad.net/bazaar/
35
class InvalidLaunchpadInstance(errors.BzrError):
37
_fmt = "%(lp_instance)s is not a valid Launchpad instance."
39
def __init__(self, lp_instance):
40
errors.BzrError.__init__(self, lp_instance=lp_instance)
43
35
class LaunchpadService(object):
44
36
"""A service to talk to Launchpad via XMLRPC.
46
38
See http://bazaar-vcs.org/Specs/LaunchpadRpc for the methods we can call.
49
# NB: these should always end in a slash to avoid xmlrpclib appending
41
# NB: this should always end in a slash to avoid xmlrpclib appending
51
# We use edge as the default because:
52
# Beta users get redirected to it
53
# All users can use it
54
# There is a bug in the launchpad side where redirection causes an OOPS.
55
LAUNCHPAD_INSTANCE = {
56
'production': 'https://xmlrpc.launchpad.net/bazaar/',
57
'edge': 'https://xmlrpc.edge.launchpad.net/bazaar/',
58
'staging': 'https://xmlrpc.staging.launchpad.net/bazaar/',
59
'demo': 'https://xmlrpc.demo.launchpad.net/bazaar/',
60
'dev': 'http://xmlrpc.launchpad.dev/bazaar/',
62
DEFAULT_SERVICE_URL = LAUNCHPAD_INSTANCE['edge']
43
DEFAULT_SERVICE_URL = 'https://xmlrpc.launchpad.net/bazaar/'
65
46
registrant_email = None
66
47
registrant_password = None
69
def __init__(self, transport=None, lp_instance=None):
50
def __init__(self, transport=None):
70
51
"""Construct a new service talking to the launchpad rpc server"""
71
self._lp_instance = lp_instance
72
52
if transport is None:
73
53
uri_type = urllib.splittype(self.service_url)[0]
74
54
if uri_type == 'https':
89
69
key = 'BZR_LP_XMLRPC_URL'
90
70
if key in os.environ:
91
71
return os.environ[key]
92
elif self._lp_instance is not None:
94
return self.LAUNCHPAD_INSTANCE[self._lp_instance]
96
raise InvalidLaunchpadInstance(self._lp_instance)
98
73
return self.DEFAULT_SERVICE_URL