def get_version(version_pk): """ Retrieve version data from the API. :param version_pk: version pk to sync :type version_pk: int :returns: a data-complete version object :rtype: builds.models.APIVersion """ version_data = api_v2.version(version_pk).get() return APIVersion(**version_data)
def version_from_slug(slug, version): from readthedocs.builds.models import Version, APIVersion from readthedocs.api.v2.client import api if settings.DONT_HIT_DB: version_data = api.version().get( project=slug, slug=version, )['results'][0] v = APIVersion(**version_data) else: v = Version.objects.get(project__slug=slug, slug=version) return v
def get_config_params(self): """Get configuration parameters to be rendered into the conf file.""" # TODO this should be handled better in the theme conf_py_path = os.path.join( os.path.sep, os.path.dirname( os.path.relpath( self.config_file, self.project.checkout_path(self.version.slug), ), ), '', ) remote_version = self.version.commit_name github_user, github_repo = version_utils.get_github_username_repo( url=self.project.repo, ) github_version_is_editable = (self.version.type == 'branch') display_github = github_user is not None bitbucket_user, bitbucket_repo = version_utils.get_bitbucket_username_repo( # noqa url=self.project.repo, ) bitbucket_version_is_editable = (self.version.type == 'branch') display_bitbucket = bitbucket_user is not None gitlab_user, gitlab_repo = version_utils.get_gitlab_username_repo( url=self.project.repo, ) gitlab_version_is_editable = (self.version.type == 'branch') display_gitlab = gitlab_user is not None versions = [] downloads = [] subproject_urls = [] # Avoid hitting database and API if using Docker build environment if settings.DONT_HIT_API: if self.project.has_feature(Feature.ALL_VERSIONS_IN_HTML_CONTEXT): versions = self.project.active_versions() else: versions = self.project.active_versions().filter( privacy_level=PUBLIC, ) downloads = self.version.get_downloads(pretty=True) subproject_urls = self.project.get_subproject_urls() else: try: versions = self.project.api_versions() if not self.project.has_feature( Feature.ALL_VERSIONS_IN_HTML_CONTEXT): versions = [ v for v in versions if v.privacy_level == PUBLIC ] downloads = api.version(self.version.pk).get()['downloads'] subproject_urls = self.project.get_subproject_urls() except ConnectionError: log.exception( 'Timeout while fetching versions/downloads/subproject_urls for Sphinx context. ' 'project: %s version: %s', self.project.slug, self.version.slug, ) data = { 'html_theme': 'sphinx_rtd_theme', 'html_theme_import': 'sphinx_rtd_theme', 'current_version': self.version.verbose_name, 'project': self.project, 'version': self.version, 'settings': settings, 'conf_py_path': conf_py_path, 'api_host': settings.PUBLIC_API_URL, 'commit': self.project.vcs_repo(self.version.slug).commit, 'versions': versions, 'downloads': downloads, 'subproject_urls': subproject_urls, # GitHub 'github_user': github_user, 'github_repo': github_repo, 'github_version': remote_version, 'github_version_is_editable': github_version_is_editable, 'display_github': display_github, # BitBucket 'bitbucket_user': bitbucket_user, 'bitbucket_repo': bitbucket_repo, 'bitbucket_version': remote_version, 'bitbucket_version_is_editable': bitbucket_version_is_editable, 'display_bitbucket': display_bitbucket, # GitLab 'gitlab_user': gitlab_user, 'gitlab_repo': gitlab_repo, 'gitlab_version': remote_version, 'gitlab_version_is_editable': gitlab_version_is_editable, 'display_gitlab': display_gitlab, # Features 'dont_overwrite_sphinx_context': self.project.has_feature(Feature.DONT_OVERWRITE_SPHINX_CONTEXT, ), } finalize_sphinx_context_data.send( sender=self.__class__, build_env=self.build_env, data=data, ) return data
def on_success(self, retval, task_id, args, kwargs): html = self.data.outcomes['html'] search = self.data.outcomes['search'] localmedia = self.data.outcomes['localmedia'] pdf = self.data.outcomes['pdf'] epub = self.data.outcomes['epub'] # Store build artifacts to storage (local or cloud storage) self.store_build_artifacts( self.data.build_env, html=html, search=search, localmedia=localmedia, pdf=pdf, epub=epub, ) # NOTE: we are updating the db version instance *only* when # HTML are built successfully. if html: try: api_v2.version(self.data.version.pk).patch({ 'built': True, 'documentation_type': self.get_final_doctype(), 'has_pdf': pdf, 'has_epub': epub, 'has_htmlzip': localmedia, }) except HttpClientError: # NOTE: I think we should fail the build if we cannot update # the version at this point. Otherwise, we will have inconsistent data log.exception('Updating version failed, skipping file sync.', ) # Index search data fileify.delay( version_pk=self.data.version.pk, commit=self.data.build['commit'], build=self.data.build['id'], search_ranking=self.data.config.search.ranking, search_ignore=self.data.config.search.ignore, ) if not self.data.project.has_valid_clone: self.set_valid_clone() self.send_notifications( self.data.version.pk, self.data.build['id'], event=WebHookEvent.BUILD_PASSED, ) if self.data.build_commit: send_external_build_status( version_type=self.data.version.type, build_pk=self.data.build['id'], commit=self.data.build_commit, status=BUILD_STATUS_SUCCESS, ) # Update build object self.data.build['success'] = True
def get_config_params(self): """Get configuration parameters to be rendered into the conf file.""" # TODO this should be handled better in the theme conf_py_path = os.path.join( os.path.sep, os.path.dirname( os.path.relpath( self.config_file, self.project.checkout_path(self.version.slug), ), ), '', ) remote_version = self.version.commit_name github_user, github_repo = version_utils.get_github_username_repo( url=self.project.repo, ) github_version_is_editable = (self.version.type == 'branch') display_github = github_user is not None bitbucket_user, bitbucket_repo = version_utils.get_bitbucket_username_repo( # noqa url=self.project.repo, ) bitbucket_version_is_editable = (self.version.type == 'branch') display_bitbucket = bitbucket_user is not None gitlab_user, gitlab_repo = version_utils.get_gitlab_username_repo( url=self.project.repo, ) gitlab_version_is_editable = (self.version.type == 'branch') display_gitlab = gitlab_user is not None # Avoid hitting database and API if using Docker build environment if settings.DONT_HIT_API: versions = self.project.active_versions() downloads = self.version.get_downloads(pretty=True) else: versions = self.project.api_versions() downloads = api.version(self.version.pk).get()['downloads'] data = { 'html_theme': 'sphinx_rtd_theme', 'html_theme_import': 'sphinx_rtd_theme', 'current_version': self.version.verbose_name, 'project': self.project, 'version': self.version, 'settings': settings, 'conf_py_path': conf_py_path, 'api_host': settings.PUBLIC_API_URL, 'proxied_api_host': settings.RTD_PROXIED_API_URL, 'commit': self.project.vcs_repo(self.version.slug).commit, 'versions': versions, 'downloads': downloads, # GitHub 'github_user': github_user, 'github_repo': github_repo, 'github_version': remote_version, 'github_version_is_editable': github_version_is_editable, 'display_github': display_github, # BitBucket 'bitbucket_user': bitbucket_user, 'bitbucket_repo': bitbucket_repo, 'bitbucket_version': remote_version, 'bitbucket_version_is_editable': bitbucket_version_is_editable, 'display_bitbucket': display_bitbucket, # GitLab 'gitlab_user': gitlab_user, 'gitlab_repo': gitlab_repo, 'gitlab_version': remote_version, 'gitlab_version_is_editable': gitlab_version_is_editable, 'display_gitlab': display_gitlab, # Features 'dont_overwrite_sphinx_context': self.project.has_feature(Feature.DONT_OVERWRITE_SPHINX_CONTEXT, ), } finalize_sphinx_context_data.send( sender=self.__class__, build_env=self.build_env, data=data, ) return data
def get_config_params(self): """Get configuration parameters to be rendered into the conf file.""" # TODO this should be handled better in the theme conf_py_path = os.path.join( os.path.sep, os.path.dirname( os.path.relpath( self.config_file, self.project.checkout_path(self.version.slug), ), ), '', ) remote_version = self.version.commit_name github_user, github_repo = version_utils.get_github_username_repo( url=self.project.repo, ) github_version_is_editable = (self.version.type == 'branch') display_github = github_user is not None bitbucket_user, bitbucket_repo = version_utils.get_bitbucket_username_repo( # noqa url=self.project.repo, ) bitbucket_version_is_editable = (self.version.type == 'branch') display_bitbucket = bitbucket_user is not None gitlab_user, gitlab_repo = version_utils.get_gitlab_username_repo( url=self.project.repo, ) gitlab_version_is_editable = (self.version.type == 'branch') display_gitlab = gitlab_user is not None # Avoid hitting database and API if using Docker build environment if settings.DONT_HIT_API: versions = self.project.active_versions() downloads = self.version.get_downloads(pretty=True) else: versions = self.project.api_versions() downloads = api.version(self.version.pk).get()['downloads'] data = { 'html_theme': 'sphinx_rtd_theme', 'html_theme_import': 'sphinx_rtd_theme', 'current_version': self.version.verbose_name, 'project': self.project, 'version': self.version, 'settings': settings, 'conf_py_path': conf_py_path, 'api_host': settings.PUBLIC_API_URL, 'commit': self.project.vcs_repo(self.version.slug).commit, 'versions': versions, 'downloads': downloads, # GitHub 'github_user': github_user, 'github_repo': github_repo, 'github_version': remote_version, 'github_version_is_editable': github_version_is_editable, 'display_github': display_github, # BitBucket 'bitbucket_user': bitbucket_user, 'bitbucket_repo': bitbucket_repo, 'bitbucket_version': remote_version, 'bitbucket_version_is_editable': bitbucket_version_is_editable, 'display_bitbucket': display_bitbucket, # GitLab 'gitlab_user': gitlab_user, 'gitlab_repo': gitlab_repo, 'gitlab_version': remote_version, 'gitlab_version_is_editable': gitlab_version_is_editable, 'display_gitlab': display_gitlab, # Features 'dont_overwrite_sphinx_context': self.project.has_feature( Feature.DONT_OVERWRITE_SPHINX_CONTEXT, ), 'use_pdf_latexmk': self.project.has_feature( Feature.USE_PDF_LATEXMK, ), } finalize_sphinx_context_data.send( sender=self.__class__, build_env=self.build_env, data=data, ) return data