예제 #1
0
 def from_string(cls, value, transport=None, transport_registry=None):
     if PY2:
         value = to_string(value)
     url = urlparse(value)
     if url.scheme not in ('http', 'https'):
         warnings.warn(
             'Transport selection via DSN is deprecated. You should explicitly pass the transport class to Client() instead.'
         )
     if transport is None:
         if not transport_registry:
             from raven.transport import TransportRegistry, default_transports
             transport_registry = TransportRegistry(default_transports)
         if not transport_registry.supported_scheme(url.scheme):
             raise InvalidDsn(ERR_UNKNOWN_SCHEME.format(url.scheme, value))
         transport = transport_registry.get_transport_cls(url.scheme)
     netloc = url.hostname
     if url.port:
         netloc += ':%s' % url.port
     path_bits = url.path.rsplit('/', 1)
     if len(path_bits) > 1:
         path = path_bits[0]
     else:
         path = ''
     project = path_bits[-1]
     if not all([netloc, project, url.username, url.password]):
         raise InvalidDsn('Invalid Sentry DSN: %r' % url.geturl())
     base_url = '%s://%s%s' % (url.scheme.rsplit('+', 1)[-1], netloc, path)
     return cls(base_url=base_url,
                project=project,
                public_key=url.username,
                secret_key=url.password,
                options=dict(parse_qsl(url.query)),
                transport=transport)
예제 #2
0
    def from_string(cls, value, transport=None, transport_registry=None):
        # in Python 2.x sending the DSN as a unicode value will eventually
        # cause issues in httplib
        if PY2:
            value = to_string(value)

        url = urlparse(value.strip())

        if url.scheme not in ("http", "https"):
            warnings.warn(
                "Transport selection via DSN is deprecated. You should explicitly pass the transport class to Client() instead."
            )

        if transport is None:
            if not transport_registry:
                from raven.transport import TransportRegistry, default_transports

                transport_registry = TransportRegistry(default_transports)

            if not transport_registry.supported_scheme(url.scheme):
                raise InvalidDsn(ERR_UNKNOWN_SCHEME.format(url.scheme, value))

            transport = transport_registry.get_transport_cls(url.scheme)

        netloc = url.hostname
        if url.port:
            netloc += ":%s" % url.port

        path_bits = url.path.rsplit("/", 1)
        if len(path_bits) > 1:
            path = path_bits[0]
        else:
            path = ""
        project = path_bits[-1]

        if not all([netloc, project, url.username, url.password]):
            raise InvalidDsn("Invalid Sentry DSN: %r" % url.geturl())

        base_url = "%s://%s%s" % (url.scheme.rsplit("+", 1)[-1], netloc, path)

        return cls(
            base_url=base_url,
            project=project,
            public_key=url.username,
            secret_key=url.password,
            options=dict(parse_qsl(url.query)),
            transport=transport,
        )
예제 #3
0
    def from_string(cls, value, transport=None, transport_registry=None):
        url = urlparse(value)

        if url.scheme not in ('http', 'https'):
            warnings.warn('Transport selection via DSN is deprecated. You should explicitly pass the transport class to Client() instead.')

        if transport is None:
            if not transport_registry:
                from raven.transport import TransportRegistry, default_transports
                transport_registry = TransportRegistry(default_transports)

            if not transport_registry.supported_scheme(url.scheme):
                raise InvalidDsn(ERR_UNKNOWN_SCHEME.format(url.scheme))

            transport = transport_registry.get_transport_cls(url.scheme)

        netloc = url.hostname
        if url.port:
            netloc += ':%s' % url.port

        path_bits = url.path.rsplit('/', 1)
        if len(path_bits) > 1:
            path = path_bits[0]
        else:
            path = ''
        project = path_bits[-1]

        if not all([netloc, project, url.username, url.password]):
            raise InvalidDsn('Invalid Sentry DSN: %r' % url.geturl())

        base_url = '%s://%s%s' % (url.scheme.rsplit('+', 1)[-1], netloc, path)

        return cls(
            base_url=base_url,
            project=project,
            public_key=url.username,
            secret_key=url.password,
            options=dict(parse_qsl(url.query)),
            transport=transport,
        )