def symlink_subprojects(version): """ Link from HOME/user_builds/project/subprojects/<project> -> HOME/user_builds/<project>/rtd-builds/ """ # Subprojects subprojects = apiv2.project( version.project.pk).subprojects.get()['subprojects'] for subproject_data in subprojects: slugs = [subproject_data['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))
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 apiv2.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))
def remove_symlink_single_version(version): """Remove single_version symlink""" log.debug( LOG_TEMPLATE.format(project=version.project.slug, version=version.project.default_version, msg="Removing symlink for single_version")) symlink = version.project.single_version_symlink_path() run_on_app_servers('rm %s' % symlink)
def remove_symlink_single_version(version): """Remove single_version symlink""" log.debug(LOG_TEMPLATE.format( project=version.project.slug, version=version.project.default_version, msg="Removing symlink for single_version") ) symlink = version.project.single_version_symlink_path() run_on_app_servers('rm %s' % symlink)
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ try: translations = apiv2.project( version.project.pk).translations.get()['translations'] for translation_data in translations: translation = make_api_project(translation_data) # Get the first part of the symlink. base_path = version.project.translations_path(translation.language) translation_dir = translation.rtd_build_path(translation.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) log.info("Symlinking %s" % translation.language) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path)) # Hack in the en version for backwards compat base_path = version.project.translations_path('en') translation_dir = version.project.rtd_build_path(version.project.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path)) except Exception, e: log.error("Error in symlink_translations: %s" % e) # Don't fail on translation bits pass
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.debug(LOG_TEMPLATE.format(project=version.project.slug, version=version.slug, msg="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))
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))
def symlink_cnames(version): """ 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))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ try: translations = apiv2.project(version.project.pk).translations.get()['translations'] for translation_data in translations: translation = make_api_project(translation_data) # Get the first part of the symlink. base_path = version.project.translations_path(translation.language) translation_dir = translation.rtd_build_path(translation.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) log.info("Symlinking %s" % translation.language) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path)) # Hack in the en version for backwards compat base_path = version.project.translations_path('en') translation_dir = version.project.rtd_build_path(version.project.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path)) except Exception, e: log.error("Error in symlink_translations: %s" % e) # Don't fail on translation bits pass
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))
def clear_artifacts(version_pk): """ Remove artifacts from the web servers. """ version = Version.objects.get(pk=version_pk) run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(type='pdf', version_slug=version.slug)) run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(type='epub', version_slug=version.slug)) run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(type='htmlzip', version_slug=version.slug)) run_on_app_servers('rm -rf %s' % version.project.rtd_build_path(version=version.slug))
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.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))
def symlink_subprojects(version): """ Link from HOME/user_builds/project/subprojects/<project> -> HOME/user_builds/<project>/rtd-builds/ """ # Subprojects subprojects = apiv2.project(version.project.pk).subprojects.get()['subprojects'] for subproject_data in subprojects: subproject_slug = subproject_data['slug'] 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))
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))
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 (apiv2 .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))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ translations = version.project.translations.all() for translation in translations: # Get the first part of the symlink. base_path = version.project.translations_path(translation.language) translation_dir = translation.rtd_build_path(translation.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) log.info("Symlinking %s" % translation.language) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path)) # Hack in the en version for backwards compat base_path = version.project.translations_path('en') translation_dir = version.project.rtd_build_path(version.project.slug) # Chop off the version from the end. translation_dir = '/'.join(translation_dir.split('/')[:-1]) run_on_app_servers('mkdir -p %s' % '/'.join(base_path.split('/')[:-1])) run_on_app_servers('ln -nsf %s %s' % (translation_dir, base_path))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ translations = apiv2.project(version.project.pk).translations.get()['translations'] for translation_data in translations: translation_slug = translation_data['slug'] translation_language = translation_data['language'] log.debug(LOG_TEMPLATE.format(project=version.project.slug, version=version.slug, msg="Symlinking translation: %s->%s" % (translation_language, translation_slug))) # The directory for this specific translation symlink = version.project.translations_symlink_path(translation_language) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) # Where the actual docs live docs_dir = os.path.join(settings.DOCROOT, translation_slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Hack in the en version for backwards compat symlink = version.project.translations_symlink_path('en') run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) docs_dir = os.path.join(settings.DOCROOT, version.project.slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ translations = apiv2.project(version.project.pk).translations.get()['translations'] for translation_data in translations: translation_slug = translation_data['slug'] translation_language = translation_data['language'] log.debug(LOG_TEMPLATE.format(project=version.project.slug, version=version.slug, msg="Symlinking translation: %s->%s" % (translation_language, translation_slug))) # The directory for this specific translation symlink = version.project.translations_symlink_path(translation_language) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) # Where the actual docs live docs_dir = os.path.join(settings.DOCROOT, translation_slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Hack in the en version for backwards compat symlink = version.project.translations_symlink_path('en') docs_dir = os.path.join(settings.DOCROOT, version.project.slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ translations = apiv2.project(version.project.pk).translations.get()["translations"] for translation_data in translations: translation_slug = translation_data["slug"] translation_language = translation_data["language"] log.debug( LOG_TEMPLATE.format( project=version.project.slug, version=version.slug, msg="Symlinking translation: %s->%s" % (translation_language, translation_slug), ) ) # The directory for this specific translation symlink = version.project.translations_symlink_path(translation_language) run_on_app_servers("mkdir -p %s" % "/".join(symlink.split("/")[:-1])) # Where the actual docs live docs_dir = os.path.join(settings.DOCROOT, translation_slug, "rtd-builds") run_on_app_servers("ln -nsf %s %s" % (docs_dir, symlink)) # Hack in the en version for backwards compat symlink = version.project.translations_symlink_path("en") run_on_app_servers("mkdir -p %s" % "/".join(symlink.split("/")[:-1])) docs_dir = os.path.join(version.project.doc_path, "rtd-builds") run_on_app_servers("ln -nsf %s %s" % (docs_dir, symlink)) # Add the main language project to nginx too if version.project.language is not "en": symlink = version.project.translations_symlink_path(version.project.language) run_on_app_servers("mkdir -p %s" % "/".join(symlink.split("/")[:-1])) docs_dir = os.path.join(settings.DOCROOT, version.project.slug, "rtd-builds") run_on_app_servers("ln -nsf %s %s" % (docs_dir, symlink))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ if getattr(settings, 'DONT_HIT_DB', True): translations = [ (trans['slug'], trans['language']) for trans in apiv2.project( version.project.pk).translations.get()['translations'] ] else: translations = [(trans.slug, trans.language) for trans in version.project.translations.all()] for slug, language in translations: 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) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) # Where the actual docs live docs_dir = os.path.join(settings.DOCROOT, slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Hack in the en version for backwards compat symlink = version.project.translations_symlink_path('en') run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) docs_dir = os.path.join(version.project.doc_path, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Add the main language project to nginx too if version.project.language is not 'en': symlink = version.project.translations_symlink_path( version.project.language) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) docs_dir = os.path.join(settings.DOCROOT, version.project.slug.replace('_', '-'), 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))
def symlink_translations(version): """ Link from HOME/user_builds/project/translations/<lang> -> HOME/user_builds/<project>/rtd-builds/ """ if getattr(settings, 'DONT_HIT_DB', True): translations = [(trans['slug'], trans['language']) for trans in apiv2.project(version.project.pk).translations.get()['translations']] else: translations = [(trans.slug, trans.language) for trans in version.project.translations.all()] for slug, language in translations: 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) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) # Where the actual docs live docs_dir = os.path.join(settings.DOCROOT, slug, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Hack in the en version for backwards compat symlink = version.project.translations_symlink_path('en') run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) docs_dir = os.path.join(version.project.doc_path, 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink)) # Add the main language project to nginx too if version.project.language is not 'en': symlink = version.project.translations_symlink_path(version.project.language) run_on_app_servers('mkdir -p %s' % '/'.join(symlink.split('/')[:-1])) docs_dir = os.path.join(settings.DOCROOT, version.project.slug.replace('_', '-'), 'rtd-builds') run_on_app_servers('ln -nsf %s %s' % (docs_dir, symlink))