def getDetail(project_id): # Load project from internal database project = models.Project.query.filter_by(id=project_id).first() # Check if project was found if not project: validation = ValidationResult(dict()) validation.addError("Project not in internal database") return validation # Init result cloud api resultCloud = ResultCloud(config.RESULT_CLOUD_API) # Try to load project try: response = resultCloud.get_project(project.ext_id) except: # Prepare validation and return result validation = ValidationResult(models.serialize(project)) return validation # Init result result = models.serialize(project) # If there was a response, get submissions if response: result["submissions"] = resultCloud.last_response['Result']['Submissions'] # Prepare validation and return result validation = ValidationResult(result) return validation
def exists(project_id): # Init validation validation = ValidationResult(dict()) # Check for file validation.data["exists"] = ModelService._exists("project_" + project_id) # Return validation return validation
def poll(): # Init validation validation = ValidationResult({"State": ""}) # Check if session is set if config.POLLING_KEY not in app.config: StateService.reset() validation.data["State"] = app.config[config.POLLING_KEY] # Return validation return validation
def predictForRevision(project_id, revision): # Init validation validation = ValidationResult([]); # Load project projectValidation = ProjectService.getDetail(project_id); # Check project validation if not validation.append(projectValidation): return validation # Get changes of given revision submissionValidation = RepositoryService.getRevisionDifference(projectValidation.data["repository"], revision + "^", revision) # Check submission validation if not validation.append(submissionValidation): return validation # Make prediction return ModelService.predict(project_id, submissionValidation.data)
def getList(): # Init api handler resultCloud = ResultCloud(config.RESULT_CLOUD_API) # Try to load projects from result cloud try: response = resultCloud.get_git_projects() except: # Load internal projects internalProjects = models.Project.query.all() # Prepare validation and return result validation = ValidationResult([models.serialize(project) for project in internalProjects]) return validation # Check if the request was successful if not response: # Load failed validationResult = ValidationResult(dict()) validationResult.addError("Failed to load projects from ResultCloud repository") # Return result return validationResult else: # Load was successful externalProjects = resultCloud.last_response['Result'] # Merge new projects for project in externalProjects: if not models.Project.query.filter_by(ext_id=project["Id"]).first(): new_project = models.Project(project["Id"], project["Name"], project["GitRepository"]) ProjectService.save(new_project) # Load internal projects internalProjects = models.Project.query.all() # Prepare validation and return result validation = ValidationResult([models.serialize(project) for project in internalProjects]) return validation