~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/plugins/launchpad/lp_registration.py

  • Committer: Vincent Ladeuil
  • Date: 2009-06-22 12:52:39 UTC
  • mto: (4471.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 4472.
  • Revision ID: v.ladeuil+lp@free.fr-20090622125239-kabo9smxt9c3vnir
Use a consistent scheme for naming pyrex source files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
18
from getpass import getpass
21
21
import urllib
22
22
import xmlrpclib
23
23
 
 
24
from bzrlib.lazy_import import lazy_import
 
25
lazy_import(globals(), """
 
26
from bzrlib import urlutils
 
27
""")
 
28
 
24
29
from bzrlib import (
25
30
    config,
26
31
    errors,
40
45
        errors.BzrError.__init__(self, lp_instance=lp_instance)
41
46
 
42
47
 
 
48
class NotLaunchpadBranch(errors.BzrError):
 
49
 
 
50
    _fmt = "%(url)s is not registered on Launchpad."
 
51
 
 
52
    def __init__(self, url):
 
53
        errors.BzrError.__init__(self, url=url)
 
54
 
 
55
 
43
56
class LaunchpadService(object):
44
57
    """A service to talk to Launchpad via XMLRPC.
45
58
 
46
59
    See http://bazaar-vcs.org/Specs/LaunchpadRpc for the methods we can call.
47
60
    """
48
61
 
 
62
    LAUNCHPAD_DOMAINS = {
 
63
        'production': 'launchpad.net',
 
64
        'edge': 'edge.launchpad.net',
 
65
        'staging': 'staging.launchpad.net',
 
66
        'demo': 'demo.launchpad.net',
 
67
        'dev': 'launchpad.dev',
 
68
        }
 
69
 
49
70
    # NB: these should always end in a slash to avoid xmlrpclib appending
50
71
    # '/RPC2'
 
72
    LAUNCHPAD_INSTANCE = {}
 
73
    for instance, domain in LAUNCHPAD_DOMAINS.iteritems():
 
74
        LAUNCHPAD_INSTANCE[instance] = 'https://xmlrpc.%s/bazaar/' % domain
 
75
 
51
76
    # We use edge as the default because:
52
77
    # Beta users get redirected to it
53
78
    # All users can use it
54
79
    # 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/',
61
 
        }
62
 
    DEFAULT_SERVICE_URL = LAUNCHPAD_INSTANCE['edge']
 
80
    DEFAULT_INSTANCE = 'edge'
 
81
    DEFAULT_SERVICE_URL = LAUNCHPAD_INSTANCE[DEFAULT_INSTANCE]
63
82
 
64
83
    transport = None
65
84
    registrant_email = None
160
179
                        % (self.service_url, e.errcode, e.errmsg))
161
180
        return result
162
181
 
 
182
    @property
 
183
    def domain(self):
 
184
        if self._lp_instance is None:
 
185
            instance = self.DEFAULT_INSTANCE
 
186
        else:
 
187
            instance = self._lp_instance
 
188
        return self.LAUNCHPAD_DOMAINS[instance]
 
189
 
 
190
    def get_web_url_from_branch_url(self, branch_url, _request_factory=None):
 
191
        """Get the Launchpad web URL for the given branch URL.
 
192
 
 
193
        :raise errors.InvalidURL: if 'branch_url' cannot be identified as a
 
194
            Launchpad branch URL.
 
195
        :return: The URL of the branch on Launchpad.
 
196
        """
 
197
        scheme, hostinfo, path = urlsplit(branch_url)[:3]
 
198
        if _request_factory is None:
 
199
            _request_factory = ResolveLaunchpadPathRequest
 
200
        if scheme == 'lp':
 
201
            resolve = _request_factory(path)
 
202
            try:
 
203
                result = resolve.submit(self)
 
204
            except xmlrpclib.Fault, fault:
 
205
                raise errors.InvalidURL(branch_url, str(fault))
 
206
            branch_url = result['urls'][0]
 
207
            path = urlsplit(branch_url)[2]
 
208
        else:
 
209
            domains = (
 
210
                'bazaar.%s' % domain
 
211
                for domain in self.LAUNCHPAD_DOMAINS.itervalues())
 
212
            if hostinfo not in domains:
 
213
                raise NotLaunchpadBranch(branch_url)
 
214
        return urlutils.join('https://code.%s' % self.domain, path)
 
215
 
163
216
 
164
217
class BaseRequest(object):
165
218
    """Base request for talking to a XMLRPC server."""
184
237
 
185
238
class DryRunLaunchpadService(LaunchpadService):
186
239
    """Service that just absorbs requests without sending to server.
187
 
    
 
240
 
188
241
    The dummy service does not need authentication.
189
242
    """
190
243