Skip to content

Commit 9ef2e76

Browse files
committed
avoid clobbering the log
1 parent b31f7dc commit 9ef2e76

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

cwltool/main.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,8 @@ def main(argsl=None, # type: List[str]
465465
_logger.addHandler(stderr_handler)
466466
# pre-declared for finally block
467467
workflowobj = None
468-
prov_handler = None # type: Optional[logger.FileHandler]
468+
prov_log_handler = None # type: Optional[logging.FileHandler]
469+
prov_log_handler_file = None # type: Optional[IO[Any]]
469470
try:
470471
if args is None:
471472
if argsl is None:
@@ -494,25 +495,16 @@ def main(argsl=None, # type: List[str]
494495
rdflib_logger = logging.getLogger("rdflib.term")
495496
rdflib_logger.addHandler(stderr_handler)
496497
rdflib_logger.setLevel(logging.ERROR)
497-
if args.provenance:
498-
try:
499-
os.makedirs(args.provenance)
500-
except os.error:
501-
pass
502-
prov_handler = logging.FileHandler(
503-
os.path.join(args.provenance, "log"))
504-
_logger.addHandler(prov_handler)
505498
if args.quiet:
506499
_logger.setLevel(logging.WARN)
507500
if runtimeContext.debug:
508501
_logger.setLevel(logging.DEBUG)
509502
rdflib_logger.setLevel(logging.DEBUG)
503+
formatter = None # type: Optional[logging.Formatter]
510504
if args.timestamps:
511505
formatter = logging.Formatter("[%(asctime)s] %(message)s",
512506
"%Y-%m-%d %H:%M:%S")
513507
stderr_handler.setFormatter(formatter)
514-
if prov_handler:
515-
prov_handler.setFormatter(formatter)
516508

517509
if args.version:
518510
print(versionfunc())
@@ -554,6 +546,14 @@ def main(argsl=None, # type: List[str]
554546
runtimeContext.research_obj = ResearchObject(
555547
temp_prefix_ro=args.tmpdir_prefix, orcid=args.orcid,
556548
full_name=args.cwl_full_name)
549+
assert runtimeContext.research_obj.folder
550+
prov_log_handler_filename = os.path.join(
551+
runtimeContext.research_obj.folder, "log")
552+
prov_log_handler = logging.FileHandler(
553+
str(prov_log_handler_filename))
554+
if formatter:
555+
prov_log_handler.setFormatter(formatter)
556+
_logger.addHandler(prov_log_handler)
557557

558558
if loadingContext is None:
559559
loadingContext = LoadingContext(vars(args))
@@ -766,28 +766,30 @@ def loc_to_path(obj):
766766
u"Workflow error%s:\n%s", try_again_msg, strip_dup_lineno(Text(exc)),
767767
exc_info=args.debug)
768768
return 1
769-
except Exception as exc:
769+
except Exception as exc: # pylint: disable=broad-except
770770
_logger.error(
771771
u"Unhandled error%s:\n %s", try_again_msg, exc, exc_info=args.debug)
772772
return 1
773773

774774
finally:
775775
if args and runtimeContext and runtimeContext.research_obj \
776-
and args.rm_tmpdir and workflowobj:
776+
and workflowobj:
777777
#adding all related cwl files to RO
778+
research_obj = runtimeContext.research_obj
778779
prov_dependencies = printdeps(
779780
workflowobj, document_loader, stdout, args.relative_deps, uri,
780-
runtimeContext.research_obj)
781+
research_obj)
781782
prov_dep = prov_dependencies[1]
782783
assert prov_dep
783-
runtimeContext.research_obj.generate_snapshot(prov_dep)
784-
785-
runtimeContext.research_obj.close(args.provenance)
784+
research_obj.generate_snapshot(prov_dep)
785+
if prov_log_handler:
786+
prov_log_handler.close()
787+
_logger.removeHandler(prov_log_handler)
788+
with open(prov_log_handler_filename, "rb") as log:
789+
research_obj.add_data_file(log)
790+
research_obj.close(args.provenance)
786791

787792
_logger.removeHandler(stderr_handler)
788-
if prov_handler:
789-
prov_handler.close()
790-
_logger.removeHandler(prov_handler)
791793
_logger.addHandler(defaultStreamHandler)
792794

793795

cwltool/provenance.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,17 +1396,17 @@ def packed_workflow(self, packed): # type: (Text) -> None
13961396
write_pack.write(packed.encode(ENCODING))
13971397
_logger.debug(u"[provenance] Added packed workflow: %s", rel_path)
13981398

1399-
def has_data_file(self, sha1hash):
1400-
# type: (str) -> bool
1401-
self.self_check()
1402-
assert self.folder
1403-
folder = os.path.join(self.folder, DATA, sha1hash[0:2])
1399+
def has_data_file(self, sha1hash): # type: (str) -> bool
1400+
"""Confirms the presence of the given file in the RO."""
1401+
assert self.folder or self.final_location
1402+
folder = os.path.join(self.folder or self.final_location, # type: ignore
1403+
DATA, sha1hash[0:2])
14041404
return os.path.isfile(os.path.join(folder, sha1hash))
14051405

14061406
def add_data_file(self, from_fp, when=None, content_type=None):
14071407
# type: (IO, Optional[datetime.datetime], Optional[str]) -> Text
1408-
self.self_check()
14091408
"""Copy inputs to data/ folder."""
1409+
self.self_check()
14101410
with tempfile.NamedTemporaryFile(
14111411
prefix=self.temp_prefix, delete=False) as tmp:
14121412
checksum = checksum_copy(from_fp, tmp)

0 commit comments

Comments
 (0)