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_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))
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))
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))
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))
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)
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)
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))
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(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))
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))
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))
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))
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))
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))
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))
def clear_epub_artifacts(version): run_on_app_servers("rm -rf %s" % version.project.get_production_media_path(type_="epub", version_slug=version.slug))
def clear_epub_artifacts(version): run_on_app_servers('rm -rf %s' % version.project.get_production_media_path( type='epub', version_slug=version.slug))
def clear_html_artifacts(version): run_on_app_servers('rm -rf %s' % version.project.rtd_build_path(version=version.slug))
def clear_htmlzip_artifacts(version): run_on_app_servers('rm -rf %s' % version.project.get_production_media_path( type_='htmlzip', version_slug=version.slug))
def clear_epub_artifacts(version): run_on_app_servers('rm -rf %s' % version.project.get_production_media_path(type='epub', version_slug=version.slug))