We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Missing `ignore_for_cache` docstring in `python_app` and `join_app`
https://github.com/Parsl/parsl/blob/40b969f7a9e16b3fcab2db127753bf85cbcb5375/parsl/app/app.py#L72-L93

The `ignore_for_cache` docstring is missing. Same thing for the `join_app` by the way. Super minor report.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `parsl/app/app.py`
Content:
```
1 """Definitions for the @App decorator and the App classes.
2 
3 The App class encapsulates a generic leaf task that can be executed asynchronously.
4 """
5 import logging
6 import typeguard
7 from abc import ABCMeta, abstractmethod
8 from inspect import signature
9 from typing import List, Optional, Union
10 from typing_extensions import Literal
11 
12 from parsl.dataflow.dflow import DataFlowKernel
13 
14 logger = logging.getLogger(__name__)
15 
16 
17 class AppBase(metaclass=ABCMeta):
18     """This is the base class that defines the two external facing functions that an App must define.
19 
20     The  __init__ () which is called when the interpreter sees the definition of the decorated
21     function, and the __call__ () which is invoked when a decorated function is called by the user.
22 
23     """
24 
25     def __init__(self, func, data_flow_kernel=None, executors='all', cache=False, ignore_for_cache=None):
26         """Construct the App object.
27 
28         Args:
29              - func (function): Takes the function to be made into an App
30 
31         Kwargs:
32              - data_flow_kernel (DataFlowKernel): The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for
33                managing this app. This can be omitted only
34                after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`.
35              - executors (str|list) : Labels of the executors that this app can execute over. Default is 'all'.
36              - cache (Bool) : Enable caching of this app ?
37 
38         Returns:
39              - App object.
40 
41         """
42         self.__name__ = func.__name__
43         self.func = func
44         self.data_flow_kernel = data_flow_kernel
45         self.executors = executors
46         self.cache = cache
47         self.ignore_for_cache = ignore_for_cache
48         if not (isinstance(executors, list) or isinstance(executors, str)):
49             logger.error("App {} specifies invalid executor option, expects string or list".format(
50                 func.__name__))
51 
52         params = signature(func).parameters
53 
54         self.kwargs = {}
55         if 'stdout' in params:
56             self.kwargs['stdout'] = params['stdout'].default
57         if 'stderr' in params:
58             self.kwargs['stderr'] = params['stderr'].default
59         if 'walltime' in params:
60             self.kwargs['walltime'] = params['walltime'].default
61         if 'parsl_resource_specification' in params:
62             self.kwargs['parsl_resource_specification'] = params['parsl_resource_specification'].default
63         self.outputs = params['outputs'].default if 'outputs' in params else []
64         self.inputs = params['inputs'].default if 'inputs' in params else []
65 
66     @abstractmethod
67     def __call__(self, *args, **kwargs):
68         pass
69 
70 
71 @typeguard.typechecked
72 def python_app(function=None,
73                data_flow_kernel: Optional[DataFlowKernel] = None,
74                cache: bool = False,
75                executors: Union[List[str], Literal['all']] = 'all',
76                ignore_for_cache: Optional[List[str]] = None):
77     """Decorator function for making python apps.
78 
79     Parameters
80     ----------
81     function : function
82         Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,
83         for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the
84         decorator is used alone, function will be the actual function being decorated, whereas if it
85         is called with arguments, function will be None. Default is None.
86     data_flow_kernel : DataFlowKernel
87         The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can
88         be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.
89     executors : string or list
90         Labels of the executors that this app can execute over. Default is 'all'.
91     cache : bool
92         Enable caching of the app call. Default is False.
93     """
94     from parsl.app.python import PythonApp
95 
96     def decorator(func):
97         def wrapper(f):
98             return PythonApp(f,
99                              data_flow_kernel=data_flow_kernel,
100                              cache=cache,
101                              executors=executors,
102                              ignore_for_cache=ignore_for_cache,
103                              join=False)
104         return wrapper(func)
105     if function is not None:
106         return decorator(function)
107     return decorator
108 
109 
110 @typeguard.typechecked
111 def join_app(function=None,
112              data_flow_kernel: Optional[DataFlowKernel] = None,
113              cache: bool = False,
114              ignore_for_cache: Optional[List[str]] = None):
115     """Decorator function for making join apps
116 
117     Parameters
118     ----------
119     function : function
120         Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,
121         for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the
122         decorator is used alone, function will be the actual function being decorated, whereas if it
123         is called with arguments, function will be None. Default is None.
124     data_flow_kernel : DataFlowKernel
125         The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can
126         be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.
127     cache : bool
128         Enable caching of the app call. Default is False.
129     """
130     from parsl.app.python import PythonApp
131 
132     def decorator(func):
133         def wrapper(f):
134             return PythonApp(f,
135                              data_flow_kernel=data_flow_kernel,
136                              cache=cache,
137                              executors=["_parsl_internal"],
138                              ignore_for_cache=ignore_for_cache,
139                              join=True)
140         return wrapper(func)
141     if function is not None:
142         return decorator(function)
143     return decorator
144 
145 
146 @typeguard.typechecked
147 def bash_app(function=None,
148              data_flow_kernel: Optional[DataFlowKernel] = None,
149              cache: bool = False,
150              executors: Union[List[str], Literal['all']] = 'all',
151              ignore_for_cache: Optional[List[str]] = None):
152     """Decorator function for making bash apps.
153 
154     Parameters
155     ----------
156     function : function
157         Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,
158         for example, ``@bash_app`` if using all defaults or ``@bash_app(walltime=120)``. If the
159         decorator is used alone, function will be the actual function being decorated, whereas if it
160         is called with arguments, function will be None. Default is None.
161     data_flow_kernel : DataFlowKernel
162         The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can
163         be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.
164     walltime : int
165         Walltime for app in seconds. Default is 60.
166     executors : string or list
167         Labels of the executors that this app can execute over. Default is 'all'.
168     cache : bool
169         Enable caching of the app call. Default is False.
170     """
171     from parsl.app.bash import BashApp
172 
173     def decorator(func):
174         def wrapper(f):
175             return BashApp(f,
176                            data_flow_kernel=data_flow_kernel,
177                            cache=cache,
178                            executors=executors,
179                            ignore_for_cache=ignore_for_cache)
180         return wrapper(func)
181     if function is not None:
182         return decorator(function)
183     return decorator
184
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/parsl/app/app.py b/parsl/app/app.py
--- a/parsl/app/app.py
+++ b/parsl/app/app.py
@@ -34,6 +34,7 @@
                after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`.
              - executors (str|list) : Labels of the executors that this app can execute over. Default is 'all'.
              - cache (Bool) : Enable caching of this app ?
+             - ignore_for_cache (list|None): Names of arguments which will be ignored by the caching mechanism.
 
         Returns:
              - App object.
@@ -90,6 +91,8 @@
         Labels of the executors that this app can execute over. Default is 'all'.
     cache : bool
         Enable caching of the app call. Default is False.
+    ignore_for_cache : (list|None)
+        Names of arguments which will be ignored by the caching mechanism.
     """
     from parsl.app.python import PythonApp
 
@@ -126,6 +129,8 @@
         be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.
     cache : bool
         Enable caching of the app call. Default is False.
+    ignore_for_cache : (list|None)
+        Names of arguments which will be ignored by the caching mechanism.
     """
     from parsl.app.python import PythonApp
 
@@ -167,6 +172,8 @@
         Labels of the executors that this app can execute over. Default is 'all'.
     cache : bool
         Enable caching of the app call. Default is False.
+    ignore_for_cache : (list|None)
+        Names of arguments which will be ignored by the caching mechanism.
     """
     from parsl.app.bash import BashApp

{"golden_diff": "diff --git a/parsl/app/app.py b/parsl/app/app.py\n--- a/parsl/app/app.py\n+++ b/parsl/app/app.py\n@@ -34,6 +34,7 @@\n                after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`.\n              - executors (str|list) : Labels of the executors that this app can execute over. Default is 'all'.\n              - cache (Bool) : Enable caching of this app ?\n+             - ignore_for_cache (list|None): Names of arguments which will be ignored by the caching mechanism.\n \n         Returns:\n              - App object.\n@@ -90,6 +91,8 @@\n         Labels of the executors that this app can execute over. Default is 'all'.\n     cache : bool\n         Enable caching of the app call. Default is False.\n+    ignore_for_cache : (list|None)\n+        Names of arguments which will be ignored by the caching mechanism.\n     \"\"\"\n     from parsl.app.python import PythonApp\n \n@@ -126,6 +129,8 @@\n         be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n     cache : bool\n         Enable caching of the app call. Default is False.\n+    ignore_for_cache : (list|None)\n+        Names of arguments which will be ignored by the caching mechanism.\n     \"\"\"\n     from parsl.app.python import PythonApp\n \n@@ -167,6 +172,8 @@\n         Labels of the executors that this app can execute over. Default is 'all'.\n     cache : bool\n         Enable caching of the app call. Default is False.\n+    ignore_for_cache : (list|None)\n+        Names of arguments which will be ignored by the caching mechanism.\n     \"\"\"\n     from parsl.app.bash import BashApp\n", "issue": "Missing `ignore_for_cache` docstring in `python_app` and `join_app`\nhttps://github.com/Parsl/parsl/blob/40b969f7a9e16b3fcab2db127753bf85cbcb5375/parsl/app/app.py#L72-L93\r\n\r\nThe `ignore_for_cache` docstring is missing. Same thing for the `join_app` by the way. Super minor report.\n", "before_files": [{"content": "\"\"\"Definitions for the @App decorator and the App classes.\n\nThe App class encapsulates a generic leaf task that can be executed asynchronously.\n\"\"\"\nimport logging\nimport typeguard\nfrom abc import ABCMeta, abstractmethod\nfrom inspect import signature\nfrom typing import List, Optional, Union\nfrom typing_extensions import Literal\n\nfrom parsl.dataflow.dflow import DataFlowKernel\n\nlogger = logging.getLogger(__name__)\n\n\nclass AppBase(metaclass=ABCMeta):\n    \"\"\"This is the base class that defines the two external facing functions that an App must define.\n\n    The  __init__ () which is called when the interpreter sees the definition of the decorated\n    function, and the __call__ () which is invoked when a decorated function is called by the user.\n\n    \"\"\"\n\n    def __init__(self, func, data_flow_kernel=None, executors='all', cache=False, ignore_for_cache=None):\n        \"\"\"Construct the App object.\n\n        Args:\n             - func (function): Takes the function to be made into an App\n\n        Kwargs:\n             - data_flow_kernel (DataFlowKernel): The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for\n               managing this app. This can be omitted only\n               after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`.\n             - executors (str|list) : Labels of the executors that this app can execute over. Default is 'all'.\n             - cache (Bool) : Enable caching of this app ?\n\n        Returns:\n             - App object.\n\n        \"\"\"\n        self.__name__ = func.__name__\n        self.func = func\n        self.data_flow_kernel = data_flow_kernel\n        self.executors = executors\n        self.cache = cache\n        self.ignore_for_cache = ignore_for_cache\n        if not (isinstance(executors, list) or isinstance(executors, str)):\n            logger.error(\"App {} specifies invalid executor option, expects string or list\".format(\n                func.__name__))\n\n        params = signature(func).parameters\n\n        self.kwargs = {}\n        if 'stdout' in params:\n            self.kwargs['stdout'] = params['stdout'].default\n        if 'stderr' in params:\n            self.kwargs['stderr'] = params['stderr'].default\n        if 'walltime' in params:\n            self.kwargs['walltime'] = params['walltime'].default\n        if 'parsl_resource_specification' in params:\n            self.kwargs['parsl_resource_specification'] = params['parsl_resource_specification'].default\n        self.outputs = params['outputs'].default if 'outputs' in params else []\n        self.inputs = params['inputs'].default if 'inputs' in params else []\n\n    @abstractmethod\n    def __call__(self, *args, **kwargs):\n        pass\n\n\n@typeguard.typechecked\ndef python_app(function=None,\n               data_flow_kernel: Optional[DataFlowKernel] = None,\n               cache: bool = False,\n               executors: Union[List[str], Literal['all']] = 'all',\n               ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making python apps.\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    executors : string or list\n        Labels of the executors that this app can execute over. Default is 'all'.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    \"\"\"\n    from parsl.app.python import PythonApp\n\n    def decorator(func):\n        def wrapper(f):\n            return PythonApp(f,\n                             data_flow_kernel=data_flow_kernel,\n                             cache=cache,\n                             executors=executors,\n                             ignore_for_cache=ignore_for_cache,\n                             join=False)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n\n\n@typeguard.typechecked\ndef join_app(function=None,\n             data_flow_kernel: Optional[DataFlowKernel] = None,\n             cache: bool = False,\n             ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making join apps\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    \"\"\"\n    from parsl.app.python import PythonApp\n\n    def decorator(func):\n        def wrapper(f):\n            return PythonApp(f,\n                             data_flow_kernel=data_flow_kernel,\n                             cache=cache,\n                             executors=[\"_parsl_internal\"],\n                             ignore_for_cache=ignore_for_cache,\n                             join=True)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n\n\n@typeguard.typechecked\ndef bash_app(function=None,\n             data_flow_kernel: Optional[DataFlowKernel] = None,\n             cache: bool = False,\n             executors: Union[List[str], Literal['all']] = 'all',\n             ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making bash apps.\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@bash_app`` if using all defaults or ``@bash_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    walltime : int\n        Walltime for app in seconds. Default is 60.\n    executors : string or list\n        Labels of the executors that this app can execute over. Default is 'all'.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    \"\"\"\n    from parsl.app.bash import BashApp\n\n    def decorator(func):\n        def wrapper(f):\n            return BashApp(f,\n                           data_flow_kernel=data_flow_kernel,\n                           cache=cache,\n                           executors=executors,\n                           ignore_for_cache=ignore_for_cache)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n", "path": "parsl/app/app.py"}], "after_files": [{"content": "\"\"\"Definitions for the @App decorator and the App classes.\n\nThe App class encapsulates a generic leaf task that can be executed asynchronously.\n\"\"\"\nimport logging\nimport typeguard\nfrom abc import ABCMeta, abstractmethod\nfrom inspect import signature\nfrom typing import List, Optional, Union\nfrom typing_extensions import Literal\n\nfrom parsl.dataflow.dflow import DataFlowKernel\n\nlogger = logging.getLogger(__name__)\n\n\nclass AppBase(metaclass=ABCMeta):\n    \"\"\"This is the base class that defines the two external facing functions that an App must define.\n\n    The  __init__ () which is called when the interpreter sees the definition of the decorated\n    function, and the __call__ () which is invoked when a decorated function is called by the user.\n\n    \"\"\"\n\n    def __init__(self, func, data_flow_kernel=None, executors='all', cache=False, ignore_for_cache=None):\n        \"\"\"Construct the App object.\n\n        Args:\n             - func (function): Takes the function to be made into an App\n\n        Kwargs:\n             - data_flow_kernel (DataFlowKernel): The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for\n               managing this app. This can be omitted only\n               after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`.\n             - executors (str|list) : Labels of the executors that this app can execute over. Default is 'all'.\n             - cache (Bool) : Enable caching of this app ?\n             - ignore_for_cache (list|None): Names of arguments which will be ignored by the caching mechanism.\n\n        Returns:\n             - App object.\n\n        \"\"\"\n        self.__name__ = func.__name__\n        self.func = func\n        self.data_flow_kernel = data_flow_kernel\n        self.executors = executors\n        self.cache = cache\n        self.ignore_for_cache = ignore_for_cache\n        if not (isinstance(executors, list) or isinstance(executors, str)):\n            logger.error(\"App {} specifies invalid executor option, expects string or list\".format(\n                func.__name__))\n\n        params = signature(func).parameters\n\n        self.kwargs = {}\n        if 'stdout' in params:\n            self.kwargs['stdout'] = params['stdout'].default\n        if 'stderr' in params:\n            self.kwargs['stderr'] = params['stderr'].default\n        if 'walltime' in params:\n            self.kwargs['walltime'] = params['walltime'].default\n        if 'parsl_resource_specification' in params:\n            self.kwargs['parsl_resource_specification'] = params['parsl_resource_specification'].default\n        self.outputs = params['outputs'].default if 'outputs' in params else []\n        self.inputs = params['inputs'].default if 'inputs' in params else []\n\n    @abstractmethod\n    def __call__(self, *args, **kwargs):\n        pass\n\n\n@typeguard.typechecked\ndef python_app(function=None,\n               data_flow_kernel: Optional[DataFlowKernel] = None,\n               cache: bool = False,\n               executors: Union[List[str], Literal['all']] = 'all',\n               ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making python apps.\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    executors : string or list\n        Labels of the executors that this app can execute over. Default is 'all'.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    ignore_for_cache : (list|None)\n        Names of arguments which will be ignored by the caching mechanism.\n    \"\"\"\n    from parsl.app.python import PythonApp\n\n    def decorator(func):\n        def wrapper(f):\n            return PythonApp(f,\n                             data_flow_kernel=data_flow_kernel,\n                             cache=cache,\n                             executors=executors,\n                             ignore_for_cache=ignore_for_cache,\n                             join=False)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n\n\n@typeguard.typechecked\ndef join_app(function=None,\n             data_flow_kernel: Optional[DataFlowKernel] = None,\n             cache: bool = False,\n             ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making join apps\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@python_app`` if using all defaults or ``@python_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    ignore_for_cache : (list|None)\n        Names of arguments which will be ignored by the caching mechanism.\n    \"\"\"\n    from parsl.app.python import PythonApp\n\n    def decorator(func):\n        def wrapper(f):\n            return PythonApp(f,\n                             data_flow_kernel=data_flow_kernel,\n                             cache=cache,\n                             executors=[\"_parsl_internal\"],\n                             ignore_for_cache=ignore_for_cache,\n                             join=True)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n\n\n@typeguard.typechecked\ndef bash_app(function=None,\n             data_flow_kernel: Optional[DataFlowKernel] = None,\n             cache: bool = False,\n             executors: Union[List[str], Literal['all']] = 'all',\n             ignore_for_cache: Optional[List[str]] = None):\n    \"\"\"Decorator function for making bash apps.\n\n    Parameters\n    ----------\n    function : function\n        Do not pass this keyword argument directly. This is needed in order to allow for omitted parenthesis,\n        for example, ``@bash_app`` if using all defaults or ``@bash_app(walltime=120)``. If the\n        decorator is used alone, function will be the actual function being decorated, whereas if it\n        is called with arguments, function will be None. Default is None.\n    data_flow_kernel : DataFlowKernel\n        The :class:`~parsl.dataflow.dflow.DataFlowKernel` responsible for managing this app. This can\n        be omitted only after calling :meth:`parsl.dataflow.dflow.DataFlowKernelLoader.load`. Default is None.\n    walltime : int\n        Walltime for app in seconds. Default is 60.\n    executors : string or list\n        Labels of the executors that this app can execute over. Default is 'all'.\n    cache : bool\n        Enable caching of the app call. Default is False.\n    ignore_for_cache : (list|None)\n        Names of arguments which will be ignored by the caching mechanism.\n    \"\"\"\n    from parsl.app.bash import BashApp\n\n    def decorator(func):\n        def wrapper(f):\n            return BashApp(f,\n                           data_flow_kernel=data_flow_kernel,\n                           cache=cache,\n                           executors=executors,\n                           ignore_for_cache=ignore_for_cache)\n        return wrapper(func)\n    if function is not None:\n        return decorator(function)\n    return decorator\n", "path": "parsl/app/app.py"}]}