diff --git a/client/pages/projects/_id.vue b/client/pages/projects/_id.vue index 7597a41745063c6d3f64c001f8b98cb00778818f..e84c19ac74e800b59f2347440d77dc2d44afe01c 100644 --- a/client/pages/projects/_id.vue +++ b/client/pages/projects/_id.vue @@ -598,7 +598,7 @@ methods:{ this.sharedUrl = "http://"+window.location.host + "/projects/" + this.project.id; console.log(this.project.id); this.status=result.status; - if(result.status.worktable ==="READY" && ! this.isready){ + if(result.status.metadata ==="READY" && ! this.isready){ await this.$axios.$get('/projects/'+this.project.id+"/gencov").then((async function (result2) { this.gencov = result2; diff --git a/jass/models/project.py b/jass/models/project.py index 88bc7762d131f493a1cf2e947fed1789f8eb8469..c118a9bb0ff4ecd03b2e7bd5b17100994e7c5018 100644 --- a/jass/models/project.py +++ b/jass/models/project.py @@ -218,6 +218,12 @@ class Project(BaseModel, abc.ABC): def get_project_summary_statistics(self): return get_worktable_summary(self.get_worktable_path()) + def get_metadata_file_path(self): + """ + Get the path of the metadata json file + """ + return os.path.join(self.get_folder_path(), "metadata.json") + def get_project_nsnps(self): return get_inittable_meta(self.get_worktable_path()) @@ -270,6 +276,11 @@ class Project(BaseModel, abc.ABC): if filename.endswith(".png"): os.remove(os.path.join(self.get_folder_path(), filename)) have_removed_file = True + try: + os.remove(self.get_metadata_file_path()) + have_removed_file = True + except FileNotFoundError: + pass return have_removed_file @call_with_tb('global_manhattan') @@ -296,6 +307,12 @@ class Project(BaseModel, abc.ABC): def create_csv_file(self): return create_genome_full_csv(self.get_worktable_path(), self.get_csv_path()) + @call_with_tb('metadata') + def create_project_metadata_file(self): + with open(self.get_metadata_file_path(), 'w') as f: + f.write(json.dumps(self.get_project_nsnps())) + print("------ metadata -----") + class GlobalProject(Project): @call_with_tb('worktable') diff --git a/jass/server.py b/jass/server.py index b1aa22e45405f7530ef80188e656461db7eb9167..b040ffd686296b4b7620682343702d37c4016ea2 100644 --- a/jass/server.py +++ b/jass/server.py @@ -106,7 +106,7 @@ def project_gencov_view(project_id: str): @app.get("/api/projects/{project_id}/metadata") def project_metadata(project_id: str): - return load_project(project_id=project_id).get_project_nsnps() + return FileResponse(load_project(project_id=project_id).get_metadata_file_path()) @app.get("/api/projects/{project_id}/globalmanhattan") diff --git a/jass/tasks.py b/jass/tasks.py index 90e8f769d680ec5d1715e324500dde227bb63bf3..41e2a7a66338aa286d5dc5c789223180e82dcf60 100644 --- a/jass/tasks.py +++ b/jass/tasks.py @@ -79,6 +79,12 @@ def create_project_csv_file(project_id): return project.create_csv_file() +@celery.task +def create_project_metadata_file(project_id): + project = GlobalProject.load(project_id) + return project.create_project_metadata_file() + + @celery.task def dummy_task(): print("This task to nothing, but help the chain to have a valid status") @@ -124,6 +130,9 @@ def run_project_analysis_if_needed(project): if project.get_csv_path() and not os.path.exists(project.get_csv_path()): post_worktable_tasks.append(create_project_csv_file.si(project.id)) + if project.get_metadata_file_path() and not os.path.exists(project.get_metadata_file_path()): + post_worktable_tasks.append(create_project_metadata_file.si(project.id)) + if len(tasks) + len(post_worktable_tasks) == 0: return main_wf = chain(