def test_resolver_translation(self):
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.translation)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/ja/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.translation)
         self.assertEqual(url, 'http://pip.readthedocs.org/ja/latest/')
    def test_subproject_with_translation_with_custom_domain(self):
        fixture.get(
            Domain,
            domain='docs.example.com',
            canonical=True,
            cname=True,
            https=True,
            project=self.superproject_en,
        )

        url = resolve(self.superproject_en, filename='')
        self.assertEqual(url, 'http://docs.example.com/en/latest/')

        url = resolve(self.superproject_es, filename='')
        self.assertEqual(url, 'http://docs.example.com/es/latest/')

        # yapf: disable
        url = resolve(self.subproject_en, filename='')
        self.assertEqual(
            url,
            ('http://docs.example.com/projects/'
             '{subproject.slug}/en/latest/').format(
                 subproject=self.subproject_en,
            ),
        )

        url = resolve(self.subproject_es, filename='')
        self.assertEqual(
            url,
            ('http://docs.example.com/projects/'
             '{subproject.slug}/es/latest/').format(
                 subproject=self.subproject_en,
            ),
        )
 def test_resolver_subproject(self):
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.subproject)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/projects/sub/ja/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.subproject)
         self.assertEqual(url, 'http://pip.readthedocs.org/projects/sub/ja/latest/')
 def test_resolver_private_project(self):
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip, private=True)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip, private=True)
         self.assertEqual(url, 'http://pip.readthedocs.org/en/latest/')
    def test_subproject_with_translation_without_custom_domain(self):
        url = resolve(self.superproject_en, filename='')
        self.assertEqual(
            url, 'http://{project.slug}.readthedocs.io/en/latest/'.format(
                project=self.superproject_en,
            ))

        url = resolve(self.superproject_es, filename='')
        self.assertEqual(
            url, 'http://{project.slug}.readthedocs.io/es/latest/'.format(
                project=self.superproject_en,
            ))

        url = resolve(self.subproject_en, filename='')
        # yapf: disable
        self.assertEqual(
            url,
            ('http://{project.slug}.readthedocs.io/projects/'
             '{subproject.slug}/en/latest/').format(
                 project=self.superproject_en,
                 subproject=self.subproject_en,
            ),
        )

        url = resolve(self.subproject_es, filename='')
        self.assertEqual(
            url,
            ('http://{project.slug}.readthedocs.io/projects/'
             '{subproject.slug}/es/latest/').format(
                 project=self.superproject_en,
                 subproject=self.subproject_en,
            ),
        )
 def test_resolver_domain(self):
     self.domain = get(Domain, domain='docs.foobar.com', project=self.pip, canonical=True)
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
 def test_resolver_single_version(self):
     self.pip.single_version = True
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://pip.readthedocs.org/')
 def test_resolver_subproject_alias(self):
     relation = self.pip.subprojects.first()
     relation.alias = 'sub_alias'
     relation.save()
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.subproject)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/projects/sub_alias/ja/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.subproject)
         self.assertEqual(url, 'http://pip.readthedocs.org/projects/sub_alias/ja/latest/')
    def test_resolver_domain_https(self):
        with override_settings(PUBLIC_DOMAIN_USES_HTTPS=True):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(url, 'https://pip.readthedocs.io/en/latest/')

            url = resolve(project=self.pip, private=False)
            self.assertEqual(url, 'https://pip.readthedocs.io/en/latest/')

        with override_settings(PUBLIC_DOMAIN_USES_HTTPS=False):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(url, 'http://pip.readthedocs.io/en/latest/')
Exemple #10
0
 def test_resolver_subproject(self):
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.subproject)
         self.assertEqual(
             url,
             'http://readthedocs.org/docs/pip/projects/sub/ja/latest/',
         )
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.subproject)
         self.assertEqual(
             url,
             'http://pip.readthedocs.org/projects/sub/ja/latest/',
         )
Exemple #11
0
 def test_domain_external(self):
     latest = self.pip.versions.first()
     latest.type = EXTERNAL
     latest.save()
     url = resolve(project=self.pip)
     self.assertEqual(
         url, 'https://pip--latest.dev.readthedocs.build/en/latest/')
     url = resolve(project=self.pip, version_slug=latest.slug)
     self.assertEqual(
         url, 'https://pip--latest.dev.readthedocs.build/en/latest/')
     url = resolve(project=self.pip, version_slug='non-external')
     self.assertEqual(
         url, 'https://pip.public.readthedocs.org/en/non-external/')
Exemple #12
0
 def test_resolver_private_project_override(self):
     self.pip.privacy_level = PRIVATE
     self.pip.save()
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://pip.readthedocs.org/en/latest/')
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://pip.readthedocs.org/en/latest/')
Exemple #13
0
 def test_resolver_domain(self):
     self.domain = fixture.get(
         Domain,
         domain='docs.foobar.com',
         project=self.pip,
         canonical=True,
     )
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
    def test_resolver_public_domain_overrides(self):
        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
            url = resolve(project=self.pip, private=False)
            self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(
                url, 'http://pip.public.readthedocs.org/en/latest/')
            url = resolve(project=self.pip, private=False)
            self.assertEqual(
                url, 'http://pip.public.readthedocs.org/en/latest/')

        # Domain overrides PUBLIC_DOMAIN
        self.domain = fixture.get(
            Domain,
            domain='docs.foobar.com',
            project=self.pip,
            canonical=True,
        )
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
            url = resolve(project=self.pip, private=False)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=self.pip, private=True)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
            url = resolve(project=self.pip, private=False)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
    def test_resolver_public_domain_overrides(self):
        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=self.pip)
            self.assertEqual(
                url,
                'http://pip.public.readthedocs.org/en/latest/',
            )
            url = resolve(project=self.pip)
            self.assertEqual(
                url,
                'http://pip.public.readthedocs.org/en/latest/',
            )

        # Domain overrides PUBLIC_DOMAIN
        self.domain = fixture.get(
            Domain,
            domain='docs.foobar.com',
            project=self.pip,
            canonical=True,
        )
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
            url = resolve(project=self.pip)
            self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
 def test_resolver_private_version_override(self):
     latest = self.pip.versions.first()
     latest.privacy_level = PRIVATE
     latest.save()
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
         url = resolve(project=self.pip, private=False)
         self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.pip)
         self.assertEqual(url, 'http://pip.readthedocs.org/en/latest/')
         url = resolve(project=self.pip, private=False)
         self.assertEqual(url, 'http://pip.readthedocs.org/en/latest/')
 def test_resolver_subproject_alias(self):
     relation = self.pip.subprojects.first()
     relation.alias = 'sub_alias'
     relation.save()
     with override_settings(USE_SUBDOMAIN=False):
         url = resolve(project=self.subproject)
         self.assertEqual(
             url,
             'http://readthedocs.org/docs/pip/projects/sub_alias/ja/latest/'
         )
     with override_settings(USE_SUBDOMAIN=True):
         url = resolve(project=self.subproject)
         self.assertEqual(
             url,
             'http://pip.readthedocs.org/projects/sub_alias/ja/latest/')
Exemple #18
0
    def canonical_redirect(self, request, final_project, version_slug,
                           filename):
        """
        Return a redirect to the canonical domain including scheme.

        This is normally used HTTP -> HTTPS redirects or redirects to/from custom domains.
        """
        full_path = request.get_full_path()
        urlparse_result = urlparse(full_path)
        to = resolve(
            project=final_project,
            version_slug=version_slug,
            filename=filename,
            query_params=urlparse_result.query,
            external=hasattr(request, 'external_domain'),
        )

        if full_path == to:
            # check that we do have a response and avoid infinite redirect
            log.warning(
                'Infinite Redirect: FROM URL is the same than TO URL. url=%s',
                to,
            )
            raise InfiniteRedirectException()

        log.info('Canonical Redirect: host=%s, from=%s, to=%s',
                 request.get_host(), filename, to)
        resp = HttpResponseRedirect(to)
        resp['X-RTD-Redirect'] = getattr(request, 'canonicalize', 'unknown')
        return resp
Exemple #19
0
def redirect_project_slug(request, project, subproject):  # pylint: disable=unused-argument
    """Handle / -> /en/latest/ directs on subdomains."""
    urlparse_result = urlparse(request.get_full_path())

    # When accessing docs.customdomain.org/projects/subproject/ and the
    # ``subproject`` is a single-version, we don't have to redirect but to serve
    # the index file instead.
    if subproject and subproject.single_version:
        try:
            # HACK: this only affects corporate site and won't be hit on the
            # community. This can be removed once the middleware incorporates
            # more data or redirects happen outside this application
            # See: https://github.com/rtfd/readthedocs.org/pull/5690
            log.warning(
                'Serving docs for a single-version subproject instead redirecting'
            )
            from readthedocsinc.core.views import serve_docs as corporate_serve_docs  # noqa
            return corporate_serve_docs(request, project, project.slug,
                                        subproject, subproject.slug)
        except Exception:
            log.exception(
                'Error trying to redirect a single-version subproject')

    return HttpResponseRedirect(
        resolve(
            subproject or project,
            query_params=urlparse_result.query,
        ), )
Exemple #20
0
    def get_docs_url(self, version_slug=None, lang_slug=None, private=None):
        """
        Return a URL for the docs.

        Always use http for now, to avoid content warnings.
        """
        return resolve(project=self, version_slug=version_slug, language=lang_slug, private=private)
Exemple #21
0
    def _get_subprojects_and_urls(self):
        """
        Get a tuple of subprojects and its absolute URls.

        All subprojects share the domain from the parent,
        so instead of resolving the domain and path for each subproject,
        we resolve only the path of each one.
        """
        subprojects_and_urls = []

        project = self.get_project()
        subprojects = project.subprojects.select_related('child')

        if not subprojects.exists():
            return subprojects_and_urls

        main_domain = resolve(project)
        parsed_main_domain = urlparse(main_domain)

        for subproject in subprojects:
            subproject_path = resolve_path(subproject.child)
            parsed_subproject_domain = parsed_main_domain._replace(
                path=subproject_path, )
            subprojects_and_urls.append((
                subproject,
                parsed_subproject_domain.geturl(),
            ))
        return subprojects_and_urls
Exemple #22
0
def redirect_project_slug(request, project, subproject):  # pylint: disable=unused-argument
    """Handle / -> /en/latest/ directs on subdomains."""
    urlparse_result = urlparse(request.get_full_path())
    return HttpResponseRedirect(
        resolve(
            subproject or project,
            query_params=urlparse_result.query,
        ))
    def get_docs_url(self, version_slug=None, lang_slug=None, private=None):
        """Return a url for the docs

        Always use http for now, to avoid content warnings.
        """
        if private is None:
            private = self.privacy_level == constants.PRIVATE
        return resolve(project=self, version_slug=version_slug, language=lang_slug, private=private)
Exemple #24
0
def redirect_page_with_filename(request, project, subproject, filename):  # pylint: disable=unused-argument  # noqa
    """Redirect /page/file.html to /en/latest/file.html."""
    urlparse_result = urlparse(request.get_full_path())
    return HttpResponseRedirect(
        resolve(
            subproject or project,
            filename=filename,
            query_params=urlparse_result.query,
        ))
Exemple #25
0
def do_embed(*, project, version, doc=None, path=None, section=None, url=None):
    """Get the embed reponse from a document section."""
    if not url:
        external = version.type == EXTERNAL
        url = resolve(
            project=project,
            version_slug=version.slug,
            filename=path or doc,
            external=external,
        )

    content = None
    headers = None
    if version.is_sphinx_type:
        file_content = _get_doc_content(
            project=project,
            version=version,
            doc=doc,
        )
        content, headers, section = parse_sphinx(
            content=file_content,
            section=section,
            url=url,
        )
    else:
        # TODO: this should read from the html file itself,
        # we don't have fjson files for mkdocs.
        file_content = _get_doc_content(
            project=project,
            version=version,
            doc=doc,
        )
        content, headers, section = parse_mkdocs(
            content=file_content,
            section=section,
            url=url,
        )

    if content is None:
        return Response(
            {
                'error': ("Can't find content for section: "
                          f"doc={doc} path={path} section={section}")
            },
            status=status.HTTP_404_NOT_FOUND)

    return Response({
        'content': content,
        'headers': headers,
        'url': url,
        'meta': {
            'project': project.slug,
            'version': version.slug,
            'doc': doc,
            'section': section,
        },
    })
Exemple #26
0
def redirect_project_slug(request, project, subproject):  # pylint: disable=unused-argument
    """Handle / -> /en/latest/ directs on subdomains."""
    urlparse_result = urlparse(request.get_full_path())
    return HttpResponseRedirect(
        resolve(
            subproject or project,
            query_params=urlparse_result.query,
        )
    )
Exemple #27
0
def redirect_page_with_filename(request, project, subproject, filename):  # pylint: disable=unused-argument  # noqa
    """Redirect /page/file.html to /en/latest/file.html."""
    urlparse_result = urlparse(request.get_full_path())
    return HttpResponseRedirect(
        resolve(
            subproject or project,
            filename=filename,
            query_params=urlparse_result.query,
        )
    )
 def docs_url(self):
     path = self.doc_name
     if self.anchor:
         path += f'#{self.anchor}'
     full_url = resolve(
         project=self.project,
         version_slug=self.version.slug,
         filename=path,
     )
     return full_url
Exemple #29
0
 def docs_url(self):
     path = self.doc_name
     if self.anchor:
         path += f'#{self.anchor}'
     full_url = resolve(
         project=self.project,
         version_slug=self.version.slug,
         filename=path,
     )
     return full_url
Exemple #30
0
    def test_resolver_nested_translation_of_a_subproject(self):
        """The project is a translation, and the main translation is a subproject of a project."""
        translation = fixture.get(
            Project,
            slug='api-es',
            language='es',
            users=[self.owner],
            main_language_project=self.subproject,
        )

        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=translation)
            self.assertEqual(
                url, 'http://readthedocs.org/docs/pip/projects/sub/es/latest/',
            )
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=translation)
            self.assertEqual(
                url, 'http://pip.readthedocs.org/projects/sub/es/latest/',
            )
 def get_link(self, obj):
     # TODO: optimize this to not query the db for each result.
     # TODO: return an relative URL when this is called from the indoc search.
     project = Project.objects.filter(slug=obj.project).first()
     if project:
         return resolve(
             project=project,
             version_slug=obj.version,
             filename=obj.full_path,
         )
     return None
Exemple #32
0
    def canonical_redirect(self, request, final_project, version_slug,
                           filename):
        """
        Return a redirect to the canonical domain including scheme.

        The following cases are covered:

        - Redirect a custom domain from http to https (if supported)
          http://project.rtd.io/ -> https://project.rtd.io/
        - Redirect a domain to a canonical domain (http or https).
          http://project.rtd.io/ -> https://docs.test.com/
          http://project.rtd.io/foo/bar/ -> https://docs.test.com/foo/bar/
        - Redirect from a subproject domain to the main domain
          https://subproject.rtd.io/en/latest/foo -> https://main.rtd.io/projects/subproject/en/latest/foo  # noqa
          https://subproject.rtd.io/en/latest/foo -> https://docs.test.com/projects/subproject/en/latest/foo  # noqa
        """
        from_url = request.build_absolute_uri()
        parsed_from = urlparse(from_url)

        redirect_type = getattr(request, 'canonicalize', None)
        if redirect_type == REDIRECT_HTTPS:
            to = parsed_from._replace(scheme='https').geturl()
        else:
            to = resolve(
                project=final_project,
                version_slug=version_slug,
                filename=filename,
                query_params=parsed_from.query,
                external=hasattr(request, 'external_domain'),
            )
            # When a canonical redirect is done, only change the domain.
            if redirect_type == REDIRECT_CANONICAL_CNAME:
                parsed_to = urlparse(to)
                to = parsed_from._replace(
                    scheme=parsed_to.scheme,
                    netloc=parsed_to.netloc,
                ).geturl()

        if from_url == to:
            # check that we do have a response and avoid infinite redirect
            log.warning(
                'Infinite Redirect: FROM URL is the same than TO URL.',
                url=to,
            )
            raise InfiniteRedirectException()

        log.info('Canonical Redirect.',
                 host=request.get_host(),
                 from_url=filename,
                 to_url=to)
        resp = HttpResponseRedirect(to)
        resp['X-RTD-Redirect'] = getattr(request, 'canonicalize', 'unknown')
        return resp
    def test_subproject_with_translation_without_custom_domain(self):
        url = resolve(self.superproject_en, filename='')
        self.assertEqual(
            url,
            'http://{project.slug}.readthedocs.io/en/latest/'.format(
                project=self.superproject_en, ),
        )

        url = resolve(self.superproject_es, filename='')
        self.assertEqual(
            url,
            'http://{project.slug}.readthedocs.io/es/latest/'.format(
                project=self.superproject_en, ),
        )

        url = resolve(self.subproject_en, filename='')
        # yapf: disable
        self.assertEqual(
            url,
            (
                'http://{project.slug}.readthedocs.io/projects/'
                '{subproject.slug}/en/latest/'
            ).format(
                project=self.superproject_en,
                subproject=self.subproject_en,
            ),
        )

        url = resolve(self.subproject_es, filename='')
        self.assertEqual(
            url,
            (
                'http://{project.slug}.readthedocs.io/projects/'
                '{subproject.slug}/es/latest/'
            ).format(
                project=self.superproject_en,
                subproject=self.subproject_en,
            ),
        )
    def test_subproject_with_translation_with_custom_domain(self):
        fixture.get(
            Domain,
            domain='docs.example.com',
            canonical=True,
            cname=True,
            https=False,
            project=self.superproject_en,
        )

        url = resolve(self.superproject_en, filename='')
        self.assertEqual(url, 'http://docs.example.com/en/latest/')

        url = resolve(self.superproject_es, filename='')
        self.assertEqual(url, 'http://docs.example.com/es/latest/')

        # yapf: disable
        url = resolve(self.subproject_en, filename='')
        self.assertEqual(
            url,
            (
                'http://docs.example.com/projects/'
                '{subproject.slug}/en/latest/'
            ).format(
                subproject=self.subproject_en,
            ),
        )

        url = resolve(self.subproject_es, filename='')
        self.assertEqual(
            url,
            (
                'http://docs.example.com/projects/'
                '{subproject.slug}/es/latest/'
            ).format(
                subproject=self.subproject_en,
            ),
        )
Exemple #35
0
def make_document_url(project, version=None, page='', path=''):
    """
    Create a URL for a Project, Version and page (and/or path).

    :param page: is the name of the document as Sphinx call it (e.g.
        /config-file/v1) (note that the extension is not present)
    :param path: is the full path of the page (e.g. /section/configuration.html)

    :returns: URL to the page (e.g. https://docs.domain.com/en/latest/section/configuration.html)
    """
    if not project:
        return ''
    filename = path or page
    return resolve(project=project, version_slug=version, filename=filename)
    def test_resolver_nested_subproject_of_a_translation(self):
        """The project is a subproject, and the superproject is a translation of a project."""
        project = fixture.get(
            Project,
            slug='all-docs',
            language='en',
            users=[self.owner],
            main_language_project=None,
        )
        translation = fixture.get(
            Project,
            slug='docs-es',
            language='es',
            users=[self.owner],
            main_language_project=project,
        )

        subproject = fixture.get(
            Project,
            slug='api-es',
            language='es',
            users=[self.owner],
            main_language_project=None,
        )
        translation.add_subproject(subproject)

        with override_settings(USE_SUBDOMAIN=False):
            url = resolve(project=subproject)
            self.assertEqual(
                url,
                'http://readthedocs.org/docs/docs-es/projects/api-es/es/latest/'
            )
        with override_settings(USE_SUBDOMAIN=True):
            url = resolve(project=subproject)
            self.assertEqual(
                url,
                'http://docs-es.readthedocs.org/projects/api-es/es/latest/')
Exemple #37
0
    def canonical_redirect(self, request, final_project, version_slug, filename):
        """
        Return a redirect to the canonical domain including scheme.

        This is normally used HTTP -> HTTPS redirects or redirects to/from custom domains.
        """
        urlparse_result = urlparse(request.get_full_path())
        to = resolve(
            project=final_project,
            version_slug=version_slug,
            filename=filename,
            query_params=urlparse_result.query,
            external=hasattr(request, 'external_domain'),
        )
        log.info('Canonical Redirect: host=%s, from=%s, to=%s', request.get_host(), filename, to)
        resp = HttpResponseRedirect(to)
        resp['X-RTD-Redirect'] = getattr(request, 'canonicalize', 'unknown')
        return resp
Exemple #38
0
    def system_redirect(self, request, final_project, lang_slug, version_slug, filename):
        """
        Return a redirect that is defined by RTD instead of the user.

        This is normally used for `/` and `/page/*` redirects.
        """
        urlparse_result = urlparse(request.get_full_path())
        if hasattr(request, 'external_domain'):
            log.debug('Request is external')
        to = resolve(
            project=final_project,
            version_slug=version_slug,
            filename=filename,
            query_params=urlparse_result.query,
            external=hasattr(request, 'external_domain'),
        )
        log.info('System Redirect: host=%s, from=%s, to=%s', request.get_host(), filename, to)
        resp = HttpResponseRedirect(to)
        resp['X-RTD-Redirect'] = 'system'
        return resp
Exemple #39
0
def redirect_project_slug(request, project, subproject):  # pylint: disable=unused-argument
    """Handle / -> /en/latest/ directs on subdomains."""
    return HttpResponseRedirect(resolve(subproject or project))
 def get_absolute_url(self):
     return resolve(
         project=self.project,
         version_slug=self.version.slug,
         filename=self.path,
     )
Exemple #41
0
def redirect_page_with_filename(request, project, subproject, filename):
    """Redirect /page/file.html to /en/latest/file.html."""
    return HttpResponseRedirect(resolve(subproject or project, filename=filename))
Exemple #42
0
 def get_subdomain_url(self):
     private = self.privacy_level == PRIVATE
     return resolve(project=self.project, version_slug=self.slug, private=private)
Exemple #43
0
 def get_absolute_url(self):
     return resolve(project=self.project,
                    version_slug=self.version.slug,
                    filename=self.path)
Exemple #44
0
def redirect_project_slug(request, project, subproject):
    """Handle / -> /en/latest/ directs on subdomains"""
    return HttpResponseRedirect(resolve(subproject or project))
Exemple #45
0
 def get_absolute_url(self):
     return resolve(self.child)
def make_document_url(project, version=None, page=''):
    if not project:
        return ""
    return resolve(project=project, version_slug=version, filename=page)
 def get_absolute_url(self):
     private = self.child.privacy_level == constants.PRIVATE
     return resolve(self.child, private=private)
Exemple #48
0
def redirect_page_with_filename(request, project, subproject, filename):  # pylint: disable=unused-argument  # noqa
    """Redirect /page/file.html to /en/latest/file.html."""
    return HttpResponseRedirect(resolve(subproject or project, filename=filename))
def make_document_url(project, version=None, page=''):
    if not project:
        return ""
    return resolve(project=project, version_slug=version, filename=page)
Exemple #50
0
def redirect_project_slug(request, project, subproject):  # pylint: disable=unused-argument
    """Handle / -> /en/latest/ directs on subdomains"""
    return HttpResponseRedirect(resolve(subproject or project))
 def get_absolute_url(self):
     return resolve(self.child)
Exemple #52
0
def redirect_project_slug(request, project, subproject):
    """Handle / -> /en/latest/ directs on subdomains"""
    return HttpResponseRedirect(resolve(subproject or project))
Exemple #53
0
 def get_subdomain_url(self):
     return resolve(project=self.project, version_slug=self.slug)
Exemple #54
0
def redirect_page_with_filename(request, project, subproject, filename):  # pylint: disable=unused-argument  # noqa
    """Redirect /page/file.html to /en/latest/file.html."""
    return HttpResponseRedirect(
        resolve(subproject or project, filename=filename))
Exemple #55
0
def redirect_page_with_filename(request, project, subproject, filename):
    """Redirect /page/file.html to /en/latest/file.html."""
    return HttpResponseRedirect(
        resolve(subproject or project, filename=filename))