def make_api_version(version_data): from builds.models import Version for key in ['resource_uri', 'absolute_url']: if key in version_data: del version_data[key] project_data = version_data['project'] project = make_api_project(project_data) version_data['project'] = project ver = Version(**version_data) ver.save = _new_save return ver
def make_api_version(version_data): from builds.models import Version for key in ['resource_uri', 'absolute_url', 'downloads']: if key in version_data: del version_data[key] project_data = version_data['project'] project = make_api_project(project_data) version_data['project'] = project ver = Version(**version_data) ver.save = _new_save return ver
def update_docs(pk, record=True, pdf=True, man=True, epub=True, version_pk=None, force=False, **kwargs): """ The main entry point for updating documentation. It handles all of the logic around whether a project is imported or we created it. Then it will build the html docs and other requested parts. It also handles clearing the varnish cache. `pk` Primary key of the project to update `record` Whether or not to keep a record of the update in the database. Useful for preventing changes visible to the end-user when running commands from the shell, for example. """ ### # Handle passed in arguments ### update_output = kwargs.get('update_output', {}) project_data = api.project(pk).get() del project_data['users'] del project_data['resource_uri'] del project_data['absolute_url'] project = Project(**project_data) # Prevent saving the temporary Project instance def new_save(*args, **kwargs): log.warning("Called save on a non-real object.") return 0 project.save = new_save log.info("Building %s" % project) if version_pk: version_data = api.version(version_pk).get() del version_data['resource_uri'] else: #Create or use the 'latest' branch, which is the default for a project. branch = project.default_branch or project.vcs_repo().fallback_branch try: version_data = api.version( project.slug).get(slug='latest')['objects'][0] del version_data['resource_uri'] except (slumber.exceptions.HttpClientError, IndexError) as exc: #if exc.response.status_code in [404,500]: version_data = dict( project='/api/v1/project/%s/' % project.pk, slug='latest', active=True, verbose_name='latest', identifier=branch, ) try: version_data = api.version.post(version_data) del version_data['resource_uri'] except Exception as e: log.info("Exception in creating version: %s" % e) #raise e version_data['project'] = project version = Version(**version_data) version.save = new_save if not version_pk: #Lots of course correction. to_save = False if not version.verbose_name: version_data['verbose_name'] = 'latest' to_save = True if not version.active: version_data['active'] = True to_save = True if version.identifier != branch: version_data['identifier'] = branch to_save = True if to_save: version_data[ 'project'] = "/api/v1/version/%s/" % version_data['project'].pk api.version(version.pk).put(version_data) if record: #Create Build Object. build = api.build.post( dict( project='/api/v1/project/%s/' % project.pk, version='/api/v1/version/%s/' % version.pk, type='html', state='triggered', )) else: build = {} #Make Dirs path = project.doc_path if not os.path.exists(path): os.makedirs(path) with project.repo_lock(30): if project.is_imported: try: update_output = update_imported_docs(project, version) except ProjectImportError, err: log.error("Failed to import project; skipping build.", exc_info=True) build['state'] = 'finished' build[ 'setup_error'] = 'Failed to import project; skipping build.\nPlease make sure your repo is correct and you have a conf.py' api.build(build['id']).put(build) return False else:
def update_docs(pk, record=True, pdf=True, man=True, epub=True, version_pk=None, force=False, **kwargs): """ The main entry point for updating documentation. It handles all of the logic around whether a project is imported or we created it. Then it will build the html docs and other requested parts. It also handles clearing the varnish cache. `pk` Primary key of the project to update `record` Whether or not to keep a record of the update in the database. Useful for preventing changes visible to the end-user when running commands from the shell, for example. """ ### # Handle passed in arguments ### update_output = kwargs.get('update_output', {}) project_data = api.project(pk).get() del project_data['users'] del project_data['resource_uri'] del project_data['absolute_url'] project = Project(**project_data) # Prevent saving the temporary Project instance def new_save(*args, **kwargs): log.warning("Called save on a non-real object.") return 0 project.save = new_save log.info("Building %s" % project) if version_pk: version_data = api.version(version_pk).get() del version_data['resource_uri'] else: #Create or use the 'latest' branch, which is the default for a project. branch = project.default_branch or project.vcs_repo().fallback_branch try: version_data = api.version(project.slug).get(slug='latest')['objects'][0] del version_data['resource_uri'] except (slumber.exceptions.HttpClientError, IndexError) as exc: #if exc.response.status_code in [404,500]: version_data = dict( project='/api/v1/project/%s/' % project.pk, slug='latest', active=True, verbose_name='latest', identifier=branch, ) try: version_data = api.version.post(version_data) del version_data['resource_uri'] except Exception as e: raise e version_data['project'] = project version = Version(**version_data) version.save = new_save if not version_pk: #Lots of course correction. to_save = False if not version.verbose_name: version_data['verbose_name'] = 'latest' to_save = True if not version.active: version_data['active'] = True to_save = True if version.identifier != branch: version_data['identifier'] = branch to_save = True if to_save: version_data['project'] = "/api/v1/version/%s/" % version_data['project'].pk api.version(version.pk).put(version_data) if record: #Create Build Object. build = api.build.post(dict( project= '/api/v1/project/%s/' % project.pk, version= '/api/v1/version/%s/' % version.pk, type='html', state='triggered', )) else: build = {} #Make Dirs path = project.doc_path if not os.path.exists(path): os.makedirs(path) with project.repo_lock(30): if project.is_imported: try: update_output = update_imported_docs(project, version) except ProjectImportError, err: log.error("Failed to import project; skipping build.", exc_info=True) return False else:
def update_docs(pk, record=True, pdf=True, man=True, epub=True, version_pk=None, force=False, **kwargs): """ The main entry point for updating documentation. It handles all of the logic around whether a project is imported or we created it. Then it will build the html docs and other requested parts. It also handles clearing the varnish cache. """ ### # Handle passed in arguments ### update_output = kwargs.get("update_output", {}) project_data = api.project(pk).get() del project_data["users"] del project_data["resource_uri"] del project_data["absolute_url"] project = Project(**project_data) def new_save(*args, **kwargs): # fields = [(field, field.value_to_string(self)) for field in self._meta.fields] print "*** Called save on a non-real object." # print fields # raise TypeError('Not a real model') return 0 project.save = new_save print "Building %s" % project if version_pk: version_data = api.version(version_pk).get() del version_data["resource_uri"] else: # Create or use the 'latest' branch, which is the default for a project. branch = project.default_branch or project.vcs_repo().fallback_branch try: version_data = api.version(project.slug).get(slug="latest")["objects"][0] del version_data["resource_uri"] except (slumber.exceptions.HttpClientError, IndexError) as exc: # if exc.response.status_code in [404,500]: version_data = dict( project="/api/v1/project/%s/" % project.pk, slug="latest", active=True, verbose_name="latest", identifier=branch, ) try: version_data = api.version.post(version_data) del version_data["resource_uri"] except Exception as e: raise e version_data["project"] = project version = Version(**version_data) version.save = new_save if not version_pk: # Lots of course correction. to_save = False if not version.verbose_name: version_data["verbose_name"] = "latest" to_save = True if not version.active: version_data["active"] = True to_save = True if version.identifier != branch: version_data["identifier"] = branch to_save = True if to_save: version_data["project"] = "/api/v1/version/%s/" % version_data["project"].pk api.version(version.pk).put(version_data) if record: # Create Build Object. build = api.build.post( dict( project="/api/v1/project/%s/" % project.pk, version="/api/v1/version/%s/" % version.pk, type="html", state="triggered", ) ) else: build = {} # Make Dirs path = project.doc_path if not os.path.exists(path): os.makedirs(path) with project.repo_lock(30): if project.is_imported: try: update_output = update_imported_docs(project, version) except ProjectImportError, err: print ("Error importing project: %s. Skipping build." % err) return False # scrape_conf_file(version) else: