本文整理汇总了Python中scilifelab.utils.misc.query_yes_no函数的典型用法代码示例。如果您正苦于以下问题:Python query_yes_no函数的具体用法?Python query_yes_no怎么用?Python query_yes_no使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了query_yes_no函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: update
def update(self):
if not self._check_pargs(["sample_prj"]):
return
url = self.pargs.url if self.pargs.url else self.app.config.get("db", "url")
if not url:
self.app.log.warn("Please provide a valid url: got {}".format(url))
return
s_con = SampleRunMetricsConnection(dbname=self.app.config.get("db", "samples"), **vars(self.app.pargs))
samples = s_con.get_samples(sample_prj=self.pargs.sample_prj)
if self.pargs.project_id:
self.app.log.debug("Going to update 'project_id' to {} for sample runs with 'sample_prj' == {}".format(self.pargs.project_id, self.pargs.sample_prj))
for s in samples:
if not s.get("project_id", None) is None:
if not query_yes_no("'project_id':{} for sample {}; are you sure you want to overwrite?".format(s["project_id"], s["name"]), force=self.pargs.force):
continue
s["project_id"] = self.pargs.project_id
s_con.save(s)
if self.pargs.names:
self.app.log.debug("Going to update 'project_sample_name' for sample runs with 'sample_prj' == {}".format(self.pargs.sample_prj))
if os.path.exists(self.pargs.names):
with open(self.pargs.names) as fh:
names_d = json.load(fh)
else:
names_d= ast.literal_eval(self.pargs.names)
samples_sort = sorted(samples, key=lambda s:s["barcode_name"])
groups = {}
for k, g in itertools.groupby(samples_sort, key=lambda x:x["barcode_name"]):
groups[k] = list(g)
for barcode_name in names_d:
sample_list = groups.get(barcode_name, None)
if not sample_list:
continue
for s in sample_list:
if not s.get("project_sample_name", None) is None:
if not query_yes_no("'project_sample_name':{} for sample {}; are you sure you want to overwrite?".format(s["project_sample_name"], s["name"]), force=self.pargs.force):
continue
s["project_sample_name"] = names_d[barcode_name]
s_con.save(s)
else:
self.app.log.info("Trying to use extensive matching...")
p_con = ProjectSummaryConnection(dbname=self.app.config.get("db", "projects"), **vars(self.app.pargs))
project_name = self.pargs.sample_prj
if self.pargs.project_alias:
project_name = self.pargs.project_alias
for s in samples:
project_sample = p_con.get_project_sample(project_name, s["barcode_name"], extensive_matching=True)
if project_sample:
self.app.log.info("using mapping '{} : {}'...".format(s["barcode_name"], project_sample["sample_name"]))
s["project_sample_name"] = project_sample["sample_name"]
s_con.save(s)
开发者ID:emmser,项目名称:scilifelab,代码行数:52,代码来源:ext_qc.py
示例2: hs_metrics
def hs_metrics(self):
if not self._check_pargs(["project", "targets"]):
return
if not self.pargs.baits:
self.pargs.baits = self.pargs.targets
self.log.info("hs_metrics: This is a temporary solution for calculating hs metrics for samples using picard tools")
pattern = "{}.bam$".format(self.pargs.hs_file_type)
def filter_fn(f):
return re.search(pattern, f) != None
### FIX ME: this isn't caught by _process_args
flist = []
path = self.pargs.flowcell if self.pargs.flowcell else self.pargs.project
basedir = os.path.abspath(os.path.join(self.app.controller._meta.root_path, self.app.controller._meta.path_id))
samples = find_samples(basedir, **vars(self.pargs))
inc_dirs = [os.path.dirname(x) for x in samples]
flist = filtered_walk(os.path.join(self.config.get(self.app.controller._meta.label, "root"), path), filter_fn=filter_fn, exclude_dirs=['nophix', 'alignments', 'fastqc', 'fastq_screen'], include_dirs=inc_dirs)
if not query_yes_no("Going to run hs_metrics on {} files. Are you sure you want to continue?".format(len(flist)), force=self.pargs.force):
return
for f in flist:
self.log.info("running CalculateHsMetrics on {}".format(f))
### Issue with calling java from
### subprocess:http://stackoverflow.com/questions/9795249/issues-with-wrapping-java-program-with-pythons-subprocess-module
### Actually not an issue: command line arguments have to be done the right way
cl = ["java"] + ["-{}".format(self.pargs.java_opts)] + ["-jar", "{}/CalculateHsMetrics.jar".format(os.getenv("PICARD_HOME"))] + ["INPUT={}".format(f)] + ["TARGET_INTERVALS={}".format(os.path.abspath(self.pargs.targets))] + ["BAIT_INTERVALS={}".format(os.path.abspath(self.pargs.baits))] + ["OUTPUT={}".format(f.replace(".bam", ".hs_metrics"))] + ["VALIDATION_STRINGENCY=SILENT"]
out = self.app.cmd.command(cl)
if out:
self.app._output_data["stdout"].write(out.rstrip())
开发者ID:Galithil,项目名称:scilifelab,代码行数:27,代码来源:bcbio.py
示例3: remove_finished
def remove_finished(self):
if not self._check_pargs(["project"]):
return
# Don't filter out files
def filter_fn(f):
return True
slist = os.listdir(os.path.join(self._meta.root_path, self._meta.path_id))
for s in slist:
spath = os.path.join(self._meta.root_path, self._meta.path_id, s)
if not os.path.isdir(spath):
continue
if not os.path.exists(os.path.join(spath, FINISHED_FILE)):
self.app.log.info("Sample {} not finished; skipping".format(s))
continue
flist = filtered_walk(spath, filter_fn)
dlist = filtered_walk(spath, filter_fn, get_dirs=True)
if os.path.exists(os.path.join(spath, REMOVED_FILE)):
self.app.log.info("Sample {} already removed; skipping".format(s))
continue
if len(flist) > 0 and not query_yes_no("Will remove directory {} containing {} files; continue?".format(s, len(flist)), force=self.pargs.force):
continue
self.app.log.info("Removing {} files from {}".format(len(flist), spath))
for f in flist:
if f == os.path.join(spath, FINISHED_FILE):
continue
self.app.cmd.safe_unlink(f)
self.app.log.info("Removing {} directories from {}".format(len(dlist), spath))
for d in sorted(dlist, reverse=True):
self.app.cmd.safe_rmdir(d)
if not self.pargs.dry_run:
with open(os.path.join(spath, REMOVED_FILE), "w") as fh:
t_utc = utc_time()
fh.write(t_utc)
开发者ID:emmser,项目名称:scilifelab,代码行数:33,代码来源:production.py
示例4: touch_finished
def touch_finished(self):
if not self._check_pargs(["project", "sample"]):
return
if os.path.exists(self.pargs.sample) and os.path.isfile(self.pargs.sample):
with open(self.pargs.sample) as fh:
slist = [x.rstrip() for x in fh.readlines()]
else:
slist = [self.pargs.sample]
for s in slist:
spath = os.path.join(self._meta.root_path, self._meta.path_id, s)
if not os.path.exists(spath):
self.app.log.warn("No such path {}; skipping".format(spath))
continue
rsync_src = os.path.join(self._meta.root_path, self._meta.path_id, s) + os.sep
rsync_tgt = os.path.join(self.app.config.get("runqc", "root"), self.pargs.project, s) + os.sep
cl = ["rsync {} {} {}".format(self.app.config.get("runqc", "rsync_sample_opts"), rsync_src, rsync_tgt)]
self.app.log.info("Checking if runqc uptodate with command '{}'".format(" ".join(cl)))
out = self.app.cmd.command(cl, **{'shell':True})
if not self.pargs.dry_run and not out.find("total size is 0"):
self.app.log.info("Some files need to be updated. Rsync output:")
print "********"
print out
print "********"
continue
if not query_yes_no("Going to touch file {} for sample {}; continue?".format(FINISHED_FILE, s), force=self.pargs.force):
continue
self.app.log.info("Touching file {} for sample {}".format(FINISHED_FILE, s))
with open(os.path.join(spath, FINISHED_FILE), "w") as fh:
t_utc = utc_time()
fh.write(t_utc)
开发者ID:emmser,项目名称:scilifelab,代码行数:30,代码来源:production.py
示例5: purge_alignments
def purge_alignments(self):
"""Cleanup sam and bam files. In some cases, sam files
persist. If the corresponding bam file exists, replace the sam
file contents with a message that the file has been removed to
save space.
"""
pattern = ".sam$"
def purge_filter(f):
if not pattern:
return
return re.search(pattern, f) != None
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), purge_filter)
if len(flist) == 0:
self.app.log.info("No sam files found")
return
if len(flist) > 0 and not query_yes_no("Going to remove/cleanup {} sam files ({}...). Are you sure you want to continue?".format(len(flist), ",".join([os.path.basename(x) for x in flist[0:10]])), force=self.pargs.force):
return
for f in flist:
self.app.log.info("Purging sam file {}".format(f))
self.app.cmd.safe_unlink(f)
if os.path.exists(f.replace(".sam", ".bam")):
self.app.cmd.write(f, "File removed to save disk space: SAM converted to BAM")
## Find bam files in alignments subfolders
pattern = ".bam$"
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), purge_filter, include_dirs=["alignments"])
for f in flist:
f_tgt = [f.replace(".bam", "-sort.bam"), os.path.join(os.path.dirname(os.path.dirname(f)),os.path.basename(f) )]
for tgt in f_tgt:
if os.path.exists(tgt):
self.app.log.info("Purging bam file {}".format(f))
self.app.cmd.safe_unlink(f)
self.app.cmd.write(f, "File removed to save disk space: Moved to {}".format(os.path.abspath(tgt)))
开发者ID:hussius,项目名称:scilifelab,代码行数:34,代码来源:project.py
示例6: rm_tarball
def rm_tarball(arch, tarball):
"""Remove a tarball
"""
if not query_yes_no("Going to remove tarball {}. This action can not be undone. Are you sure you want to continue?".format(tarball),
force=arch.pargs.force):
return
arch.log.info("removing {}".format(tarball))
arch.app.cmd.safe_unlink(tarball)
开发者ID:emmser,项目名称:scilifelab,代码行数:8,代码来源:archive.py
示例7: rm_run
def rm_run(arch, root, flowcell=None):
"""Remove a flowcell folder from the root folder
"""
path = os.path.join(root,flowcell)
if not query_yes_no("Going to remove flowcell folder {}. This action can not be undone. Are you sure you want to continue?".format(path),
force=arch.pargs.force):
return
arch.log.info("removing {}".format(path))
arch.app.cmd.rmtree(path)
开发者ID:emmser,项目名称:scilifelab,代码行数:9,代码来源:archive.py
示例8: run
def run(self):
if not self._check_pargs(["project"]):
return
if self.pargs.post_process:
self.pargs.post_process = os.path.abspath(self.pargs.post_process)
basedir = os.path.abspath(os.path.join(self.app.controller._meta.root_path, self.app.controller._meta.path_id))
if self.pargs.from_ssheet:
[
samplesheet_csv_to_yaml(fn)
for fn in find_samples(basedir, pattern="SampleSheet.csv$", **vars(self.pargs))
]
flist = find_samples(basedir, **vars(self.pargs))
# Add filtering on flowcell if necessary
self._meta.pattern = ".*"
flist = [x for x in flist if self._filter_fn(x)]
if self.pargs.merged:
## Setup merged samples and append to flist if new list longer
flist = setup_merged_samples(flist, **vars(self.pargs))
if not len(flist) > 0:
self.log.info("No sample configuration files found")
return
if len(flist) > 0 and not query_yes_no(
"Going to start {} jobs... Are you sure you want to continue?".format(len(flist)), force=self.pargs.force
):
return
# Make absolutely sure analysis directory is a *subdirectory* of the working directory
validate_sample_directories(flist, basedir)
orig_dir = os.path.abspath(os.getcwd())
for run_info in flist:
os.chdir(os.path.abspath(os.path.dirname(run_info)))
setup_sample(run_info, **vars(self.pargs))
os.chdir(orig_dir)
if self.pargs.only_setup:
return
if self.pargs.only_failed:
status = {x: self._sample_status(x) for x in flist}
flist = [x for x in flist if self._sample_status(x) == "FAIL"]
## Here process files again, removing if requested, and running the pipeline
for run_info in flist:
self.app.log.info("Running analysis defined by config file {}".format(run_info))
os.chdir(os.path.abspath(os.path.dirname(run_info)))
if self.app.cmd.monitor(work_dir=os.path.dirname(run_info)):
self.app.log.warn("Not running job")
continue
if self.pargs.restart:
self.app.log.info("Removing old analysis files in {}".format(os.path.dirname(run_info)))
remove_files(run_info, **vars(self.pargs))
(cl, platform_args) = run_bcbb_command(run_info, **vars(self.pargs))
self.app.cmd.command(
cl, **{"platform_args": platform_args, "saveJobId": True, "workingDirectory": os.path.dirname(run_info)}
)
os.chdir(orig_dir)
开发者ID:dargorr,项目名称:scilifelab,代码行数:53,代码来源:bcbio.py
示例9: clean
def clean(self):
if not self._check_pargs(["project"]):
return
self._meta.pattern = "|".join(["{}(.gz|.bz2)?$".format(x) for x in self._meta.file_ext])
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), self._filter_fn, include_dirs=self._meta.include_dirs)
if len(flist) == 0:
self.app.log.info("No files matching pattern '{}' found".format(self._meta.pattern))
return
if len(flist) > 0 and not query_yes_no("Going to remove {} files ({}...). Are you sure you want to continue?".format(len(flist), ",".join([os.path.basename(x) for x in flist[0:10]])), force=self.pargs.force):
return
for f in flist:
self.app.log.info("removing {}".format(f))
self.app.cmd.safe_unlink(f)
开发者ID:brainstorm,项目名称:scilifelab,代码行数:13,代码来源:controller.py
示例10: _compress
def _compress(self, label="compress"):
if self.pargs.input_file:
flist = [self.pargs.input_file]
else:
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), self._filter_fn)
if len(flist) == 0:
self.app.log.info("No files matching pattern '{}' found".format(self._meta.pattern))
return
if len(flist) > 0 and not query_yes_no("Going to {} {} files ({}...). Are you sure you want to continue?".format(label, len(flist), ",".join([os.path.basename(x) for x in flist[0:10]])), force=self.pargs.force):
sys.exit()
for f in flist:
self.log.info("{}ing {}".format(label, f))
self.app.cmd.command([self._meta.compress_prog, self._meta.compress_opt, "%s" % f], label, ignore_error=True, **{'workingDirectory':os.path.dirname(f), 'outputPath':os.path.join(os.path.dirname(f), "{}-{}-drmaa.log".format(label, os.path.basename(f)))})
开发者ID:brainstorm,项目名称:scilifelab,代码行数:14,代码来源:controller.py
示例11: best_practice
def best_practice(self):
if not self._check_pargs(["project", "uppmax_project"]):
return
project_path = os.path.normpath(os.path.join("/proj", self.pargs.uppmax_project))
if not os.path.exists(project_path):
self.log.warn("No such project {}; skipping".format(self.pargs.uppmax_project))
return
if self.pargs.outdir:
outpath = os.path.join(project_path, "INBOX", self.pargs.outdir)
else:
outpath = os.path.join(project_path, "INBOX", self.pargs.statusdb_project_name) if self.pargs.statusdb_project_name else os.path.join(project_path, "INBOX", self.pargs.project)
if not query_yes_no("Going to deliver data to {}; continue?".format(outpath)):
return
if not os.path.exists(outpath):
self.app.cmd.safe_makedir(outpath)
kw = vars(self.pargs)
basedir = os.path.abspath(os.path.join(self._meta.root_path, self._meta.path_id))
flist = find_samples(basedir, **vars(self.pargs))
if self.pargs.flowcell:
flist = [ fl for fl in flist if os.path.basename(os.path.dirname(fl)) == self.pargs.flowcell ]
if not len(flist) > 0:
self.log.info("No samples/sample configuration files found")
return
def filter_fn(f):
if not pattern:
return
return re.search(pattern, f) != None
# Setup pattern
plist = [".*.yaml$", ".*.metrics$"]
if not self.pargs.no_bam:
plist.append(".*-{}.bam$".format(self.pargs.bam_file_type))
plist.append(".*-{}.bam.bai$".format(self.pargs.bam_file_type))
if not self.pargs.no_vcf:
plist.append(".*.vcf$")
plist.append(".*.vcf.gz$")
plist.append(".*.tbi$")
plist.append(".*.tsv$")
pattern = "|".join(plist)
size = 0
for f in flist:
path = os.path.dirname(f)
sources = filtered_walk(path, filter_fn=filter_fn, exclude_dirs=BCBIO_EXCLUDE_DIRS)
targets = [src.replace(basedir, outpath) for src in sources]
self._transfer_files(sources, targets)
if self.pargs.size:
statinfo = [os.stat(src).st_size for src in sources]
size = size + sum(statinfo)
if self.pargs.size:
self.app._output_data['stderr'].write("\n********************************\nEstimated delivery size: {:.1f}G\n********************************".format(size/1e9))
开发者ID:guillermo-carrasco,项目名称:scilifelab,代码行数:49,代码来源:deliver.py
示例12: rm
def rm(self):
if not self._check_pargs(["project", "analysis_id"]):
return
indir = os.path.join(self.app.controller._meta.project_root, self.app.controller._meta.path_id, self.pargs.analysis_id)
assert os.path.exists(indir), "No such analysis {} for project {}".format(self.pargs.analysis_id, self.pargs.project)
try:
flist = walk(indir)
except IOError as e:
self.app.log.warn(str(e))
raise e
if len(flist) > 0 and not query_yes_no("Going to remove all contents ({} files) of analysis {} for project {}... Are you sure you want to continue?".format(len(flist), self.pargs.analysis_id, self.pargs.project), force=self.pargs.force):
return
for f in flist:
self.app.cmd.safe_unlink(f)
self.app.log.info("removing {}".format(indir))
self.app.cmd.safe_rmdir(indir)
开发者ID:hussius,项目名称:scilifelab,代码行数:16,代码来源:project.py
示例13: clean
def clean(self):
pattern = "|".join(["{}(.gz|.bz2)?$".format(x) for x in self._meta.file_pat])
def clean_filter(f):
if not pattern:
return
return re.search(pattern , f) != None
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), clean_filter, include_dirs=self._meta.include_dirs)
if len(flist) == 0:
self.app.log.info("No files matching pattern {} found".format(pattern))
return
if len(flist) > 0 and not query_yes_no("Going to remove {} files ({}...). Are you sure you want to continue?".format(len(flist), ",".join([os.path.basename(x) for x in flist[0:10]])), force=self.pargs.force):
return
for f in flist:
self.app.log.info("removing {}".format(f))
self.app.cmd.safe_unlink(f)
开发者ID:hussius,项目名称:scilifelab,代码行数:16,代码来源:controller.py
示例14: run
def run(self):
if not self._check_pargs(["project", "post_process", "analysis_type"]):
return
## Gather sample yaml files
pattern = "-bcbb-config.yaml$"
flist = []
if self.pargs.sample:
if os.path.exists(self.pargs.sample):
with open(self.pargs.sample) as fh:
flist = [x.rstrip() for x in fh.readlines()]
else:
pattern = "{}{}".format(self.pargs.sample, pattern)
def bcbb_yaml_filter(f):
return re.search(pattern, f) != None
if not flist:
flist = filtered_walk(os.path.join(self.app.controller._meta.project_root, self.pargs.project, "data"), bcbb_yaml_filter)
if self.pargs.only_failed:
status = {x:self._sample_status(x) for x in flist}
flist = [x for x in flist if self._sample_status(x)=="FAIL"]
if len(flist) == 0 and self.pargs.sample:
self.app.log.info("No such sample {}".format(self.pargs.sample))
if len(flist) > 0 and not query_yes_no("Going to start {} jobs... Are you sure you want to continue?".format(len(flist)), force=self.pargs.force):
return
for f in flist:
with open(f) as fh:
config = yaml.load(fh)
if self.pargs.analysis_type:
config["details"][0]["multiplex"][0]["analysis"] = self.pargs.analysis_type
config["details"][0]["analysis"] = self.pargs.analysis_type
if config["details"][0]["genome_build"] == 'unknown':
config["details"][0]["genome_build"] = self.pargs.genome_build
## Check if files exist: if they don't, then change the suffix
config["details"][0]["multiplex"][0]["files"].sort()
if not os.path.exists(config["details"][0]["multiplex"][0]["files"][0]):
if os.path.splitext(config["details"][0]["multiplex"][0]["files"][0])[1] == ".gz":
config["details"][0]["multiplex"][0]["files"] = [x.replace(".gz", "") for x in config["details"][0]["multiplex"][0]["files"]]
else:
config["details"][0]["multiplex"][0]["files"] = ["{}.gz".format(x) for x in config["details"][0]["multiplex"][0]["files"]]
config_file = f.replace("-bcbb-config.yaml", "-pm-bcbb-analysis-config.yaml")
self.app.cmd.write(config_file, yaml.dump(config))
## Run automated_initial_analysis.py
cur_dir = os.getcwd()
new_dir = os.path.abspath(os.path.dirname(f))
os.chdir(new_dir)
self.app.cmd.command(['automated_initial_analysis.py', os.path.abspath(self.pargs.post_process), new_dir, config_file])
os.chdir(cur_dir)
开发者ID:hussius,项目名称:scilifelab,代码行数:46,代码来源:project.py
示例15: remove_files
def remove_files(f, **kw):
## Remove old files if requested
keep_files = ["-post_process.yaml$", "-post_process.yaml.bak$", "-bcbb-config.yaml$", "-bcbb-config.yaml.bak$", "-bcbb-command.txt$", "-bcbb-command.txt.bak$", "_[0-9]+.fastq$", "_[0-9]+.fastq.gz$", "_[0-9]+_fastq.txt.gz$", "_[0-9]+_fastq.txt$",
"^[0-9][0-9]_.*.txt$", "JOBID", "PID"]
pattern = "|".join(keep_files)
def remove_filter_fn(f):
return re.search(pattern, f) == None
workdir = os.path.dirname(f)
remove_files = filtered_walk(workdir, remove_filter_fn)
remove_dirs = filtered_walk(workdir, remove_filter_fn, get_dirs=True)
if len(remove_files) == 0:
pass
if len(remove_files) > 0 and query_yes_no("Going to remove {} files and {} directories... Are you sure you want to continue?".format(len(remove_files), len(remove_dirs)), force=kw['force']):
[dry_unlink(x, dry_run=kw['dry_run']) for x in remove_files]
## Sort directories by length so we don't accidentally try to remove a non-empty dir
[dry_rmdir(x, dry_run=kw['dry_run']) for x in sorted(remove_dirs, key=lambda x: len(x), reverse=True)]
开发者ID:percyfal,项目名称:scilifelab,代码行数:17,代码来源:run.py
示例16: run_halo
def run_halo(self):
if self.app.pargs.setup:
if not self._check_pargs(["project", "baits", "targets", "target_region"]):
return
else:
if not self._check_pargs(["project"]):
return
basedir = os.path.abspath(os.path.join(self.app.controller._meta.root_path, self.app.controller._meta.path_id))
self.app.log.info("Going to look for samples in {}".format(basedir))
param_list = run_halo(path=basedir, **vars(self.pargs))
if self.app.pargs.setup:
self.app.log.info("Setup configuration files. Rerun command without '--setup' option to run analysis")
return
if not len(param_list) > 0:
self.log.info("No samples found in {}; perhaps you need to add the '--data' option to look in the {} directory".format(self.app.pargs.project, os.path.join(self.app.pargs.project, "data")))
if len(param_list) > 0 and not query_yes_no("Going to start {} jobs... Are you sure you want to continue?".format(len(param_list)), force=self.pargs.force):
return
for param in param_list:
self.app.cmd.command(param['cl'], **param)
开发者ID:Galithil,项目名称:scilifelab,代码行数:19,代码来源:halo.py
示例17: _compress
def _compress(self, pattern, label="compress"):
def compress_filter(f):
if not pattern:
return
return re.search(pattern, f) != None
if self.pargs.input_file:
flist = [self.pargs.input_file]
else:
flist = filtered_walk(os.path.join(self._meta.root_path, self._meta.path_id), compress_filter)
if len(flist) == 0:
self.app.log.info("No files matching pattern {} found".format(pattern))
return
if len(flist) > 0 and not query_yes_no("Going to {} {} files ({}...). Are you sure you want to continue?".format(label, len(flist), ",".join([os.path.basename(x) for x in flist[0:10]])), force=self.pargs.force):
sys.exit()
for f in flist:
self.log.info("{}ing {}".format(label, f))
self.app.cmd.command([self._meta.compress_prog, self._meta.compress_opt, "%s" % f], label, ignore_error=True)
开发者ID:hussius,项目名称:scilifelab,代码行数:19,代码来源:controller.py
示例18: _return_extensive_match_result
def _return_extensive_match_result(name_map, barcode_name, force=False):
"""Wrap return value for extensive matching"""
if query_yes_no("found mapping '{} : {}' (barcode_name:project_sample_name); do you want to use this project_sample_name?".format(barcode_name, name_map["sample_name"]), default="no", force=force):
return name_map
else:
return None
开发者ID:Galithil,项目名称:scilifelab,代码行数:6,代码来源:statusdb.py
示例19: purge_alignments
def purge_alignments(path, ftype="sam", keep="last", dry_run=False, force=False, fsize=MINFILESIZE):
"""Cleanup sam and bam files. In some cases, sam files persist. If
the corresponding bam file exists, replace the sam file contents
with a message that the file has been removed to save space.
In general, several bam files are produced in an analysis. By
grouping bam files by prefix, either the most recent file is
retained for further reference, or a specific analysis is kept.
"""
if ftype == "sam":
pattern = ".sam$"
elif ftype == "bam":
pattern = ".bam$"
else:
LOG.warn("ftype must be one of 'sam' or 'bam'")
return
LOG.debug("running purge_alignments in path {} with pattern {} keep rule {}".format(path, pattern, keep))
def purge_filter(f):
if not pattern:
return
return re.search(pattern, f) != None
flist = filtered_walk(path, purge_filter, exclude_dirs=["realign-split"])
if len(flist) == 0:
LOG.info("No {} files found in {}".format(ftype, path))
return
if len(flist) > 0 and not query_yes_no("Going to remove/cleanup {} {} files ({}...). Are you sure you want to continue?".format(len(flist), ftype, ",".join([os.path.basename(x) for x in flist[0:10]])), force=force):
return
if ftype == "sam":
for f in flist:
LOG.info("Purging {} file {}".format(ftype, f))
dry_unlink(f, dry_run)
if os.path.exists(f.replace(".sam", ".bam")):
dry_write(f, "File removed to save disk space: SAM converted to BAM", dry_run)
return
elif ftype == "bam":
samples = {}
for f in flist:
m = re.search("([0-9A-Za-z\_]+)-.*", os.path.basename(f))
if not m:
LOG.debug("Couldn't determine prefix for {}".format(f))
continue
sid = m.groups()[0]
if not sid in samples.keys():
samples[sid] = {}
dname = os.path.dirname(f)
if not dname in samples[sid].keys():
samples[sid][dname] = []
samples[sid][dname].append(f)
saved_size = 0
for k in samples.iterkeys():
for d, files in samples[k].iteritems():
if not files or len(files) == 1:
continue
files.sort(lambda x,y: cmp(len(x), len(y)))
if keep == "last":
LOG.info("Keeping file {} and removing all files with common prefix: {}".format(os.path.basename(files[len(files)-1]), ", ".join([os.path.basename(x) for x in files[0:-1]])))
saved_size = _purge_by_sample(files, dry_run, int(fsize)) + saved_size
LOG.info("Will save approximately {:.1f}G space".format(saved_size / 1e9))
开发者ID:Galithil,项目名称:scilifelab,代码行数:61,代码来源:clean.py
示例20: raw_data
def raw_data(self):
if not self._check_pargs(["project"]):
return
# if necessary, reformat flowcell identifier
if self.pargs.flowcell:
self.pargs.flowcell = self.pargs.flowcell.split("_")[-1]
# get the uid and gid to use for destination files
uid = os.getuid()
gid = os.getgid()
if self.pargs.group is not None and len(self.pargs.group) > 0:
gid = grp.getgrnam(group).gr_gid
self.log.debug("Connecting to project database")
p_con = ProjectSummaryConnection(**vars(self.pargs))
assert p_con, "Could not get connection to project databse"
self.log.debug("Connecting to samples database")
s_con = SampleRunMetricsConnection(**vars(self.pargs))
assert s_con, "Could not get connection to samples databse"
# Fetch the Uppnex project to deliver to
if not self.pargs.uppmax_project:
self.pargs.uppmax_project = p_con.get_entry(self.pargs.project, "uppnex_id")
if not self.pargs.uppmax_project:
self.log.error("Uppmax project was not specified and could not be fetched from project database")
return
# Extract the list of samples and runs associated with the project and sort them
samples = sorted(s_con.get_samples(fc_id=self.pargs.flowcell, sample_prj=self.pargs.project), key=lambda k: (k.get('project_sample_name','NA'), k.get('flowcell','NA'), k.get('lane','NA')))
# Setup paths and verify parameters
self._meta.production_root = self.app.config.get("production", "root")
self._meta.root_path = self._meta.production_root
proj_base_dir = os.path.join(self._meta.root_path, self.pargs.project)
assert os.path.exists(self._meta.production_root), "No such directory {}; check your production config".format(self._meta.production_root)
assert os.path.exists(proj_base_dir), "No project {} in production path {}".format(self.pargs.project,self._meta.root_path)
try:
self._meta.uppnex_project_root = self.app.config.get("deliver", "uppnex_project_root")
except Exception as e:
self.log.warn("{}, will use '/proj' as uppnext_project_root".format(e))
self._meta.uppnex_project_root = '/proj'
try:
self._meta.uppnex_delivery_dir = self.app.config.get("deliver", "uppnex_project_delivery_path")
except Exception as e:
self.log.warn("{}, will use 'INBOX' as uppnext_project_delivery_path".format(e))
self._meta.uppnex_delivery_dir = 'INBOX'
destination_root = os.path.join(self._meta.uppnex_project_root,self.pargs.uppmax_project,self._meta.uppnex_delivery_dir)
assert os.path.exists(destination_root), "Delivery destination folder {} does not exist".format(destination_root)
destination_root = os.path.join(destination_root,self.pargs.project)
# If interactively select, build a list of samples to skip
if self.pargs.interactive:
to_process = []
for sample in samples:
sname = sample.get("project_sample_name")
index = sample.get("sequence")
fcid = sample.get("flowcell")
lane = sample.get("lane")
date = sample.get("date")
self.log.info("Sample: {}, Barcode: {}, Flowcell: {}, Lane: {}, Started on: {}".format(sname,
index,
fcid,
lane,
date))
if query_yes_no("Deliver sample?", default="no"):
to_process.append(sample)
samples = to_process
# Find uncompressed fastq
uncompressed = self._find_uncompressed_fastq_files(proj_base_dir,samples)
if len(uncompressed) > 0:
self.log.warn("The following samples have uncompressed *.fastq files that cannot be delivered: {}".format(",".join(uncompressed)))
if not query_yes_no("Continue anyway?", default="no"):
return
self.log.info("Will deliver data for {} samples from project {} to {}".format(len(samples),self.pargs.project,destination_root))
if not query_yes_no("Continue?"):
return
# Get the list of files to transfer and the destination
self.log.debug("Gathering list of files to copy")
to_copy = self.get_file_copy_list(proj_base_dir,
destination_root,
samples)
# Make sure that transfer will be with rsync
if not self.pargs.rsync:
self.log.warn("Files must be transferred using rsync")
if not query_yes_no("Do you wish to continue delivering using rsync?", default="yes"):
|
请发表评论