Merge branch 'master' into 10576-cwl-keep-fetcher
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 7 Dec 2016 15:42:11 +0000 (10:42 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 7 Dec 2016 15:42:11 +0000 (10:42 -0500)
1  2 
sdk/cwl/arvados_cwl/__init__.py

index f516a0b740a95720899b94659073fb33f3f1a7d0,35adae97e341407cfc9e350d8c2da644e41d4993..47b1288a5665be0130cb6cc4782791a3d9f718dd
@@@ -21,7 -21,6 +21,7 @@@ import schema_sala
  
  import arvados
  import arvados.config
 +from arvados.keep import KeepClient
  from arvados.errors import ApiError
  
  from .arvcontainer import ArvadosContainer, RunnerContainer
@@@ -29,7 -28,7 +29,7 @@@ from .arvjob import ArvadosJob, RunnerJ
  from. runner import Runner, upload_instance
  from .arvtool import ArvadosCommandTool
  from .arvworkflow import ArvadosWorkflow, upload_workflow
 -from .fsaccess import CollectionFsAccess
 +from .fsaccess import CollectionFsAccess, CollectionFetcher, collectionResolver
  from .perf import Perf
  from .pathmapper import FinalOutputPathMapper
  from ._version import __version__
@@@ -51,7 -50,7 +51,7 @@@ class ArvCwlRunner(object)
  
      """
  
 -    def __init__(self, api_client, work_api=None, keep_client=None, output_name=None, output_tags=None):
 +    def __init__(self, api_client, work_api=None, keep_client=None, output_name=None, output_tags=None, num_retries=4):
          self.api = api_client
          self.processes = {}
          self.lock = threading.Lock()
@@@ -59,7 -58,7 +59,7 @@@
          self.final_output = None
          self.final_status = None
          self.uploaded = {}
 -        self.num_retries = 4
 +        self.num_retries = num_retries
          self.uuid = None
          self.stop_polling = threading.Event()
          self.poll_api = None
@@@ -94,9 -93,6 +94,9 @@@
  
      def arv_make_tool(self, toolpath_object, **kwargs):
          kwargs["work_api"] = self.work_api
 +        kwargs["fetcher_constructor"] = partial(CollectionFetcher,
 +                                                api_client=self.api,
 +                                                keep_client=self.keep_client)
          if "class" in toolpath_object and toolpath_object["class"] == "CommandLineTool":
              return ArvadosCommandTool(self, toolpath_object, **kwargs)
          elif "class" in toolpath_object and toolpath_object["class"] == "Workflow":
@@@ -569,6 -565,10 +569,10 @@@ def main(args, stdout, stderr, api_clie
      job_order_object = None
      arvargs = parser.parse_args(args)
  
+     if arvargs.version:
+         print versionstring()
+         return
      if arvargs.update_workflow:
          if arvargs.update_workflow.find('-7fd4e-') == 5:
              want_api = 'containers'
      try:
          if api_client is None:
              api_client=arvados.api('v1', model=OrderedJsonModel())
 -        runner = ArvCwlRunner(api_client, work_api=arvargs.work_api, keep_client=keep_client, output_name=arvargs.output_name, output_tags=arvargs.output_tags)
 +        if keep_client is None:
 +            keep_client = arvados.keep.KeepClient(api_client=api_client, num_retries=4)
 +        runner = ArvCwlRunner(api_client, work_api=arvargs.work_api, keep_client=keep_client,
 +                              num_retries=4, output_name=arvargs.output_name,
 +                              output_tags=arvargs.output_tags)
      except Exception as e:
          logger.error(e)
          return 1
                               makeTool=runner.arv_make_tool,
                               versionfunc=versionstring,
                               job_order_object=job_order_object,
 -                             make_fs_access=partial(CollectionFsAccess, api_client=api_client))
 +                             make_fs_access=partial(CollectionFsAccess,
 +                                                    api_client=api_client,
 +                                                    keep_client=keep_client),
 +                             fetcher_constructor=partial(CollectionFetcher,
 +                                                         api_client=api_client,
 +                                                         keep_client=keep_client),
 +                             resolver=partial(collectionResolver, api_client))