Example #1
0
def symlink_translations(version):
    """
    Link from HOME/user_builds/project/translations/<lang> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    translations = {}

    if getattr(settings, 'DONT_HIT_DB', True):
        for trans in (api.project(
                version.project.pk).translations.get()['translations']):
            translations[trans['language']] = trans['slug']
    else:
        for trans in version.project.translations.all():
            translations[trans.language] = trans.slug

    # Default language, and pointer for 'en'
    version_slug = version.project.slug.replace('_', '-')
    translations[version.project.language] = version_slug
    if not translations.has_key('en'):
        translations['en'] = version_slug

    run_on_app_servers('mkdir -p {0}'.format(
        os.path.join(version.project.doc_path, 'translations')))

    for (language, slug) in translations.items():
        log.debug(
            LOG_TEMPLATE.format(project=version.project.slug,
                                version=version.slug,
                                msg="Symlinking translation: %s->%s" %
                                (language, slug)))

        # The directory for this specific translation
        symlink = version.project.translations_symlink_path(language)
        translation_path = os.path.join(settings.DOCROOT, slug, 'rtd-builds')
        run_on_app_servers('ln -nsf {0} {1}'.format(translation_path, symlink))
Example #2
0
def symlink_subprojects(project):
    """Symlink project subprojects

    Link from HOME/user_builds/project/subprojects/<project> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    # Subprojects
    rels = project.subprojects.all()
    for rel in rels:
        # A mapping of slugs for the subproject URL to the actual built documentation
        from_to = OrderedDict({rel.child.slug: rel.child.slug})
        if rel.alias:
            from_to[rel.alias] = rel.child.slug
        # Fix underscore in slugs
        if '_' in rel.child.slug:
            from_to[rel.child.slug.replace('_', '-')] = rel.child.slug
        for from_slug, to_slug in from_to.items():
            log.debug(LOG_TEMPLATE
                      .format(project=project.slug,
                              version=project.get_default_version(),
                              msg="Symlinking subproject: %s" % from_slug))

            # The directory for this specific subproject
            symlink = project.subprojects_symlink_path(from_slug)
            run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))

            # Where the actual docs live
            docs_dir = os.path.join(settings.DOCROOT, to_slug, 'rtd-builds')
            run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #3
0
def symlink_subprojects(version):
    """Symlink project subprojects

    Link from HOME/user_builds/project/subprojects/<project> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    # Subprojects
    if getattr(settings, 'DONT_HIT_DB', True):
        subproject_slugs = [data['slug']
                            for data in (api.project(version.project.pk)
                                         .subprojects
                                         .get()['subprojects'])]
    else:
        rels = version.project.subprojects.all()
        subproject_slugs = [rel.child.slug for rel in rels]
    for slug in subproject_slugs:
        slugs = [slug]
        if '_' in slugs[0]:
            slugs.append(slugs[0].replace('_', '-'))
        for subproject_slug in slugs:
            log.debug(LOG_TEMPLATE
                      .format(project=version.project.slug,
                              version=version.slug,
                              msg="Symlinking subproject: %s" % subproject_slug))

            # The directory for this specific subproject
            symlink = version.project.subprojects_symlink_path(subproject_slug)
            run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))

            # Where the actual docs live
            docs_dir = os.path.join(settings.DOCROOT, subproject_slug, 'rtd-builds')
            run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #4
0
def symlink_subprojects(project):
    """Symlink project subprojects

    Link from HOME/user_builds/project/subprojects/<project> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    # Subprojects
    rels = project.subprojects.all()
    for rel in rels:
        # A mapping of slugs for the subproject URL to the actual built documentation
        from_to = OrderedDict({rel.child.slug: rel.child.slug})
        if rel.alias:
            from_to[rel.alias] = rel.child.slug
        # Fix underscore in slugs
        if '_' in rel.child.slug:
            from_to[rel.child.slug.replace('_', '-')] = rel.child.slug
        for from_slug, to_slug in from_to.items():
            log.debug(LOG_TEMPLATE
                      .format(project=project.slug,
                              version=project.get_default_version(),
                              msg="Symlinking subproject: %s" % from_slug))

            # The directory for this specific subproject
            symlink = project.subprojects_symlink_path(from_slug)
            run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))

            # Where the actual docs live
            docs_dir = os.path.join(settings.DOCROOT, to_slug, 'rtd-builds')
            run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #5
0
def symlink_subprojects(version):
    """
    Link from HOME/user_builds/project/subprojects/<project> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    # Subprojects
    if getattr(settings, 'DONT_HIT_DB', True):
        subproject_slugs = [
            data['slug'] for data in api.project(
                version.project.pk).subprojects.get()['subprojects']
        ]
    else:
        rels = version.project.subprojects.all()
        subproject_slugs = [rel.child.slug for rel in rels]
    for slug in subproject_slugs:
        slugs = [slug]
        if '_' in slugs[0]:
            slugs.append(slugs[0].replace('_', '-'))
        for subproject_slug in slugs:
            log.debug(
                LOG_TEMPLATE.format(project=version.project.slug,
                                    version=version.slug,
                                    msg="Symlinking subproject: %s" %
                                    subproject_slug))

            # The directory for this specific subproject
            symlink = version.project.subprojects_symlink_path(subproject_slug)
            run_on_app_servers('mkdir -p %s' %
                               '/'.join(symlink.split('/')[:-1]))

            # Where the actual docs live
            docs_dir = os.path.join(settings.DOCROOT, subproject_slug,
                                    'rtd-builds')
            run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #6
0
def remove_path_from_web(path):
    """Remove the given path from the web servers file system."""
    # Santity check  for spaces in the path since spaces would result in
    # deleting unpredictable paths with "rm -rf".
    assert ' ' not in path, "No spaces allowed in path"

    # TODO: We need some proper escaping here for the given path.
    run_on_app_servers('rm -rf {path}'.format(path=path))
Example #7
0
def remove_symlink_single_version(version):
    """Remove single_version symlink"""
    log.debug(
        LOG_TEMPLATE.format(project=version.project.slug,
                            version=version.project.get_default_version(),
                            msg="Removing symlink for single_version"))
    symlink = version.project.single_version_symlink_path()
    run_on_app_servers('rm -f %s' % symlink)
Example #8
0
def remove_symlink_single_version(version):
    """Remove single_version symlink"""
    log.debug(LOG_TEMPLATE.format(
        project=version.project.slug,
        version=version.project.get_default_version(),
        msg="Removing symlink for single_version")
    )
    symlink = version.project.single_version_symlink_path()
    run_on_app_servers('rm -f %s' % symlink)
Example #9
0
def remove_path_from_web(path):
    """
    Remove the given path from the web servers file system.
    """
    # Santity check  for spaces in the path since spaces would result in
    # deleting unpredictable paths with "rm -rf".
    assert ' ' not in path, "No spaces allowed in path"

    # TODO: We need some proper escaping here for the given path.
    run_on_app_servers('rm -rf {path}'.format(path=path))
Example #10
0
def symlink_cname(version):
    build_dir = version.project.rtd_build_path(version.slug)
    #Chop off the version from the end.
    build_dir = '/'.join(build_dir.split('/')[:-1])
    redis_conn = redis.Redis(**settings.REDIS)
    try:
        cnames = redis_conn.smembers('rtd_slug:v1:%s' % version.project.slug)
    except redis.ConnectionError:
        return
    for cname in cnames:
        log.info("Symlinking %s" % cname)
        symlink = version.project.rtd_cname_path(cname)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (build_dir, symlink))
Example #11
0
def symlink_cnames(project):
    """Symlink project CNAME domains

    OLD
    Link from HOME/user_builds/cnames/<cname> ->
              HOME/user_builds/<project>/rtd-builds/
    NEW
    Link from HOME/user_builds/cnametoproject/<cname> ->
              HOME/user_builds/<project>/
    """
    domains = Domain.objects.filter(project=project)
    for domain in domains:
        log.debug(LOG_TEMPLATE.format(
            project=project.slug,
            version=project.get_default_version(),
            msg="Symlinking CNAME: %s" % domain.domain)
        )
        docs_dir = project.rtd_build_path()
        # Chop off the version from the end.
        docs_dir = '/'.join(docs_dir.split('/')[:-1])
        # Old symlink location -- Keep this here til we change nginx over
        symlink = project.cnames_symlink_path(domain.domain)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
        # New symlink location
        new_docs_dir = project.doc_path
        new_cname_symlink = os.path.join(
            getattr(settings, 'SITE_ROOT'),
            'cnametoproject',
            domain.domain,
        )
        run_on_app_servers('mkdir -p %s' % '/'.join(new_cname_symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (new_docs_dir, new_cname_symlink))
Example #12
0
def symlink_cnames(project):
    """Symlink project CNAME domains

    OLD
    Link from HOME/user_builds/cnames/<cname> ->
              HOME/user_builds/<project>/rtd-builds/
    NEW
    Link from HOME/user_builds/cnametoproject/<cname> ->
              HOME/user_builds/<project>/
    """
    domains = Domain.objects.filter(project=project, cname=True)
    for domain in domains:
        log.debug(LOG_TEMPLATE.format(
            project=project.slug,
            version=project.get_default_version(),
            msg="Symlinking CNAME: %s" % domain.clean_host)
        )
        docs_dir = project.rtd_build_path()
        # Chop off the version from the end.
        docs_dir = '/'.join(docs_dir.split('/')[:-1])
        # Old symlink location -- Keep this here til we change nginx over
        symlink = project.cnames_symlink_path(domain.clean_host)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
        # New symlink location
        new_docs_dir = project.doc_path
        new_cname_symlink = os.path.join(
            getattr(settings, 'SITE_ROOT'),
            'cnametoproject',
            domain.clean_host,
        )
        run_on_app_servers('mkdir -p %s' % '/'.join(new_cname_symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (new_docs_dir, new_cname_symlink))
Example #13
0
def symlink_cnames(version):
    """Symlink project CNAME domains

    OLD
    Link from HOME/user_builds/cnames/<cname> ->
              HOME/user_builds/<project>/rtd-builds/
    NEW
    Link from HOME/user_builds/cnametoproject/<cname> ->
              HOME/user_builds/<project>/
    """
    try:
        redis_conn = redis.Redis(**settings.REDIS)
        cnames = redis_conn.smembers('rtd_slug:v1:%s' % version.project.slug)
    except redis.ConnectionError:
        log.error(LOG_TEMPLATE
                  .format(project=version.project.slug, version=version.slug,
                          msg='Failed to symlink cnames, Redis error.'),
                  exc_info=True)
        return
    for cname in cnames:
        log.debug(LOG_TEMPLATE
                  .format(project=version.project.slug, version=version.slug,
                          msg="Symlinking CNAME: %s" % cname))
        docs_dir = version.project.rtd_build_path(version.slug)
        # Chop off the version from the end.
        docs_dir = '/'.join(docs_dir.split('/')[:-1])
        # Old symlink location -- Keep this here til we change nginx over
        symlink = version.project.cnames_symlink_path(cname)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
        # New symlink location
        new_docs_dir = version.project.doc_path
        new_cname_symlink = os.path.join(getattr(settings, 'SITE_ROOT'), 'cnametoproject', cname)
        run_on_app_servers('mkdir -p %s' % '/'.join(new_cname_symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (new_docs_dir, new_cname_symlink))
Example #14
0
def symlink_cname(version):
    build_dir = version.project.rtd_build_path(version.slug)
    #Chop off the version from the end.
    build_dir = '/'.join(build_dir.split('/')[:-1])
    redis_conn = redis.Redis(**settings.REDIS)
    try:
        cnames = redis_conn.smembers('rtd_slug:v1:%s' % version.project.slug)
    except redis.ConnectionError:
        return
    for cname in cnames:
        log.info("Symlinking %s" % cname)
        symlink = version.project.rtd_cname_path(cname)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (build_dir, symlink))
Example #15
0
def symlink_single_version(version):
    """
    Link from HOME/user_builds/<project>/single_version ->
              HOME/user_builds/<project>/rtd-builds/<default_version>/
    """
    default_version = version.project.get_default_version()
    log.debug(LOG_TEMPLATE.format(project=version.project.slug, version=default_version, msg="Symlinking single_version"))

    # The single_version directory
    symlink = version.project.single_version_symlink_path()
    run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))

    # Where the actual docs live
    docs_dir = os.path.join(settings.DOCROOT, version.project.slug, 'rtd-builds', default_version)
    run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #16
0
def symlink_single_version(project):
    """Symlink project single version

    Link from HOME/user_builds/<project>/single_version ->
              HOME/user_builds/<project>/rtd-builds/<default_version>/
    """
    default_version = project.get_default_version()
    log.debug(LOG_TEMPLATE
              .format(project=project.slug, version=default_version,
                      msg="Symlinking single_version"))

    # The single_version directory
    symlink = project.single_version_symlink_path()
    run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))

    # Where the actual docs live
    docs_dir = os.path.join(settings.DOCROOT, project.slug, 'rtd-builds', default_version)
    run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
Example #17
0
def symlink_translations(version):
    """Symlink project translations

    Link from HOME/user_builds/project/translations/<lang> ->
              HOME/user_builds/<project>/rtd-builds/
    """
    translations = {}

    if getattr(settings, 'DONT_HIT_DB', True):
        for trans in (api
                      .project(version.project.pk)
                      .translations.get()['translations']):
            translations[trans['language']] = trans['slug']
    else:
        for trans in version.project.translations.all():
            translations[trans.language] = trans.slug

    # Default language, and pointer for 'en'
    version_slug = version.project.slug.replace('_', '-')
    translations[version.project.language] = version_slug
    if 'en' not in translations:
        translations['en'] = version_slug

    run_on_app_servers(
        'mkdir -p {0}'
        .format(os.path.join(version.project.doc_path, 'translations')))

    for (language, slug) in translations.items():
        log.debug(LOG_TEMPLATE.format(
            project=version.project.slug,
            version=version.slug,
            msg="Symlinking translation: %s->%s" % (language, slug)
        ))

        # The directory for this specific translation
        symlink = version.project.translations_symlink_path(language)
        translation_path = os.path.join(settings.DOCROOT, slug, 'rtd-builds')
        run_on_app_servers('ln -nsf {0} {1}'.format(translation_path, symlink))
Example #18
0
def symlink_cnames(version):
    """Symlink project CNAME domains

    OLD
    Link from HOME/user_builds/cnames/<cname> ->
              HOME/user_builds/<project>/rtd-builds/
    NEW
    Link from HOME/user_builds/cnametoproject/<cname> ->
              HOME/user_builds/<project>/
    """
    try:
        redis_conn = redis.Redis(**settings.REDIS)
        cnames = redis_conn.smembers('rtd_slug:v1:%s' % version.project.slug)
    except redis.ConnectionError:
        log.error(LOG_TEMPLATE.format(
            project=version.project.slug,
            version=version.slug,
            msg='Failed to symlink cnames, Redis error.'),
                  exc_info=True)
        return
    for cname in cnames:
        log.debug(
            LOG_TEMPLATE.format(project=version.project.slug,
                                version=version.slug,
                                msg="Symlinking CNAME: %s" % cname))
        docs_dir = version.project.rtd_build_path(version.slug)
        # Chop off the version from the end.
        docs_dir = '/'.join(docs_dir.split('/')[:-1])
        # Old symlink location -- Keep this here til we change nginx over
        symlink = version.project.cnames_symlink_path(cname)
        run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
        # New symlink location
        new_docs_dir = version.project.doc_path
        new_cname_symlink = os.path.join(getattr(settings, 'SITE_ROOT'),
                                         'cnametoproject', cname)
        run_on_app_servers('mkdir -p %s' %
                           '/'.join(new_cname_symlink.split('/')[:-1]))
        run_on_app_servers('ln -nsf %s %s' % (new_docs_dir, new_cname_symlink))
Example #19
0
def clear_epub_artifacts(version):
    run_on_app_servers("rm -rf %s" % version.project.get_production_media_path(type_="epub", version_slug=version.slug))
Example #20
0
def clear_epub_artifacts(version):
    run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(
        type='epub', version_slug=version.slug))
Example #21
0
def clear_html_artifacts(version):
    run_on_app_servers('rm -rf %s' % version.project.rtd_build_path(version=version.slug))
Example #22
0
def clear_htmlzip_artifacts(version):
    run_on_app_servers('rm -rf %s'
                       % version.project.get_production_media_path(
                           type_='htmlzip', version_slug=version.slug))
Example #23
0
def clear_html_artifacts(version):
    run_on_app_servers('rm -rf %s' %
                       version.project.rtd_build_path(version=version.slug))
Example #24
0
def clear_htmlzip_artifacts(version):
    run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(
        type_='htmlzip', version_slug=version.slug))
Example #25
0
def clear_epub_artifacts(version):
    run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(type='epub', version_slug=version.slug))